@webiny/api-headless-cms 5.36.2 → 5.37.0-beta.1

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.
Files changed (227) hide show
  1. package/constants.d.ts +1 -0
  2. package/constants.js +8 -0
  3. package/constants.js.map +1 -0
  4. package/context.js +37 -5
  5. package/context.js.map +1 -1
  6. package/crud/contentEntry/afterDelete.js.map +1 -1
  7. package/crud/contentEntry/beforeCreate.js.map +1 -1
  8. package/crud/contentEntry/beforeUpdate.js.map +1 -1
  9. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  10. package/crud/contentEntry/markLockedFields.js.map +1 -1
  11. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  12. package/crud/contentEntry/searchableFields.js.map +1 -1
  13. package/crud/contentEntry.crud.d.ts +4 -0
  14. package/crud/contentEntry.crud.js +206 -53
  15. package/crud/contentEntry.crud.js.map +1 -1
  16. package/crud/contentModel/afterCreate.js.map +1 -1
  17. package/crud/contentModel/afterCreateFrom.js.map +1 -1
  18. package/crud/contentModel/afterDelete.js.map +1 -1
  19. package/crud/contentModel/afterUpdate.js.map +1 -1
  20. package/crud/contentModel/beforeCreate.js.map +1 -1
  21. package/crud/contentModel/beforeDelete.js.map +1 -1
  22. package/crud/contentModel/beforeUpdate.js.map +1 -1
  23. package/crud/contentModel/compatibility/modelApiName.js.map +1 -1
  24. package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
  25. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  26. package/crud/contentModel/defaultFields.js.map +1 -1
  27. package/crud/contentModel/fields/descriptionField.js.map +1 -1
  28. package/crud/contentModel/fields/imageField.js.map +1 -1
  29. package/crud/contentModel/fields/titleField.js.map +1 -1
  30. package/crud/contentModel/validate/endingAllowed.js.map +1 -1
  31. package/crud/contentModel/validate/isModelEndingAllowed.js.map +1 -1
  32. package/crud/contentModel/validate/modelId.js.map +1 -1
  33. package/crud/contentModel/validate/pluralApiName.js.map +1 -1
  34. package/crud/contentModel/validate/singularApiName.js.map +1 -1
  35. package/crud/contentModel/validateLayout.js.map +1 -1
  36. package/crud/contentModel/validateModel.js.map +1 -1
  37. package/crud/contentModel/validateModelFields.js +1 -1
  38. package/crud/contentModel/validateModelFields.js.map +1 -1
  39. package/crud/contentModel/validation.d.ts +246 -206
  40. package/crud/contentModel/validation.js.map +1 -1
  41. package/crud/contentModel.crud.d.ts +2 -0
  42. package/crud/contentModel.crud.js +22 -12
  43. package/crud/contentModel.crud.js.map +1 -1
  44. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  45. package/crud/contentModelGroup/beforeDelete.js.map +1 -1
  46. package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
  47. package/crud/contentModelGroup/validation.d.ts +4 -4
  48. package/crud/contentModelGroup/validation.js.map +1 -1
  49. package/crud/contentModelGroup.crud.d.ts +2 -0
  50. package/crud/contentModelGroup.crud.js +41 -20
  51. package/crud/contentModelGroup.crud.js.map +1 -1
  52. package/crud/settings.crud.d.ts +2 -0
  53. package/crud/settings.crud.js +2 -6
  54. package/crud/settings.crud.js.map +1 -1
  55. package/crud/system.crud.js.map +1 -1
  56. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
  57. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
  58. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +1 -1
  59. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  60. package/fieldConverters/index.js.map +1 -1
  61. package/graphql/buildSchemaPlugins.js +4 -0
  62. package/graphql/buildSchemaPlugins.js.map +1 -1
  63. package/graphql/checkEndpointAccess.js.map +1 -1
  64. package/graphql/createExecutableSchema.js.map +1 -1
  65. package/graphql/createRequestBody.js.map +1 -1
  66. package/graphql/formatErrorPayload.js.map +1 -1
  67. package/graphql/generateSchema.js.map +1 -1
  68. package/graphql/getSchema.js +1 -1
  69. package/graphql/getSchema.js.map +1 -1
  70. package/graphql/graphQLHandlerFactory.js.map +1 -1
  71. package/graphql/handleRequest.js.map +1 -1
  72. package/graphql/index.d.ts +1 -1
  73. package/graphql/index.js.map +1 -1
  74. package/graphql/schema/baseContentSchema.js.map +1 -1
  75. package/graphql/schema/baseSchema.js +16 -0
  76. package/graphql/schema/baseSchema.js.map +1 -1
  77. package/graphql/schema/contentEntries.js +9 -4
  78. package/graphql/schema/contentEntries.js.map +1 -1
  79. package/graphql/schema/contentModelGroups.js.map +1 -1
  80. package/graphql/schema/contentModels.js.map +1 -1
  81. package/graphql/schema/createFieldResolvers.js +1 -1
  82. package/graphql/schema/createFieldResolvers.js.map +1 -1
  83. package/graphql/schema/createFieldTypePluginRecords.js.map +1 -1
  84. package/graphql/schema/createManageResolvers.d.ts +1 -1
  85. package/graphql/schema/createManageResolvers.js +10 -0
  86. package/graphql/schema/createManageResolvers.js.map +1 -1
  87. package/graphql/schema/createManageSDL.js +18 -3
  88. package/graphql/schema/createManageSDL.js.map +1 -1
  89. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  90. package/graphql/schema/createReadResolvers.js.map +1 -1
  91. package/graphql/schema/createReadSDL.js +1 -0
  92. package/graphql/schema/createReadSDL.js.map +1 -1
  93. package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
  94. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  95. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  96. package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
  97. package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js.map +1 -1
  98. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  99. package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
  100. package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
  101. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js.map +1 -1
  102. package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
  103. package/graphql/schema/resolvers/manage/resolveMove.d.ts +8 -0
  104. package/graphql/schema/resolvers/manage/resolveMove.js +25 -0
  105. package/graphql/schema/resolvers/manage/resolveMove.js.map +1 -0
  106. package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
  107. package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
  108. package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
  109. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  110. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  111. package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
  112. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  113. package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
  114. package/graphql/schema/schemaPlugins.js.map +1 -1
  115. package/graphql/system.d.ts +2 -5
  116. package/graphql/system.js +1 -11
  117. package/graphql/system.js.map +1 -1
  118. package/graphqlFields/boolean.js.map +1 -1
  119. package/graphqlFields/datetime.js.map +1 -1
  120. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
  121. package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -1
  122. package/graphqlFields/dynamicZone/index.js.map +1 -1
  123. package/graphqlFields/file.js.map +1 -1
  124. package/graphqlFields/helpers.js.map +1 -1
  125. package/graphqlFields/index.js.map +1 -1
  126. package/graphqlFields/longText.js.map +1 -1
  127. package/graphqlFields/number.js +1 -0
  128. package/graphqlFields/number.js.map +1 -1
  129. package/graphqlFields/object.js +3 -3
  130. package/graphqlFields/object.js.map +1 -1
  131. package/graphqlFields/ref.js.map +1 -1
  132. package/graphqlFields/richText.js.map +1 -1
  133. package/graphqlFields/text.js +2 -0
  134. package/graphqlFields/text.js.map +1 -1
  135. package/index.d.ts +1 -1
  136. package/index.js.map +1 -1
  137. package/modelManager/DefaultCmsModelManager.js.map +1 -1
  138. package/modelManager/index.js.map +1 -1
  139. package/package.json +25 -29
  140. package/parameters/context.js.map +1 -1
  141. package/parameters/header.js +3 -3
  142. package/parameters/header.js.map +1 -1
  143. package/parameters/index.js.map +1 -1
  144. package/parameters/manual.js.map +1 -1
  145. package/parameters/path.js.map +1 -1
  146. package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -1
  147. package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -1
  148. package/plugins/CmsGroupPlugin.js.map +1 -1
  149. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  150. package/plugins/CmsModelPlugin.js.map +1 -1
  151. package/plugins/CmsParametersPlugin.js +4 -0
  152. package/plugins/CmsParametersPlugin.js.map +1 -1
  153. package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -1
  154. package/plugins/StorageTransformPlugin.js.map +1 -1
  155. package/plugins/index.js.map +1 -1
  156. package/storage/default.js.map +1 -1
  157. package/storage/object.js.map +1 -1
  158. package/types.d.ts +68 -5
  159. package/types.js +7 -4
  160. package/types.js.map +1 -1
  161. package/utils/converters/Converter.js.map +1 -1
  162. package/utils/converters/ConverterCollection.js.map +1 -1
  163. package/utils/converters/valueKeyStorageConverter.js +5 -0
  164. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  165. package/utils/createTypeFromFields.js +1 -1
  166. package/utils/createTypeFromFields.js.map +1 -1
  167. package/utils/createTypeName.js.map +1 -1
  168. package/utils/entryStorage.js.map +1 -1
  169. package/utils/filterAsync.js.map +1 -1
  170. package/utils/getBaseFieldType.js.map +1 -1
  171. package/utils/getEntryDescription.js.map +1 -1
  172. package/utils/getEntryImage.js.map +1 -1
  173. package/utils/getEntryTitle.js.map +1 -1
  174. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  175. package/utils/incrementEntryIdVersion.js.map +1 -1
  176. package/utils/permissions/EntriesPermissions.d.ts +4 -0
  177. package/utils/permissions/EntriesPermissions.js +9 -0
  178. package/utils/permissions/EntriesPermissions.js.map +1 -0
  179. package/utils/permissions/ModelGroupsPermissions.d.ts +11 -0
  180. package/utils/permissions/ModelGroupsPermissions.js +48 -0
  181. package/utils/permissions/ModelGroupsPermissions.js.map +1 -0
  182. package/utils/permissions/ModelsPermissions.d.ts +20 -0
  183. package/utils/permissions/ModelsPermissions.js +91 -0
  184. package/utils/permissions/ModelsPermissions.js.map +1 -0
  185. package/utils/permissions/SettingsPermissions.d.ts +4 -0
  186. package/utils/permissions/SettingsPermissions.js +9 -0
  187. package/utils/permissions/SettingsPermissions.js.map +1 -0
  188. package/utils/renderFields.js.map +1 -1
  189. package/utils/renderGetFilterFields.js.map +1 -1
  190. package/utils/renderInputFields.js.map +1 -1
  191. package/utils/renderListFilterFields.d.ts +1 -0
  192. package/utils/renderListFilterFields.js +12 -6
  193. package/utils/renderListFilterFields.js.map +1 -1
  194. package/utils/renderSortEnum.d.ts +1 -1
  195. package/utils/renderSortEnum.js +3 -0
  196. package/utils/renderSortEnum.js.map +1 -1
  197. package/utils/toSlug.js.map +1 -1
  198. package/validators/dateGte.js.map +1 -1
  199. package/validators/dateLte.js.map +1 -1
  200. package/validators/dynamicZone.js.map +1 -1
  201. package/validators/gte.js.map +1 -1
  202. package/validators/in.js.map +1 -1
  203. package/validators/index.js.map +1 -1
  204. package/validators/lte.js.map +1 -1
  205. package/validators/maxLength.js.map +1 -1
  206. package/validators/minLength.js.map +1 -1
  207. package/validators/pattern.js.map +1 -1
  208. package/validators/patternPlugins/email.js.map +1 -1
  209. package/validators/patternPlugins/index.js.map +1 -1
  210. package/validators/patternPlugins/lowerCase.js.map +1 -1
  211. package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
  212. package/validators/patternPlugins/upperCase.js.map +1 -1
  213. package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
  214. package/validators/patternPlugins/url.js.map +1 -1
  215. package/validators/required.js.map +1 -1
  216. package/validators/timeGte.js.map +1 -1
  217. package/validators/timeLte.js.map +1 -1
  218. package/validators/unique.js.map +1 -1
  219. package/utils/access.d.ts +0 -8
  220. package/utils/access.js +0 -76
  221. package/utils/access.js.map +0 -1
  222. package/utils/ownership.d.ts +0 -8
  223. package/utils/ownership.js +0 -33
  224. package/utils/ownership.js.map +0 -1
  225. package/utils/permissions.d.ts +0 -7
  226. package/utils/permissions.js +0 -91
  227. package/utils/permissions.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["fieldSystemFields","str","zod","string","trim","shortString","max","optionalShortString","optional","optionalNullishShortString","nullish","fieldSchema","object","id","storageId","transform","fieldId","regex","message","superRefine","value","ctx","includes","addIssue","code","ZodIssueCode","custom","path","label","helpText","default","placeholderText","nullable","type","tags","array","multipleValues","boolean","predefinedValues","enabled","values","selected","renderer","name","validation","settings","passthrough","listValidation","refinementValidation","upperFirst","camelCase","refinementSingularValidationMessage","refinementPluralValidationMessage","createModelCreateValidation","modelId","singularApiName","refine","pluralApiName","description","group","icon","fields","layout","titleFieldId","descriptionFieldId","imageFieldId","defaultFields","createModelCreateFromValidation","locale","createModelUpdateValidation"],"sources":["validation.ts"],"sourcesContent":["import zod from \"zod\";\nimport upperFirst from \"lodash/upperFirst\";\nimport camelCase from \"lodash/camelCase\";\n\nconst fieldSystemFields: string[] = [\n \"id\",\n \"fieldId\",\n \"storageId\",\n \"label\",\n \"helpText\",\n \"placeholderText\",\n \"type\",\n \"multipleValues\",\n \"predefinedValues\",\n \"renderer\",\n \"validation\",\n \"listValidation\",\n \"settings\"\n];\n\nconst str = zod.string().trim();\nconst shortString = str.max(255);\nconst optionalShortString = shortString.optional();\nconst optionalNullishShortString = optionalShortString.nullish();\n\nconst fieldSchema = zod.object({\n id: shortString,\n storageId: zod\n .string()\n .optional()\n .transform(() => {\n return \"\";\n }),\n fieldId: shortString\n .max(100)\n .regex(/^!?[a-zA-Z]/, {\n message: `Provided value is not valid - must not start with a number.`\n })\n .regex(/^(^[a-zA-Z0-9]+)$/, {\n message: `Provided value is not valid - must be alphanumeric string.`\n })\n .superRefine((value, ctx) => {\n if (fieldSystemFields.includes(value)) {\n return ctx.addIssue({\n code: zod.ZodIssueCode.custom,\n message: `Provided ${value} is not valid - \"${value}\" is an auto-generated field.`,\n path: [\"fieldId\"]\n });\n }\n }),\n label: shortString,\n helpText: optionalShortString.optional().nullish().default(null),\n placeholderText: optionalShortString.optional().nullable().default(null),\n type: shortString,\n tags: zod.array(shortString).optional().default([]),\n multipleValues: zod\n .boolean()\n .optional()\n .nullish()\n .transform(value => {\n return !!value;\n })\n .default(false),\n predefinedValues: zod\n .object({\n enabled: zod.boolean(),\n values: zod\n .array(\n zod.object({\n value: shortString,\n label: shortString,\n selected: zod.boolean().optional().default(false)\n })\n )\n .default([])\n })\n .default({\n enabled: false,\n values: []\n })\n .optional(),\n renderer: zod\n .object({\n name: shortString\n })\n .optional(),\n validation: zod\n .array(\n zod.object({\n name: shortString,\n message: optionalShortString.default(\"Value is required.\"),\n settings: zod\n .object({})\n .passthrough()\n .optional()\n .nullish()\n .transform(value => {\n return value || {};\n })\n .default({})\n })\n )\n .nullish()\n .optional()\n .default([])\n .transform(value => value || []),\n listValidation: zod\n .array(\n zod.object({\n name: shortString,\n message: optionalShortString.default(\"Value is required.\"),\n settings: zod\n .object({})\n .passthrough()\n .optional()\n .nullish()\n .transform(value => {\n return value || {};\n })\n .default({})\n })\n )\n .nullish()\n .optional()\n .default([])\n .transform(value => value || []),\n settings: zod\n .object({})\n .passthrough()\n .optional()\n .nullish()\n .transform(value => {\n return value || {};\n })\n .default({})\n});\n\nconst refinementValidation = (value: string): boolean => {\n return value === upperFirst(camelCase(value));\n};\nconst refinementSingularValidationMessage = (value?: string) => {\n return {\n message: `The Singular API Name value \"${\n value || \"undefined\"\n }\" is not valid. It must in Upper First + Camel Cased form. For example: \"ArticleCategory\" or \"CarMake\".`\n };\n};\nconst refinementPluralValidationMessage = (value?: string) => {\n return {\n message: `The Plural API Name value \"${\n value || \"undefined\"\n }\" is not valid. It must in Upper First + Camel Cased form. For example: \"ArticleCategories\" or \"CarMakes\".`\n };\n};\n\nexport const createModelCreateValidation = () => {\n return zod.object({\n name: shortString,\n modelId: optionalShortString,\n singularApiName: shortString.refine(\n refinementValidation,\n refinementSingularValidationMessage\n ),\n pluralApiName: shortString.refine(refinementValidation, refinementPluralValidationMessage),\n description: optionalNullishShortString,\n group: shortString,\n icon: optionalNullishShortString,\n fields: zod.array(fieldSchema).default([]),\n layout: zod.array(zod.array(shortString)).default([]),\n tags: zod.array(shortString).optional(),\n titleFieldId: optionalShortString.nullish(),\n descriptionFieldId: optionalShortString.nullish(),\n imageFieldId: optionalShortString.nullish(),\n defaultFields: zod.boolean().nullish()\n });\n};\n\nexport const createModelCreateFromValidation = () => {\n return zod.object({\n name: shortString,\n modelId: optionalShortString,\n singularApiName: shortString.refine(\n refinementValidation,\n refinementSingularValidationMessage\n ),\n pluralApiName: shortString.refine(refinementValidation, refinementPluralValidationMessage),\n description: optionalNullishShortString,\n group: shortString,\n icon: optionalNullishShortString,\n locale: optionalShortString\n });\n};\n\nexport const createModelUpdateValidation = () => {\n return zod.object({\n name: optionalShortString,\n singularApiName: optionalShortString.refine(value => {\n if (!value) {\n return true;\n }\n return refinementValidation(value);\n }, refinementSingularValidationMessage),\n pluralApiName: optionalShortString.refine(value => {\n if (!value) {\n return true;\n }\n return refinementValidation(value);\n }, refinementPluralValidationMessage),\n description: optionalNullishShortString,\n group: optionalShortString,\n icon: optionalNullishShortString,\n fields: zod.array(fieldSchema),\n layout: zod.array(zod.array(shortString)),\n titleFieldId: optionalShortString.nullish(),\n descriptionFieldId: optionalShortString.nullish(),\n imageFieldId: optionalShortString.nullish(),\n tags: zod.array(shortString).optional()\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_zod","_interopRequireDefault","require","_upperFirst","_camelCase","fieldSystemFields","str","zod","string","trim","shortString","max","optionalShortString","optional","optionalNullishShortString","nullish","fieldSchema","object","id","storageId","transform","fieldId","regex","message","superRefine","value","ctx","includes","addIssue","code","ZodIssueCode","custom","path","label","helpText","default","placeholderText","nullable","type","tags","array","multipleValues","boolean","predefinedValues","enabled","values","selected","renderer","name","validation","settings","passthrough","listValidation","refinementValidation","upperFirst","camelCase","refinementSingularValidationMessage","refinementPluralValidationMessage","createModelCreateValidation","modelId","singularApiName","refine","pluralApiName","description","group","icon","fields","layout","titleFieldId","descriptionFieldId","imageFieldId","defaultFields","exports","createModelCreateFromValidation","locale","createModelUpdateValidation"],"sources":["validation.ts"],"sourcesContent":["import zod from \"zod\";\nimport upperFirst from \"lodash/upperFirst\";\nimport camelCase from \"lodash/camelCase\";\n\nconst fieldSystemFields: string[] = [\n \"id\",\n \"fieldId\",\n \"storageId\",\n \"label\",\n \"helpText\",\n \"placeholderText\",\n \"type\",\n \"multipleValues\",\n \"predefinedValues\",\n \"renderer\",\n \"validation\",\n \"listValidation\",\n \"settings\"\n];\n\nconst str = zod.string().trim();\nconst shortString = str.max(255);\nconst optionalShortString = shortString.optional();\nconst optionalNullishShortString = optionalShortString.nullish();\n\nconst fieldSchema = zod.object({\n id: shortString,\n storageId: zod\n .string()\n .optional()\n .transform(() => {\n return \"\";\n }),\n fieldId: shortString\n .max(100)\n .regex(/^!?[a-zA-Z]/, {\n message: `Provided value is not valid - must not start with a number.`\n })\n .regex(/^(^[a-zA-Z0-9]+)$/, {\n message: `Provided value is not valid - must be alphanumeric string.`\n })\n .superRefine((value, ctx) => {\n if (fieldSystemFields.includes(value)) {\n return ctx.addIssue({\n code: zod.ZodIssueCode.custom,\n message: `Provided ${value} is not valid - \"${value}\" is an auto-generated field.`,\n path: [\"fieldId\"]\n });\n }\n }),\n label: shortString,\n helpText: optionalShortString.optional().nullish().default(null),\n placeholderText: optionalShortString.optional().nullable().default(null),\n type: shortString,\n tags: zod.array(shortString).optional().default([]),\n multipleValues: zod\n .boolean()\n .optional()\n .nullish()\n .transform(value => {\n return !!value;\n })\n .default(false),\n predefinedValues: zod\n .object({\n enabled: zod.boolean(),\n values: zod\n .array(\n zod.object({\n value: shortString,\n label: shortString,\n selected: zod.boolean().optional().default(false)\n })\n )\n .default([])\n })\n .default({\n enabled: false,\n values: []\n })\n .optional(),\n renderer: zod\n .object({\n name: shortString\n })\n .optional(),\n validation: zod\n .array(\n zod.object({\n name: shortString,\n message: optionalShortString.default(\"Value is required.\"),\n settings: zod\n .object({})\n .passthrough()\n .optional()\n .nullish()\n .transform(value => {\n return value || {};\n })\n .default({})\n })\n )\n .nullish()\n .optional()\n .default([])\n .transform(value => value || []),\n listValidation: zod\n .array(\n zod.object({\n name: shortString,\n message: optionalShortString.default(\"Value is required.\"),\n settings: zod\n .object({})\n .passthrough()\n .optional()\n .nullish()\n .transform(value => {\n return value || {};\n })\n .default({})\n })\n )\n .nullish()\n .optional()\n .default([])\n .transform(value => value || []),\n settings: zod\n .object({})\n .passthrough()\n .optional()\n .nullish()\n .transform(value => {\n return value || {};\n })\n .default({})\n});\n\nconst refinementValidation = (value: string): boolean => {\n return value === upperFirst(camelCase(value));\n};\nconst refinementSingularValidationMessage = (value?: string) => {\n return {\n message: `The Singular API Name value \"${\n value || \"undefined\"\n }\" is not valid. It must in Upper First + Camel Cased form. For example: \"ArticleCategory\" or \"CarMake\".`\n };\n};\nconst refinementPluralValidationMessage = (value?: string) => {\n return {\n message: `The Plural API Name value \"${\n value || \"undefined\"\n }\" is not valid. It must in Upper First + Camel Cased form. For example: \"ArticleCategories\" or \"CarMakes\".`\n };\n};\n\nexport const createModelCreateValidation = () => {\n return zod.object({\n name: shortString,\n modelId: optionalShortString,\n singularApiName: shortString.refine(\n refinementValidation,\n refinementSingularValidationMessage\n ),\n pluralApiName: shortString.refine(refinementValidation, refinementPluralValidationMessage),\n description: optionalNullishShortString,\n group: shortString,\n icon: optionalNullishShortString,\n fields: zod.array(fieldSchema).default([]),\n layout: zod.array(zod.array(shortString)).default([]),\n tags: zod.array(shortString).optional(),\n titleFieldId: optionalShortString.nullish(),\n descriptionFieldId: optionalShortString.nullish(),\n imageFieldId: optionalShortString.nullish(),\n defaultFields: zod.boolean().nullish()\n });\n};\n\nexport const createModelCreateFromValidation = () => {\n return zod.object({\n name: shortString,\n modelId: optionalShortString,\n singularApiName: shortString.refine(\n refinementValidation,\n refinementSingularValidationMessage\n ),\n pluralApiName: shortString.refine(refinementValidation, refinementPluralValidationMessage),\n description: optionalNullishShortString,\n group: shortString,\n icon: optionalNullishShortString,\n locale: optionalShortString\n });\n};\n\nexport const createModelUpdateValidation = () => {\n return zod.object({\n name: optionalShortString,\n singularApiName: optionalShortString.refine(value => {\n if (!value) {\n return true;\n }\n return refinementValidation(value);\n }, refinementSingularValidationMessage),\n pluralApiName: optionalShortString.refine(value => {\n if (!value) {\n return true;\n }\n return refinementValidation(value);\n }, refinementPluralValidationMessage),\n description: optionalNullishShortString,\n group: optionalShortString,\n icon: optionalNullishShortString,\n fields: zod.array(fieldSchema),\n layout: zod.array(zod.array(shortString)),\n titleFieldId: optionalShortString.nullish(),\n descriptionFieldId: optionalShortString.nullish(),\n imageFieldId: optionalShortString.nullish(),\n tags: zod.array(shortString).optional()\n });\n};\n"],"mappings":"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"}
@@ -2,10 +2,12 @@ import { CmsContext, CmsModelContext, HeadlessCmsStorageOperations } from "../ty
2
2
  import { Tenant } from "@webiny/api-tenancy/types";
3
3
  import { I18NLocale } from "@webiny/api-i18n/types";
4
4
  import { SecurityIdentity } from "@webiny/api-security/types";
5
+ import { ModelsPermissions } from "../utils/permissions/ModelsPermissions";
5
6
  export interface CreateModelsCrudParams {
6
7
  getTenant: () => Tenant;
7
8
  getLocale: () => I18NLocale;
8
9
  storageOperations: HeadlessCmsStorageOperations;
10
+ modelsPermissions: ModelsPermissions;
9
11
  context: CmsContext;
10
12
  getIdentity: () => SecurityIdentity;
11
13
  }
@@ -20,10 +20,7 @@ var _afterUpdate = require("./contentModel/afterUpdate");
20
20
  var _afterDelete = require("./contentModel/afterDelete");
21
21
  var _afterCreateFrom = require("./contentModel/afterCreateFrom");
22
22
  var _CmsModelPlugin = require("../plugins/CmsModelPlugin");
23
- var _permissions = require("../utils/permissions");
24
23
  var _filterAsync = require("../utils/filterAsync");
25
- var _ownership = require("../utils/ownership");
26
- var _access = require("../utils/access");
27
24
  var _validation = require("./contentModel/validation");
28
25
  var _utils = require("@webiny/utils");
29
26
  var _defaultFields = require("./contentModel/defaultFields");
@@ -47,6 +44,7 @@ const createModelsCrud = params => {
47
44
  getIdentity,
48
45
  getLocale,
49
46
  storageOperations,
47
+ modelsPermissions,
50
48
  context
51
49
  } = params;
52
50
  const loaders = {
@@ -83,9 +81,9 @@ const createModelsCrud = params => {
83
81
  managers.set(model.modelId, manager);
84
82
  return manager;
85
83
  };
86
- const checkModelPermissions = check => {
87
- return (0, _permissions.checkPermissions)(context, "cms.contentModel", {
88
- rwd: check
84
+ const checkModelPermissions = rwd => {
85
+ return modelsPermissions.ensure({
86
+ rwd
89
87
  });
90
88
  };
91
89
  const getModelsAsPlugins = () => {
@@ -141,22 +139,34 @@ const createModelsCrud = params => {
141
139
  };
142
140
  const listModels = async () => {
143
141
  return context.benchmark.measure("headlessCms.crud.models.listModels", async () => {
144
- const permission = await checkModelPermissions("r");
145
142
  const models = await modelsList();
146
143
  return (0, _filterAsync.filterAsync)(models, async model => {
147
- if (!(0, _ownership.validateOwnership)(context, permission, model)) {
144
+ const ownsModel = await modelsPermissions.ensure({
145
+ owns: model.createdBy
146
+ }, {
147
+ throw: false
148
+ });
149
+ if (!ownsModel) {
148
150
  return false;
149
151
  }
150
- return (0, _access.validateModelAccess)(context, model);
152
+ return modelsPermissions.canAccessModel({
153
+ model,
154
+ locale: getLocale().code
155
+ });
151
156
  });
152
157
  });
153
158
  };
154
159
  const getModel = async modelId => {
155
160
  return context.benchmark.measure("headlessCms.crud.models.getModel", async () => {
156
- const permission = await checkModelPermissions("r");
161
+ await checkModelPermissions("r");
157
162
  const model = await modelsGet(modelId);
158
- (0, _ownership.checkOwnership)(context, permission, model);
159
- await (0, _access.checkModelAccess)(context, model);
163
+ await modelsPermissions.ensure({
164
+ owns: model.createdBy
165
+ });
166
+ await modelsPermissions.ensureCanAccessModel({
167
+ model,
168
+ locale: getLocale().code
169
+ });
160
170
  return model;
161
171
  });
162
172
  };
@@ -1 +1 @@
1
- {"version":3,"names":["ensureTypeTag","model","tags","some","tag","startsWith","push","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","singularApiName","ensureSingularApiName","pluralApiName","ensurePluralApiName","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","modelTenant","modelLocale","contentModel","webinyVersion","WEBINY_VERSION","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","benchmark","measure","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelCreateError","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelCreateFromError","onModelBeforeUpdate","onModelAfterUpdate","onModelUpdateError","onModelBeforeDelete","onModelAfterDelete","onModelDeleteError","onModelInitialize","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","createModel","input","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","removeUndefinedValues","data","defaultFields","assignModelDefaultFields","group","security","withoutAuthorization","cms","getGroup","identity","titleFieldId","descriptionFieldId","imageFieldId","description","name","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","publish","createdModel","create","ex","updateModel","original","createModelUpdateValidation","keys","length","groupId","groupData","undefined","resultModel","update","updateModelDirect","initialModel","createModelFrom","createModelCreateFromValidation","i18n","groups","icon","deleteModel","delete","WebinyError","message","initializeModel","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","userInput","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n HeadlessCmsStorageOperations,\n OnModelBeforeCreateTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelInitializeParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelAfterCreateFromTopicParams,\n CmsModelUpdateInput,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelUpdateErrorTopicParams,\n OnModelDeleteErrorTopicParams,\n CmsModelGroup\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { assignModelAfterCreate } from \"./contentModel/afterCreate\";\nimport { assignModelAfterUpdate } from \"./contentModel/afterUpdate\";\nimport { assignModelAfterDelete } from \"./contentModel/afterDelete\";\nimport { assignModelAfterCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError } from \"@webiny/utils\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields\";\nimport { removeUndefinedValues } from \"@webiny/utils\";\nimport {\n ensurePluralApiName,\n ensureSingularApiName\n} from \"./contentModel/compatibility/modelApiName\";\n\n/**\n * Given a model, return an array of tags ensuring the `type` tag is set.\n */\nconst ensureTypeTag = (model: Pick<CmsModel, \"tags\">) => {\n // Let's make sure we have a `type` tag assigned.\n // If `type` tag is not set, set it to a default one (`model`).\n const tags = model.tags || [];\n if (!tags.some(tag => tag.startsWith(\"type:\"))) {\n tags.push(\"type:model\");\n }\n\n return tags;\n};\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code,\n /**\n * TODO: remove in v5.36.0\n * This is for backward compatibility while migrations are not yet executed.\n */\n singularApiName: ensureSingularApiName(model),\n pluralApiName: ensurePluralApiName(model)\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (check: string) => {\n return checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: modelTenant, locale: modelLocale } = plugin.contentModel;\n if (modelTenant && modelTenant !== tenant) {\n return false;\n } else if (modelLocale && modelLocale !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModel,\n tags: ensureTypeTag(plugin.contentModel),\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string) => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels: CmsModel[] = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n return context.benchmark.measure(\"headlessCms.crud.models.listModels\", async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return filterAsync(models, async model => {\n if (!validateOwnership(context, permission, model)) {\n return false;\n }\n return validateModelAccess(context, model);\n });\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n return context.benchmark.measure(\"headlessCms.crud.models.getModel\", async () => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n checkOwnership(context, permission, model);\n await checkModelAccess(context, model);\n\n return model;\n });\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n /**\n * Create\n */\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n const onModelCreateError = createTopic<OnModelCreateErrorTopicParams>(\"cms.onModelCreateError\");\n /**\n * Create from / clone\n */\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n const onModelCreateFromError = createTopic<OnModelCreateFromErrorParams>(\n \"cms.onModelCreateFromError\"\n );\n /**\n * Update\n */\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n const onModelUpdateError = createTopic<OnModelUpdateErrorTopicParams>(\"cms.onModelUpdateError\");\n /**\n * Delete\n */\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n const onModelDeleteError = createTopic<OnModelDeleteErrorTopicParams>(\"cms.onModelDeleteError\");\n /**\n * Initialize\n */\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n context,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n context\n });\n assignModelAfterUpdate({\n context,\n onModelAfterUpdate\n });\n assignModelAfterCreateFrom({\n context,\n onModelAfterCreateFrom\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterDelete({\n context,\n onModelAfterDelete\n });\n\n /**\n * CRUD methods\n */\n const createModel: CmsModelContext[\"createModel\"] = async input => {\n await checkModelPermissions(\"w\");\n\n const result = await createModelCreateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n /**\n * We need to extract the defaultFields because it is not for the CmsModel object.\n */\n const { defaultFields, ...data } = removeUndefinedValues(result.data);\n if (defaultFields) {\n assignModelDefaultFields(data);\n }\n\n const group = await context.security.withoutAuthorization(async () => {\n return context.cms.getGroup(data.group);\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...data,\n modelId: data.modelId || \"\",\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n titleFieldId: \"id\",\n descriptionFieldId: null,\n imageFieldId: null,\n description: data.description || \"\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeCreate.publish({\n input: data,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input: data,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateError.publish({\n input: data,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const updateModel: CmsModelContext[\"updateModel\"] = async (modelId, input) => {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const result = await createModelUpdateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n if (Object.keys(data).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModelGroup = {\n id: original.group.id,\n name: original.group.name\n };\n const groupId = data.group;\n if (groupId) {\n const groupData = await context.security.withoutAuthorization(async () => {\n return context.cms.getGroup(groupId);\n });\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${groupId}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const model: CmsModel = {\n ...original,\n ...data,\n titleFieldId:\n data.titleFieldId === undefined\n ? original.titleFieldId\n : (data.titleFieldId as string),\n descriptionFieldId:\n data.descriptionFieldId === undefined\n ? original.descriptionFieldId\n : data.descriptionFieldId,\n imageFieldId:\n data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,\n group,\n description: data.description || original.description,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n savedOn: new Date().toISOString()\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeUpdate.publish({\n input: data,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input: data,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: data,\n model,\n original,\n error: ex\n });\n\n throw ex;\n }\n };\n const updateModelDirect: CmsModelContext[\"updateModelDirect\"] = async params => {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const createModelFrom: CmsModelContext[\"createModelFrom\"] = async (modelId, input) => {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const result = await createModelCreateFromValidation().safeParseAsync({\n ...input,\n description: input.description || original.description\n });\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n const locale = await context.i18n.getLocale(data.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${data.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: data.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n icon: data.icon,\n name: data.name,\n modelId: data.modelId || \"\",\n description: data.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeCreateFrom.publish({\n input: data,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input: data,\n original,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateFromError.publish({\n input: data,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const deleteModel: CmsModelContext[\"deleteModel\"] = async modelId => {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n try {\n await onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n } catch (ex) {\n await onModelDeleteError.publish({\n model,\n error: ex\n });\n throw ex;\n }\n };\n const initializeModel: CmsModelContext[\"initializeModel\"] = async (modelId, data) => {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n await checkModelPermissions(\"w\");\n\n const model = await getModel(modelId);\n\n await onModelInitialize.publish({ model, data });\n\n return true;\n };\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeModelCreate: onModelBeforeCreate,\n onAfterModelCreate: onModelAfterCreate,\n onBeforeModelCreateFrom: onModelBeforeCreateFrom,\n onAfterModelCreateFrom: onModelAfterCreateFrom,\n onBeforeModelUpdate: onModelBeforeUpdate,\n onAfterModelUpdate: onModelAfterUpdate,\n onBeforeModelDelete: onModelBeforeDelete,\n onAfterModelDelete: onModelAfterDelete,\n /**\n * Released in 5.34.0\n */\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelCreateError,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelCreateFromError,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelUpdateError,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelDeleteError,\n onModelInitialize,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(input) {\n return context.benchmark.measure(\"headlessCms.crud.models.createModel\", async () => {\n return createModel(input);\n });\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.updateModelDirect\",\n async () => {\n return updateModelDirect(params);\n }\n );\n },\n async createModelFrom(modelId, userInput) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.createModelFrom\",\n async () => {\n return createModelFrom(modelId, userInput);\n }\n );\n },\n async updateModel(modelId, input) {\n return context.benchmark.measure(\"headlessCms.crud.models.updateModel\", async () => {\n return updateModel(modelId, input);\n });\n },\n async deleteModel(modelId) {\n return context.benchmark.measure(\"headlessCms.crud.models.deleteModel\", async () => {\n return deleteModel(modelId);\n });\n },\n async initializeModel(modelId, data) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.initializeModel\",\n async () => {\n return initializeModel(modelId, data);\n }\n );\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":";;;;;;;;;AAAA;AACA;AAuBA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAEA;AAGmD;AAEnD;AACA;AACA;AACA,MAAMA,aAAa,GAAIC,KAA6B,IAAK;EACrD;EACA;EACA,MAAMC,IAAI,GAAGD,KAAK,CAACC,IAAI,IAAI,EAAE;EAC7B,IAAI,CAACA,IAAI,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;IAC5CH,IAAI,CAACI,IAAI,CAAC,YAAY,CAAC;EAC3B;EAEA,OAAOJ,IAAI;AACf,CAAC;AAUM,MAAMK,gBAAgB,GAAIC,MAA8B,IAAsB;EACjF,MAAM;IAAEC,SAAS;IAAEC,WAAW;IAAEC,SAAS;IAAEC,iBAAiB;IAAEC;EAAQ,CAAC,GAAGL,MAAM;EAEhF,MAAMM,OAAO,GAAG;IACZC,UAAU,EAAE,IAAIC,mBAAU,CAAC,YAAY;MACnC,MAAMC,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEX,SAAS,EAAE,CAACY,EAAE;UACtBC,MAAM,EAAEX,SAAS,EAAE,CAACY;QACxB;MACJ,CAAC,CAAC;MACF,OAAO,CACHN,MAAM,CAACO,GAAG,CAACvB,KAAK,IAAI;QAChB,mEACOA,KAAK;UACRC,IAAI,EAAEF,aAAa,CAACC,KAAK,CAAC;UAC1BmB,MAAM,EAAEnB,KAAK,CAACmB,MAAM,IAAIX,SAAS,EAAE,CAACY,EAAE;UACtCC,MAAM,EAAErB,KAAK,CAACqB,MAAM,IAAIX,SAAS,EAAE,CAACY,IAAI;UACxC;AACxB;AACA;AACA;UACwBE,eAAe,EAAE,IAAAC,mCAAqB,EAACzB,KAAK,CAAC;UAC7C0B,aAAa,EAAE,IAAAC,iCAAmB,EAAC3B,KAAK;QAAC;MAEjD,CAAC,CAAC,CACL;IACL,CAAC;EACL,CAAC;EAED,MAAM4B,gBAAgB,GAAG,MAAY;IACjC,KAAK,MAAMC,MAAM,IAAIC,MAAM,CAACC,MAAM,CAAClB,OAAO,CAAC,EAAE;MACzCgB,MAAM,CAACG,QAAQ,EAAE;IACrB;EACJ,CAAC;EAED,MAAMC,QAAQ,GAAG,IAAIC,GAAG,EAA2B;EACnD,MAAMC,aAAa,GAAG,OAClBvB,OAAmB,EACnBZ,KAAe,KACY;IAC3B,MAAMoC,OAAO,GAAG,MAAM,IAAAC,sDAA0B,EAACzB,OAAO,EAAEZ,KAAK,CAAC;IAChEiC,QAAQ,CAACK,GAAG,CAACtC,KAAK,CAACuC,OAAO,EAAEH,OAAO,CAAC;IACpC,OAAOA,OAAO;EAClB,CAAC;EAED,MAAMI,qBAAqB,GAAIC,KAAa,IAAK;IAC7C,OAAO,IAAAC,6BAAgB,EAAC9B,OAAO,EAAE,kBAAkB,EAAE;MAAE+B,GAAG,EAAEF;IAAM,CAAC,CAAC;EACxE,CAAC;EAED,MAAMG,kBAAkB,GAAG,MAAkB;IACzC,MAAMzB,MAAM,GAAGX,SAAS,EAAE,CAACY,EAAE;IAC7B,MAAMC,MAAM,GAAGX,SAAS,EAAE,CAACY,IAAI;IAE/B,OACIV,OAAO,CAACiC,OAAO,CACVC,MAAM,CAAiBC,8BAAc,CAACC,IAAI;IAC3C;AAChB;AACA;AACA,OAHgB,CAICC,MAAM,CAACC,MAAM,IAAI;MACd,MAAM;QAAE/B,MAAM,EAAEgC,WAAW;QAAE9B,MAAM,EAAE+B;MAAY,CAAC,GAAGF,MAAM,CAACG,YAAY;MACxE,IAAIF,WAAW,IAAIA,WAAW,KAAKhC,MAAM,EAAE;QACvC,OAAO,KAAK;MAChB,CAAC,MAAM,IAAIiC,WAAW,IAAIA,WAAW,KAAK/B,MAAM,EAAE;QAC9C,OAAO,KAAK;MAChB;MACA,OAAO,IAAI;IACf,CAAC,CAAC,CACDE,GAAG,CAAC2B,MAAM,IAAI;MACX,mEACOA,MAAM,CAACG,YAAY;QACtBpD,IAAI,EAAEF,aAAa,CAACmD,MAAM,CAACG,YAAY,CAAC;QACxClC,MAAM;QACNE,MAAM;QACNiC,aAAa,EAAE1C,OAAO,CAAC2C;MAAc;IAE7C,CAAC,CAAC;EAEd,CAAC;EAED,MAAMC,SAAS,GAAG,MAAOjB,OAAe,IAAK;IACzC,MAAMkB,WAAW,GAAGb,kBAAkB,EAAE,CAACc,IAAI,CAAC1D,KAAK,IAAIA,KAAK,CAACuC,OAAO,KAAKA,OAAO,CAAC;IAEjF,IAAIkB,WAAW,EAAE;MACb,OAAOA,WAAW;IACtB;IAEA,MAAMzD,KAAK,GAAG,MAAMW,iBAAiB,CAACK,MAAM,CAAC2C,GAAG,CAAC;MAC7CxC,MAAM,EAAEX,SAAS,EAAE,CAACY,EAAE;MACtBC,MAAM,EAAEX,SAAS,EAAE,CAACY,IAAI;MACxBiB;IACJ,CAAC,CAAC;IAEF,IAAI,CAACvC,KAAK,EAAE;MACR,MAAM,IAAI4D,6BAAa,CAAE,kBAAiBrB,OAAQ,kBAAiB,CAAC;IACxE;IAEA,mEACOvC,KAAK;MACRC,IAAI,EAAEF,aAAa,CAACC,KAAK,CAAC;MAC1BmB,MAAM,EAAEnB,KAAK,CAACmB,MAAM,IAAIX,SAAS,EAAE,CAACY,EAAE;MACtCC,MAAM,EAAErB,KAAK,CAACqB,MAAM,IAAIX,SAAS,EAAE,CAACY;IAAI;EAEhD,CAAC;EAED,MAAMuC,UAAU,GAAG,YAAiC;IAChD,MAAMC,cAA0B,GAAG,MAAMjD,OAAO,CAACC,UAAU,CAACiD,IAAI,CAAC,YAAY,CAAC;IAE9E,MAAMC,aAAa,GAAGpB,kBAAkB,EAAE;IAE1C,OAAOkB,cAAc,CAACG,MAAM,CAACD,aAAa,CAAC;EAC/C,CAAC;EAED,MAAMlD,UAAU,GAAG,YAAY;IAC3B,OAAOF,OAAO,CAACsD,SAAS,CAACC,OAAO,CAAC,oCAAoC,EAAE,YAAY;MAC/E,MAAMC,UAAU,GAAG,MAAM5B,qBAAqB,CAAC,GAAG,CAAC;MACnD,MAAMxB,MAAM,GAAG,MAAM6C,UAAU,EAAE;MACjC,OAAO,IAAAQ,wBAAW,EAACrD,MAAM,EAAE,MAAMhB,KAAK,IAAI;QACtC,IAAI,CAAC,IAAAsE,4BAAiB,EAAC1D,OAAO,EAAEwD,UAAU,EAAEpE,KAAK,CAAC,EAAE;UAChD,OAAO,KAAK;QAChB;QACA,OAAO,IAAAuE,2BAAmB,EAAC3D,OAAO,EAAEZ,KAAK,CAAC;MAC9C,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAED,MAAMwE,QAAQ,GAAG,MAAOjC,OAAe,IAAwB;IAC3D,OAAO3B,OAAO,CAACsD,SAAS,CAACC,OAAO,CAAC,kCAAkC,EAAE,YAAY;MAC7E,MAAMC,UAAU,GAAG,MAAM5B,qBAAqB,CAAC,GAAG,CAAC;MAEnD,MAAMxC,KAAK,GAAG,MAAMwD,SAAS,CAACjB,OAAO,CAAC;MAEtC,IAAAkC,yBAAc,EAAC7D,OAAO,EAAEwD,UAAU,EAAEpE,KAAK,CAAC;MAC1C,MAAM,IAAA0E,wBAAgB,EAAC9D,OAAO,EAAEZ,KAAK,CAAC;MAEtC,OAAOA,KAAK;IAChB,CAAC,CAAC;EACN,CAAC;EAED,MAAM2E,eAAmD,GAAG,MACxDC,MAAM,IACqB;IAC3B,MAAMrC,OAAO,GAAG,OAAOqC,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAGA,MAAM,CAACrC,OAAO;IACpE,IAAIN,QAAQ,CAAC4C,GAAG,CAACtC,OAAO,CAAC,EAAE;MACvB,OAAON,QAAQ,CAAC0B,GAAG,CAACpB,OAAO,CAAC;IAChC;IACA,MAAMvB,MAAM,GAAG,MAAM6C,UAAU,EAAE;IACjC,MAAM7D,KAAK,GAAGgB,MAAM,CAAC0C,IAAI,CAACoB,CAAC,IAAIA,CAAC,CAACvC,OAAO,KAAKA,OAAO,CAAC;IACrD,IAAI,CAACvC,KAAK,EAAE;MACR,MAAM,IAAI4D,6BAAa,CAAE,8BAA6BrB,OAAQ,IAAG,CAAC;IACtE;IACA,OAAO,MAAMJ,aAAa,CAACvB,OAAO,EAAEZ,KAAK,CAAC;EAC9C,CAAC;;EAED;AACJ;AACA;EACI,MAAM+E,mBAAmB,GACrB,IAAAC,mBAAW,EAAiC,yBAAyB,CAAC;EAC1E,MAAMC,kBAAkB,GAAG,IAAAD,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F,MAAME,kBAAkB,GAAG,IAAAF,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F;AACJ;AACA;EACI,MAAMG,uBAAuB,GAAG,IAAAH,mBAAW,EACvC,6BAA6B,CAChC;EACD,MAAMI,sBAAsB,GAAG,IAAAJ,mBAAW,EACtC,4BAA4B,CAC/B;EACD,MAAMK,sBAAsB,GAAG,IAAAL,mBAAW,EACtC,4BAA4B,CAC/B;EACD;AACJ;AACA;EACI,MAAMM,mBAAmB,GACrB,IAAAN,mBAAW,EAAiC,yBAAyB,CAAC;EAC1E,MAAMO,kBAAkB,GAAG,IAAAP,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F,MAAMQ,kBAAkB,GAAG,IAAAR,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F;AACJ;AACA;EACI,MAAMS,mBAAmB,GACrB,IAAAT,mBAAW,EAAiC,yBAAyB,CAAC;EAC1E,MAAMU,kBAAkB,GAAG,IAAAV,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F,MAAMW,kBAAkB,GAAG,IAAAX,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F;AACJ;AACA;EACI,MAAMY,iBAAiB,GAAG,IAAAZ,mBAAW,EAA0B,uBAAuB,CAAC;EACvF;AACJ;AACA;EACI,IAAAa,qCAAuB,EAAC;IACpBd,mBAAmB;IACnBI,uBAAuB;IACvBvE,OAAO;IACPD;EACJ,CAAC,CAAC;EACF,IAAAmF,mCAAsB,EAAC;IACnBlF,OAAO;IACPqE;EACJ,CAAC,CAAC;EACF,IAAAc,qCAAuB,EAAC;IACpBT,mBAAmB;IACnB1E;EACJ,CAAC,CAAC;EACF,IAAAoF,mCAAsB,EAAC;IACnBpF,OAAO;IACP2E;EACJ,CAAC,CAAC;EACF,IAAAU,2CAA0B,EAAC;IACvBrF,OAAO;IACPwE;EACJ,CAAC,CAAC;EACF,IAAAc,qCAAuB,EAAC;IACpBT,mBAAmB;IACnB5C,OAAO,EAAEjC,OAAO,CAACiC,OAAO;IACxBlC;EACJ,CAAC,CAAC;EACF,IAAAwF,mCAAsB,EAAC;IACnBvF,OAAO;IACP8E;EACJ,CAAC,CAAC;;EAEF;AACJ;AACA;EACI,MAAMU,WAA2C,GAAG,MAAMC,KAAK,IAAI;IAC/D,MAAM7D,qBAAqB,CAAC,GAAG,CAAC;IAEhC,MAAM8D,MAAM,GAAG,MAAM,IAAAC,uCAA2B,GAAE,CAACC,cAAc,CAACH,KAAK,CAAC;IACxE,IAAI,CAACC,MAAM,CAACG,OAAO,EAAE;MACjB,MAAM,IAAAC,qBAAc,EAACJ,MAAM,CAACK,KAAK,CAAC;IACtC;IACA;AACR;AACA;IACQ,8BAAmC,IAAAC,4BAAqB,EAACN,MAAM,CAACO,IAAI,CAAC;MAA/D;QAAEC;MAAuB,CAAC;MAAND,IAAI;IAC9B,IAAIC,aAAa,EAAE;MACf,IAAAC,uCAAwB,EAACF,IAAI,CAAC;IAClC;IAEA,MAAMG,KAAK,GAAG,MAAMpG,OAAO,CAACqG,QAAQ,CAACC,oBAAoB,CAAC,YAAY;MAClE,OAAOtG,OAAO,CAACuG,GAAG,CAACC,QAAQ,CAACP,IAAI,CAACG,KAAK,CAAC;IAC3C,CAAC,CAAC;IACF,IAAI,CAACA,KAAK,EAAE;MACR,MAAM,IAAIpD,6BAAa,CAAE,sBAAqBiD,IAAI,CAACG,KAAM,IAAG,CAAC;IACjE;IAEA,MAAMK,QAAQ,GAAG5G,WAAW,EAAE;IAC9B,MAAMT,KAAe,+DACd6G,IAAI;MACPtE,OAAO,EAAEsE,IAAI,CAACtE,OAAO,IAAI,EAAE;MAC3Bf,eAAe,EAAEqF,IAAI,CAACrF,eAAe;MACrCE,aAAa,EAAEmF,IAAI,CAACnF,aAAa;MACjC4F,YAAY,EAAE,IAAI;MAClBC,kBAAkB,EAAE,IAAI;MACxBC,YAAY,EAAE,IAAI;MAClBC,WAAW,EAAEZ,IAAI,CAACY,WAAW,IAAI,EAAE;MACnCpG,MAAM,EAAEX,SAAS,EAAE,CAACY,IAAI;MACxBH,MAAM,EAAEX,SAAS,EAAE,CAACY,EAAE;MACtB4F,KAAK,EAAE;QACH5F,EAAE,EAAE4F,KAAK,CAAC5F,EAAE;QACZsG,IAAI,EAAEV,KAAK,CAACU;MAChB,CAAC;MACDC,SAAS,EAAE;QACPvG,EAAE,EAAEiG,QAAQ,CAACjG,EAAE;QACfwG,WAAW,EAAEP,QAAQ,CAACO,WAAW;QACjC5E,IAAI,EAAEqE,QAAQ,CAACrE;MACnB,CAAC;MACD6E,SAAS,EAAE,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE;MACnCC,OAAO,EAAE,IAAIF,IAAI,EAAE,CAACC,WAAW,EAAE;MACjCE,YAAY,EAAE,EAAE;MAChB3E,aAAa,EAAE1C,OAAO,CAAC2C;IAAc,EACxC;IAEDvD,KAAK,CAACC,IAAI,GAAGF,aAAa,CAACC,KAAK,CAAC;IAEjC,IAAI;MACA,MAAM+E,mBAAmB,CAACmD,OAAO,CAAC;QAC9B7B,KAAK,EAAEQ,IAAI;QACX7G;MACJ,CAAC,CAAC;MAEF,MAAMmI,YAAY,GAAG,MAAMxH,iBAAiB,CAACK,MAAM,CAACoH,MAAM,CAAC;QACvDpI;MACJ,CAAC,CAAC;MAEFa,OAAO,CAACC,UAAU,CAACkB,QAAQ,EAAE;MAE7B,MAAMG,aAAa,CAACvB,OAAO,EAAEZ,KAAK,CAAC;MAEnC,MAAMiF,kBAAkB,CAACiD,OAAO,CAAC;QAC7B7B,KAAK,EAAEQ,IAAI;QACX7G,KAAK,EAAEmI;MACX,CAAC,CAAC;MAEF,OAAOA,YAAY;IACvB,CAAC,CAAC,OAAOE,EAAE,EAAE;MACT,MAAMnD,kBAAkB,CAACgD,OAAO,CAAC;QAC7B7B,KAAK,EAAEQ,IAAI;QACX7G,KAAK;QACL2G,KAAK,EAAE0B;MACX,CAAC,CAAC;MACF,MAAMA,EAAE;IACZ;EACJ,CAAC;EACD,MAAMC,WAA2C,GAAG,OAAO/F,OAAO,EAAE8D,KAAK,KAAK;IAC1E,MAAM7D,qBAAqB,CAAC,GAAG,CAAC;;IAEhC;IACA,MAAM+F,QAAQ,GAAG,MAAM/D,QAAQ,CAACjC,OAAO,CAAC;IAExC,MAAM+D,MAAM,GAAG,MAAM,IAAAkC,uCAA2B,GAAE,CAAChC,cAAc,CAACH,KAAK,CAAC;IACxE,IAAI,CAACC,MAAM,CAACG,OAAO,EAAE;MACjB,MAAM,IAAAC,qBAAc,EAACJ,MAAM,CAACK,KAAK,CAAC;IACtC;IAEA,MAAME,IAAI,GAAG,IAAAD,4BAAqB,EAACN,MAAM,CAACO,IAAI,CAAC;IAE/C,IAAI/E,MAAM,CAAC2G,IAAI,CAAC5B,IAAI,CAAC,CAAC6B,MAAM,KAAK,CAAC,EAAE;MAChC;AACZ;AACA;MACY,OAAOH,QAAQ;IACnB;IACA,IAAIvB,KAAoB,GAAG;MACvB5F,EAAE,EAAEmH,QAAQ,CAACvB,KAAK,CAAC5F,EAAE;MACrBsG,IAAI,EAAEa,QAAQ,CAACvB,KAAK,CAACU;IACzB,CAAC;IACD,MAAMiB,OAAO,GAAG9B,IAAI,CAACG,KAAK;IAC1B,IAAI2B,OAAO,EAAE;MACT,MAAMC,SAAS,GAAG,MAAMhI,OAAO,CAACqG,QAAQ,CAACC,oBAAoB,CAAC,YAAY;QACtE,OAAOtG,OAAO,CAACuG,GAAG,CAACC,QAAQ,CAACuB,OAAO,CAAC;MACxC,CAAC,CAAC;MACF,IAAI,CAACC,SAAS,EAAE;QACZ,MAAM,IAAIhF,6BAAa,CAAE,sBAAqB+E,OAAQ,IAAG,CAAC;MAC9D;MACA3B,KAAK,GAAG;QACJ5F,EAAE,EAAEwH,SAAS,CAACxH,EAAE;QAChBsG,IAAI,EAAEkB,SAAS,CAAClB;MACpB,CAAC;IACL;IACA,MAAM1H,KAAe,2FACduI,QAAQ,GACR1B,IAAI;MACPS,YAAY,EACRT,IAAI,CAACS,YAAY,KAAKuB,SAAS,GACzBN,QAAQ,CAACjB,YAAY,GACpBT,IAAI,CAACS,YAAuB;MACvCC,kBAAkB,EACdV,IAAI,CAACU,kBAAkB,KAAKsB,SAAS,GAC/BN,QAAQ,CAAChB,kBAAkB,GAC3BV,IAAI,CAACU,kBAAkB;MACjCC,YAAY,EACRX,IAAI,CAACW,YAAY,KAAKqB,SAAS,GAAGN,QAAQ,CAACf,YAAY,GAAGX,IAAI,CAACW,YAAY;MAC/ER,KAAK;MACLS,WAAW,EAAEZ,IAAI,CAACY,WAAW,IAAIc,QAAQ,CAACd,WAAW;MACrDtG,MAAM,EAAEoH,QAAQ,CAACpH,MAAM,IAAIX,SAAS,EAAE,CAACY,EAAE;MACzCC,MAAM,EAAEkH,QAAQ,CAAClH,MAAM,IAAIX,SAAS,EAAE,CAACY,IAAI;MAC3CgC,aAAa,EAAE1C,OAAO,CAAC2C,cAAc;MACrCyE,OAAO,EAAE,IAAIF,IAAI,EAAE,CAACC,WAAW;IAAE,EACpC;IAED/H,KAAK,CAACC,IAAI,GAAGF,aAAa,CAACC,KAAK,CAAC;IAEjC,IAAI;MACA,MAAMsF,mBAAmB,CAAC4C,OAAO,CAAC;QAC9B7B,KAAK,EAAEQ,IAAI;QACX0B,QAAQ;QACRvI;MACJ,CAAC,CAAC;MAEF,MAAM8I,WAAW,GAAG,MAAMnI,iBAAiB,CAACK,MAAM,CAAC+H,MAAM,CAAC;QACtD/I;MACJ,CAAC,CAAC;MAEF,MAAMmC,aAAa,CAACvB,OAAO,EAAEkI,WAAW,CAAC;MAEzC,MAAMvD,kBAAkB,CAAC2C,OAAO,CAAC;QAC7B7B,KAAK,EAAEQ,IAAI;QACX0B,QAAQ;QACRvI,KAAK,EAAE8I;MACX,CAAC,CAAC;MAEF,OAAOA,WAAW;IACtB,CAAC,CAAC,OAAOT,EAAE,EAAE;MACT,MAAM7C,kBAAkB,CAAC0C,OAAO,CAAC;QAC7B7B,KAAK,EAAEQ,IAAI;QACX7G,KAAK;QACLuI,QAAQ;QACR5B,KAAK,EAAE0B;MACX,CAAC,CAAC;MAEF,MAAMA,EAAE;IACZ;EACJ,CAAC;EACD,MAAMW,iBAAuD,GAAG,MAAMzI,MAAM,IAAI;IAC5E,MAAM;MAAEP,KAAK,EAAEiJ,YAAY;MAAEV;IAAS,CAAC,GAAGhI,MAAM;IAEhD,MAAMP,KAAe,+DACdiJ,YAAY;MACf9H,MAAM,EAAE8H,YAAY,CAAC9H,MAAM,IAAIX,SAAS,EAAE,CAACY,EAAE;MAC7CC,MAAM,EAAE4H,YAAY,CAAC5H,MAAM,IAAIX,SAAS,EAAE,CAACY,IAAI;MAC/CgC,aAAa,EAAE1C,OAAO,CAAC2C;IAAc,EACxC;IAED,IAAI;MACA,MAAM+B,mBAAmB,CAAC4C,OAAO,CAAC;QAC9B7B,KAAK,EAAE,CAAC,CAAwB;QAChCkC,QAAQ;QACRvI;MACJ,CAAC,CAAC;MAEF,MAAM8I,WAAW,GAAG,MAAMnI,iBAAiB,CAACK,MAAM,CAAC+H,MAAM,CAAC;QACtD/I;MACJ,CAAC,CAAC;MAEF,MAAMmC,aAAa,CAACvB,OAAO,EAAEkI,WAAW,CAAC;MAEzCjI,OAAO,CAACC,UAAU,CAACkB,QAAQ,EAAE;MAE7B,MAAMuD,kBAAkB,CAAC2C,OAAO,CAAC;QAC7B7B,KAAK,EAAE,CAAC,CAAwB;QAChCkC,QAAQ;QACRvI,KAAK,EAAE8I;MACX,CAAC,CAAC;MAEF,OAAOA,WAAW;IACtB,CAAC,CAAC,OAAOT,EAAE,EAAE;MACT,MAAM7C,kBAAkB,CAAC0C,OAAO,CAAC;QAC7B7B,KAAK,EAAE,CAAC,CAAwB;QAChCkC,QAAQ;QACRvI,KAAK;QACL2G,KAAK,EAAE0B;MACX,CAAC,CAAC;MACF,MAAMA,EAAE;IACZ;EACJ,CAAC;EACD,MAAMa,eAAmD,GAAG,OAAO3G,OAAO,EAAE8D,KAAK,KAAK;IAClF,MAAM7D,qBAAqB,CAAC,GAAG,CAAC;IAChC;AACR;AACA;IACQ,MAAM+F,QAAQ,GAAG,MAAM/D,QAAQ,CAACjC,OAAO,CAAC;IAExC,MAAM+D,MAAM,GAAG,MAAM,IAAA6C,2CAA+B,GAAE,CAAC3C,cAAc,6DAC9DH,KAAK;MACRoB,WAAW,EAAEpB,KAAK,CAACoB,WAAW,IAAIc,QAAQ,CAACd;IAAW,GACxD;IACF,IAAI,CAACnB,MAAM,CAACG,OAAO,EAAE;MACjB,MAAM,IAAAC,qBAAc,EAACJ,MAAM,CAACK,KAAK,CAAC;IACtC;IAEA,MAAME,IAAI,GAAG,IAAAD,4BAAqB,EAACN,MAAM,CAACO,IAAI,CAAC;IAE/C,MAAMxF,MAAM,GAAG,MAAMT,OAAO,CAACwI,IAAI,CAAC1I,SAAS,CAACmG,IAAI,CAACxF,MAAM,IAAIkH,QAAQ,CAAClH,MAAM,CAAC;IAC3E,IAAI,CAACA,MAAM,EAAE;MACT,MAAM,IAAIuC,6BAAa,CAAE,uBAAsBiD,IAAI,CAACxF,MAAO,IAAG,CAAC;IACnE;IACA;AACR;AACA;IACQ,MAAM2F,KAAK,GAAG,MAAMpG,OAAO,CAACuG,GAAG,CAACxG,iBAAiB,CAAC0I,MAAM,CAAC1F,GAAG,CAAC;MACzDvC,EAAE,EAAEyF,IAAI,CAACG,KAAK;MACd7F,MAAM,EAAEoH,QAAQ,CAACpH,MAAM;MACvBE,MAAM,EAAEA,MAAM,CAACC;IACnB,CAAC,CAAC;IACF,IAAI,CAAC0F,KAAK,EAAE;MACR,MAAM,IAAIpD,6BAAa,CAAE,sBAAqBiD,IAAI,CAACG,KAAM,IAAG,CAAC;IACjE;IAEA,MAAMK,QAAQ,GAAG5G,WAAW,EAAE;IAC9B,MAAMT,KAAe,+DACduI,QAAQ;MACX/G,eAAe,EAAEqF,IAAI,CAACrF,eAAe;MACrCE,aAAa,EAAEmF,IAAI,CAACnF,aAAa;MACjCL,MAAM,EAAEA,MAAM,CAACC,IAAI;MACnB0F,KAAK,EAAE;QACH5F,EAAE,EAAE4F,KAAK,CAAC5F,EAAE;QACZsG,IAAI,EAAEV,KAAK,CAACU;MAChB,CAAC;MACD4B,IAAI,EAAEzC,IAAI,CAACyC,IAAI;MACf5B,IAAI,EAAEb,IAAI,CAACa,IAAI;MACfnF,OAAO,EAAEsE,IAAI,CAACtE,OAAO,IAAI,EAAE;MAC3BkF,WAAW,EAAEZ,IAAI,CAACY,WAAW,IAAI,EAAE;MACnCE,SAAS,EAAE;QACPvG,EAAE,EAAEiG,QAAQ,CAACjG,EAAE;QACfwG,WAAW,EAAEP,QAAQ,CAACO,WAAW;QACjC5E,IAAI,EAAEqE,QAAQ,CAACrE;MACnB,CAAC;MACD6E,SAAS,EAAE,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE;MACnCC,OAAO,EAAE,IAAIF,IAAI,EAAE,CAACC,WAAW,EAAE;MACjCE,YAAY,EAAE,EAAE;MAChB3E,aAAa,EAAE1C,OAAO,CAAC2C;IAAc,EACxC;IAED,IAAI;MACA,MAAM4B,uBAAuB,CAAC+C,OAAO,CAAC;QAClC7B,KAAK,EAAEQ,IAAI;QACX7G,KAAK;QACLuI;MACJ,CAAC,CAAC;MAEF,MAAMJ,YAAY,GAAG,MAAMxH,iBAAiB,CAACK,MAAM,CAACoH,MAAM,CAAC;QACvDpI;MACJ,CAAC,CAAC;MAEFa,OAAO,CAACC,UAAU,CAACkB,QAAQ,EAAE;MAE7B,MAAMG,aAAa,CAACvB,OAAO,EAAEZ,KAAK,CAAC;MAEnC,MAAMoF,sBAAsB,CAAC8C,OAAO,CAAC;QACjC7B,KAAK,EAAEQ,IAAI;QACX0B,QAAQ;QACRvI,KAAK,EAAEmI;MACX,CAAC,CAAC;MAEF,OAAOA,YAAY;IACvB,CAAC,CAAC,OAAOE,EAAE,EAAE;MACT,MAAMhD,sBAAsB,CAAC6C,OAAO,CAAC;QACjC7B,KAAK,EAAEQ,IAAI;QACX0B,QAAQ;QACRvI,KAAK;QACL2G,KAAK,EAAE0B;MACX,CAAC,CAAC;MACF,MAAMA,EAAE;IACZ;EACJ,CAAC;EACD,MAAMkB,WAA2C,GAAG,MAAMhH,OAAO,IAAI;IACjE,MAAMC,qBAAqB,CAAC,GAAG,CAAC;IAEhC,MAAMxC,KAAK,GAAG,MAAMwE,QAAQ,CAACjC,OAAO,CAAC;IAErC,IAAI;MACA,MAAMkD,mBAAmB,CAACyC,OAAO,CAAC;QAC9BlI;MACJ,CAAC,CAAC;MAEF,IAAI;QACA,MAAMW,iBAAiB,CAACK,MAAM,CAACwI,MAAM,CAAC;UAClCxJ;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOqI,EAAE,EAAE;QACT,MAAM,IAAIoB,cAAW,CACjBpB,EAAE,CAACqB,OAAO,IAAI,oCAAoC,EAClDrB,EAAE,CAAC/G,IAAI,IAAI,4BAA4B,EACvC;UACIqF,KAAK,EAAE0B,EAAE;UACT9F,OAAO,EAAEvC,KAAK,CAACuC;QACnB,CAAC,CACJ;MACL;MAEA,MAAMmD,kBAAkB,CAACwC,OAAO,CAAC;QAC7BlI;MACJ,CAAC,CAAC;MAEFiC,QAAQ,CAACuH,MAAM,CAACxJ,KAAK,CAACuC,OAAO,CAAC;IAClC,CAAC,CAAC,OAAO8F,EAAE,EAAE;MACT,MAAM1C,kBAAkB,CAACuC,OAAO,CAAC;QAC7BlI,KAAK;QACL2G,KAAK,EAAE0B;MACX,CAAC,CAAC;MACF,MAAMA,EAAE;IACZ;EACJ,CAAC;EACD,MAAMsB,eAAmD,GAAG,OAAOpH,OAAO,EAAEsE,IAAI,KAAK;IACjF;AACR;AACA;AACA;IACQ,MAAMrE,qBAAqB,CAAC,GAAG,CAAC;IAEhC,MAAMxC,KAAK,GAAG,MAAMwE,QAAQ,CAACjC,OAAO,CAAC;IAErC,MAAMqD,iBAAiB,CAACsC,OAAO,CAAC;MAAElI,KAAK;MAAE6G;IAAK,CAAC,CAAC;IAEhD,OAAO,IAAI;EACf,CAAC;EACD,OAAO;IACH;AACR;AACA;IACQ+C,mBAAmB,EAAE7E,mBAAmB;IACxC8E,kBAAkB,EAAE5E,kBAAkB;IACtC6E,uBAAuB,EAAE3E,uBAAuB;IAChD4E,sBAAsB,EAAE3E,sBAAsB;IAC9C4E,mBAAmB,EAAE1E,mBAAmB;IACxC2E,kBAAkB,EAAE1E,kBAAkB;IACtC2E,mBAAmB,EAAEzE,mBAAmB;IACxC0E,kBAAkB,EAAEzE,kBAAkB;IACtC;AACR;AACA;IACQX,mBAAmB;IACnBE,kBAAkB;IAClBC,kBAAkB;IAClBC,uBAAuB;IACvBC,sBAAsB;IACtBC,sBAAsB;IACtBC,mBAAmB;IACnBC,kBAAkB;IAClBC,kBAAkB;IAClBC,mBAAmB;IACnBC,kBAAkB;IAClBC,kBAAkB;IAClBC,iBAAiB;IACjBhE,gBAAgB;IAChB4C,QAAQ;IACR1D,UAAU;IACV,MAAMsF,WAAW,CAACC,KAAK,EAAE;MACrB,OAAOzF,OAAO,CAACsD,SAAS,CAACC,OAAO,CAAC,qCAAqC,EAAE,YAAY;QAChF,OAAOiC,WAAW,CAACC,KAAK,CAAC;MAC7B,CAAC,CAAC;IACN,CAAC;IACD;AACR;AACA;AACA;IACQ,MAAM2C,iBAAiB,CAACzI,MAAM,EAAE;MAC5B,OAAOK,OAAO,CAACsD,SAAS,CAACC,OAAO,CAC5B,2CAA2C,EAC3C,YAAY;QACR,OAAO6E,iBAAiB,CAACzI,MAAM,CAAC;MACpC,CAAC,CACJ;IACL,CAAC;IACD,MAAM2I,eAAe,CAAC3G,OAAO,EAAE6H,SAAS,EAAE;MACtC,OAAOxJ,OAAO,CAACsD,SAAS,CAACC,OAAO,CAC5B,yCAAyC,EACzC,YAAY;QACR,OAAO+E,eAAe,CAAC3G,OAAO,EAAE6H,SAAS,CAAC;MAC9C,CAAC,CACJ;IACL,CAAC;IACD,MAAM9B,WAAW,CAAC/F,OAAO,EAAE8D,KAAK,EAAE;MAC9B,OAAOzF,OAAO,CAACsD,SAAS,CAACC,OAAO,CAAC,qCAAqC,EAAE,YAAY;QAChF,OAAOmE,WAAW,CAAC/F,OAAO,EAAE8D,KAAK,CAAC;MACtC,CAAC,CAAC;IACN,CAAC;IACD,MAAMkD,WAAW,CAAChH,OAAO,EAAE;MACvB,OAAO3B,OAAO,CAACsD,SAAS,CAACC,OAAO,CAAC,qCAAqC,EAAE,YAAY;QAChF,OAAOoF,WAAW,CAAChH,OAAO,CAAC;MAC/B,CAAC,CAAC;IACN,CAAC;IACD,MAAMoH,eAAe,CAACpH,OAAO,EAAEsE,IAAI,EAAE;MACjC,OAAOjG,OAAO,CAACsD,SAAS,CAACC,OAAO,CAC5B,yCAAyC,EACzC,YAAY;QACR,OAAOwF,eAAe,CAACpH,OAAO,EAAEsE,IAAI,CAAC;MACzC,CAAC,CACJ;IACL,CAAC;IACDlC,eAAe;IACf0F,eAAe,EAAE,MAAMrK,KAAK,IAAI;MAC5B,OAAO2E,eAAe,CAAC3E,KAAK,CAAC;IACjC,CAAC;IACDsK,WAAW,EAAE,MAAMrI,QAAQ;IAC3BsI,gBAAgB,EAAE,MAAMtI;EAC5B,CAAC;AACL,CAAC;AAAC"}
1
+ {"version":3,"names":["_dataloader","_interopRequireDefault","require","_error","_handlerGraphql","_contentModelManagerFactory","_pubsub","_beforeCreate","_beforeUpdate","_beforeDelete","_afterCreate","_afterUpdate","_afterDelete","_afterCreateFrom","_CmsModelPlugin","_filterAsync","_validation","_utils","_defaultFields","_modelApiName","_excluded","ensureTypeTag","model","tags","some","tag","startsWith","push","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","modelsPermissions","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","_objectSpread2","default","singularApiName","ensureSingularApiName","pluralApiName","ensurePluralApiName","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","rwd","ensure","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","modelTenant","modelLocale","contentModel","webinyVersion","WEBINY_VERSION","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","benchmark","measure","filterAsync","ownsModel","owns","createdBy","throw","canAccessModel","getModel","ensureCanAccessModel","getModelManager","target","has","m","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelCreateError","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelCreateFromError","onModelBeforeUpdate","onModelAfterUpdate","onModelUpdateError","onModelBeforeDelete","onModelAfterDelete","onModelDeleteError","onModelInitialize","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","createModel","input","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","_removeUndefinedValue","removeUndefinedValues","data","defaultFields","_objectWithoutProperties2","assignModelDefaultFields","group","security","withoutAuthorization","cms","getGroup","identity","titleFieldId","descriptionFieldId","imageFieldId","description","name","displayName","createdOn","Date","toISOString","savedOn","lockedFields","publish","createdModel","create","ex","updateModel","original","createModelUpdateValidation","keys","length","groupId","groupData","undefined","resultModel","update","updateModelDirect","initialModel","createModelFrom","createModelCreateFromValidation","i18n","groups","icon","deleteModel","delete","WebinyError","message","initializeModel","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","userInput","getEntryManager","getManagers","getEntryManagers","exports"],"sources":["contentModel.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n HeadlessCmsStorageOperations,\n OnModelBeforeCreateTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelInitializeParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelAfterCreateFromTopicParams,\n CmsModelUpdateInput,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelUpdateErrorTopicParams,\n OnModelDeleteErrorTopicParams,\n CmsModelGroup\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { assignModelAfterCreate } from \"./contentModel/afterCreate\";\nimport { assignModelAfterUpdate } from \"./contentModel/afterUpdate\";\nimport { assignModelAfterDelete } from \"./contentModel/afterDelete\";\nimport { assignModelAfterCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError } from \"@webiny/utils\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields\";\nimport { removeUndefinedValues } from \"@webiny/utils\";\nimport {\n ensurePluralApiName,\n ensureSingularApiName\n} from \"./contentModel/compatibility/modelApiName\";\nimport { ModelsPermissions } from \"~/utils/permissions/ModelsPermissions\";\n\n/**\n * Given a model, return an array of tags ensuring the `type` tag is set.\n */\nconst ensureTypeTag = (model: Pick<CmsModel, \"tags\">) => {\n // Let's make sure we have a `type` tag assigned.\n // If `type` tag is not set, set it to a default one (`model`).\n const tags = model.tags || [];\n if (!tags.some(tag => tag.startsWith(\"type:\"))) {\n tags.push(\"type:model\");\n }\n\n return tags;\n};\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n modelsPermissions: ModelsPermissions;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, modelsPermissions, context } =\n params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code,\n /**\n * TODO: remove in v5.36.0\n * This is for backward compatibility while migrations are not yet executed.\n */\n singularApiName: ensureSingularApiName(model),\n pluralApiName: ensurePluralApiName(model)\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (rwd: string) => {\n return modelsPermissions.ensure({ rwd });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: modelTenant, locale: modelLocale } = plugin.contentModel;\n if (modelTenant && modelTenant !== tenant) {\n return false;\n } else if (modelLocale && modelLocale !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModel,\n tags: ensureTypeTag(plugin.contentModel),\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string) => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels: CmsModel[] = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n return context.benchmark.measure(\"headlessCms.crud.models.listModels\", async () => {\n const models = await modelsList();\n return filterAsync(models, async model => {\n const ownsModel = await modelsPermissions.ensure(\n { owns: model.createdBy },\n { throw: false }\n );\n\n if (!ownsModel) {\n return false;\n }\n\n return modelsPermissions.canAccessModel({ model, locale: getLocale().code });\n });\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n return context.benchmark.measure(\"headlessCms.crud.models.getModel\", async () => {\n await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n await modelsPermissions.ensure({ owns: model.createdBy });\n await modelsPermissions.ensureCanAccessModel({ model, locale: getLocale().code });\n\n return model;\n });\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n /**\n * Create\n */\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n const onModelCreateError = createTopic<OnModelCreateErrorTopicParams>(\"cms.onModelCreateError\");\n /**\n * Create from / clone\n */\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n const onModelCreateFromError = createTopic<OnModelCreateFromErrorParams>(\n \"cms.onModelCreateFromError\"\n );\n /**\n * Update\n */\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n const onModelUpdateError = createTopic<OnModelUpdateErrorTopicParams>(\"cms.onModelUpdateError\");\n /**\n * Delete\n */\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n const onModelDeleteError = createTopic<OnModelDeleteErrorTopicParams>(\"cms.onModelDeleteError\");\n /**\n * Initialize\n */\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n context,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n context\n });\n assignModelAfterUpdate({\n context,\n onModelAfterUpdate\n });\n assignModelAfterCreateFrom({\n context,\n onModelAfterCreateFrom\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterDelete({\n context,\n onModelAfterDelete\n });\n\n /**\n * CRUD methods\n */\n const createModel: CmsModelContext[\"createModel\"] = async input => {\n await checkModelPermissions(\"w\");\n\n const result = await createModelCreateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n /**\n * We need to extract the defaultFields because it is not for the CmsModel object.\n */\n const { defaultFields, ...data } = removeUndefinedValues(result.data);\n if (defaultFields) {\n assignModelDefaultFields(data);\n }\n\n const group = await context.security.withoutAuthorization(async () => {\n return context.cms.getGroup(data.group);\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...data,\n modelId: data.modelId || \"\",\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n titleFieldId: \"id\",\n descriptionFieldId: null,\n imageFieldId: null,\n description: data.description || \"\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeCreate.publish({\n input: data,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input: data,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateError.publish({\n input: data,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const updateModel: CmsModelContext[\"updateModel\"] = async (modelId, input) => {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const result = await createModelUpdateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n if (Object.keys(data).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModelGroup = {\n id: original.group.id,\n name: original.group.name\n };\n const groupId = data.group;\n if (groupId) {\n const groupData = await context.security.withoutAuthorization(async () => {\n return context.cms.getGroup(groupId);\n });\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${groupId}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const model: CmsModel = {\n ...original,\n ...data,\n titleFieldId:\n data.titleFieldId === undefined\n ? original.titleFieldId\n : (data.titleFieldId as string),\n descriptionFieldId:\n data.descriptionFieldId === undefined\n ? original.descriptionFieldId\n : data.descriptionFieldId,\n imageFieldId:\n data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,\n group,\n description: data.description || original.description,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n savedOn: new Date().toISOString()\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeUpdate.publish({\n input: data,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input: data,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: data,\n model,\n original,\n error: ex\n });\n\n throw ex;\n }\n };\n const updateModelDirect: CmsModelContext[\"updateModelDirect\"] = async params => {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const createModelFrom: CmsModelContext[\"createModelFrom\"] = async (modelId, input) => {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const result = await createModelCreateFromValidation().safeParseAsync({\n ...input,\n description: input.description || original.description\n });\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n const locale = await context.i18n.getLocale(data.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${data.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: data.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n icon: data.icon,\n name: data.name,\n modelId: data.modelId || \"\",\n description: data.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeCreateFrom.publish({\n input: data,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input: data,\n original,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateFromError.publish({\n input: data,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const deleteModel: CmsModelContext[\"deleteModel\"] = async modelId => {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n try {\n await onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n } catch (ex) {\n await onModelDeleteError.publish({\n model,\n error: ex\n });\n throw ex;\n }\n };\n const initializeModel: CmsModelContext[\"initializeModel\"] = async (modelId, data) => {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n await checkModelPermissions(\"w\");\n\n const model = await getModel(modelId);\n\n await onModelInitialize.publish({ model, data });\n\n return true;\n };\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeModelCreate: onModelBeforeCreate,\n onAfterModelCreate: onModelAfterCreate,\n onBeforeModelCreateFrom: onModelBeforeCreateFrom,\n onAfterModelCreateFrom: onModelAfterCreateFrom,\n onBeforeModelUpdate: onModelBeforeUpdate,\n onAfterModelUpdate: onModelAfterUpdate,\n onBeforeModelDelete: onModelBeforeDelete,\n onAfterModelDelete: onModelAfterDelete,\n /**\n * Released in 5.34.0\n */\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelCreateError,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelCreateFromError,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelUpdateError,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelDeleteError,\n onModelInitialize,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(input) {\n return context.benchmark.measure(\"headlessCms.crud.models.createModel\", async () => {\n return createModel(input);\n });\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.updateModelDirect\",\n async () => {\n return updateModelDirect(params);\n }\n );\n },\n async createModelFrom(modelId, userInput) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.createModelFrom\",\n async () => {\n return createModelFrom(modelId, userInput);\n }\n );\n },\n async updateModel(modelId, input) {\n return context.benchmark.measure(\"headlessCms.crud.models.updateModel\", async () => {\n return updateModel(modelId, input);\n });\n },\n async deleteModel(modelId) {\n return context.benchmark.measure(\"headlessCms.crud.models.deleteModel\", async () => {\n return deleteModel(modelId);\n });\n },\n async initializeModel(modelId, data) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.initializeModel\",\n async () => {\n return initializeModel(modelId, data);\n }\n );\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["assignBeforeGroupCreate","params","onGroupBeforeCreate","plugins","storageOperations","subscribe","group","slug","trim","groups","list","where","tenant","locale","length","WebinyError","toSlug","name","generateAlphaNumericId","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","Error"],"sources":["beforeCreate.ts"],"sourcesContent":["import { OnGroupBeforeCreateTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport WebinyError from \"@webiny/error\";\nimport { toSlug } from \"~/utils/toSlug\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport { generateAlphaNumericId } from \"@webiny/utils\";\n\ninterface AssignBeforeGroupCreateParams {\n onGroupBeforeCreate: Topic<OnGroupBeforeCreateTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupCreate = (params: AssignBeforeGroupCreateParams) => {\n const { onGroupBeforeCreate, plugins, storageOperations } = params;\n\n onGroupBeforeCreate.subscribe(async params => {\n const { group } = params;\n\n if (group.slug && group.slug.trim()) {\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug: group.slug\n }\n });\n if (groups.length > 0) {\n throw new WebinyError(\n `Cms Group with the slug \"${group.slug}\" already exists.`,\n \"SLUG_ALREADY_EXISTS\"\n );\n }\n } else {\n const slug = toSlug(group.name);\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug\n }\n });\n\n if (groups.length === 0) {\n group.slug = slug;\n } else {\n group.slug = `${slug}-${generateAlphaNumericId(8)}`;\n }\n }\n\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n\n if (groupPlugin) {\n throw new Error(\n `Cannot create \"${group.slug}\" content model group because one is already registered via a plugin.`\n );\n }\n });\n};\n"],"mappings":";;;;;;;AAGA;AACA;AACA;AACA;AAOO,MAAMA,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC,OAAO;IAAEC;EAAkB,CAAC,GAAGH,MAAM;EAElEC,mBAAmB,CAACG,SAAS,CAAC,MAAMJ,MAAM,IAAI;IAC1C,MAAM;MAAEK;IAAM,CAAC,GAAGL,MAAM;IAExB,IAAIK,KAAK,CAACC,IAAI,IAAID,KAAK,CAACC,IAAI,CAACC,IAAI,EAAE,EAAE;MACjC,MAAMC,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MAAM;UACpBC,MAAM,EAAEP,KAAK,CAACO,MAAM;UACpBN,IAAI,EAAED,KAAK,CAACC;QAChB;MACJ,CAAC,CAAC;MACF,IAAIE,MAAM,CAACK,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,IAAIC,cAAW,CAChB,4BAA2BT,KAAK,CAACC,IAAK,mBAAkB,EACzD,qBAAqB,CACxB;MACL;IACJ,CAAC,MAAM;MACH,MAAMA,IAAI,GAAG,IAAAS,cAAM,EAACV,KAAK,CAACW,IAAI,CAAC;MAC/B,MAAMR,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MAAM;UACpBC,MAAM,EAAEP,KAAK,CAACO,MAAM;UACpBN;QACJ;MACJ,CAAC,CAAC;MAEF,IAAIE,MAAM,CAACK,MAAM,KAAK,CAAC,EAAE;QACrBR,KAAK,CAACC,IAAI,GAAGA,IAAI;MACrB,CAAC,MAAM;QACHD,KAAK,CAACC,IAAI,GAAI,GAAEA,IAAK,IAAG,IAAAW,6BAAsB,EAAC,CAAC,CAAE,EAAC;MACvD;IACJ;IAEA,MAAMC,WAAW,GAAGhB,OAAO,CACtBiB,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC,CAC3CC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,iBAAiB,CAAClB,IAAI,KAAKD,KAAK,CAACC,IAAI,CAAC;IAE7D,IAAIY,WAAW,EAAE;MACb,MAAM,IAAIO,KAAK,CACV,kBAAiBpB,KAAK,CAACC,IAAK,uEAAsE,CACtG;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_toSlug","_CmsGroupPlugin","_utils","assignBeforeGroupCreate","params","onGroupBeforeCreate","plugins","storageOperations","subscribe","group","slug","trim","groups","list","where","tenant","locale","length","WebinyError","toSlug","name","generateAlphaNumericId","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","Error","exports"],"sources":["beforeCreate.ts"],"sourcesContent":["import { OnGroupBeforeCreateTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport WebinyError from \"@webiny/error\";\nimport { toSlug } from \"~/utils/toSlug\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport { generateAlphaNumericId } from \"@webiny/utils\";\n\ninterface AssignBeforeGroupCreateParams {\n onGroupBeforeCreate: Topic<OnGroupBeforeCreateTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupCreate = (params: AssignBeforeGroupCreateParams) => {\n const { onGroupBeforeCreate, plugins, storageOperations } = params;\n\n onGroupBeforeCreate.subscribe(async params => {\n const { group } = params;\n\n if (group.slug && group.slug.trim()) {\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug: group.slug\n }\n });\n if (groups.length > 0) {\n throw new WebinyError(\n `Cms Group with the slug \"${group.slug}\" already exists.`,\n \"SLUG_ALREADY_EXISTS\"\n );\n }\n } else {\n const slug = toSlug(group.name);\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug\n }\n });\n\n if (groups.length === 0) {\n group.slug = slug;\n } else {\n group.slug = `${slug}-${generateAlphaNumericId(8)}`;\n }\n }\n\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n\n if (groupPlugin) {\n throw new Error(\n `Cannot create \"${group.slug}\" content model group because one is already registered via a plugin.`\n );\n }\n });\n};\n"],"mappings":";;;;;;;AAGA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAOO,MAAMI,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC,OAAO;IAAEC;EAAkB,CAAC,GAAGH,MAAM;EAElEC,mBAAmB,CAACG,SAAS,CAAC,MAAMJ,MAAM,IAAI;IAC1C,MAAM;MAAEK;IAAM,CAAC,GAAGL,MAAM;IAExB,IAAIK,KAAK,CAACC,IAAI,IAAID,KAAK,CAACC,IAAI,CAACC,IAAI,CAAC,CAAC,EAAE;MACjC,MAAMC,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MAAM;UACpBC,MAAM,EAAEP,KAAK,CAACO,MAAM;UACpBN,IAAI,EAAED,KAAK,CAACC;QAChB;MACJ,CAAC,CAAC;MACF,IAAIE,MAAM,CAACK,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,IAAIC,cAAW,CAChB,4BAA2BT,KAAK,CAACC,IAAK,mBAAkB,EACzD,qBACJ,CAAC;MACL;IACJ,CAAC,MAAM;MACH,MAAMA,IAAI,GAAG,IAAAS,cAAM,EAACV,KAAK,CAACW,IAAI,CAAC;MAC/B,MAAMR,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MAAM;UACpBC,MAAM,EAAEP,KAAK,CAACO,MAAM;UACpBN;QACJ;MACJ,CAAC,CAAC;MAEF,IAAIE,MAAM,CAACK,MAAM,KAAK,CAAC,EAAE;QACrBR,KAAK,CAACC,IAAI,GAAGA,IAAI;MACrB,CAAC,MAAM;QACHD,KAAK,CAACC,IAAI,GAAI,GAAEA,IAAK,IAAG,IAAAW,6BAAsB,EAAC,CAAC,CAAE,EAAC;MACvD;IACJ;IAEA,MAAMC,WAAW,GAAGhB,OAAO,CACtBiB,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC,CAC3CC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,iBAAiB,CAAClB,IAAI,KAAKD,KAAK,CAACC,IAAI,CAAC;IAE7D,IAAIY,WAAW,EAAE;MACb,MAAM,IAAIO,KAAK,CACV,kBAAiBpB,KAAK,CAACC,IAAK,uEACjC,CAAC;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAACoB,OAAA,CAAA3B,uBAAA,GAAAA,uBAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["assignBeforeGroupDelete","params","onGroupBeforeDelete","plugins","storageOperations","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error","models","list","where","tenant","locale","items","filter","model","id","length","WebinyError"],"sources":["beforeDelete.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { OnGroupBeforeDeleteTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport WebinyError from \"@webiny/error\";\n\ninterface AssignBeforeGroupDeleteParams {\n onGroupBeforeDelete: Topic<OnGroupBeforeDeleteTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupDelete = (params: AssignBeforeGroupDeleteParams) => {\n const { onGroupBeforeDelete, plugins, storageOperations } = params;\n\n onGroupBeforeDelete.subscribe(async params => {\n const { group } = params;\n\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n\n if (groupPlugin) {\n throw new Error(`Cms Groups defined via plugins cannot be deleted.`);\n }\n\n const models = await storageOperations.models.list({\n where: {\n tenant: group.tenant,\n locale: group.locale\n }\n });\n const items = models.filter(model => {\n return model.group.id === group.id;\n });\n if (items.length > 0) {\n throw new WebinyError(\n \"Cannot delete this group because there are models that belong to it.\",\n \"BEFORE_DELETE_ERROR\",\n {\n group\n }\n );\n }\n });\n};\n"],"mappings":";;;;;;;AAGA;AACA;AAOO,MAAMA,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC,OAAO;IAAEC;EAAkB,CAAC,GAAGH,MAAM;EAElEC,mBAAmB,CAACG,SAAS,CAAC,MAAMJ,MAAM,IAAI;IAC1C,MAAM;MAAEK;IAAM,CAAC,GAAGL,MAAM;IAExB,MAAMM,WAAW,GAAGJ,OAAO,CACtBK,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC,CAC3CC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,iBAAiB,CAACC,IAAI,KAAKR,KAAK,CAACQ,IAAI,CAAC;IAE7D,IAAIP,WAAW,EAAE;MACb,MAAM,IAAIQ,KAAK,CAAE,mDAAkD,CAAC;IACxE;IAEA,MAAMC,MAAM,GAAG,MAAMZ,iBAAiB,CAACY,MAAM,CAACC,IAAI,CAAC;MAC/CC,KAAK,EAAE;QACHC,MAAM,EAAEb,KAAK,CAACa,MAAM;QACpBC,MAAM,EAAEd,KAAK,CAACc;MAClB;IACJ,CAAC,CAAC;IACF,MAAMC,KAAK,GAAGL,MAAM,CAACM,MAAM,CAACC,KAAK,IAAI;MACjC,OAAOA,KAAK,CAACjB,KAAK,CAACkB,EAAE,KAAKlB,KAAK,CAACkB,EAAE;IACtC,CAAC,CAAC;IACF,IAAIH,KAAK,CAACI,MAAM,GAAG,CAAC,EAAE;MAClB,MAAM,IAAIC,cAAW,CACjB,sEAAsE,EACtE,qBAAqB,EACrB;QACIpB;MACJ,CAAC,CACJ;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["_CmsGroupPlugin","require","_error","_interopRequireDefault","assignBeforeGroupDelete","params","onGroupBeforeDelete","plugins","storageOperations","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error","models","list","where","tenant","locale","items","filter","model","id","length","WebinyError","exports"],"sources":["beforeDelete.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { OnGroupBeforeDeleteTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport WebinyError from \"@webiny/error\";\n\ninterface AssignBeforeGroupDeleteParams {\n onGroupBeforeDelete: Topic<OnGroupBeforeDeleteTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupDelete = (params: AssignBeforeGroupDeleteParams) => {\n const { onGroupBeforeDelete, plugins, storageOperations } = params;\n\n onGroupBeforeDelete.subscribe(async params => {\n const { group } = params;\n\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n\n if (groupPlugin) {\n throw new Error(`Cms Groups defined via plugins cannot be deleted.`);\n }\n\n const models = await storageOperations.models.list({\n where: {\n tenant: group.tenant,\n locale: group.locale\n }\n });\n const items = models.filter(model => {\n return model.group.id === group.id;\n });\n if (items.length > 0) {\n throw new WebinyError(\n \"Cannot delete this group because there are models that belong to it.\",\n \"BEFORE_DELETE_ERROR\",\n {\n group\n }\n );\n }\n });\n};\n"],"mappings":";;;;;;;AAGA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AAOO,MAAMG,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC,OAAO;IAAEC;EAAkB,CAAC,GAAGH,MAAM;EAElEC,mBAAmB,CAACG,SAAS,CAAC,MAAMJ,MAAM,IAAI;IAC1C,MAAM;MAAEK;IAAM,CAAC,GAAGL,MAAM;IAExB,MAAMM,WAAW,GAAGJ,OAAO,CACtBK,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC,CAC3CC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,iBAAiB,CAACC,IAAI,KAAKR,KAAK,CAACQ,IAAI,CAAC;IAE7D,IAAIP,WAAW,EAAE;MACb,MAAM,IAAIQ,KAAK,CAAE,mDAAkD,CAAC;IACxE;IAEA,MAAMC,MAAM,GAAG,MAAMZ,iBAAiB,CAACY,MAAM,CAACC,IAAI,CAAC;MAC/CC,KAAK,EAAE;QACHC,MAAM,EAAEb,KAAK,CAACa,MAAM;QACpBC,MAAM,EAAEd,KAAK,CAACc;MAClB;IACJ,CAAC,CAAC;IACF,MAAMC,KAAK,GAAGL,MAAM,CAACM,MAAM,CAACC,KAAK,IAAI;MACjC,OAAOA,KAAK,CAACjB,KAAK,CAACkB,EAAE,KAAKlB,KAAK,CAACkB,EAAE;IACtC,CAAC,CAAC;IACF,IAAIH,KAAK,CAACI,MAAM,GAAG,CAAC,EAAE;MAClB,MAAM,IAAIC,cAAW,CACjB,sEAAsE,EACtE,qBAAqB,EACrB;QACIpB;MACJ,CACJ,CAAC;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAACqB,OAAA,CAAA3B,uBAAA,GAAAA,uBAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["assignBeforeGroupUpdate","params","onGroupBeforeUpdate","plugins","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error"],"sources":["beforeUpdate.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { OnGroupBeforeUpdateTopicParams } from \"~/types\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface AssignBeforeGroupUpdateParams {\n onGroupBeforeUpdate: Topic<OnGroupBeforeUpdateTopicParams>;\n plugins: PluginsContainer;\n}\nexport const assignBeforeGroupUpdate = (params: AssignBeforeGroupUpdateParams) => {\n const { onGroupBeforeUpdate, plugins } = params;\n\n onGroupBeforeUpdate.subscribe(({ group }) => {\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n if (!groupPlugin) {\n return;\n }\n throw new Error(`Cms Groups defined via plugins cannot be updated.`);\n });\n};\n"],"mappings":";;;;;;AAEA;AAOO,MAAMA,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EAE/CC,mBAAmB,CAACE,SAAS,CAAC,CAAC;IAAEC;EAAM,CAAC,KAAK;IACzC,MAAMC,WAAW,GAAGH,OAAO,CACtBI,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC,CAC3CC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,iBAAiB,CAACC,IAAI,KAAKR,KAAK,CAACQ,IAAI,CAAC;IAC7D,IAAI,CAACP,WAAW,EAAE;MACd;IACJ;IACA,MAAM,IAAIQ,KAAK,CAAE,mDAAkD,CAAC;EACxE,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["_CmsGroupPlugin","require","assignBeforeGroupUpdate","params","onGroupBeforeUpdate","plugins","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error","exports"],"sources":["beforeUpdate.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { OnGroupBeforeUpdateTopicParams } from \"~/types\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface AssignBeforeGroupUpdateParams {\n onGroupBeforeUpdate: Topic<OnGroupBeforeUpdateTopicParams>;\n plugins: PluginsContainer;\n}\nexport const assignBeforeGroupUpdate = (params: AssignBeforeGroupUpdateParams) => {\n const { onGroupBeforeUpdate, plugins } = params;\n\n onGroupBeforeUpdate.subscribe(({ group }) => {\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n if (!groupPlugin) {\n return;\n }\n throw new Error(`Cms Groups defined via plugins cannot be updated.`);\n });\n};\n"],"mappings":";;;;;;AAEA,IAAAA,eAAA,GAAAC,OAAA;AAOO,MAAMC,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EAE/CC,mBAAmB,CAACE,SAAS,CAAC,CAAC;IAAEC;EAAM,CAAC,KAAK;IACzC,MAAMC,WAAW,GAAGH,OAAO,CACtBI,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC,CAC3CC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,iBAAiB,CAACC,IAAI,KAAKR,KAAK,CAACQ,IAAI,CAAC;IAC7D,IAAI,CAACP,WAAW,EAAE;MACd;IACJ;IACA,MAAM,IAAIQ,KAAK,CAAE,mDAAkD,CAAC;EACxE,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAAf,uBAAA,GAAAA,uBAAA"}
@@ -10,21 +10,21 @@ export declare const createGroupCreateValidation: () => zod.ZodObject<{
10
10
  slug: string;
11
11
  icon: string;
12
12
  }, {
13
- description?: string | undefined;
14
- slug?: string | undefined;
15
13
  name: string;
16
14
  icon: string;
15
+ slug?: string | undefined;
16
+ description?: string | undefined;
17
17
  }>;
18
18
  export declare const createGroupUpdateValidation: () => zod.ZodObject<{
19
19
  name: zod.ZodOptional<zod.ZodString>;
20
20
  description: zod.ZodOptional<zod.ZodString>;
21
21
  icon: zod.ZodOptional<zod.ZodString>;
22
22
  }, "strip", zod.ZodTypeAny, {
23
- description?: string | undefined;
24
23
  name?: string | undefined;
24
+ description?: string | undefined;
25
25
  icon?: string | undefined;
26
26
  }, {
27
- description?: string | undefined;
28
27
  name?: string | undefined;
28
+ description?: string | undefined;
29
29
  icon?: string | undefined;
30
30
  }>;
@@ -1 +1 @@
1
- {"version":3,"names":["str","zod","string","trim","name","max","description","optional","icon","min","createGroupCreateValidation","object","slug","transform","value","toSlug","createGroupUpdateValidation"],"sources":["validation.ts"],"sourcesContent":["import zod from \"zod\";\nimport { toSlug } from \"~/utils/toSlug\";\n\nconst str = zod.string().trim();\n\nconst name = str.max(100);\nconst description = str.max(255).optional();\nconst icon = str.min(1).max(255);\n\nexport const createGroupCreateValidation = () => {\n return zod.object({\n name: name.min(1),\n slug: str\n .max(100)\n .optional()\n .transform(value => {\n return value ? toSlug(value) : \"\";\n }),\n description: description.transform(value => {\n return value || \"\";\n }),\n icon\n });\n};\n\nexport const createGroupUpdateValidation = () => {\n return zod.object({\n name: name.optional(),\n description,\n icon: icon.optional()\n });\n};\n"],"mappings":";;;;;;;AAAA;AACA;AAEA,MAAMA,GAAG,GAAGC,YAAG,CAACC,MAAM,EAAE,CAACC,IAAI,EAAE;AAE/B,MAAMC,IAAI,GAAGJ,GAAG,CAACK,GAAG,CAAC,GAAG,CAAC;AACzB,MAAMC,WAAW,GAAGN,GAAG,CAACK,GAAG,CAAC,GAAG,CAAC,CAACE,QAAQ,EAAE;AAC3C,MAAMC,IAAI,GAAGR,GAAG,CAACS,GAAG,CAAC,CAAC,CAAC,CAACJ,GAAG,CAAC,GAAG,CAAC;AAEzB,MAAMK,2BAA2B,GAAG,MAAM;EAC7C,OAAOT,YAAG,CAACU,MAAM,CAAC;IACdP,IAAI,EAAEA,IAAI,CAACK,GAAG,CAAC,CAAC,CAAC;IACjBG,IAAI,EAAEZ,GAAG,CACJK,GAAG,CAAC,GAAG,CAAC,CACRE,QAAQ,EAAE,CACVM,SAAS,CAACC,KAAK,IAAI;MAChB,OAAOA,KAAK,GAAG,IAAAC,cAAM,EAACD,KAAK,CAAC,GAAG,EAAE;IACrC,CAAC,CAAC;IACNR,WAAW,EAAEA,WAAW,CAACO,SAAS,CAACC,KAAK,IAAI;MACxC,OAAOA,KAAK,IAAI,EAAE;IACtB,CAAC,CAAC;IACFN;EACJ,CAAC,CAAC;AACN,CAAC;AAAC;AAEK,MAAMQ,2BAA2B,GAAG,MAAM;EAC7C,OAAOf,YAAG,CAACU,MAAM,CAAC;IACdP,IAAI,EAAEA,IAAI,CAACG,QAAQ,EAAE;IACrBD,WAAW;IACXE,IAAI,EAAEA,IAAI,CAACD,QAAQ;EACvB,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["_zod","_interopRequireDefault","require","_toSlug","str","zod","string","trim","name","max","description","optional","icon","min","createGroupCreateValidation","object","slug","transform","value","toSlug","exports","createGroupUpdateValidation"],"sources":["validation.ts"],"sourcesContent":["import zod from \"zod\";\nimport { toSlug } from \"~/utils/toSlug\";\n\nconst str = zod.string().trim();\n\nconst name = str.max(100);\nconst description = str.max(255).optional();\nconst icon = str.min(1).max(255);\n\nexport const createGroupCreateValidation = () => {\n return zod.object({\n name: name.min(1),\n slug: str\n .max(100)\n .optional()\n .transform(value => {\n return value ? toSlug(value) : \"\";\n }),\n description: description.transform(value => {\n return value || \"\";\n }),\n icon\n });\n};\n\nexport const createGroupUpdateValidation = () => {\n return zod.object({\n name: name.optional(),\n description,\n icon: icon.optional()\n });\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,MAAME,GAAG,GAAGC,YAAG,CAACC,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC;AAE/B,MAAMC,IAAI,GAAGJ,GAAG,CAACK,GAAG,CAAC,GAAG,CAAC;AACzB,MAAMC,WAAW,GAAGN,GAAG,CAACK,GAAG,CAAC,GAAG,CAAC,CAACE,QAAQ,CAAC,CAAC;AAC3C,MAAMC,IAAI,GAAGR,GAAG,CAACS,GAAG,CAAC,CAAC,CAAC,CAACJ,GAAG,CAAC,GAAG,CAAC;AAEzB,MAAMK,2BAA2B,GAAGA,CAAA,KAAM;EAC7C,OAAOT,YAAG,CAACU,MAAM,CAAC;IACdP,IAAI,EAAEA,IAAI,CAACK,GAAG,CAAC,CAAC,CAAC;IACjBG,IAAI,EAAEZ,GAAG,CACJK,GAAG,CAAC,GAAG,CAAC,CACRE,QAAQ,CAAC,CAAC,CACVM,SAAS,CAACC,KAAK,IAAI;MAChB,OAAOA,KAAK,GAAG,IAAAC,cAAM,EAACD,KAAK,CAAC,GAAG,EAAE;IACrC,CAAC,CAAC;IACNR,WAAW,EAAEA,WAAW,CAACO,SAAS,CAACC,KAAK,IAAI;MACxC,OAAOA,KAAK,IAAI,EAAE;IACtB,CAAC,CAAC;IACFN;EACJ,CAAC,CAAC;AACN,CAAC;AAACQ,OAAA,CAAAN,2BAAA,GAAAA,2BAAA;AAEK,MAAMO,2BAA2B,GAAGA,CAAA,KAAM;EAC7C,OAAOhB,YAAG,CAACU,MAAM,CAAC;IACdP,IAAI,EAAEA,IAAI,CAACG,QAAQ,CAAC,CAAC;IACrBD,WAAW;IACXE,IAAI,EAAEA,IAAI,CAACD,QAAQ,CAAC;EACxB,CAAC,CAAC;AACN,CAAC;AAACS,OAAA,CAAAC,2BAAA,GAAAA,2BAAA"}
@@ -2,10 +2,12 @@ import { CmsGroupContext, CmsContext, HeadlessCmsStorageOperations } from "../ty
2
2
  import { Tenant } from "@webiny/api-tenancy/types";
3
3
  import { I18NLocale } from "@webiny/api-i18n/types";
4
4
  import { SecurityIdentity } from "@webiny/api-security/types";
5
+ import { ModelGroupsPermissions } from "../utils/permissions/ModelGroupsPermissions";
5
6
  export interface CreateModelGroupsCrudParams {
6
7
  getTenant: () => Tenant;
7
8
  getLocale: () => I18NLocale;
8
9
  storageOperations: HeadlessCmsStorageOperations;
10
+ modelGroupsPermissions: ModelGroupsPermissions;
9
11
  context: CmsContext;
10
12
  getIdentity: () => SecurityIdentity;
11
13
  }
@@ -14,17 +14,16 @@ var _pubsub = require("@webiny/pubsub");
14
14
  var _beforeUpdate = require("./contentModelGroup/beforeUpdate");
15
15
  var _beforeCreate = require("./contentModelGroup/beforeCreate");
16
16
  var _beforeDelete = require("./contentModelGroup/beforeDelete");
17
- var _permissions = require("../utils/permissions");
18
- var _ownership = require("../utils/ownership");
19
- var _access = require("../utils/access");
20
17
  var _validation = require("./contentModelGroup/validation");
21
18
  var _utils = require("@webiny/utils");
19
+ var _filterAsync = require("../utils/filterAsync");
22
20
  const createModelGroupsCrud = params => {
23
21
  const {
24
22
  getTenant,
25
23
  getIdentity,
26
24
  getLocale,
27
25
  storageOperations,
26
+ modelGroupsPermissions,
28
27
  context
29
28
  } = params;
30
29
  const dataLoaders = {
@@ -77,11 +76,6 @@ const createModelGroupsCrud = params => {
77
76
  });
78
77
  });
79
78
  };
80
- const checkPermissions = check => {
81
- return (0, _permissions.checkPermissions)(context, "cms.contentModelGroup", {
82
- rwd: check
83
- });
84
- };
85
79
  const getGroupViaDataLoader = async id => {
86
80
  const groups = await dataLoaders.listGroups.load("listGroups");
87
81
  const group = groups.find(g => g.id === id);
@@ -143,10 +137,17 @@ const createModelGroupsCrud = params => {
143
137
  * CRUD Methods
144
138
  */
145
139
  const getGroup = async id => {
146
- const permission = await checkPermissions("r");
140
+ await modelGroupsPermissions.ensure({
141
+ rwd: "r"
142
+ });
147
143
  const group = await getGroupViaDataLoader(id);
148
- (0, _ownership.checkOwnership)(context, permission, group);
149
- (0, _access.validateGroupAccess)(context, permission, group);
144
+ await modelGroupsPermissions.ensure({
145
+ owns: group.createdBy
146
+ });
147
+ await modelGroupsPermissions.ensureCanAccessGroup({
148
+ group,
149
+ locale: getLocale().code
150
+ });
150
151
  return group;
151
152
  };
152
153
  const listGroups = async params => {
@@ -157,22 +158,34 @@ const createModelGroupsCrud = params => {
157
158
  tenant,
158
159
  locale
159
160
  } = where || {};
160
- const permission = await checkPermissions("r");
161
+ await modelGroupsPermissions.ensure({
162
+ rwd: "r"
163
+ });
161
164
  const response = await listGroupsViaDataLoader((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params || {}), {}, {
162
165
  where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where || {}), {}, {
163
166
  tenant: tenant || getTenant().id,
164
167
  locale: locale || getLocale().code
165
168
  })
166
169
  }));
167
- return response.filter(group => {
168
- if (!(0, _ownership.validateOwnership)(context, permission, group)) {
170
+ return (0, _filterAsync.filterAsync)(response, async group => {
171
+ const ownsGroup = await modelGroupsPermissions.ensure({
172
+ owns: group.createdBy
173
+ }, {
174
+ throw: false
175
+ });
176
+ if (!ownsGroup) {
169
177
  return false;
170
178
  }
171
- return (0, _access.validateGroupAccess)(context, permission, group);
179
+ return await modelGroupsPermissions.canAccessGroup({
180
+ group,
181
+ locale: getLocale().code
182
+ });
172
183
  });
173
184
  };
174
185
  const createGroup = async input => {
175
- await checkPermissions("w");
186
+ await modelGroupsPermissions.ensure({
187
+ rwd: "w"
188
+ });
176
189
  const result = await (0, _validation.createGroupCreateValidation)().safeParseAsync(input);
177
190
  if (!result.success) {
178
191
  throw (0, _utils.createZodError)(result.error);
@@ -218,9 +231,13 @@ const createModelGroupsCrud = params => {
218
231
  }
219
232
  };
220
233
  const updateGroup = async (id, input) => {
221
- const permission = await checkPermissions("w");
234
+ await modelGroupsPermissions.ensure({
235
+ rwd: "w"
236
+ });
222
237
  const original = await getGroupViaDataLoader(id);
223
- (0, _ownership.checkOwnership)(context, permission, original);
238
+ await modelGroupsPermissions.ensure({
239
+ owns: original.createdBy
240
+ });
224
241
  const result = await (0, _validation.createGroupUpdateValidation)().safeParseAsync(input);
225
242
  if (!result.success) {
226
243
  throw (0, _utils.createZodError)(result.error);
@@ -268,9 +285,13 @@ const createModelGroupsCrud = params => {
268
285
  }
269
286
  };
270
287
  const deleteGroup = async id => {
271
- const permission = await checkPermissions("d");
288
+ await modelGroupsPermissions.ensure({
289
+ rwd: "d"
290
+ });
272
291
  const group = await getGroupViaDataLoader(id);
273
- (0, _ownership.checkOwnership)(context, permission, group);
292
+ await modelGroupsPermissions.ensure({
293
+ owns: group.createdBy
294
+ });
274
295
  try {
275
296
  await onGroupBeforeDelete.publish({
276
297
  group