@webiny/api-headless-cms 0.0.0-unstable.aad28a72ae → 0.0.0-unstable.acacc54f0e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/constants.d.ts +1 -0
- package/constants.js +8 -0
- package/constants.js.map +1 -0
- package/context.d.ts +5 -2
- package/context.js +94 -24
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.js +0 -5
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.js +0 -3
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.js +0 -3
- package/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.js +1 -40
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.d.ts +1 -1
- package/crud/contentEntry/markLockedFields.js +15 -28
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +39 -66
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry/searchableFields.js +1 -12
- package/crud/contentEntry/searchableFields.js.map +1 -1
- package/crud/contentEntry.crud.d.ts +12 -5
- package/crud/contentEntry.crud.js +1183 -921
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/afterCreate.js +0 -2
- package/crud/contentModel/afterCreate.js.map +1 -1
- package/crud/contentModel/afterCreateFrom.js +0 -2
- package/crud/contentModel/afterCreateFrom.js.map +1 -1
- package/crud/contentModel/afterDelete.js +0 -2
- package/crud/contentModel/afterDelete.js.map +1 -1
- package/crud/contentModel/afterUpdate.js +0 -2
- package/crud/contentModel/afterUpdate.js.map +1 -1
- package/crud/contentModel/beforeCreate.d.ts +2 -3
- package/crud/contentModel/beforeCreate.js +43 -109
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.d.ts +1 -1
- package/crud/contentModel/beforeDelete.js +1 -15
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.d.ts +2 -4
- package/crud/contentModel/beforeUpdate.js +33 -10
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/compatibility/modelApiName.d.ts +3 -0
- package/crud/contentModel/compatibility/modelApiName.js +24 -0
- package/crud/contentModel/compatibility/modelApiName.js.map +1 -0
- package/crud/contentModel/contentModelManagerFactory.js +0 -7
- package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +0 -3
- package/crud/contentModel/createFieldStorageId.js.map +1 -1
- package/crud/contentModel/defaultFields.d.ts +5 -0
- package/crud/contentModel/defaultFields.js +58 -0
- package/crud/contentModel/defaultFields.js.map +1 -0
- package/crud/contentModel/fields/descriptionField.d.ts +2 -0
- package/crud/contentModel/fields/descriptionField.js +42 -0
- package/crud/contentModel/fields/descriptionField.js.map +1 -0
- package/crud/contentModel/fields/imageField.d.ts +2 -0
- package/crud/contentModel/fields/imageField.js +46 -0
- package/crud/contentModel/fields/imageField.js.map +1 -0
- package/crud/contentModel/fields/titleField.d.ts +2 -0
- package/crud/contentModel/fields/titleField.js +58 -0
- package/crud/contentModel/fields/titleField.js.map +1 -0
- package/crud/contentModel/validate/endingAllowed.d.ts +6 -0
- package/crud/contentModel/validate/endingAllowed.js +26 -0
- package/crud/contentModel/validate/endingAllowed.js.map +1 -0
- package/crud/contentModel/validate/isModelEndingAllowed.d.ts +6 -0
- package/crud/contentModel/validate/isModelEndingAllowed.js +24 -0
- package/crud/contentModel/validate/isModelEndingAllowed.js.map +1 -0
- package/crud/contentModel/validate/modelId.d.ts +11 -0
- package/crud/contentModel/validate/modelId.js +36 -0
- package/crud/contentModel/validate/modelId.js.map +1 -0
- package/crud/contentModel/validate/pluralApiName.d.ts +7 -0
- package/crud/contentModel/validate/pluralApiName.js +24 -0
- package/crud/contentModel/validate/pluralApiName.js.map +1 -0
- package/crud/contentModel/validate/singularApiName.d.ts +7 -0
- package/crud/contentModel/validate/singularApiName.js +24 -0
- package/crud/contentModel/validate/singularApiName.js.map +1 -0
- package/crud/contentModel/validateLayout.js +0 -8
- package/crud/contentModel/validateLayout.js.map +1 -1
- package/crud/contentModel/validateModel.d.ts +4 -4
- package/crud/contentModel/validateModel.js +6 -11
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.d.ts +4 -4
- package/crud/contentModel/validateModelFields.js +98 -127
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +591 -0
- package/crud/contentModel/validation.js +145 -0
- package/crud/contentModel/validation.js.map +1 -0
- package/crud/contentModel.crud.d.ts +2 -0
- package/crud/contentModel.crud.js +373 -397
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.js +0 -12
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.js +0 -8
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.js +0 -5
- package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
- package/crud/contentModelGroup/validation.d.ts +30 -0
- package/crud/contentModelGroup/validation.js +34 -0
- package/crud/contentModelGroup/validation.js.map +1 -0
- package/crud/contentModelGroup.crud.d.ts +2 -0
- package/crud/contentModelGroup.crud.js +206 -235
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/settings.crud.d.ts +3 -1
- package/crud/settings.crud.js +7 -28
- package/crud/settings.crud.js.map +1 -1
- package/crud/system.crud.js +1 -96
- package/crud/system.crud.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +0 -13
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +0 -36
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +1 -54
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.js +0 -5
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.d.ts +8 -3
- package/graphql/buildSchemaPlugins.js +7 -11
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/checkEndpointAccess.d.ts +2 -0
- package/graphql/checkEndpointAccess.js +18 -0
- package/graphql/checkEndpointAccess.js.map +1 -0
- package/graphql/createExecutableSchema.d.ts +6 -0
- package/graphql/createExecutableSchema.js +29 -0
- package/graphql/createExecutableSchema.js.map +1 -0
- package/graphql/createRequestBody.d.ts +2 -0
- package/graphql/createRequestBody.js +14 -0
- package/graphql/createRequestBody.js.map +1 -0
- package/graphql/formatErrorPayload.d.ts +1 -0
- package/graphql/formatErrorPayload.js +25 -0
- package/graphql/formatErrorPayload.js.map +1 -0
- package/graphql/generateSchema.d.ts +8 -0
- package/graphql/generateSchema.js +31 -0
- package/graphql/generateSchema.js.map +1 -0
- package/graphql/getSchema.d.ts +17 -0
- package/graphql/getSchema.js +102 -0
- package/graphql/getSchema.js.map +1 -0
- package/graphql/graphQLHandlerFactory.js +8 -169
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/handleRequest.d.ts +11 -0
- package/graphql/handleRequest.js +81 -0
- package/graphql/handleRequest.js.map +1 -0
- package/graphql/index.d.ts +1 -3
- package/graphql/index.js +2 -46
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.d.ts +6 -2
- package/graphql/schema/baseContentSchema.js +10 -20
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/baseSchema.d.ts +3 -0
- package/graphql/schema/baseSchema.js +84 -0
- package/graphql/schema/baseSchema.js.map +1 -0
- package/graphql/schema/contentEntries.d.ts +6 -2
- package/graphql/schema/contentEntries.js +126 -110
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.d.ts +6 -2
- package/graphql/schema/contentModelGroups.js +16 -29
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.d.ts +6 -2
- package/graphql/schema/contentModels.js +41 -24
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.d.ts +1 -1
- package/graphql/schema/createFieldResolvers.js +19 -36
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createFieldTypePluginRecords.d.ts +3 -0
- package/graphql/schema/createFieldTypePluginRecords.js +13 -0
- package/graphql/schema/createFieldTypePluginRecords.js.map +1 -0
- package/graphql/schema/createManageResolvers.d.ts +1 -1
- package/graphql/schema/createManageResolvers.js +47 -43
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +3 -0
- package/graphql/schema/createManageSDL.js +96 -77
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +3 -17
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +8 -17
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.d.ts +3 -0
- package/graphql/schema/createReadSDL.js +47 -47
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/commonFieldResolvers.d.ts +3 -2
- package/graphql/schema/resolvers/commonFieldResolvers.js +2 -3
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreate.js +0 -3
- package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js +0 -3
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.d.ts +2 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +13 -9
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.d.ts +7 -0
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js +20 -0
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveGet.js +0 -16
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetByIds.js +0 -3
- package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js +0 -3
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.d.ts +4 -0
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +18 -0
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveList.js +0 -3
- package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveMove.d.ts +8 -0
- package/graphql/schema/resolvers/manage/resolveMove.js +25 -0
- package/graphql/schema/resolvers/manage/resolveMove.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolvePublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveRepublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUnpublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUpdate.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveGet.js +0 -8
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveList.js +0 -3
- package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +0 -8
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveList.js +0 -3
- package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
- package/graphql/schema/schemaPlugins.d.ts +8 -3
- package/graphql/schema/schemaPlugins.js +58 -69
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.d.ts +2 -5
- package/graphql/system.js +56 -98
- package/graphql/system.js.map +1 -1
- package/graphqlFields/boolean.js +0 -12
- package/graphqlFields/boolean.js.map +1 -1
- package/graphqlFields/datetime.js +0 -17
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.js +57 -48
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +2 -18
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -1
- package/graphqlFields/dynamicZone/index.js +0 -2
- package/graphqlFields/dynamicZone/index.js.map +1 -1
- package/graphqlFields/file.js +0 -8
- package/graphqlFields/file.js.map +1 -1
- package/graphqlFields/helpers.js +0 -10
- package/graphqlFields/helpers.js.map +1 -1
- package/graphqlFields/index.js +0 -12
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/longText.js +0 -10
- package/graphqlFields/longText.js.map +1 -1
- package/graphqlFields/number.js +1 -12
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +25 -42
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +64 -66
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText.js +0 -9
- package/graphqlFields/richText.js.map +1 -1
- package/graphqlFields/text.js +2 -11
- package/graphqlFields/text.js.map +1 -1
- package/index.d.ts +5 -3
- package/index.js +26 -28
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.js +0 -16
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +0 -4
- package/modelManager/index.js.map +1 -1
- package/package.json +35 -41
- package/parameters/context.js +0 -4
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +3 -14
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +0 -8
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +1 -8
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +0 -11
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
- package/plugins/CmsGraphQLSchemaPlugin.js +12 -0
- package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +28 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -0
- package/plugins/CmsGroupPlugin.js +0 -8
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.js +0 -5
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +21 -3
- package/plugins/CmsModelPlugin.js +30 -40
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +3 -6
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/StorageOperationsCmsModelPlugin.d.ts +23 -0
- package/plugins/StorageOperationsCmsModelPlugin.js +42 -0
- package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -0
- package/plugins/StorageTransformPlugin.js +0 -9
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.d.ts +3 -0
- package/plugins/index.js +33 -10
- package/plugins/index.js.map +1 -1
- package/storage/default.js +0 -3
- package/storage/default.js.map +1 -1
- package/storage/object.js +0 -19
- package/storage/object.js.map +1 -1
- package/types.d.ts +302 -95
- package/types.js +41 -77
- package/types.js.map +1 -1
- package/utils/converters/Converter.js +0 -13
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.js +9 -33
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.d.ts +1 -5
- package/utils/converters/valueKeyStorageConverter.js +30 -45
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +1 -0
- package/utils/createTypeFromFields.js +12 -21
- package/utils/createTypeFromFields.js.map +1 -1
- package/utils/createTypeName.d.ts +0 -2
- package/utils/createTypeName.js +2 -19
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +10 -26
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +0 -5
- package/utils/filterAsync.js.map +1 -1
- package/utils/getBaseFieldType.d.ts +1 -3
- package/utils/getBaseFieldType.js +0 -2
- package/utils/getBaseFieldType.js.map +1 -1
- package/utils/getEntryDescription.d.ts +2 -0
- package/utils/getEntryDescription.js +17 -0
- package/utils/getEntryDescription.js.map +1 -0
- package/utils/getEntryImage.d.ts +2 -0
- package/utils/getEntryImage.js +17 -0
- package/utils/getEntryImage.js.map +1 -0
- package/utils/getEntryTitle.d.ts +1 -1
- package/utils/getEntryTitle.js +0 -9
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.d.ts +4 -7
- package/utils/getSchemaFromFieldPlugins.js +23 -19
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/incrementEntryIdVersion.d.ts +5 -0
- package/utils/incrementEntryIdVersion.js +29 -0
- package/utils/incrementEntryIdVersion.js.map +1 -0
- package/utils/permissions/EntriesPermissions.d.ts +4 -0
- package/utils/permissions/EntriesPermissions.js +9 -0
- package/utils/permissions/EntriesPermissions.js.map +1 -0
- package/utils/permissions/ModelGroupsPermissions.d.ts +11 -0
- package/utils/permissions/ModelGroupsPermissions.js +48 -0
- package/utils/permissions/ModelGroupsPermissions.js.map +1 -0
- package/utils/permissions/ModelsPermissions.d.ts +20 -0
- package/utils/permissions/ModelsPermissions.js +91 -0
- package/utils/permissions/ModelsPermissions.js.map +1 -0
- package/utils/permissions/SettingsPermissions.d.ts +4 -0
- package/utils/permissions/SettingsPermissions.js +9 -0
- package/utils/permissions/SettingsPermissions.js.map +1 -0
- package/utils/renderFields.d.ts +4 -2
- package/utils/renderFields.js +10 -11
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.d.ts +2 -2
- package/utils/renderGetFilterFields.js +7 -33
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.d.ts +4 -2
- package/utils/renderInputFields.js +17 -14
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.d.ts +3 -1
- package/utils/renderListFilterFields.js +16 -30
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.d.ts +9 -5
- package/utils/renderSortEnum.js +24 -12
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +0 -4
- package/utils/toSlug.js.map +1 -1
- package/validators/dateGte.js +0 -7
- package/validators/dateGte.js.map +1 -1
- package/validators/dateLte.js +0 -7
- package/validators/dateLte.js.map +1 -1
- package/validators/dynamicZone.js +0 -4
- package/validators/dynamicZone.js.map +1 -1
- package/validators/gte.js +0 -8
- package/validators/gte.js.map +1 -1
- package/validators/in.js +0 -8
- package/validators/in.js.map +1 -1
- package/validators/index.js +0 -16
- package/validators/index.js.map +1 -1
- package/validators/lte.js +0 -8
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +0 -8
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +0 -8
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +0 -9
- package/validators/pattern.js.map +1 -1
- package/validators/patternPlugins/email.js +0 -2
- package/validators/patternPlugins/email.js.map +1 -1
- package/validators/patternPlugins/index.js +0 -8
- package/validators/patternPlugins/index.js.map +1 -1
- package/validators/patternPlugins/lowerCase.js +0 -2
- package/validators/patternPlugins/lowerCase.js.map +1 -1
- package/validators/patternPlugins/lowerCaseSpace.js +0 -2
- package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
- package/validators/patternPlugins/upperCase.js +0 -2
- package/validators/patternPlugins/upperCase.js.map +1 -1
- package/validators/patternPlugins/upperCaseSpace.js +0 -2
- package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
- package/validators/patternPlugins/url.js +0 -2
- package/validators/patternPlugins/url.js.map +1 -1
- package/validators/required.js +0 -5
- package/validators/required.js.map +1 -1
- package/validators/timeGte.js +0 -8
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +0 -8
- package/validators/timeLte.js.map +1 -1
- package/validators/unique.js +0 -7
- package/validators/unique.js.map +1 -1
- package/crud/contentModel/createFieldModels.d.ts +0 -2
- package/crud/contentModel/createFieldModels.js +0 -26
- package/crud/contentModel/createFieldModels.js.map +0 -1
- package/crud/contentModel/fieldIdValidation.d.ts +0 -1
- package/crud/contentModel/fieldIdValidation.js +0 -25
- package/crud/contentModel/fieldIdValidation.js.map +0 -1
- package/crud/contentModel/idValidation.d.ts +0 -1
- package/crud/contentModel/idValidation.js +0 -22
- package/crud/contentModel/idValidation.js.map +0 -1
- package/crud/contentModel/models.d.ts +0 -4
- package/crud/contentModel/models.js +0 -192
- package/crud/contentModel/models.js.map +0 -1
- package/crud/contentModel/systemFields.d.ts +0 -1
- package/crud/contentModel/systemFields.js +0 -8
- package/crud/contentModel/systemFields.js.map +0 -1
- package/crud/index.d.ts +0 -6
- package/crud/index.js +0 -85
- package/crud/index.js.map +0 -1
- package/upgrades/5.33.0/index.d.ts +0 -3
- package/upgrades/5.33.0/index.js +0 -182
- package/upgrades/5.33.0/index.js.map +0 -1
- package/upgrades/index.d.ts +0 -1
- package/upgrades/index.js +0 -12
- package/upgrades/index.js.map +0 -1
- package/utils/access.d.ts +0 -8
- package/utils/access.js +0 -90
- package/utils/access.js.map +0 -1
- package/utils/filterModelFields.d.ts +0 -16
- package/utils/filterModelFields.js +0 -77
- package/utils/filterModelFields.js.map +0 -1
- package/utils/ownership.d.ts +0 -8
- package/utils/ownership.js +0 -41
- package/utils/ownership.js.map +0 -1
- package/utils/permissions.d.ts +0 -7
- package/utils/permissions.js +0 -106
- package/utils/permissions.js.map +0 -1
- package/utils/pluralizedTypeName.d.ts +0 -1
- package/utils/pluralizedTypeName.js +0 -26
- package/utils/pluralizedTypeName.js.map +0 -1
|
@@ -1,54 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.createModelsCrud = void 0;
|
|
9
|
-
|
|
8
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
9
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
-
|
|
12
10
|
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
13
|
-
|
|
11
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
14
12
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
15
|
-
|
|
16
13
|
var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
|
|
17
|
-
|
|
18
|
-
var _models = require("./contentModel/models");
|
|
19
|
-
|
|
20
|
-
var _createFieldModels = require("./contentModel/createFieldModels");
|
|
21
|
-
|
|
22
|
-
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
23
|
-
|
|
24
14
|
var _pubsub = require("@webiny/pubsub");
|
|
25
|
-
|
|
26
15
|
var _beforeCreate = require("./contentModel/beforeCreate");
|
|
27
|
-
|
|
28
16
|
var _beforeUpdate = require("./contentModel/beforeUpdate");
|
|
29
|
-
|
|
30
17
|
var _beforeDelete = require("./contentModel/beforeDelete");
|
|
31
|
-
|
|
32
18
|
var _afterCreate = require("./contentModel/afterCreate");
|
|
33
|
-
|
|
34
19
|
var _afterUpdate = require("./contentModel/afterUpdate");
|
|
35
|
-
|
|
36
20
|
var _afterDelete = require("./contentModel/afterDelete");
|
|
37
|
-
|
|
38
21
|
var _afterCreateFrom = require("./contentModel/afterCreateFrom");
|
|
39
|
-
|
|
40
22
|
var _CmsModelPlugin = require("../plugins/CmsModelPlugin");
|
|
41
|
-
|
|
42
|
-
var _permissions = require("../utils/permissions");
|
|
43
|
-
|
|
44
23
|
var _filterAsync = require("../utils/filterAsync");
|
|
45
|
-
|
|
46
|
-
var
|
|
47
|
-
|
|
48
|
-
var
|
|
49
|
-
|
|
50
|
-
var _validateModelFields = require("./contentModel/validateModelFields");
|
|
51
|
-
|
|
24
|
+
var _validation = require("./contentModel/validation");
|
|
25
|
+
var _utils = require("@webiny/utils");
|
|
26
|
+
var _defaultFields = require("./contentModel/defaultFields");
|
|
27
|
+
var _modelApiName = require("./contentModel/compatibility/modelApiName");
|
|
28
|
+
const _excluded = ["defaultFields"];
|
|
52
29
|
/**
|
|
53
30
|
* Given a model, return an array of tags ensuring the `type` tag is set.
|
|
54
31
|
*/
|
|
@@ -56,20 +33,18 @@ const ensureTypeTag = model => {
|
|
|
56
33
|
// Let's make sure we have a `type` tag assigned.
|
|
57
34
|
// If `type` tag is not set, set it to a default one (`model`).
|
|
58
35
|
const tags = model.tags || [];
|
|
59
|
-
|
|
60
36
|
if (!tags.some(tag => tag.startsWith("type:"))) {
|
|
61
37
|
tags.push("type:model");
|
|
62
38
|
}
|
|
63
|
-
|
|
64
39
|
return tags;
|
|
65
40
|
};
|
|
66
|
-
|
|
67
41
|
const createModelsCrud = params => {
|
|
68
42
|
const {
|
|
69
43
|
getTenant,
|
|
70
44
|
getIdentity,
|
|
71
45
|
getLocale,
|
|
72
46
|
storageOperations,
|
|
47
|
+
modelsPermissions,
|
|
73
48
|
context
|
|
74
49
|
} = params;
|
|
75
50
|
const loaders = {
|
|
@@ -84,52 +59,50 @@ const createModelsCrud = params => {
|
|
|
84
59
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
85
60
|
tags: ensureTypeTag(model),
|
|
86
61
|
tenant: model.tenant || getTenant().id,
|
|
87
|
-
locale: model.locale || getLocale().code
|
|
62
|
+
locale: model.locale || getLocale().code,
|
|
63
|
+
/**
|
|
64
|
+
* TODO: remove in v5.36.0
|
|
65
|
+
* This is for backward compatibility while migrations are not yet executed.
|
|
66
|
+
*/
|
|
67
|
+
singularApiName: (0, _modelApiName.ensureSingularApiName)(model),
|
|
68
|
+
pluralApiName: (0, _modelApiName.ensurePluralApiName)(model)
|
|
88
69
|
});
|
|
89
70
|
})];
|
|
90
71
|
})
|
|
91
72
|
};
|
|
92
|
-
|
|
93
73
|
const clearModelsCache = () => {
|
|
94
74
|
for (const loader of Object.values(loaders)) {
|
|
95
75
|
loader.clearAll();
|
|
96
76
|
}
|
|
97
77
|
};
|
|
98
|
-
|
|
99
78
|
const managers = new Map();
|
|
100
|
-
|
|
101
79
|
const updateManager = async (context, model) => {
|
|
102
80
|
const manager = await (0, _contentModelManagerFactory.contentModelManagerFactory)(context, model);
|
|
103
81
|
managers.set(model.modelId, manager);
|
|
104
82
|
return manager;
|
|
105
83
|
};
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
rwd: check
|
|
84
|
+
const checkModelPermissions = rwd => {
|
|
85
|
+
return modelsPermissions.ensure({
|
|
86
|
+
rwd
|
|
110
87
|
});
|
|
111
88
|
};
|
|
112
|
-
|
|
113
89
|
const getModelsAsPlugins = () => {
|
|
114
90
|
const tenant = getTenant().id;
|
|
115
91
|
const locale = getLocale().code;
|
|
116
|
-
|
|
92
|
+
return context.plugins.byType(_CmsModelPlugin.CmsModelPlugin.type)
|
|
117
93
|
/**
|
|
118
94
|
* We need to filter out models that are not for this tenant or locale.
|
|
119
95
|
* If it does not have tenant or locale define, it is for every locale and tenant
|
|
120
|
-
|
|
121
|
-
.filter(plugin => {
|
|
96
|
+
*/.filter(plugin => {
|
|
122
97
|
const {
|
|
123
98
|
tenant: modelTenant,
|
|
124
99
|
locale: modelLocale
|
|
125
100
|
} = plugin.contentModel;
|
|
126
|
-
|
|
127
101
|
if (modelTenant && modelTenant !== tenant) {
|
|
128
102
|
return false;
|
|
129
103
|
} else if (modelLocale && modelLocale !== locale) {
|
|
130
104
|
return false;
|
|
131
105
|
}
|
|
132
|
-
|
|
133
106
|
return true;
|
|
134
107
|
}).map(plugin => {
|
|
135
108
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
|
|
@@ -139,128 +112,112 @@ const createModelsCrud = params => {
|
|
|
139
112
|
webinyVersion: context.WEBINY_VERSION
|
|
140
113
|
});
|
|
141
114
|
});
|
|
142
|
-
/**
|
|
143
|
-
* Only point where we can truly validate the user model is in the runtime.
|
|
144
|
-
*/
|
|
145
|
-
|
|
146
|
-
for (const model of models) {
|
|
147
|
-
(0, _validateModelFields.validateModelFields)({
|
|
148
|
-
model,
|
|
149
|
-
plugins: context.plugins
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return models;
|
|
154
115
|
};
|
|
155
|
-
|
|
156
116
|
const modelsGet = async modelId => {
|
|
157
117
|
const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);
|
|
158
|
-
|
|
159
118
|
if (pluginModel) {
|
|
160
119
|
return pluginModel;
|
|
161
120
|
}
|
|
162
|
-
|
|
163
121
|
const model = await storageOperations.models.get({
|
|
164
122
|
tenant: getTenant().id,
|
|
165
123
|
locale: getLocale().code,
|
|
166
124
|
modelId
|
|
167
125
|
});
|
|
168
|
-
|
|
169
126
|
if (!model) {
|
|
170
127
|
throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
|
|
171
128
|
}
|
|
172
|
-
|
|
173
129
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
174
130
|
tags: ensureTypeTag(model),
|
|
175
131
|
tenant: model.tenant || getTenant().id,
|
|
176
132
|
locale: model.locale || getLocale().code
|
|
177
133
|
});
|
|
178
134
|
};
|
|
179
|
-
|
|
180
135
|
const modelsList = async () => {
|
|
181
136
|
const databaseModels = await loaders.listModels.load("listModels");
|
|
182
137
|
const pluginsModels = getModelsAsPlugins();
|
|
183
138
|
return databaseModels.concat(pluginsModels);
|
|
184
139
|
};
|
|
185
|
-
|
|
186
140
|
const listModels = async () => {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
141
|
+
return context.benchmark.measure("headlessCms.crud.models.listModels", async () => {
|
|
142
|
+
const models = await modelsList();
|
|
143
|
+
return (0, _filterAsync.filterAsync)(models, async model => {
|
|
144
|
+
const ownsModel = await modelsPermissions.ensure({
|
|
145
|
+
owns: model.createdBy
|
|
146
|
+
}, {
|
|
147
|
+
throw: false
|
|
148
|
+
});
|
|
149
|
+
if (!ownsModel) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
return modelsPermissions.canAccessModel({
|
|
153
|
+
model,
|
|
154
|
+
locale: getLocale().code
|
|
155
|
+
});
|
|
156
|
+
});
|
|
195
157
|
});
|
|
196
158
|
};
|
|
197
|
-
|
|
198
159
|
const getModel = async modelId => {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
160
|
+
return context.benchmark.measure("headlessCms.crud.models.getModel", async () => {
|
|
161
|
+
await checkModelPermissions("r");
|
|
162
|
+
const model = await modelsGet(modelId);
|
|
163
|
+
await modelsPermissions.ensure({
|
|
164
|
+
owns: model.createdBy
|
|
165
|
+
});
|
|
166
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
167
|
+
model,
|
|
168
|
+
locale: getLocale().code
|
|
169
|
+
});
|
|
170
|
+
return model;
|
|
171
|
+
});
|
|
204
172
|
};
|
|
205
|
-
|
|
206
173
|
const getModelManager = async target => {
|
|
207
174
|
const modelId = typeof target === "string" ? target : target.modelId;
|
|
208
|
-
|
|
209
175
|
if (managers.has(modelId)) {
|
|
210
176
|
return managers.get(modelId);
|
|
211
177
|
}
|
|
212
|
-
|
|
213
178
|
const models = await modelsList();
|
|
214
179
|
const model = models.find(m => m.modelId === modelId);
|
|
215
|
-
|
|
216
180
|
if (!model) {
|
|
217
181
|
throw new _handlerGraphql.NotFoundError(`There is no content model "${modelId}".`);
|
|
218
182
|
}
|
|
219
|
-
|
|
220
183
|
return await updateManager(context, model);
|
|
221
184
|
};
|
|
185
|
+
|
|
222
186
|
/**
|
|
223
187
|
* Create
|
|
224
188
|
*/
|
|
225
|
-
|
|
226
|
-
|
|
227
189
|
const onModelBeforeCreate = (0, _pubsub.createTopic)("cms.onModelBeforeCreate");
|
|
228
190
|
const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
|
|
229
191
|
const onModelCreateError = (0, _pubsub.createTopic)("cms.onModelCreateError");
|
|
230
192
|
/**
|
|
231
193
|
* Create from / clone
|
|
232
194
|
*/
|
|
233
|
-
|
|
234
195
|
const onModelBeforeCreateFrom = (0, _pubsub.createTopic)("cms.onModelBeforeCreateFrom");
|
|
235
196
|
const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
|
|
236
197
|
const onModelCreateFromError = (0, _pubsub.createTopic)("cms.onModelCreateFromError");
|
|
237
198
|
/**
|
|
238
199
|
* Update
|
|
239
200
|
*/
|
|
240
|
-
|
|
241
201
|
const onModelBeforeUpdate = (0, _pubsub.createTopic)("cms.onModelBeforeUpdate");
|
|
242
202
|
const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
|
|
243
203
|
const onModelUpdateError = (0, _pubsub.createTopic)("cms.onModelUpdateError");
|
|
244
204
|
/**
|
|
245
205
|
* Delete
|
|
246
206
|
*/
|
|
247
|
-
|
|
248
207
|
const onModelBeforeDelete = (0, _pubsub.createTopic)("cms.onModelBeforeDelete");
|
|
249
208
|
const onModelAfterDelete = (0, _pubsub.createTopic)("cms.onModelAfterDelete");
|
|
250
209
|
const onModelDeleteError = (0, _pubsub.createTopic)("cms.onModelDeleteError");
|
|
251
210
|
/**
|
|
252
211
|
* Initialize
|
|
253
212
|
*/
|
|
254
|
-
|
|
255
213
|
const onModelInitialize = (0, _pubsub.createTopic)("cms.onModelInitialize");
|
|
256
214
|
/**
|
|
257
215
|
* We need to assign some default behaviors.
|
|
258
216
|
*/
|
|
259
|
-
|
|
260
217
|
(0, _beforeCreate.assignModelBeforeCreate)({
|
|
261
218
|
onModelBeforeCreate,
|
|
262
219
|
onModelBeforeCreateFrom,
|
|
263
|
-
|
|
220
|
+
context,
|
|
264
221
|
storageOperations
|
|
265
222
|
});
|
|
266
223
|
(0, _afterCreate.assignModelAfterCreate)({
|
|
@@ -269,8 +226,7 @@ const createModelsCrud = params => {
|
|
|
269
226
|
});
|
|
270
227
|
(0, _beforeUpdate.assignModelBeforeUpdate)({
|
|
271
228
|
onModelBeforeUpdate,
|
|
272
|
-
|
|
273
|
-
storageOperations
|
|
229
|
+
context
|
|
274
230
|
});
|
|
275
231
|
(0, _afterUpdate.assignModelAfterUpdate)({
|
|
276
232
|
context,
|
|
@@ -289,6 +245,311 @@ const createModelsCrud = params => {
|
|
|
289
245
|
context,
|
|
290
246
|
onModelAfterDelete
|
|
291
247
|
});
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* CRUD methods
|
|
251
|
+
*/
|
|
252
|
+
const createModel = async input => {
|
|
253
|
+
await checkModelPermissions("w");
|
|
254
|
+
const result = await (0, _validation.createModelCreateValidation)().safeParseAsync(input);
|
|
255
|
+
if (!result.success) {
|
|
256
|
+
throw (0, _utils.createZodError)(result.error);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* We need to extract the defaultFields because it is not for the CmsModel object.
|
|
260
|
+
*/
|
|
261
|
+
const _removeUndefinedValue = (0, _utils.removeUndefinedValues)(result.data),
|
|
262
|
+
{
|
|
263
|
+
defaultFields
|
|
264
|
+
} = _removeUndefinedValue,
|
|
265
|
+
data = (0, _objectWithoutProperties2.default)(_removeUndefinedValue, _excluded);
|
|
266
|
+
if (defaultFields) {
|
|
267
|
+
(0, _defaultFields.assignModelDefaultFields)(data);
|
|
268
|
+
}
|
|
269
|
+
const group = await context.security.withoutAuthorization(async () => {
|
|
270
|
+
return context.cms.getGroup(data.group);
|
|
271
|
+
});
|
|
272
|
+
if (!group) {
|
|
273
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
274
|
+
}
|
|
275
|
+
const identity = getIdentity();
|
|
276
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
|
|
277
|
+
modelId: data.modelId || "",
|
|
278
|
+
singularApiName: data.singularApiName,
|
|
279
|
+
pluralApiName: data.pluralApiName,
|
|
280
|
+
titleFieldId: "id",
|
|
281
|
+
descriptionFieldId: null,
|
|
282
|
+
imageFieldId: null,
|
|
283
|
+
description: data.description || "",
|
|
284
|
+
locale: getLocale().code,
|
|
285
|
+
tenant: getTenant().id,
|
|
286
|
+
group: {
|
|
287
|
+
id: group.id,
|
|
288
|
+
name: group.name
|
|
289
|
+
},
|
|
290
|
+
createdBy: {
|
|
291
|
+
id: identity.id,
|
|
292
|
+
displayName: identity.displayName,
|
|
293
|
+
type: identity.type
|
|
294
|
+
},
|
|
295
|
+
createdOn: new Date().toISOString(),
|
|
296
|
+
savedOn: new Date().toISOString(),
|
|
297
|
+
lockedFields: [],
|
|
298
|
+
webinyVersion: context.WEBINY_VERSION
|
|
299
|
+
});
|
|
300
|
+
model.tags = ensureTypeTag(model);
|
|
301
|
+
try {
|
|
302
|
+
await onModelBeforeCreate.publish({
|
|
303
|
+
input: data,
|
|
304
|
+
model
|
|
305
|
+
});
|
|
306
|
+
const createdModel = await storageOperations.models.create({
|
|
307
|
+
model
|
|
308
|
+
});
|
|
309
|
+
loaders.listModels.clearAll();
|
|
310
|
+
await updateManager(context, model);
|
|
311
|
+
await onModelAfterCreate.publish({
|
|
312
|
+
input: data,
|
|
313
|
+
model: createdModel
|
|
314
|
+
});
|
|
315
|
+
return createdModel;
|
|
316
|
+
} catch (ex) {
|
|
317
|
+
await onModelCreateError.publish({
|
|
318
|
+
input: data,
|
|
319
|
+
model,
|
|
320
|
+
error: ex
|
|
321
|
+
});
|
|
322
|
+
throw ex;
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
const updateModel = async (modelId, input) => {
|
|
326
|
+
await checkModelPermissions("w");
|
|
327
|
+
|
|
328
|
+
// Get a model record; this will also perform ownership validation.
|
|
329
|
+
const original = await getModel(modelId);
|
|
330
|
+
const result = await (0, _validation.createModelUpdateValidation)().safeParseAsync(input);
|
|
331
|
+
if (!result.success) {
|
|
332
|
+
throw (0, _utils.createZodError)(result.error);
|
|
333
|
+
}
|
|
334
|
+
const data = (0, _utils.removeUndefinedValues)(result.data);
|
|
335
|
+
if (Object.keys(data).length === 0) {
|
|
336
|
+
/**
|
|
337
|
+
* We need to return the original if nothing is to be updated.
|
|
338
|
+
*/
|
|
339
|
+
return original;
|
|
340
|
+
}
|
|
341
|
+
let group = {
|
|
342
|
+
id: original.group.id,
|
|
343
|
+
name: original.group.name
|
|
344
|
+
};
|
|
345
|
+
const groupId = data.group;
|
|
346
|
+
if (groupId) {
|
|
347
|
+
const groupData = await context.security.withoutAuthorization(async () => {
|
|
348
|
+
return context.cms.getGroup(groupId);
|
|
349
|
+
});
|
|
350
|
+
if (!groupData) {
|
|
351
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${groupId}".`);
|
|
352
|
+
}
|
|
353
|
+
group = {
|
|
354
|
+
id: groupData.id,
|
|
355
|
+
name: groupData.name
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
|
|
359
|
+
titleFieldId: data.titleFieldId === undefined ? original.titleFieldId : data.titleFieldId,
|
|
360
|
+
descriptionFieldId: data.descriptionFieldId === undefined ? original.descriptionFieldId : data.descriptionFieldId,
|
|
361
|
+
imageFieldId: data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,
|
|
362
|
+
group,
|
|
363
|
+
description: data.description || original.description,
|
|
364
|
+
tenant: original.tenant || getTenant().id,
|
|
365
|
+
locale: original.locale || getLocale().code,
|
|
366
|
+
webinyVersion: context.WEBINY_VERSION,
|
|
367
|
+
savedOn: new Date().toISOString()
|
|
368
|
+
});
|
|
369
|
+
model.tags = ensureTypeTag(model);
|
|
370
|
+
try {
|
|
371
|
+
await onModelBeforeUpdate.publish({
|
|
372
|
+
input: data,
|
|
373
|
+
original,
|
|
374
|
+
model
|
|
375
|
+
});
|
|
376
|
+
const resultModel = await storageOperations.models.update({
|
|
377
|
+
model
|
|
378
|
+
});
|
|
379
|
+
await updateManager(context, resultModel);
|
|
380
|
+
await onModelAfterUpdate.publish({
|
|
381
|
+
input: data,
|
|
382
|
+
original,
|
|
383
|
+
model: resultModel
|
|
384
|
+
});
|
|
385
|
+
return resultModel;
|
|
386
|
+
} catch (ex) {
|
|
387
|
+
await onModelUpdateError.publish({
|
|
388
|
+
input: data,
|
|
389
|
+
model,
|
|
390
|
+
original,
|
|
391
|
+
error: ex
|
|
392
|
+
});
|
|
393
|
+
throw ex;
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
const updateModelDirect = async params => {
|
|
397
|
+
const {
|
|
398
|
+
model: initialModel,
|
|
399
|
+
original
|
|
400
|
+
} = params;
|
|
401
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialModel), {}, {
|
|
402
|
+
tenant: initialModel.tenant || getTenant().id,
|
|
403
|
+
locale: initialModel.locale || getLocale().code,
|
|
404
|
+
webinyVersion: context.WEBINY_VERSION
|
|
405
|
+
});
|
|
406
|
+
try {
|
|
407
|
+
await onModelBeforeUpdate.publish({
|
|
408
|
+
input: {},
|
|
409
|
+
original,
|
|
410
|
+
model
|
|
411
|
+
});
|
|
412
|
+
const resultModel = await storageOperations.models.update({
|
|
413
|
+
model
|
|
414
|
+
});
|
|
415
|
+
await updateManager(context, resultModel);
|
|
416
|
+
loaders.listModels.clearAll();
|
|
417
|
+
await onModelAfterUpdate.publish({
|
|
418
|
+
input: {},
|
|
419
|
+
original,
|
|
420
|
+
model: resultModel
|
|
421
|
+
});
|
|
422
|
+
return resultModel;
|
|
423
|
+
} catch (ex) {
|
|
424
|
+
await onModelUpdateError.publish({
|
|
425
|
+
input: {},
|
|
426
|
+
original,
|
|
427
|
+
model,
|
|
428
|
+
error: ex
|
|
429
|
+
});
|
|
430
|
+
throw ex;
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
const createModelFrom = async (modelId, input) => {
|
|
434
|
+
await checkModelPermissions("w");
|
|
435
|
+
/**
|
|
436
|
+
* Get a model record; this will also perform ownership validation.
|
|
437
|
+
*/
|
|
438
|
+
const original = await getModel(modelId);
|
|
439
|
+
const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync((0, _objectSpread2.default)((0, _objectSpread2.default)({}, input), {}, {
|
|
440
|
+
description: input.description || original.description
|
|
441
|
+
}));
|
|
442
|
+
if (!result.success) {
|
|
443
|
+
throw (0, _utils.createZodError)(result.error);
|
|
444
|
+
}
|
|
445
|
+
const data = (0, _utils.removeUndefinedValues)(result.data);
|
|
446
|
+
const locale = await context.i18n.getLocale(data.locale || original.locale);
|
|
447
|
+
if (!locale) {
|
|
448
|
+
throw new _handlerGraphql.NotFoundError(`There is no locale "${data.locale}".`);
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
452
|
+
*/
|
|
453
|
+
const group = await context.cms.storageOperations.groups.get({
|
|
454
|
+
id: data.group,
|
|
455
|
+
tenant: original.tenant,
|
|
456
|
+
locale: locale.code
|
|
457
|
+
});
|
|
458
|
+
if (!group) {
|
|
459
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
460
|
+
}
|
|
461
|
+
const identity = getIdentity();
|
|
462
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
|
|
463
|
+
singularApiName: data.singularApiName,
|
|
464
|
+
pluralApiName: data.pluralApiName,
|
|
465
|
+
locale: locale.code,
|
|
466
|
+
group: {
|
|
467
|
+
id: group.id,
|
|
468
|
+
name: group.name
|
|
469
|
+
},
|
|
470
|
+
icon: data.icon,
|
|
471
|
+
name: data.name,
|
|
472
|
+
modelId: data.modelId || "",
|
|
473
|
+
description: data.description || "",
|
|
474
|
+
createdBy: {
|
|
475
|
+
id: identity.id,
|
|
476
|
+
displayName: identity.displayName,
|
|
477
|
+
type: identity.type
|
|
478
|
+
},
|
|
479
|
+
createdOn: new Date().toISOString(),
|
|
480
|
+
savedOn: new Date().toISOString(),
|
|
481
|
+
lockedFields: [],
|
|
482
|
+
webinyVersion: context.WEBINY_VERSION
|
|
483
|
+
});
|
|
484
|
+
try {
|
|
485
|
+
await onModelBeforeCreateFrom.publish({
|
|
486
|
+
input: data,
|
|
487
|
+
model,
|
|
488
|
+
original
|
|
489
|
+
});
|
|
490
|
+
const createdModel = await storageOperations.models.create({
|
|
491
|
+
model
|
|
492
|
+
});
|
|
493
|
+
loaders.listModels.clearAll();
|
|
494
|
+
await updateManager(context, model);
|
|
495
|
+
await onModelAfterCreateFrom.publish({
|
|
496
|
+
input: data,
|
|
497
|
+
original,
|
|
498
|
+
model: createdModel
|
|
499
|
+
});
|
|
500
|
+
return createdModel;
|
|
501
|
+
} catch (ex) {
|
|
502
|
+
await onModelCreateFromError.publish({
|
|
503
|
+
input: data,
|
|
504
|
+
original,
|
|
505
|
+
model,
|
|
506
|
+
error: ex
|
|
507
|
+
});
|
|
508
|
+
throw ex;
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
const deleteModel = async modelId => {
|
|
512
|
+
await checkModelPermissions("d");
|
|
513
|
+
const model = await getModel(modelId);
|
|
514
|
+
try {
|
|
515
|
+
await onModelBeforeDelete.publish({
|
|
516
|
+
model
|
|
517
|
+
});
|
|
518
|
+
try {
|
|
519
|
+
await storageOperations.models.delete({
|
|
520
|
+
model
|
|
521
|
+
});
|
|
522
|
+
} catch (ex) {
|
|
523
|
+
throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
|
|
524
|
+
error: ex,
|
|
525
|
+
modelId: model.modelId
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
await onModelAfterDelete.publish({
|
|
529
|
+
model
|
|
530
|
+
});
|
|
531
|
+
managers.delete(model.modelId);
|
|
532
|
+
} catch (ex) {
|
|
533
|
+
await onModelDeleteError.publish({
|
|
534
|
+
model,
|
|
535
|
+
error: ex
|
|
536
|
+
});
|
|
537
|
+
throw ex;
|
|
538
|
+
}
|
|
539
|
+
};
|
|
540
|
+
const initializeModel = async (modelId, data) => {
|
|
541
|
+
/**
|
|
542
|
+
* We require that users have write permissions to initialize models.
|
|
543
|
+
* Maybe introduce another permission for it?
|
|
544
|
+
*/
|
|
545
|
+
await checkModelPermissions("w");
|
|
546
|
+
const model = await getModel(modelId);
|
|
547
|
+
await onModelInitialize.publish({
|
|
548
|
+
model,
|
|
549
|
+
data
|
|
550
|
+
});
|
|
551
|
+
return true;
|
|
552
|
+
};
|
|
292
553
|
return {
|
|
293
554
|
/**
|
|
294
555
|
* Deprecated - will be removed in 5.36.0
|
|
@@ -301,7 +562,6 @@ const createModelsCrud = params => {
|
|
|
301
562
|
onAfterModelUpdate: onModelAfterUpdate,
|
|
302
563
|
onBeforeModelDelete: onModelBeforeDelete,
|
|
303
564
|
onAfterModelDelete: onModelAfterDelete,
|
|
304
|
-
|
|
305
565
|
/**
|
|
306
566
|
* Released in 5.34.0
|
|
307
567
|
*/
|
|
@@ -321,323 +581,40 @@ const createModelsCrud = params => {
|
|
|
321
581
|
clearModelsCache,
|
|
322
582
|
getModel,
|
|
323
583
|
listModels,
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
await createdData.validate();
|
|
329
|
-
const input = await createdData.toJSON();
|
|
330
|
-
context.security.disableAuthorization();
|
|
331
|
-
const group = await context.cms.getGroup(input.group);
|
|
332
|
-
context.security.enableAuthorization();
|
|
333
|
-
|
|
334
|
-
if (!group) {
|
|
335
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
const fields = await (0, _createFieldModels.createFieldModels)(input.fields);
|
|
339
|
-
const identity = getIdentity();
|
|
340
|
-
const model = {
|
|
341
|
-
name: input.name,
|
|
342
|
-
description: input.description || "",
|
|
343
|
-
modelId: input.modelId || "",
|
|
344
|
-
titleFieldId: "id",
|
|
345
|
-
locale: getLocale().code,
|
|
346
|
-
tenant: getTenant().id,
|
|
347
|
-
group: {
|
|
348
|
-
id: group.id,
|
|
349
|
-
name: group.name
|
|
350
|
-
},
|
|
351
|
-
createdBy: {
|
|
352
|
-
id: identity.id,
|
|
353
|
-
displayName: identity.displayName,
|
|
354
|
-
type: identity.type
|
|
355
|
-
},
|
|
356
|
-
createdOn: new Date().toISOString(),
|
|
357
|
-
savedOn: new Date().toISOString(),
|
|
358
|
-
fields,
|
|
359
|
-
lockedFields: [],
|
|
360
|
-
layout: input.layout || [],
|
|
361
|
-
tags: [...(input.tags || [])],
|
|
362
|
-
webinyVersion: context.WEBINY_VERSION
|
|
363
|
-
};
|
|
364
|
-
model.tags = ensureTypeTag(model);
|
|
365
|
-
|
|
366
|
-
try {
|
|
367
|
-
await onModelBeforeCreate.publish({
|
|
368
|
-
input,
|
|
369
|
-
model
|
|
370
|
-
});
|
|
371
|
-
const createdModel = await storageOperations.models.create({
|
|
372
|
-
model
|
|
373
|
-
});
|
|
374
|
-
loaders.listModels.clearAll();
|
|
375
|
-
await updateManager(context, model);
|
|
376
|
-
await onModelAfterCreate.publish({
|
|
377
|
-
input,
|
|
378
|
-
model: createdModel
|
|
379
|
-
});
|
|
380
|
-
return createdModel;
|
|
381
|
-
} catch (ex) {
|
|
382
|
-
await onModelCreateError.publish({
|
|
383
|
-
input,
|
|
384
|
-
model,
|
|
385
|
-
error: ex
|
|
386
|
-
});
|
|
387
|
-
throw ex;
|
|
388
|
-
}
|
|
584
|
+
async createModel(input) {
|
|
585
|
+
return context.benchmark.measure("headlessCms.crud.models.createModel", async () => {
|
|
586
|
+
return createModel(input);
|
|
587
|
+
});
|
|
389
588
|
},
|
|
390
|
-
|
|
391
589
|
/**
|
|
392
590
|
* Method does not check for permissions or ownership.
|
|
393
591
|
* @internal
|
|
394
592
|
*/
|
|
395
593
|
async updateModelDirect(params) {
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
original
|
|
399
|
-
} = params;
|
|
400
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialModel), {}, {
|
|
401
|
-
tenant: initialModel.tenant || getTenant().id,
|
|
402
|
-
locale: initialModel.locale || getLocale().code,
|
|
403
|
-
webinyVersion: context.WEBINY_VERSION
|
|
594
|
+
return context.benchmark.measure("headlessCms.crud.models.updateModelDirect", async () => {
|
|
595
|
+
return updateModelDirect(params);
|
|
404
596
|
});
|
|
405
|
-
|
|
406
|
-
try {
|
|
407
|
-
await onModelBeforeUpdate.publish({
|
|
408
|
-
input: {},
|
|
409
|
-
original,
|
|
410
|
-
model
|
|
411
|
-
});
|
|
412
|
-
const resultModel = await storageOperations.models.update({
|
|
413
|
-
model
|
|
414
|
-
});
|
|
415
|
-
await updateManager(context, resultModel);
|
|
416
|
-
loaders.listModels.clearAll();
|
|
417
|
-
await onModelAfterUpdate.publish({
|
|
418
|
-
input: {},
|
|
419
|
-
original,
|
|
420
|
-
model: resultModel
|
|
421
|
-
});
|
|
422
|
-
return resultModel;
|
|
423
|
-
} catch (ex) {
|
|
424
|
-
await onModelUpdateError.publish({
|
|
425
|
-
input: {},
|
|
426
|
-
original,
|
|
427
|
-
model,
|
|
428
|
-
error: ex
|
|
429
|
-
});
|
|
430
|
-
throw ex;
|
|
431
|
-
}
|
|
432
597
|
},
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
/**
|
|
437
|
-
* Get a model record; this will also perform ownership validation.
|
|
438
|
-
*/
|
|
439
|
-
|
|
440
|
-
const original = await getModel(modelId);
|
|
441
|
-
const createdData = new _models.CreateContentModelModelFrom().populate({
|
|
442
|
-
name: data.name,
|
|
443
|
-
modelId: data.modelId,
|
|
444
|
-
description: data.description || original.description,
|
|
445
|
-
group: data.group,
|
|
446
|
-
locale: data.locale
|
|
598
|
+
async createModelFrom(modelId, userInput) {
|
|
599
|
+
return context.benchmark.measure("headlessCms.crud.models.createModelFrom", async () => {
|
|
600
|
+
return createModelFrom(modelId, userInput);
|
|
447
601
|
});
|
|
448
|
-
await createdData.validate();
|
|
449
|
-
const input = await createdData.toJSON();
|
|
450
|
-
const locale = await context.i18n.getLocale(input.locale || original.locale);
|
|
451
|
-
|
|
452
|
-
if (!locale) {
|
|
453
|
-
throw new _handlerGraphql.NotFoundError(`There is no locale "${input.locale}".`);
|
|
454
|
-
}
|
|
455
|
-
/**
|
|
456
|
-
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
457
|
-
*/
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
const group = await context.cms.storageOperations.groups.get({
|
|
461
|
-
id: input.group,
|
|
462
|
-
tenant: original.tenant,
|
|
463
|
-
locale: locale.code
|
|
464
|
-
});
|
|
465
|
-
|
|
466
|
-
if (!group) {
|
|
467
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
const identity = getIdentity();
|
|
471
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
|
|
472
|
-
locale: locale.code,
|
|
473
|
-
group: {
|
|
474
|
-
id: group.id,
|
|
475
|
-
name: group.name
|
|
476
|
-
},
|
|
477
|
-
name: input.name,
|
|
478
|
-
modelId: input.modelId || "",
|
|
479
|
-
description: input.description || "",
|
|
480
|
-
createdBy: {
|
|
481
|
-
id: identity.id,
|
|
482
|
-
displayName: identity.displayName,
|
|
483
|
-
type: identity.type
|
|
484
|
-
},
|
|
485
|
-
createdOn: new Date().toISOString(),
|
|
486
|
-
savedOn: new Date().toISOString(),
|
|
487
|
-
lockedFields: [],
|
|
488
|
-
webinyVersion: context.WEBINY_VERSION
|
|
489
|
-
});
|
|
490
|
-
|
|
491
|
-
try {
|
|
492
|
-
await onModelBeforeCreateFrom.publish({
|
|
493
|
-
input,
|
|
494
|
-
model,
|
|
495
|
-
original
|
|
496
|
-
});
|
|
497
|
-
const createdModel = await storageOperations.models.create({
|
|
498
|
-
model
|
|
499
|
-
});
|
|
500
|
-
loaders.listModels.clearAll();
|
|
501
|
-
await updateManager(context, model);
|
|
502
|
-
await onModelAfterCreateFrom.publish({
|
|
503
|
-
input,
|
|
504
|
-
original,
|
|
505
|
-
model: createdModel
|
|
506
|
-
});
|
|
507
|
-
return createdModel;
|
|
508
|
-
} catch (ex) {
|
|
509
|
-
await onModelCreateFromError.publish({
|
|
510
|
-
input,
|
|
511
|
-
original,
|
|
512
|
-
model,
|
|
513
|
-
error: ex
|
|
514
|
-
});
|
|
515
|
-
throw ex;
|
|
516
|
-
}
|
|
517
602
|
},
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
const original = await getModel(modelId);
|
|
523
|
-
const updatedData = new _models.UpdateContentModelModel().populate(inputData);
|
|
524
|
-
await updatedData.validate();
|
|
525
|
-
const input = await updatedData.toJSON({
|
|
526
|
-
onlyDirty: true
|
|
527
|
-
});
|
|
528
|
-
|
|
529
|
-
if (Object.keys(input).length === 0) {
|
|
530
|
-
/**
|
|
531
|
-
* We need to return the original if nothing is to be updated.
|
|
532
|
-
*/
|
|
533
|
-
return original;
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
let group = {
|
|
537
|
-
id: original.group.id,
|
|
538
|
-
name: original.group.name
|
|
539
|
-
};
|
|
540
|
-
|
|
541
|
-
if (input.group) {
|
|
542
|
-
context.security.disableAuthorization();
|
|
543
|
-
const groupData = await context.cms.getGroup(input.group);
|
|
544
|
-
context.security.enableAuthorization();
|
|
545
|
-
|
|
546
|
-
if (!groupData) {
|
|
547
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
group = {
|
|
551
|
-
id: groupData.id,
|
|
552
|
-
name: groupData.name
|
|
553
|
-
};
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
const fields = await (0, _createFieldModels.createFieldModels)(inputData.fields);
|
|
557
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input), {}, {
|
|
558
|
-
group,
|
|
559
|
-
tenant: original.tenant || getTenant().id,
|
|
560
|
-
locale: original.locale || getLocale().code,
|
|
561
|
-
webinyVersion: context.WEBINY_VERSION,
|
|
562
|
-
fields,
|
|
563
|
-
savedOn: new Date().toISOString()
|
|
603
|
+
async updateModel(modelId, input) {
|
|
604
|
+
return context.benchmark.measure("headlessCms.crud.models.updateModel", async () => {
|
|
605
|
+
return updateModel(modelId, input);
|
|
564
606
|
});
|
|
565
|
-
model.tags = ensureTypeTag(model);
|
|
566
|
-
|
|
567
|
-
try {
|
|
568
|
-
await onModelBeforeUpdate.publish({
|
|
569
|
-
input,
|
|
570
|
-
original,
|
|
571
|
-
model
|
|
572
|
-
});
|
|
573
|
-
const resultModel = await storageOperations.models.update({
|
|
574
|
-
model
|
|
575
|
-
});
|
|
576
|
-
await updateManager(context, resultModel);
|
|
577
|
-
await onModelAfterUpdate.publish({
|
|
578
|
-
input,
|
|
579
|
-
original,
|
|
580
|
-
model: resultModel
|
|
581
|
-
});
|
|
582
|
-
return resultModel;
|
|
583
|
-
} catch (ex) {
|
|
584
|
-
await onModelUpdateError.publish({
|
|
585
|
-
input,
|
|
586
|
-
model,
|
|
587
|
-
original,
|
|
588
|
-
error: ex
|
|
589
|
-
});
|
|
590
|
-
throw ex;
|
|
591
|
-
}
|
|
592
607
|
},
|
|
593
|
-
|
|
594
608
|
async deleteModel(modelId) {
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
try {
|
|
599
|
-
await onModelBeforeDelete.publish({
|
|
600
|
-
model
|
|
601
|
-
});
|
|
602
|
-
|
|
603
|
-
try {
|
|
604
|
-
await storageOperations.models.delete({
|
|
605
|
-
model
|
|
606
|
-
});
|
|
607
|
-
} catch (ex) {
|
|
608
|
-
throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
|
|
609
|
-
error: ex,
|
|
610
|
-
modelId: model.modelId
|
|
611
|
-
});
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
await onModelAfterDelete.publish({
|
|
615
|
-
model
|
|
616
|
-
});
|
|
617
|
-
managers.delete(model.modelId);
|
|
618
|
-
} catch (ex) {
|
|
619
|
-
await onModelDeleteError.publish({
|
|
620
|
-
model,
|
|
621
|
-
error: ex
|
|
622
|
-
});
|
|
623
|
-
throw ex;
|
|
624
|
-
}
|
|
609
|
+
return context.benchmark.measure("headlessCms.crud.models.deleteModel", async () => {
|
|
610
|
+
return deleteModel(modelId);
|
|
611
|
+
});
|
|
625
612
|
},
|
|
626
|
-
|
|
627
613
|
async initializeModel(modelId, data) {
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
* Maybe introduce another permission for it?
|
|
631
|
-
*/
|
|
632
|
-
await checkModelPermissions("w");
|
|
633
|
-
const model = await getModel(modelId);
|
|
634
|
-
await onModelInitialize.publish({
|
|
635
|
-
model,
|
|
636
|
-
data
|
|
614
|
+
return context.benchmark.measure("headlessCms.crud.models.initializeModel", async () => {
|
|
615
|
+
return initializeModel(modelId, data);
|
|
637
616
|
});
|
|
638
|
-
return true;
|
|
639
617
|
},
|
|
640
|
-
|
|
641
618
|
getModelManager,
|
|
642
619
|
getEntryManager: async model => {
|
|
643
620
|
return getModelManager(model);
|
|
@@ -646,5 +623,4 @@ const createModelsCrud = params => {
|
|
|
646
623
|
getEntryManagers: () => managers
|
|
647
624
|
};
|
|
648
625
|
};
|
|
649
|
-
|
|
650
626
|
exports.createModelsCrud = createModelsCrud;
|