synced with master
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase/tools/search"
|
||||
"github.com/pocketbase/pocketbase/tools/security"
|
||||
"github.com/pocketbase/pocketbase/tools/types"
|
||||
"github.com/spf13/cast"
|
||||
)
|
||||
|
||||
@@ -300,6 +301,13 @@ func extractNestedVal(rawData any, keys ...string) (any, error) {
|
||||
return mapVal(m, keys...)
|
||||
case mapExtractor:
|
||||
return mapVal(m.AsMap(), keys...)
|
||||
case types.JSONRaw:
|
||||
var raw any
|
||||
err := json.Unmarshal(m, &raw)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to unmarshal raw JSON in order extract nested value from: %w", err)
|
||||
}
|
||||
return extractNestedVal(raw, keys...)
|
||||
|
||||
// slices
|
||||
case []string:
|
||||
@@ -338,6 +346,8 @@ func extractNestedVal(rawData any, keys ...string) (any, error) {
|
||||
return arrVal(extracted, keys...)
|
||||
case []any:
|
||||
return arrVal(m, keys...)
|
||||
case []types.JSONRaw:
|
||||
return arrVal(m, keys...)
|
||||
default:
|
||||
return nil, fmt.Errorf("expected map or array, got %#v", rawData)
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"github.com/pocketbase/pocketbase/tests"
|
||||
"github.com/pocketbase/pocketbase/tools/list"
|
||||
"github.com/pocketbase/pocketbase/tools/search"
|
||||
"github.com/pocketbase/pocketbase/tools/types"
|
||||
)
|
||||
|
||||
func TestRecordFieldResolverAllowedFields(t *testing.T) {
|
||||
@@ -681,10 +682,14 @@ func TestRecordFieldResolverResolveStaticRequestInfoFields(t *testing.T) {
|
||||
"a": "123",
|
||||
},
|
||||
Body: map[string]any{
|
||||
"number": "10",
|
||||
"number_unknown": "20",
|
||||
"b": 456,
|
||||
"c": map[string]int{"sub": 1},
|
||||
"number": "10",
|
||||
"number_unknown": "20",
|
||||
"raw_json_obj": types.JSONRaw(`{"a":123}`),
|
||||
"raw_json_arr1": types.JSONRaw(`[123, 456]`),
|
||||
"raw_json_arr2": types.JSONRaw(`[{"a":123},{"b":456}]`),
|
||||
"raw_json_simple": types.JSONRaw(`123`),
|
||||
"b": 456,
|
||||
"c": map[string]int{"sub": 1},
|
||||
},
|
||||
Headers: map[string]string{
|
||||
"d": "789",
|
||||
@@ -726,6 +731,14 @@ func TestRecordFieldResolverResolveStaticRequestInfoFields(t *testing.T) {
|
||||
{"@request.auth.emailVisibility", false, `false`},
|
||||
{"@request.auth.email", false, `"test@example.com"`}, // should always be returned no matter of the emailVisibility state
|
||||
{"@request.auth.missing", false, `NULL`},
|
||||
{"@request.body.raw_json_simple", false, `"123"`},
|
||||
{"@request.body.raw_json_simple.a", false, `NULL`},
|
||||
{"@request.body.raw_json_obj.a", false, `123`},
|
||||
{"@request.body.raw_json_obj.b", false, `NULL`},
|
||||
{"@request.body.raw_json_arr1.1", false, `456`},
|
||||
{"@request.body.raw_json_arr1.3", false, `NULL`},
|
||||
{"@request.body.raw_json_arr2.0.a", false, `123`},
|
||||
{"@request.body.raw_json_arr2.0.b", false, `NULL`},
|
||||
}
|
||||
|
||||
for _, s := range scenarios {
|
||||
|
||||
Reference in New Issue
Block a user