1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2025-11-27 00:20:27 +02:00

[#6563] fixed DynamicModel object/array props reflect type caching

This commit is contained in:
Gani Georgiev
2025-03-05 23:55:56 +02:00
parent 4155f50fe1
commit 5c58703a59
31 changed files with 77 additions and 48 deletions

View File

@@ -1019,8 +1019,6 @@ func structConstructorUnmarshal(vm *goja.Runtime, call goja.ConstructorCall, ins
return instanceValue
}
var cachedDynamicModels = store.New[string, *dynamicModelType](nil)
// newDynamicModel creates a new dynamic struct with fields based
// on the specified "shape".
//
@@ -1031,16 +1029,7 @@ var cachedDynamicModels = store.New[string, *dynamicModelType](nil)
// "total": 0,
// })
func newDynamicModel(shape map[string]any) any {
var modelType *dynamicModelType
shapeRaw, err := json.Marshal(shape)
if err != nil {
modelType = getDynamicModelStruct(shape)
} else {
modelType = cachedDynamicModels.GetOrSet(string(shapeRaw), func() *dynamicModelType {
return getDynamicModelStruct(shape)
})
}
modelType := getDynamicModelStruct(shape)
rvShapeValues := make([]reflect.Value, len(modelType.shapeValues))
for i, v := range modelType.shapeValues {