@webiny/api-headless-cms 5.37.8 → 5.38.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 (308) hide show
  1. package/constants.js +3 -1
  2. package/context.js +10 -17
  3. package/context.js.map +1 -1
  4. package/crud/contentEntry/afterDelete.js +3 -1
  5. package/crud/contentEntry/beforeCreate.js +3 -1
  6. package/crud/contentEntry/beforeUpdate.js +3 -1
  7. package/crud/contentEntry/entryDataValidation.d.ts +4 -2
  8. package/crud/contentEntry/entryDataValidation.js +220 -47
  9. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  10. package/crud/contentEntry/markLockedFields.js +3 -1
  11. package/crud/contentEntry/referenceFieldsMapping.d.ts +6 -0
  12. package/crud/contentEntry/referenceFieldsMapping.js +118 -97
  13. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  14. package/crud/contentEntry/searchableFields.js +5 -3
  15. package/crud/contentEntry/searchableFields.js.map +1 -1
  16. package/crud/contentEntry.crud.js +68 -64
  17. package/crud/contentEntry.crud.js.map +1 -1
  18. package/crud/contentModel/beforeCreate.d.ts +1 -1
  19. package/crud/contentModel/beforeCreate.js +11 -9
  20. package/crud/contentModel/beforeCreate.js.map +1 -1
  21. package/crud/contentModel/beforeDelete.js +3 -1
  22. package/crud/contentModel/beforeUpdate.d.ts +1 -1
  23. package/crud/contentModel/beforeUpdate.js +3 -6
  24. package/crud/contentModel/beforeUpdate.js.map +1 -1
  25. package/crud/contentModel/compatibility/modelApiName.js +3 -1
  26. package/crud/contentModel/contentModelManagerFactory.js +3 -1
  27. package/crud/contentModel/createFieldStorageId.js +3 -1
  28. package/crud/contentModel/defaultFields.js +3 -1
  29. package/crud/contentModel/ensureTypeTag.d.ts +5 -0
  30. package/crud/contentModel/ensureTypeTag.js +21 -0
  31. package/crud/contentModel/ensureTypeTag.js.map +1 -0
  32. package/crud/contentModel/fields/descriptionField.js +3 -1
  33. package/crud/contentModel/fields/imageField.js +3 -1
  34. package/crud/contentModel/fields/titleField.js +3 -1
  35. package/crud/contentModel/listModelsFromDatabase.d.ts +10 -0
  36. package/crud/contentModel/listModelsFromDatabase.js +39 -0
  37. package/crud/contentModel/listModelsFromDatabase.js.map +1 -0
  38. package/crud/contentModel/validate/endingAllowed.js +3 -1
  39. package/crud/contentModel/validate/isModelEndingAllowed.js +4 -2
  40. package/crud/contentModel/validate/isModelEndingAllowed.js.map +1 -1
  41. package/crud/contentModel/validate/modelId.js +3 -1
  42. package/crud/contentModel/validate/pluralApiName.js +3 -1
  43. package/crud/contentModel/validate/singularApiName.js +3 -1
  44. package/crud/contentModel/validateModel.js +3 -1
  45. package/crud/contentModel/validateModel.js.map +1 -1
  46. package/crud/contentModel/validateModelFields.js +3 -1
  47. package/crud/contentModel/validation.d.ts +339 -58
  48. package/crud/contentModel/validation.js +71 -11
  49. package/crud/contentModel/validation.js.map +1 -1
  50. package/crud/contentModel.crud.js +80 -156
  51. package/crud/contentModel.crud.js.map +1 -1
  52. package/crud/contentModelGroup/beforeCreate.d.ts +1 -1
  53. package/crud/contentModelGroup/beforeCreate.js +15 -1
  54. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  55. package/crud/contentModelGroup/beforeDelete.js +3 -1
  56. package/crud/contentModelGroup/beforeUpdate.js +3 -1
  57. package/crud/contentModelGroup/listGroupsFromDatabase.d.ts +8 -0
  58. package/crud/contentModelGroup/listGroupsFromDatabase.js +22 -0
  59. package/crud/contentModelGroup/listGroupsFromDatabase.js.map +1 -0
  60. package/crud/contentModelGroup/validation.d.ts +9 -6
  61. package/crud/contentModelGroup/validation.js +5 -2
  62. package/crud/contentModelGroup/validation.js.map +1 -1
  63. package/crud/contentModelGroup.crud.js +89 -110
  64. package/crud/contentModelGroup.crud.js.map +1 -1
  65. package/crud/system.crud.js +4 -7
  66. package/crud/system.crud.js.map +1 -1
  67. package/export/crud/exporting.d.ts +3 -0
  68. package/export/crud/exporting.js +50 -0
  69. package/export/crud/exporting.js.map +1 -0
  70. package/export/crud/importing.d.ts +3 -0
  71. package/export/crud/importing.js +79 -0
  72. package/export/crud/importing.js.map +1 -0
  73. package/export/crud/imports/importData.d.ts +14 -0
  74. package/export/crud/imports/importData.js +25 -0
  75. package/export/crud/imports/importData.js.map +1 -0
  76. package/export/crud/imports/importGroups.d.ts +8 -0
  77. package/export/crud/imports/importGroups.js +99 -0
  78. package/export/crud/imports/importGroups.js.map +1 -0
  79. package/export/crud/imports/importModels.d.ts +8 -0
  80. package/export/crud/imports/importModels.js +134 -0
  81. package/export/crud/imports/importModels.js.map +1 -0
  82. package/export/crud/imports/validateGroups.d.ts +8 -0
  83. package/export/crud/imports/validateGroups.js +106 -0
  84. package/export/crud/imports/validateGroups.js.map +1 -0
  85. package/export/crud/imports/validateInput.d.ts +19 -0
  86. package/export/crud/imports/validateInput.js +49 -0
  87. package/export/crud/imports/validateInput.js.map +1 -0
  88. package/export/crud/imports/validateModels.d.ts +9 -0
  89. package/export/crud/imports/validateModels.js +204 -0
  90. package/export/crud/imports/validateModels.js.map +1 -0
  91. package/export/crud/index.d.ts +4 -0
  92. package/export/crud/index.js +15 -0
  93. package/export/crud/index.js.map +1 -0
  94. package/export/crud/sanitize.d.ts +4 -0
  95. package/export/crud/sanitize.js +35 -0
  96. package/export/crud/sanitize.js.map +1 -0
  97. package/export/graphql/index.d.ts +3 -0
  98. package/export/graphql/index.js +188 -0
  99. package/export/graphql/index.js.map +1 -0
  100. package/export/index.d.ts +2 -0
  101. package/export/index.js +29 -0
  102. package/export/index.js.map +1 -0
  103. package/export/types.d.ts +111 -0
  104. package/export/types.js +22 -0
  105. package/export/types.js.map +1 -0
  106. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +3 -1
  107. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +3 -1
  108. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +3 -1
  109. package/fieldConverters/index.js +3 -1
  110. package/graphql/buildSchemaPlugins.js +3 -1
  111. package/graphql/checkEndpointAccess.js +3 -1
  112. package/graphql/createExecutableSchema.js +3 -1
  113. package/graphql/createRequestBody.js +3 -1
  114. package/graphql/formatErrorPayload.js +3 -1
  115. package/graphql/generateSchema.js +3 -1
  116. package/graphql/getSchema.d.ts +0 -1
  117. package/graphql/getSchema.js +23 -13
  118. package/graphql/getSchema.js.map +1 -1
  119. package/graphql/graphQLHandlerFactory.js +3 -1
  120. package/graphql/handleRequest.js +3 -5
  121. package/graphql/handleRequest.js.map +1 -1
  122. package/graphql/index.d.ts +1 -1
  123. package/graphql/index.js +4 -2
  124. package/graphql/index.js.map +1 -1
  125. package/graphql/schema/baseContentSchema.js +3 -1
  126. package/graphql/schema/baseSchema.d.ts +2 -3
  127. package/graphql/schema/baseSchema.js +58 -2
  128. package/graphql/schema/baseSchema.js.map +1 -1
  129. package/graphql/schema/contentEntries.js +4 -2
  130. package/graphql/schema/contentEntries.js.map +1 -1
  131. package/graphql/schema/contentModelGroups.js +4 -1
  132. package/graphql/schema/contentModelGroups.js.map +1 -1
  133. package/graphql/schema/contentModels.js +5 -5
  134. package/graphql/schema/contentModels.js.map +1 -1
  135. package/graphql/schema/createFieldResolvers.js +3 -1
  136. package/graphql/schema/createFieldTypePluginRecords.js +3 -1
  137. package/graphql/schema/createManageResolvers.js +7 -1
  138. package/graphql/schema/createManageResolvers.js.map +1 -1
  139. package/graphql/schema/createManageSDL.js +8 -4
  140. package/graphql/schema/createManageSDL.js.map +1 -1
  141. package/graphql/schema/createPreviewResolvers.js +3 -1
  142. package/graphql/schema/createReadResolvers.js +3 -1
  143. package/graphql/schema/createReadSDL.js +3 -1
  144. package/graphql/schema/resolvers/commonFieldResolvers.js +3 -1
  145. package/graphql/schema/resolvers/manage/resolveCreate.d.ts +2 -1
  146. package/graphql/schema/resolvers/manage/resolveCreate.js +4 -2
  147. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  148. package/graphql/schema/resolvers/manage/resolveCreateFrom.d.ts +2 -1
  149. package/graphql/schema/resolvers/manage/resolveCreateFrom.js +4 -2
  150. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  151. package/graphql/schema/resolvers/manage/resolveDelete.js +3 -1
  152. package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js +3 -1
  153. package/graphql/schema/resolvers/manage/resolveGet.js +3 -1
  154. package/graphql/schema/resolvers/manage/resolveGetByIds.js +3 -1
  155. package/graphql/schema/resolvers/manage/resolveGetRevisions.js +3 -1
  156. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +3 -1
  157. package/graphql/schema/resolvers/manage/resolveList.js +3 -1
  158. package/graphql/schema/resolvers/manage/resolveMove.js +3 -1
  159. package/graphql/schema/resolvers/manage/resolvePublish.js +3 -1
  160. package/graphql/schema/resolvers/manage/resolveRepublish.js +3 -1
  161. package/graphql/schema/resolvers/manage/resolveUnpublish.js +3 -1
  162. package/graphql/schema/resolvers/manage/resolveUpdate.d.ts +2 -1
  163. package/graphql/schema/resolvers/manage/resolveUpdate.js +4 -2
  164. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  165. package/graphql/schema/resolvers/manage/resolveValidate.d.ts +8 -0
  166. package/graphql/schema/resolvers/manage/resolveValidate.js +20 -0
  167. package/graphql/schema/resolvers/manage/resolveValidate.js.map +1 -0
  168. package/graphql/schema/resolvers/preview/resolveGet.js +3 -1
  169. package/graphql/schema/resolvers/preview/resolveList.js +3 -1
  170. package/graphql/schema/resolvers/read/resolveGet.js +3 -1
  171. package/graphql/schema/resolvers/read/resolveList.js +3 -1
  172. package/graphql/schema/schemaPlugins.js +3 -1
  173. package/graphql/system.js +3 -1
  174. package/graphqlFields/boolean.js +3 -1
  175. package/graphqlFields/datetime.js +4 -3
  176. package/graphqlFields/datetime.js.map +1 -1
  177. package/graphqlFields/dynamicZone/dynamicZoneField.js +29 -6
  178. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
  179. package/graphqlFields/dynamicZone/dynamicZoneStorage.js +3 -1
  180. package/graphqlFields/dynamicZone/index.js +3 -1
  181. package/graphqlFields/file.js +3 -1
  182. package/graphqlFields/helpers.d.ts +0 -1
  183. package/graphqlFields/helpers.js +6 -18
  184. package/graphqlFields/helpers.js.map +1 -1
  185. package/graphqlFields/index.js +3 -1
  186. package/graphqlFields/longText.js +14 -3
  187. package/graphqlFields/longText.js.map +1 -1
  188. package/graphqlFields/number.js +3 -1
  189. package/graphqlFields/object.js +5 -17
  190. package/graphqlFields/object.js.map +1 -1
  191. package/graphqlFields/ref.js +4 -2
  192. package/graphqlFields/ref.js.map +1 -1
  193. package/graphqlFields/richText.js +3 -1
  194. package/graphqlFields/text.js +3 -1
  195. package/index.d.ts +1 -1
  196. package/index.js +5 -2
  197. package/index.js.map +1 -1
  198. package/modelManager/DefaultCmsModelManager.js +3 -1
  199. package/modelManager/index.js +3 -1
  200. package/package.json +18 -19
  201. package/parameters/context.js +3 -1
  202. package/parameters/header.js +3 -1
  203. package/parameters/index.js +3 -1
  204. package/parameters/manual.js +3 -1
  205. package/parameters/path.js +3 -1
  206. package/plugins/CmsGraphQLSchemaPlugin.js +3 -1
  207. package/plugins/CmsGraphQLSchemaSorterPlugin.js +3 -1
  208. package/plugins/CmsGroupPlugin.d.ts +6 -3
  209. package/plugins/CmsGroupPlugin.js +7 -2
  210. package/plugins/CmsGroupPlugin.js.map +1 -1
  211. package/plugins/CmsModelFieldConverterPlugin.js +3 -1
  212. package/plugins/CmsModelPlugin.d.ts +2 -2
  213. package/plugins/CmsModelPlugin.js +6 -2
  214. package/plugins/CmsModelPlugin.js.map +1 -1
  215. package/plugins/CmsParametersPlugin.js +3 -1
  216. package/plugins/StorageOperationsCmsModelPlugin.js +3 -1
  217. package/plugins/StorageTransformPlugin.js +3 -1
  218. package/plugins/index.js +3 -1
  219. package/storage/default.js +3 -1
  220. package/storage/object.js +3 -1
  221. package/types.d.ts +62 -230
  222. package/types.js +3 -17
  223. package/types.js.map +1 -1
  224. package/utils/access.js +3 -1
  225. package/utils/caching/Cache.d.ts +2 -0
  226. package/utils/caching/Cache.js +53 -0
  227. package/utils/caching/Cache.js.map +1 -0
  228. package/utils/caching/CacheKey.d.ts +3 -0
  229. package/utils/caching/CacheKey.js +41 -0
  230. package/utils/caching/CacheKey.js.map +1 -0
  231. package/utils/caching/index.d.ts +2 -0
  232. package/utils/caching/index.js +29 -0
  233. package/utils/caching/index.js.map +1 -0
  234. package/utils/caching/types.d.ts +9 -0
  235. package/utils/caching/types.js +7 -0
  236. package/utils/caching/types.js.map +1 -0
  237. package/utils/converters/Converter.js +3 -1
  238. package/utils/converters/ConverterCollection.js +3 -1
  239. package/utils/converters/valueKeyStorageConverter.js +3 -1
  240. package/utils/createTypeFromFields.js +6 -1
  241. package/utils/createTypeFromFields.js.map +1 -1
  242. package/utils/createTypeName.js +3 -1
  243. package/utils/entryStorage.js +3 -1
  244. package/utils/filterAsync.js +3 -1
  245. package/utils/getBaseFieldType.js +3 -1
  246. package/utils/getEntryDescription.js +3 -1
  247. package/utils/getEntryImage.js +3 -1
  248. package/utils/getEntryTitle.js +3 -1
  249. package/utils/getSchemaFromFieldPlugins.js +3 -1
  250. package/utils/incrementEntryIdVersion.js +3 -1
  251. package/utils/index.d.ts +1 -0
  252. package/utils/index.js +18 -0
  253. package/utils/index.js.map +1 -0
  254. package/utils/permissions/EntriesPermissions.js +3 -1
  255. package/utils/permissions/ModelGroupsPermissions.js +3 -1
  256. package/utils/permissions/ModelsPermissions.js +3 -1
  257. package/utils/renderFields.js +3 -1
  258. package/utils/renderGetFilterFields.js +3 -1
  259. package/utils/renderInputFields.js +3 -1
  260. package/utils/renderListFilterFields.js +3 -1
  261. package/utils/renderSortEnum.js +3 -1
  262. package/utils/toSlug.js +3 -1
  263. package/validators/dateGte.js +3 -1
  264. package/validators/dateLte.js +3 -1
  265. package/validators/gte.js +3 -1
  266. package/validators/in.js +3 -1
  267. package/validators/index.js +4 -3
  268. package/validators/index.js.map +1 -1
  269. package/validators/lte.js +3 -1
  270. package/validators/maxLength.js +3 -1
  271. package/validators/minLength.js +3 -1
  272. package/validators/pattern.js +3 -1
  273. package/validators/patternPlugins/email.js +3 -1
  274. package/validators/patternPlugins/index.js +3 -1
  275. package/validators/patternPlugins/lowerCase.js +3 -1
  276. package/validators/patternPlugins/lowerCaseSpace.js +3 -1
  277. package/validators/patternPlugins/upperCase.js +3 -1
  278. package/validators/patternPlugins/upperCaseSpace.js +3 -1
  279. package/validators/patternPlugins/url.js +3 -1
  280. package/validators/required.js +3 -1
  281. package/validators/timeGte.js +3 -1
  282. package/validators/timeLte.js +3 -1
  283. package/validators/unique.js +4 -2
  284. package/validators/unique.js.map +1 -1
  285. package/crud/contentModel/afterCreate.d.ts +0 -8
  286. package/crud/contentModel/afterCreate.js +0 -16
  287. package/crud/contentModel/afterCreate.js.map +0 -1
  288. package/crud/contentModel/afterCreateFrom.d.ts +0 -8
  289. package/crud/contentModel/afterCreateFrom.js +0 -16
  290. package/crud/contentModel/afterCreateFrom.js.map +0 -1
  291. package/crud/contentModel/afterDelete.d.ts +0 -8
  292. package/crud/contentModel/afterDelete.js +0 -16
  293. package/crud/contentModel/afterDelete.js.map +0 -1
  294. package/crud/contentModel/afterUpdate.d.ts +0 -8
  295. package/crud/contentModel/afterUpdate.js +0 -16
  296. package/crud/contentModel/afterUpdate.js.map +0 -1
  297. package/crud/contentModel/validateLayout.d.ts +0 -2
  298. package/crud/contentModel/validateLayout.js +0 -28
  299. package/crud/contentModel/validateLayout.js.map +0 -1
  300. package/crud/settings.crud.d.ts +0 -12
  301. package/crud/settings.crud.js +0 -62
  302. package/crud/settings.crud.js.map +0 -1
  303. package/utils/permissions/SettingsPermissions.d.ts +0 -4
  304. package/utils/permissions/SettingsPermissions.js +0 -9
  305. package/utils/permissions/SettingsPermissions.js.map +0 -1
  306. package/validators/dynamicZone.d.ts +0 -2
  307. package/validators/dynamicZone.js +0 -20
  308. package/validators/dynamicZone.js.map +0 -1
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.createModelUpdateValidation = exports.createModelCreateValidation = exports.createModelCreateFromValidation = void 0;
7
+ exports.createModelUpdateValidation = exports.createModelImportValidation = exports.createModelCreateValidation = exports.createModelCreateFromValidation = void 0;
8
8
  var _zod = _interopRequireDefault(require("zod"));
9
9
  var _upperFirst = _interopRequireDefault(require("lodash/upperFirst"));
10
10
  var _camelCase = _interopRequireDefault(require("lodash/camelCase"));
@@ -71,7 +71,10 @@ const fieldSchema = _zod.default.object({
71
71
  return value || {};
72
72
  }).default({})
73
73
  });
74
- const refinementValidation = value => {
74
+ const apiNameRefinementValidation = value => {
75
+ if (value.match(/^[A-Z]/) === null) {
76
+ return false;
77
+ }
75
78
  return value === (0, _upperFirst.default)((0, _camelCase.default)(value));
76
79
  };
77
80
  const refinementSingularValidationMessage = value => {
@@ -84,12 +87,43 @@ const refinementPluralValidationMessage = value => {
84
87
  message: `The Plural API Name value "${value || "undefined"}" is not valid. It must in Upper First + Camel Cased form. For example: "ArticleCategories" or "CarMakes".`
85
88
  };
86
89
  };
90
+ const refinementModelIdValidation = value => {
91
+ if (!value) {
92
+ return true;
93
+ } else if (value.match(/^[a-zA-Z]/) === null) {
94
+ return false;
95
+ }
96
+ const camelCasedValue = (0, _camelCase.default)(value).toLowerCase();
97
+ return camelCasedValue === value.toLowerCase();
98
+ };
99
+ const refinementModelIdValidationMessage = value => {
100
+ if (!value) {
101
+ return {};
102
+ } else if (value.match(/^[a-zA-Z]/) === null) {
103
+ return {
104
+ message: `The modelId "${value}" is not valid. It must start with a A-Z or a-z.`
105
+ };
106
+ }
107
+ return {
108
+ message: `The modelId "${value}" is not valid.`
109
+ };
110
+ };
111
+ const modelIdTransformation = value => {
112
+ if (!value) {
113
+ return value;
114
+ }
115
+ const camelCasedValue = (0, _camelCase.default)(value);
116
+ if (camelCasedValue.toLowerCase() === value.toLowerCase()) {
117
+ return value;
118
+ }
119
+ return camelCasedValue;
120
+ };
87
121
  const createModelCreateValidation = () => {
88
122
  return _zod.default.object({
89
123
  name: shortString,
90
- modelId: optionalShortString,
91
- singularApiName: shortString.refine(refinementValidation, refinementSingularValidationMessage),
92
- pluralApiName: shortString.refine(refinementValidation, refinementPluralValidationMessage),
124
+ modelId: optionalShortString.transform(modelIdTransformation),
125
+ singularApiName: shortString.min(1).refine(apiNameRefinementValidation, refinementSingularValidationMessage),
126
+ pluralApiName: shortString.min(1).refine(apiNameRefinementValidation, refinementPluralValidationMessage),
93
127
  description: optionalNullishShortString,
94
128
  group: shortString,
95
129
  icon: optionalNullishShortString,
@@ -103,12 +137,36 @@ const createModelCreateValidation = () => {
103
137
  });
104
138
  };
105
139
  exports.createModelCreateValidation = createModelCreateValidation;
140
+ const createModelImportValidation = () => {
141
+ return _zod.default.object({
142
+ name: shortString.min(1).refine(value => {
143
+ return value.match(/[a-zA-Z]/) !== null;
144
+ }, value => {
145
+ return {
146
+ message: `The name "${value}" is not valid.`
147
+ };
148
+ }),
149
+ modelId: shortString.min(1).refine(refinementModelIdValidation, refinementModelIdValidationMessage).transform(modelIdTransformation),
150
+ singularApiName: shortString.min(1).refine(apiNameRefinementValidation, refinementSingularValidationMessage),
151
+ pluralApiName: shortString.min(1).refine(apiNameRefinementValidation, refinementPluralValidationMessage),
152
+ description: optionalNullishShortString,
153
+ group: shortString,
154
+ icon: optionalNullishShortString,
155
+ fields: _zod.default.array(fieldSchema).min(1),
156
+ layout: _zod.default.array(_zod.default.array(shortString)).min(1),
157
+ tags: _zod.default.array(shortString).optional(),
158
+ titleFieldId: shortString.nullish(),
159
+ descriptionFieldId: optionalShortString.nullish(),
160
+ imageFieldId: optionalShortString.nullish()
161
+ });
162
+ };
163
+ exports.createModelImportValidation = createModelImportValidation;
106
164
  const createModelCreateFromValidation = () => {
107
165
  return _zod.default.object({
108
166
  name: shortString,
109
- modelId: optionalShortString,
110
- singularApiName: shortString.refine(refinementValidation, refinementSingularValidationMessage),
111
- pluralApiName: shortString.refine(refinementValidation, refinementPluralValidationMessage),
167
+ modelId: optionalShortString.transform(modelIdTransformation),
168
+ singularApiName: shortString.refine(apiNameRefinementValidation, refinementSingularValidationMessage),
169
+ pluralApiName: shortString.refine(apiNameRefinementValidation, refinementPluralValidationMessage),
112
170
  description: optionalNullishShortString,
113
171
  group: shortString,
114
172
  icon: optionalNullishShortString,
@@ -123,13 +181,13 @@ const createModelUpdateValidation = () => {
123
181
  if (!value) {
124
182
  return true;
125
183
  }
126
- return refinementValidation(value);
184
+ return apiNameRefinementValidation(value);
127
185
  }, refinementSingularValidationMessage),
128
186
  pluralApiName: optionalShortString.refine(value => {
129
187
  if (!value) {
130
188
  return true;
131
189
  }
132
- return refinementValidation(value);
190
+ return apiNameRefinementValidation(value);
133
191
  }, refinementPluralValidationMessage),
134
192
  description: optionalNullishShortString,
135
193
  group: optionalShortString,
@@ -142,4 +200,6 @@ const createModelUpdateValidation = () => {
142
200
  tags: _zod.default.array(shortString).optional()
143
201
  });
144
202
  };
145
- exports.createModelUpdateValidation = createModelUpdateValidation;
203
+ exports.createModelUpdateValidation = createModelUpdateValidation;
204
+
205
+ //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
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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"}
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","apiNameRefinementValidation","match","upperFirst","camelCase","refinementSingularValidationMessage","refinementPluralValidationMessage","refinementModelIdValidation","camelCasedValue","toLowerCase","refinementModelIdValidationMessage","modelIdTransformation","createModelCreateValidation","modelId","singularApiName","min","refine","pluralApiName","description","group","icon","fields","layout","titleFieldId","descriptionFieldId","imageFieldId","defaultFields","exports","createModelImportValidation","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 apiNameRefinementValidation = (value: string): boolean => {\n if (value.match(/^[A-Z]/) === null) {\n return false;\n }\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\nconst refinementModelIdValidation = (value?: string) => {\n if (!value) {\n return true;\n } else if (value.match(/^[a-zA-Z]/) === null) {\n return false;\n }\n const camelCasedValue = camelCase(value).toLowerCase();\n return camelCasedValue === value.toLowerCase();\n};\nconst refinementModelIdValidationMessage = (value?: string) => {\n if (!value) {\n return {};\n } else if (value.match(/^[a-zA-Z]/) === null) {\n return {\n message: `The modelId \"${value}\" is not valid. It must start with a A-Z or a-z.`\n };\n }\n return {\n message: `The modelId \"${value}\" is not valid.`\n };\n};\n\nconst modelIdTransformation = (value?: string) => {\n if (!value) {\n return value;\n }\n const camelCasedValue = camelCase(value);\n if (camelCasedValue.toLowerCase() === value.toLowerCase()) {\n return value;\n }\n return camelCasedValue;\n};\n\nexport const createModelCreateValidation = () => {\n return zod.object({\n name: shortString,\n modelId: optionalShortString.transform(modelIdTransformation),\n singularApiName: shortString\n .min(1)\n .refine(apiNameRefinementValidation, refinementSingularValidationMessage),\n pluralApiName: shortString\n .min(1)\n .refine(apiNameRefinementValidation, 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 createModelImportValidation = () => {\n return zod.object({\n name: shortString.min(1).refine(\n value => {\n return value.match(/[a-zA-Z]/) !== null;\n },\n value => {\n return {\n message: `The name \"${value}\" is not valid.`\n };\n }\n ),\n modelId: shortString\n .min(1)\n .refine(refinementModelIdValidation, refinementModelIdValidationMessage)\n .transform(modelIdTransformation),\n singularApiName: shortString\n .min(1)\n .refine(apiNameRefinementValidation, refinementSingularValidationMessage),\n pluralApiName: shortString\n .min(1)\n .refine(apiNameRefinementValidation, refinementPluralValidationMessage),\n description: optionalNullishShortString,\n group: shortString,\n icon: optionalNullishShortString,\n fields: zod.array(fieldSchema).min(1),\n layout: zod.array(zod.array(shortString)).min(1),\n tags: zod.array(shortString).optional(),\n titleFieldId: shortString.nullish(),\n descriptionFieldId: optionalShortString.nullish(),\n imageFieldId: optionalShortString.nullish()\n });\n};\n\nexport const createModelCreateFromValidation = () => {\n return zod.object({\n name: shortString,\n modelId: optionalShortString.transform(modelIdTransformation),\n singularApiName: shortString.refine(\n apiNameRefinementValidation,\n refinementSingularValidationMessage\n ),\n pluralApiName: shortString.refine(\n apiNameRefinementValidation,\n refinementPluralValidationMessage\n ),\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 apiNameRefinementValidation(value);\n }, refinementSingularValidationMessage),\n pluralApiName: optionalShortString.refine(value => {\n if (!value) {\n return true;\n }\n return apiNameRefinementValidation(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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"}
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.createModelsCrud = void 0;
8
8
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
10
- var _dataloader = _interopRequireDefault(require("dataloader"));
11
10
  var _error = _interopRequireDefault(require("@webiny/error"));
12
11
  var _handlerGraphql = require("@webiny/handler-graphql");
13
12
  var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
@@ -15,29 +14,15 @@ var _pubsub = require("@webiny/pubsub");
15
14
  var _beforeCreate = require("./contentModel/beforeCreate");
16
15
  var _beforeUpdate = require("./contentModel/beforeUpdate");
17
16
  var _beforeDelete = require("./contentModel/beforeDelete");
18
- var _afterCreate = require("./contentModel/afterCreate");
19
- var _afterUpdate = require("./contentModel/afterUpdate");
20
- var _afterDelete = require("./contentModel/afterDelete");
21
- var _afterCreateFrom = require("./contentModel/afterCreateFrom");
22
17
  var _CmsModelPlugin = require("../plugins/CmsModelPlugin");
23
18
  var _filterAsync = require("../utils/filterAsync");
24
19
  var _validation = require("./contentModel/validation");
25
20
  var _utils = require("@webiny/utils");
26
21
  var _defaultFields = require("./contentModel/defaultFields");
27
- var _modelApiName = require("./contentModel/compatibility/modelApiName");
22
+ var _utils2 = require("../utils");
23
+ var _ensureTypeTag = require("./contentModel/ensureTypeTag");
24
+ var _listModelsFromDatabase = require("./contentModel/listModelsFromDatabase");
28
25
  const _excluded = ["defaultFields"];
29
- /**
30
- * Given a model, return an array of tags ensuring the `type` tag is set.
31
- */
32
- const ensureTypeTag = model => {
33
- // Let's make sure we have a `type` tag assigned.
34
- // If `type` tag is not set, set it to a default one (`model`).
35
- const tags = model.tags || [];
36
- if (!tags.some(tag => tag.startsWith("type:"))) {
37
- tags.push("type:model");
38
- }
39
- return tags;
40
- };
41
26
  const createModelsCrud = params => {
42
27
  const {
43
28
  getTenant,
@@ -47,35 +32,11 @@ const createModelsCrud = params => {
47
32
  modelsPermissions,
48
33
  context
49
34
  } = params;
50
- const loaders = {
51
- listModels: new _dataloader.default(async () => {
52
- const models = await storageOperations.models.list({
53
- where: {
54
- tenant: getTenant().id,
55
- locale: getLocale().code
56
- }
57
- });
58
- return [models.map(model => {
59
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
60
- tags: ensureTypeTag(model),
61
- tenant: model.tenant || getTenant().id,
62
- locale: model.locale || getLocale().code,
63
- /**
64
- * TODO: remove in v5.36.0
65
- * This is for backward compatibility while migrations are not yet executed.
66
- */
67
- singularApiName: (0, _modelApiName.ensureSingularApiName)(model),
68
- pluralApiName: (0, _modelApiName.ensurePluralApiName)(model)
69
- });
70
- })];
71
- })
72
- };
73
- const listModelsCache = new Map();
35
+ const listPluginModelsCache = (0, _utils2.createMemoryCache)();
36
+ const listAllModelsCache = (0, _utils2.createMemoryCache)();
74
37
  const clearModelsCache = () => {
75
- for (const loader of Object.values(loaders)) {
76
- loader.clearAll();
77
- }
78
- listModelsCache.clear();
38
+ listAllModelsCache.clear();
39
+ listPluginModelsCache.clear();
79
40
  };
80
41
  const managers = new Map();
81
42
  const updateManager = async (context, model) => {
@@ -83,62 +44,61 @@ const createModelsCrud = params => {
83
44
  managers.set(model.modelId, manager);
84
45
  return manager;
85
46
  };
86
- const checkModelPermissions = rwd => {
47
+ const checkModelPermissions = async rwd => {
87
48
  return modelsPermissions.ensure({
88
49
  rwd
89
50
  });
90
51
  };
91
- const getModelsAsPlugins = () => {
92
- const tenant = getTenant().id;
93
- const locale = getLocale().code;
94
- return context.plugins.byType(_CmsModelPlugin.CmsModelPlugin.type)
95
- /**
96
- * We need to filter out models that are not for this tenant or locale.
97
- * If it does not have tenant or locale define, it is for every locale and tenant
98
- */.filter(plugin => {
99
- const {
100
- tenant: modelTenant,
101
- locale: modelLocale
102
- } = plugin.contentModel;
103
- if (modelTenant && modelTenant !== tenant) {
104
- return false;
105
- } else if (modelLocale && modelLocale !== locale) {
106
- return false;
107
- }
108
- return true;
109
- }).map(plugin => {
110
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
111
- tags: ensureTypeTag(plugin.contentModel),
112
- tenant,
113
- locale,
114
- webinyVersion: context.WEBINY_VERSION
52
+ const getModelsAsPlugins = (tenant, locale) => {
53
+ const modelPlugins = context.plugins.byType(_CmsModelPlugin.CmsModelPlugin.type);
54
+ const cacheKey = (0, _utils2.createCacheKey)({
55
+ tenant,
56
+ locale,
57
+ models: modelPlugins.map(({
58
+ contentModel: model
59
+ }) => {
60
+ return `${model.modelId}#${model.pluralApiName}#${model.singularApiName}#${model.savedOn || "unknown"}`;
61
+ })
62
+ });
63
+ return listPluginModelsCache.getOrSet(cacheKey, () => {
64
+ return modelPlugins
65
+ /**
66
+ * We need to filter out models that are not for this tenant or locale.
67
+ * If it does not have tenant or locale define, it is for every locale and tenant
68
+ */.filter(plugin => {
69
+ const {
70
+ tenant: modelTenant,
71
+ locale: modelLocale
72
+ } = plugin.contentModel;
73
+ if (modelTenant && modelTenant !== tenant) {
74
+ return false;
75
+ } else if (modelLocale && modelLocale !== locale) {
76
+ return false;
77
+ }
78
+ return true;
79
+ }).map(plugin => {
80
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
81
+ tags: (0, _ensureTypeTag.ensureTypeTag)(plugin.contentModel),
82
+ tenant,
83
+ locale,
84
+ webinyVersion: context.WEBINY_VERSION
85
+ });
115
86
  });
116
87
  });
117
88
  };
118
- const modelsGet = async modelId => {
119
- const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);
120
- if (pluginModel) {
121
- return pluginModel;
122
- }
123
- const model = await storageOperations.models.get({
124
- tenant: getTenant().id,
125
- locale: getLocale().code,
126
- modelId
127
- });
89
+ const getModelFromCache = async modelId => {
90
+ const models = await listModels();
91
+ const model = models.find(m => m.modelId === modelId);
128
92
  if (!model) {
129
93
  throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
130
94
  }
131
95
  return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
132
- tags: ensureTypeTag(model),
96
+ tags: (0, _ensureTypeTag.ensureTypeTag)(model),
133
97
  tenant: model.tenant || getTenant().id,
134
98
  locale: model.locale || getLocale().code
135
99
  });
136
100
  };
137
- const modelsList = async () => {
138
- const databaseModels = await loaders.listModels.load("listModels");
139
- const pluginsModels = getModelsAsPlugins();
140
- return databaseModels.concat(pluginsModels);
141
- };
101
+
142
102
  /**
143
103
  * The list models cache is a key -> Promise pair so it the listModels() can be called multiple times but executed only once.
144
104
  */
@@ -149,17 +109,24 @@ const createModelsCrud = params => {
149
109
  *
150
110
  * TODO: @adrian please check if possible.
151
111
  */
152
- const key = JSON.stringify({
153
- tenant: getTenant().id,
154
- locale: getLocale().code,
155
- identity: context.security.isAuthorizationEnabled() ? (_getIdentity = getIdentity()) === null || _getIdentity === void 0 ? void 0 : _getIdentity.id : undefined
112
+ const tenant = getTenant().id;
113
+ const locale = getLocale().code;
114
+ const pluginModels = getModelsAsPlugins(tenant, locale);
115
+ const cacheKey = (0, _utils2.createCacheKey)({
116
+ tenant,
117
+ locale,
118
+ identity: context.security.isAuthorizationEnabled() ? (_getIdentity = getIdentity()) === null || _getIdentity === void 0 ? void 0 : _getIdentity.id : undefined,
119
+ plugins: pluginModels.map(model => {
120
+ return `${model.modelId}#${model.pluralApiName}#${model.singularApiName}#${model.savedOn || "unknown"}`;
121
+ })
156
122
  });
157
- if (listModelsCache.has(key)) {
158
- return listModelsCache.get(key);
159
- }
160
- const cachedModelList = async () => {
123
+ return listAllModelsCache.getOrSet(cacheKey, async () => {
161
124
  return context.benchmark.measure("headlessCms.crud.models.listModels", async () => {
162
- const models = await modelsList();
125
+ const databaseModels = await (0, _listModelsFromDatabase.listModelsFromDatabase)(params);
126
+ const models = databaseModels.concat(pluginModels);
127
+ /**
128
+ * Filter models based on permissions.
129
+ */
163
130
  return (0, _filterAsync.filterAsync)(models, async model => {
164
131
  const ownsModel = await modelsPermissions.ensure({
165
132
  owns: model.createdBy
@@ -174,14 +141,17 @@ const createModelsCrud = params => {
174
141
  });
175
142
  });
176
143
  });
177
- };
178
- listModelsCache.set(key, cachedModelList());
179
- return listModelsCache.get(key);
144
+ });
180
145
  };
181
146
  const getModel = async modelId => {
182
147
  return context.benchmark.measure("headlessCms.crud.models.getModel", async () => {
183
148
  await checkModelPermissions("r");
184
- const model = await modelsGet(modelId);
149
+ const model = await context.security.withoutAuthorization(async () => {
150
+ return await getModelFromCache(modelId);
151
+ });
152
+ if (!model) {
153
+ throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
154
+ }
185
155
  await modelsPermissions.ensure({
186
156
  owns: model.createdBy
187
157
  });
@@ -191,16 +161,12 @@ const createModelsCrud = params => {
191
161
  return model;
192
162
  });
193
163
  };
194
- const getModelManager = async target => {
164
+ const getEntryManager = async target => {
195
165
  const modelId = typeof target === "string" ? target : target.modelId;
196
166
  if (managers.has(modelId)) {
197
167
  return managers.get(modelId);
198
168
  }
199
- const models = await modelsList();
200
- const model = models.find(m => m.modelId === modelId);
201
- if (!model) {
202
- throw new _handlerGraphql.NotFoundError(`There is no content model "${modelId}".`);
203
- }
169
+ const model = await getModelFromCache(modelId);
204
170
  return await updateManager(context, model);
205
171
  };
206
172
 
@@ -241,31 +207,15 @@ const createModelsCrud = params => {
241
207
  context,
242
208
  storageOperations
243
209
  });
244
- (0, _afterCreate.assignModelAfterCreate)({
245
- context,
246
- onModelAfterCreate
247
- });
248
210
  (0, _beforeUpdate.assignModelBeforeUpdate)({
249
211
  onModelBeforeUpdate,
250
212
  context
251
213
  });
252
- (0, _afterUpdate.assignModelAfterUpdate)({
253
- context,
254
- onModelAfterUpdate
255
- });
256
- (0, _afterCreateFrom.assignModelAfterCreateFrom)({
257
- context,
258
- onModelAfterCreateFrom
259
- });
260
214
  (0, _beforeDelete.assignModelBeforeDelete)({
261
215
  onModelBeforeDelete,
262
216
  plugins: context.plugins,
263
217
  storageOperations
264
218
  });
265
- (0, _afterDelete.assignModelAfterDelete)({
266
- context,
267
- onModelAfterDelete
268
- });
269
219
 
270
220
  /**
271
221
  * CRUD methods
@@ -287,12 +237,7 @@ const createModelsCrud = params => {
287
237
  if (defaultFields) {
288
238
  (0, _defaultFields.assignModelDefaultFields)(data);
289
239
  }
290
- const group = await context.security.withoutAuthorization(async () => {
291
- return context.cms.getGroup(data.group);
292
- });
293
- if (!group) {
294
- throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
295
- }
240
+ const group = await context.cms.getGroup(data.group);
296
241
  const identity = getIdentity();
297
242
  const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
298
243
  modelId: data.modelId || "",
@@ -318,7 +263,7 @@ const createModelsCrud = params => {
318
263
  lockedFields: [],
319
264
  webinyVersion: context.WEBINY_VERSION
320
265
  });
321
- model.tags = ensureTypeTag(model);
266
+ model.tags = (0, _ensureTypeTag.ensureTypeTag)(model);
322
267
  try {
323
268
  await onModelBeforeCreate.publish({
324
269
  input: data,
@@ -365,12 +310,7 @@ const createModelsCrud = params => {
365
310
  };
366
311
  const groupId = data.group;
367
312
  if (groupId) {
368
- const groupData = await context.security.withoutAuthorization(async () => {
369
- return context.cms.getGroup(groupId);
370
- });
371
- if (!groupData) {
372
- throw new _handlerGraphql.NotFoundError(`There is no group "${groupId}".`);
373
- }
313
+ const groupData = await context.cms.getGroup(groupId);
374
314
  group = {
375
315
  id: groupData.id,
376
316
  name: groupData.name
@@ -387,7 +327,7 @@ const createModelsCrud = params => {
387
327
  webinyVersion: context.WEBINY_VERSION,
388
328
  savedOn: new Date().toISOString()
389
329
  });
390
- model.tags = ensureTypeTag(model);
330
+ model.tags = (0, _ensureTypeTag.ensureTypeTag)(model);
391
331
  try {
392
332
  await onModelBeforeUpdate.publish({
393
333
  input: data,
@@ -573,20 +513,6 @@ const createModelsCrud = params => {
573
513
  return true;
574
514
  };
575
515
  return {
576
- /**
577
- * Deprecated - will be removed in 5.36.0
578
- */
579
- onBeforeModelCreate: onModelBeforeCreate,
580
- onAfterModelCreate: onModelAfterCreate,
581
- onBeforeModelCreateFrom: onModelBeforeCreateFrom,
582
- onAfterModelCreateFrom: onModelAfterCreateFrom,
583
- onBeforeModelUpdate: onModelBeforeUpdate,
584
- onAfterModelUpdate: onModelAfterUpdate,
585
- onBeforeModelDelete: onModelBeforeDelete,
586
- onAfterModelDelete: onModelAfterDelete,
587
- /**
588
- * Released in 5.34.0
589
- */
590
516
  onModelBeforeCreate,
591
517
  onModelAfterCreate,
592
518
  onModelCreateError,
@@ -637,12 +563,10 @@ const createModelsCrud = params => {
637
563
  return initializeModel(modelId, data);
638
564
  });
639
565
  },
640
- getModelManager,
641
- getEntryManager: async model => {
642
- return getModelManager(model);
643
- },
644
- getManagers: () => managers,
566
+ getEntryManager,
645
567
  getEntryManagers: () => managers
646
568
  };
647
569
  };
648
- exports.createModelsCrud = createModelsCrud;
570
+ exports.createModelsCrud = createModelsCrud;
571
+
572
+ //# sourceMappingURL=contentModel.crud.js.map