@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
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.createModelGroupsCrud = void 0;
8
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _dataloader = _interopRequireDefault(require("dataloader"));
10
9
  var _error = _interopRequireDefault(require("@webiny/error"));
11
- var _handlerGraphql = require("@webiny/handler-graphql");
12
10
  var _CmsGroupPlugin = require("../plugins/CmsGroupPlugin");
13
11
  var _pubsub = require("@webiny/pubsub");
14
12
  var _beforeUpdate = require("./contentModelGroup/beforeUpdate");
@@ -17,6 +15,9 @@ var _beforeDelete = require("./contentModelGroup/beforeDelete");
17
15
  var _validation = require("./contentModelGroup/validation");
18
16
  var _utils = require("@webiny/utils");
19
17
  var _filterAsync = require("../utils/filterAsync");
18
+ var _utils2 = require("../utils");
19
+ var _listGroupsFromDatabase = require("./contentModelGroup/listGroupsFromDatabase");
20
+ var _handlerGraphql = require("@webiny/handler-graphql");
20
21
  const createModelGroupsCrud = params => {
21
22
  const {
22
23
  getTenant,
@@ -26,72 +27,86 @@ const createModelGroupsCrud = params => {
26
27
  modelGroupsPermissions,
27
28
  context
28
29
  } = params;
29
- const dataLoaders = {
30
- listGroups: new _dataloader.default(async () => {
31
- const tenant = getTenant().id;
32
- const locale = getLocale().code;
33
- const pluginsGroups = getGroupsAsPlugins().map(group => {
34
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, group), {}, {
35
- tenant: group.tenant || tenant,
36
- locale: group.locale || locale
37
- });
38
- });
39
- const groups = await storageOperations.groups.list({
40
- where: {
41
- tenant: getTenant().id,
42
- locale: getLocale().code
30
+ const listAllGroupsCache = (0, _utils2.createMemoryCache)();
31
+ const listPluginGroupsCache = (0, _utils2.createMemoryCache)();
32
+ const clearGroupsCache = () => {
33
+ listPluginGroupsCache.clear();
34
+ listAllGroupsCache.clear();
35
+ };
36
+ const fetchPluginGroups = (tenant, locale) => {
37
+ const pluginGroups = context.plugins.byType(_CmsGroupPlugin.CmsGroupPlugin.type);
38
+ const cacheKey = (0, _utils2.createCacheKey)({
39
+ tenant,
40
+ locale,
41
+ groups: pluginGroups.map(({
42
+ contentModelGroup: group
43
+ }) => {
44
+ return `${group.id}#${group.slug}#${group.savedOn || "unknown"}`;
45
+ })
46
+ });
47
+ return listPluginGroupsCache.getOrSet(cacheKey, () => {
48
+ return pluginGroups
49
+ /**
50
+ * We need to filter out groups that are not for this tenant or locale.
51
+ * If it does not have tenant or locale define, it is for every locale and tenant
52
+ */.filter(plugin => {
53
+ const {
54
+ tenant: t,
55
+ locale: l
56
+ } = plugin.contentModelGroup;
57
+ if (t && t !== tenant) {
58
+ return false;
59
+ } else if (l && l !== locale) {
60
+ return false;
43
61
  }
62
+ return true;
63
+ }).map(plugin => {
64
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModelGroup), {}, {
65
+ tenant,
66
+ locale,
67
+ webinyVersion: context.WEBINY_VERSION
68
+ });
44
69
  });
45
- return [groups.concat(pluginsGroups)];
46
- })
47
- };
48
- const listGroupsCache = new Map();
49
- const clearGroupsCache = () => {
50
- for (const loader of Object.values(dataLoaders)) {
51
- loader.clearAll();
52
- }
70
+ });
53
71
  };
54
- const getGroupsAsPlugins = () => {
55
- const tenant = getTenant().id;
56
- const locale = getLocale().code;
57
- return context.plugins.byType(_CmsGroupPlugin.CmsGroupPlugin.type)
72
+ const fetchGroups = async (tenant, locale) => {
73
+ var _getIdentity;
74
+ const pluginGroups = fetchPluginGroups(tenant, locale);
58
75
  /**
59
- * We need to filter out groups that are not for this tenant or locale.
60
- * If it does not have tenant or locale define, it is for every locale and tenant
61
- */.filter(plugin => {
62
- const {
63
- tenant: t,
64
- locale: l
65
- } = plugin.contentModelGroup;
66
- if (t && t !== tenant) {
67
- return false;
68
- } else if (l && l !== locale) {
69
- return false;
70
- }
71
- return true;
72
- }).map(plugin => {
73
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModelGroup), {}, {
76
+ * Maybe we can cache based on permissions, not the identity id?
77
+ *
78
+ * TODO: @adrian please check if possible.
79
+ */
80
+ const cacheKey = (0, _utils2.createCacheKey)({
81
+ tenant,
82
+ locale,
83
+ identity: context.security.isAuthorizationEnabled() ? (_getIdentity = getIdentity()) === null || _getIdentity === void 0 ? void 0 : _getIdentity.id : undefined,
84
+ groups: pluginGroups.map(group => {
85
+ return `${group.id}#${group.slug}#${group.savedOn || "unknown"}`;
86
+ })
87
+ });
88
+ return listAllGroupsCache.getOrSet(cacheKey, async () => {
89
+ const databaseGroups = await (0, _listGroupsFromDatabase.listGroupsFromDatabase)({
90
+ storageOperations,
74
91
  tenant,
75
- locale,
76
- webinyVersion: context.WEBINY_VERSION
92
+ locale
93
+ });
94
+ const groups = databaseGroups.concat(pluginGroups);
95
+ return (0, _filterAsync.filterAsync)(groups, async group => {
96
+ const ownsGroup = await modelGroupsPermissions.ensure({
97
+ owns: group.createdBy
98
+ }, {
99
+ throw: false
100
+ });
101
+ if (!ownsGroup) {
102
+ return false;
103
+ }
104
+ return await modelGroupsPermissions.canAccessGroup({
105
+ group
106
+ });
77
107
  });
78
108
  });
79
109
  };
80
- const getGroupViaDataLoader = async id => {
81
- const groups = await dataLoaders.listGroups.load("listGroups");
82
- const group = groups.find(g => g.id === id);
83
- if (!group) {
84
- throw new _handlerGraphql.NotFoundError(`Cms Group "${id}" was not found!`);
85
- }
86
- return group;
87
- };
88
- const listGroupsViaDataLoader = async () => {
89
- try {
90
- return await dataLoaders.listGroups.load("listGroups");
91
- } catch (ex) {
92
- throw new _error.default(ex.message, ex.code || "LIST_ERROR", (0, _objectSpread2.default)({}, ex.data || {}));
93
- }
94
- };
95
110
 
96
111
  /**
97
112
  * Create
@@ -136,7 +151,13 @@ const createModelGroupsCrud = params => {
136
151
  await modelGroupsPermissions.ensure({
137
152
  rwd: "r"
138
153
  });
139
- const group = await getGroupViaDataLoader(id);
154
+ const groups = await context.security.withoutAuthorization(async () => {
155
+ return fetchGroups(getTenant().id, getLocale().code);
156
+ });
157
+ const group = groups.find(group => group.id === id);
158
+ if (!group) {
159
+ throw new _handlerGraphql.NotFoundError(`Cms Group "${id}" was not found!`);
160
+ }
140
161
  await modelGroupsPermissions.ensure({
141
162
  owns: group.createdBy
142
163
  });
@@ -146,7 +167,6 @@ const createModelGroupsCrud = params => {
146
167
  return group;
147
168
  };
148
169
  const listGroups = async params => {
149
- var _getIdentity;
150
170
  const {
151
171
  where
152
172
  } = params || {};
@@ -157,38 +177,7 @@ const createModelGroupsCrud = params => {
157
177
  await modelGroupsPermissions.ensure({
158
178
  rwd: "r"
159
179
  });
160
-
161
- /**
162
- * Maybe we can cache based on permissions, not the identity id?
163
- *
164
- * TODO: @adrian please check if possible.
165
- */
166
- const key = JSON.stringify({
167
- tenant: tenant || getTenant().id,
168
- locale: locale || getLocale().code,
169
- identity: context.security.isAuthorizationEnabled() ? (_getIdentity = getIdentity()) === null || _getIdentity === void 0 ? void 0 : _getIdentity.id : undefined
170
- });
171
- if (listGroupsCache.has(key)) {
172
- return listGroupsCache.get(key);
173
- }
174
- const cached = async () => {
175
- const response = await listGroupsViaDataLoader();
176
- return (0, _filterAsync.filterAsync)(response, async group => {
177
- const ownsGroup = await modelGroupsPermissions.ensure({
178
- owns: group.createdBy
179
- }, {
180
- throw: false
181
- });
182
- if (!ownsGroup) {
183
- return false;
184
- }
185
- return await modelGroupsPermissions.canAccessGroup({
186
- group
187
- });
188
- });
189
- };
190
- listGroupsCache.set(key, cached());
191
- return listGroupsCache.get(key);
180
+ return fetchGroups(tenant || getTenant().id, locale || getLocale().code);
192
181
  };
193
182
  const createGroup = async input => {
194
183
  await modelGroupsPermissions.ensure({
@@ -200,7 +189,7 @@ const createModelGroupsCrud = params => {
200
189
  }
201
190
  const data = result.data;
202
191
  const identity = getIdentity();
203
- const id = (0, _utils.mdbid)();
192
+ const id = data.id || (0, _utils.mdbid)();
204
193
  const group = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
205
194
  id,
206
195
  tenant: getTenant().id,
@@ -242,7 +231,7 @@ const createModelGroupsCrud = params => {
242
231
  await modelGroupsPermissions.ensure({
243
232
  rwd: "w"
244
233
  });
245
- const original = await getGroupViaDataLoader(id);
234
+ const original = await getGroup(id);
246
235
  await modelGroupsPermissions.ensure({
247
236
  owns: original.createdBy
248
237
  });
@@ -296,7 +285,7 @@ const createModelGroupsCrud = params => {
296
285
  await modelGroupsPermissions.ensure({
297
286
  rwd: "d"
298
287
  });
299
- const group = await getGroupViaDataLoader(id);
288
+ const group = await getGroup(id);
300
289
  await modelGroupsPermissions.ensure({
301
290
  owns: group.createdBy
302
291
  });
@@ -323,18 +312,6 @@ const createModelGroupsCrud = params => {
323
312
  return true;
324
313
  };
325
314
  return {
326
- /**
327
- * Deprecated - will be removed in 5.36.0
328
- */
329
- onBeforeGroupCreate: onGroupBeforeCreate,
330
- onAfterGroupCreate: onGroupAfterCreate,
331
- onBeforeGroupUpdate: onGroupBeforeUpdate,
332
- onAfterGroupUpdate: onGroupAfterUpdate,
333
- onBeforeGroupDelete: onGroupBeforeDelete,
334
- onAfterGroupDelete: onGroupAfterDelete,
335
- /**
336
- * Released in 5.34.0
337
- */
338
315
  onGroupBeforeCreate,
339
316
  onGroupAfterCreate,
340
317
  onGroupCreateError,
@@ -372,4 +349,6 @@ const createModelGroupsCrud = params => {
372
349
  }
373
350
  };
374
351
  };
375
- exports.createModelGroupsCrud = createModelGroupsCrud;
352
+ exports.createModelGroupsCrud = createModelGroupsCrud;
353
+
354
+ //# sourceMappingURL=contentModelGroup.crud.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_dataloader","_interopRequireDefault","require","_error","_handlerGraphql","_CmsGroupPlugin","_pubsub","_beforeUpdate","_beforeCreate","_beforeDelete","_validation","_utils","_filterAsync","createModelGroupsCrud","params","getTenant","getIdentity","getLocale","storageOperations","modelGroupsPermissions","context","dataLoaders","listGroups","DataLoader","tenant","id","locale","code","pluginsGroups","getGroupsAsPlugins","map","group","_objectSpread2","default","groups","list","where","concat","listGroupsCache","Map","clearGroupsCache","loader","Object","values","clearAll","plugins","byType","CmsGroupPlugin","type","filter","plugin","t","l","contentModelGroup","webinyVersion","WEBINY_VERSION","getGroupViaDataLoader","load","find","g","NotFoundError","listGroupsViaDataLoader","ex","WebinyError","message","data","onGroupBeforeCreate","createTopic","onGroupAfterCreate","onGroupCreateError","onGroupBeforeUpdate","onGroupAfterUpdate","onGroupUpdateError","onGroupBeforeDelete","onGroupAfterDelete","onGroupDeleteError","assignBeforeGroupCreate","assignBeforeGroupUpdate","assignBeforeGroupDelete","getGroup","ensure","rwd","owns","createdBy","ensureCanAccessGroup","_getIdentity","key","JSON","stringify","identity","security","isAuthorizationEnabled","undefined","has","get","cached","response","filterAsync","ownsGroup","throw","canAccessGroup","set","createGroup","input","result","createGroupCreateValidation","safeParseAsync","success","createZodError","error","mdbid","createdOn","Date","toISOString","savedOn","displayName","publish","create","updateGroup","original","createGroupUpdateValidation","keys","length","updatedGroup","update","deleteGroup","delete","onBeforeGroupCreate","onAfterGroupCreate","onBeforeGroupUpdate","onAfterGroupUpdate","onBeforeGroupDelete","onAfterGroupDelete","benchmark","measure","exports"],"sources":["contentModelGroup.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsGroup,\n CmsGroupContext,\n HeadlessCmsStorageOperations,\n OnGroupAfterCreateTopicParams,\n OnGroupAfterDeleteTopicParams,\n OnGroupAfterUpdateTopicParams,\n OnGroupBeforeCreateTopicParams,\n OnGroupBeforeDeleteTopicParams,\n OnGroupBeforeUpdateTopicParams,\n OnGroupCreateErrorTopicParams,\n OnGroupDeleteErrorTopicParams,\n OnGroupUpdateErrorTopicParams\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\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 { assignBeforeGroupUpdate } from \"./contentModelGroup/beforeUpdate\";\nimport { assignBeforeGroupCreate } from \"./contentModelGroup/beforeCreate\";\nimport { assignBeforeGroupDelete } from \"./contentModelGroup/beforeDelete\";\nimport {\n createGroupCreateValidation,\n createGroupUpdateValidation\n} from \"~/crud/contentModelGroup/validation\";\nimport { createZodError, mdbid } from \"@webiny/utils\";\nimport { ModelGroupsPermissions } from \"~/utils/permissions/ModelGroupsPermissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\n\nexport interface CreateModelGroupsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n modelGroupsPermissions: ModelGroupsPermissions;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelGroupsCrud = (params: CreateModelGroupsCrudParams): CmsGroupContext => {\n const {\n getTenant,\n getIdentity,\n getLocale,\n storageOperations,\n modelGroupsPermissions,\n context\n } = params;\n\n const dataLoaders = {\n listGroups: new DataLoader(async () => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const pluginsGroups = getGroupsAsPlugins().map(group => {\n return {\n ...group,\n tenant: group.tenant || tenant,\n locale: group.locale || locale\n };\n });\n\n const groups = await storageOperations.groups.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n\n return [groups.concat(pluginsGroups)];\n })\n };\n\n const listGroupsCache = new Map<string, Promise<CmsGroup[]>>();\n const clearGroupsCache = (): void => {\n for (const loader of Object.values(dataLoaders)) {\n loader.clearAll();\n }\n };\n\n const getGroupsAsPlugins = (): CmsGroup[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n /**\n * We need to filter out groups 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: t, locale: l } = plugin.contentModelGroup;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModelGroup,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const getGroupViaDataLoader = async (id: string) => {\n const groups = await dataLoaders.listGroups.load(\"listGroups\");\n\n const group = groups.find(g => g.id === id);\n\n if (!group) {\n throw new NotFoundError(`Cms Group \"${id}\" was not found!`);\n }\n return group;\n };\n\n const listGroupsViaDataLoader = async () => {\n try {\n return await dataLoaders.listGroups.load(\"listGroups\");\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"LIST_ERROR\", {\n ...(ex.data || {})\n });\n }\n };\n\n /**\n * Create\n */\n const onGroupBeforeCreate =\n createTopic<OnGroupBeforeCreateTopicParams>(\"cms.onGroupBeforeCreate\");\n const onGroupAfterCreate = createTopic<OnGroupAfterCreateTopicParams>(\"cms.onGroupAfterCreate\");\n const onGroupCreateError = createTopic<OnGroupCreateErrorTopicParams>(\"cms.onGroupCreateError\");\n /**\n * Update\n */\n const onGroupBeforeUpdate =\n createTopic<OnGroupBeforeUpdateTopicParams>(\"cms.onGroupBeforeUpdate\");\n const onGroupAfterUpdate = createTopic<OnGroupAfterUpdateTopicParams>(\"cms.onGroupAfterUpdate\");\n const onGroupUpdateError = createTopic<OnGroupUpdateErrorTopicParams>(\"cms.onGroupUpdateError\");\n /**\n * Delete\n */\n const onGroupBeforeDelete =\n createTopic<OnGroupBeforeDeleteTopicParams>(\"cms.onGroupBeforeDelete\");\n const onGroupAfterDelete = createTopic<OnGroupAfterDeleteTopicParams>(\"cms.onGroupAfterDelete\");\n const onGroupDeleteError = createTopic<OnGroupDeleteErrorTopicParams>(\"cms.onGroupDeleteError\");\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeGroupCreate({\n onGroupBeforeCreate,\n plugins: context.plugins,\n storageOperations\n });\n assignBeforeGroupUpdate({\n onGroupBeforeUpdate,\n plugins: context.plugins\n });\n assignBeforeGroupDelete({\n onGroupBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n /**\n * CRUD Methods\n */\n const getGroup: CmsGroupContext[\"getGroup\"] = async id => {\n await modelGroupsPermissions.ensure({ rwd: \"r\" });\n\n const group = await getGroupViaDataLoader(id);\n\n await modelGroupsPermissions.ensure({ owns: group.createdBy });\n await modelGroupsPermissions.ensureCanAccessGroup({\n group\n });\n\n return group;\n };\n\n const listGroups: CmsGroupContext[\"listGroups\"] = async params => {\n const { where } = params || {};\n\n const { tenant, locale } = where || {};\n\n await modelGroupsPermissions.ensure({ rwd: \"r\" });\n\n /**\n * Maybe we can cache based on permissions, not the identity id?\n *\n * TODO: @adrian please check if possible.\n */\n const key = JSON.stringify({\n tenant: tenant || getTenant().id,\n locale: locale || getLocale().code,\n identity: context.security.isAuthorizationEnabled() ? getIdentity()?.id : undefined\n });\n if (listGroupsCache.has(key)) {\n return listGroupsCache.get(key) as Promise<CmsGroup[]>;\n }\n\n const cached = async () => {\n const response = await listGroupsViaDataLoader();\n\n return filterAsync(response, async group => {\n const ownsGroup = await modelGroupsPermissions.ensure(\n { owns: group.createdBy },\n { throw: false }\n );\n\n if (!ownsGroup) {\n return false;\n }\n\n return await modelGroupsPermissions.canAccessGroup({\n group\n });\n });\n };\n\n listGroupsCache.set(key, cached());\n\n return listGroupsCache.get(key) as Promise<CmsGroup[]>;\n };\n\n const createGroup: CmsGroupContext[\"createGroup\"] = async input => {\n await modelGroupsPermissions.ensure({ rwd: \"w\" });\n\n const result = await createGroupCreateValidation().safeParseAsync(input);\n\n if (!result.success) {\n throw createZodError(result.error);\n }\n const data = result.data;\n\n const identity = getIdentity();\n\n const id = mdbid();\n const group: CmsGroup = {\n ...data,\n id,\n tenant: getTenant().id,\n locale: getLocale().code,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n webinyVersion: context.WEBINY_VERSION\n };\n try {\n await onGroupBeforeCreate.publish({\n group\n });\n\n const result = await storageOperations.groups.create({\n group\n });\n\n clearGroupsCache();\n\n await onGroupAfterCreate.publish({\n group: result\n });\n\n return group;\n } catch (ex) {\n await onGroupCreateError.publish({\n input,\n group,\n error: ex\n });\n throw new WebinyError(\n ex.message || \"Could not save data model group.\",\n ex.code || \"ERROR_ON_CREATE\",\n {\n ...(ex.data || {}),\n group,\n input\n }\n );\n }\n };\n const updateGroup: CmsGroupContext[\"updateGroup\"] = async (id, input) => {\n await modelGroupsPermissions.ensure({ rwd: \"w\" });\n\n const original = await getGroupViaDataLoader(id);\n\n await modelGroupsPermissions.ensure({ owns: original.createdBy });\n\n const result = await createGroupUpdateValidation().safeParseAsync(input);\n\n if (!result.success) {\n throw createZodError(result.error);\n }\n const data = result.data;\n\n /**\n * No need to continue if no values were changed\n */\n if (Object.keys(data).length === 0) {\n return original;\n }\n\n const group: CmsGroup = {\n ...original,\n ...data,\n locale: getLocale().code,\n tenant: getTenant().id,\n savedOn: new Date().toISOString()\n };\n\n try {\n await onGroupBeforeUpdate.publish({\n original,\n group\n });\n\n const updatedGroup = await storageOperations.groups.update({\n group\n });\n clearGroupsCache();\n\n await onGroupAfterUpdate.publish({\n original,\n group: updatedGroup\n });\n\n return updatedGroup;\n } catch (ex) {\n await onGroupUpdateError.publish({\n input,\n original,\n group,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code || \"UPDATE_ERROR\", {\n error: ex,\n original,\n group,\n input\n });\n }\n };\n const deleteGroup: CmsGroupContext[\"deleteGroup\"] = async id => {\n await modelGroupsPermissions.ensure({ rwd: \"d\" });\n\n const group = await getGroupViaDataLoader(id);\n\n await modelGroupsPermissions.ensure({ owns: group.createdBy });\n\n try {\n await onGroupBeforeDelete.publish({\n group\n });\n\n await storageOperations.groups.delete({ group });\n clearGroupsCache();\n\n await onGroupAfterDelete.publish({\n group\n });\n } catch (ex) {\n await onGroupDeleteError.publish({\n group,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code || \"DELETE_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n\n return true;\n };\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeGroupCreate: onGroupBeforeCreate,\n onAfterGroupCreate: onGroupAfterCreate,\n onBeforeGroupUpdate: onGroupBeforeUpdate,\n onAfterGroupUpdate: onGroupAfterUpdate,\n onBeforeGroupDelete: onGroupBeforeDelete,\n onAfterGroupDelete: onGroupAfterDelete,\n /**\n * Released in 5.34.0\n */\n onGroupBeforeCreate,\n onGroupAfterCreate,\n onGroupCreateError,\n onGroupBeforeUpdate,\n onGroupAfterUpdate,\n onGroupUpdateError,\n onGroupBeforeDelete,\n onGroupAfterDelete,\n onGroupDeleteError,\n clearGroupsCache,\n getGroup: async id => {\n return context.benchmark.measure(\"headlessCms.crud.groups.getGroup\", async () => {\n return getGroup(id);\n });\n },\n listGroups: async params => {\n return context.benchmark.measure(\"headlessCms.crud.groups.listGroups\", async () => {\n return listGroups(params);\n });\n },\n createGroup: async input => {\n return context.benchmark.measure(\"headlessCms.crud.groups.createGroup\", async () => {\n return createGroup(input);\n });\n },\n updateGroup: async (id, input) => {\n return context.benchmark.measure(\"headlessCms.crud.groups.updateGroup\", async () => {\n return updateGroup(id, input);\n });\n },\n deleteGroup: async id => {\n return context.benchmark.measure(\"headlessCms.crud.groups.deleteGroup\", async () => {\n return deleteGroup(id);\n });\n }\n };\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAgBA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AAIA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AACA,IAAAO,aAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AAIA,IAAAS,MAAA,GAAAT,OAAA;AAEA,IAAAU,YAAA,GAAAV,OAAA;AAWO,MAAMW,qBAAqB,GAAIC,MAAmC,IAAsB;EAC3F,MAAM;IACFC,SAAS;IACTC,WAAW;IACXC,SAAS;IACTC,iBAAiB;IACjBC,sBAAsB;IACtBC;EACJ,CAAC,GAAGN,MAAM;EAEV,MAAMO,WAAW,GAAG;IAChBC,UAAU,EAAE,IAAIC,mBAAU,CAAC,YAAY;MACnC,MAAMC,MAAM,GAAGT,SAAS,CAAC,CAAC,CAACU,EAAE;MAC7B,MAAMC,MAAM,GAAGT,SAAS,CAAC,CAAC,CAACU,IAAI;MAE/B,MAAMC,aAAa,GAAGC,kBAAkB,CAAC,CAAC,CAACC,GAAG,CAACC,KAAK,IAAI;QACpD,WAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOF,KAAK;UACRP,MAAM,EAAEO,KAAK,CAACP,MAAM,IAAIA,MAAM;UAC9BE,MAAM,EAAEK,KAAK,CAACL,MAAM,IAAIA;QAAM;MAEtC,CAAC,CAAC;MAEF,MAAMQ,MAAM,GAAG,MAAMhB,iBAAiB,CAACgB,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHZ,MAAM,EAAET,SAAS,CAAC,CAAC,CAACU,EAAE;UACtBC,MAAM,EAAET,SAAS,CAAC,CAAC,CAACU;QACxB;MACJ,CAAC,CAAC;MAEF,OAAO,CAACO,MAAM,CAACG,MAAM,CAACT,aAAa,CAAC,CAAC;IACzC,CAAC;EACL,CAAC;EAED,MAAMU,eAAe,GAAG,IAAIC,GAAG,CAA8B,CAAC;EAC9D,MAAMC,gBAAgB,GAAGA,CAAA,KAAY;IACjC,KAAK,MAAMC,MAAM,IAAIC,MAAM,CAACC,MAAM,CAACtB,WAAW,CAAC,EAAE;MAC7CoB,MAAM,CAACG,QAAQ,CAAC,CAAC;IACrB;EACJ,CAAC;EAED,MAAMf,kBAAkB,GAAGA,CAAA,KAAkB;IACzC,MAAML,MAAM,GAAGT,SAAS,CAAC,CAAC,CAACU,EAAE;IAC7B,MAAMC,MAAM,GAAGT,SAAS,CAAC,CAAC,CAACU,IAAI;IAE/B,OACIP,OAAO,CAACyB,OAAO,CACVC,MAAM,CAAiBC,8BAAc,CAACC,IAAI;IAC3C;AAChB;AACA;AACA,OAHgB,CAICC,MAAM,CAACC,MAAM,IAAI;MACd,MAAM;QAAE1B,MAAM,EAAE2B,CAAC;QAAEzB,MAAM,EAAE0B;MAAE,CAAC,GAAGF,MAAM,CAACG,iBAAiB;MACzD,IAAIF,CAAC,IAAIA,CAAC,KAAK3B,MAAM,EAAE;QACnB,OAAO,KAAK;MAChB,CAAC,MAAM,IAAI4B,CAAC,IAAIA,CAAC,KAAK1B,MAAM,EAAE;QAC1B,OAAO,KAAK;MAChB;MACA,OAAO,IAAI;IACf,CAAC,CAAC,CACDI,GAAG,CAACoB,MAAM,IAAI;MACX,WAAAlB,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOiB,MAAM,CAACG,iBAAiB;QAC3B7B,MAAM;QACNE,MAAM;QACN4B,aAAa,EAAElC,OAAO,CAACmC;MAAc;IAE7C,CAAC,CAAC;EAEd,CAAC;EAED,MAAMC,qBAAqB,GAAG,MAAO/B,EAAU,IAAK;IAChD,MAAMS,MAAM,GAAG,MAAMb,WAAW,CAACC,UAAU,CAACmC,IAAI,CAAC,YAAY,CAAC;IAE9D,MAAM1B,KAAK,GAAGG,MAAM,CAACwB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAAClC,EAAE,KAAKA,EAAE,CAAC;IAE3C,IAAI,CAACM,KAAK,EAAE;MACR,MAAM,IAAI6B,6BAAa,CAAE,cAAanC,EAAG,kBAAiB,CAAC;IAC/D;IACA,OAAOM,KAAK;EAChB,CAAC;EAED,MAAM8B,uBAAuB,GAAG,MAAAA,CAAA,KAAY;IACxC,IAAI;MACA,OAAO,MAAMxC,WAAW,CAACC,UAAU,CAACmC,IAAI,CAAC,YAAY,CAAC;IAC1D,CAAC,CAAC,OAAOK,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CAACD,EAAE,CAACE,OAAO,EAAEF,EAAE,CAACnC,IAAI,IAAI,YAAY,MAAAK,cAAA,CAAAC,OAAA,MACjD6B,EAAE,CAACG,IAAI,IAAI,CAAC,CAAC,CACpB,CAAC;IACN;EACJ,CAAC;;EAED;AACJ;AACA;EACI,MAAMC,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,mBAAmB,GACrB,IAAAH,mBAAW,EAAiC,yBAAyB,CAAC;EAC1E,MAAMI,kBAAkB,GAAG,IAAAJ,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F,MAAMK,kBAAkB,GAAG,IAAAL,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F;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;;EAE/F;AACJ;AACA;EACI,IAAAS,qCAAuB,EAAC;IACpBV,mBAAmB;IACnBrB,OAAO,EAAEzB,OAAO,CAACyB,OAAO;IACxB3B;EACJ,CAAC,CAAC;EACF,IAAA2D,qCAAuB,EAAC;IACpBP,mBAAmB;IACnBzB,OAAO,EAAEzB,OAAO,CAACyB;EACrB,CAAC,CAAC;EACF,IAAAiC,qCAAuB,EAAC;IACpBL,mBAAmB;IACnB5B,OAAO,EAAEzB,OAAO,CAACyB,OAAO;IACxB3B;EACJ,CAAC,CAAC;EACF;AACJ;AACA;EACI,MAAM6D,QAAqC,GAAG,MAAMtD,EAAE,IAAI;IACtD,MAAMN,sBAAsB,CAAC6D,MAAM,CAAC;MAAEC,GAAG,EAAE;IAAI,CAAC,CAAC;IAEjD,MAAMlD,KAAK,GAAG,MAAMyB,qBAAqB,CAAC/B,EAAE,CAAC;IAE7C,MAAMN,sBAAsB,CAAC6D,MAAM,CAAC;MAAEE,IAAI,EAAEnD,KAAK,CAACoD;IAAU,CAAC,CAAC;IAC9D,MAAMhE,sBAAsB,CAACiE,oBAAoB,CAAC;MAC9CrD;IACJ,CAAC,CAAC;IAEF,OAAOA,KAAK;EAChB,CAAC;EAED,MAAMT,UAAyC,GAAG,MAAMR,MAAM,IAAI;IAAA,IAAAuE,YAAA;IAC9D,MAAM;MAAEjD;IAAM,CAAC,GAAGtB,MAAM,IAAI,CAAC,CAAC;IAE9B,MAAM;MAAEU,MAAM;MAAEE;IAAO,CAAC,GAAGU,KAAK,IAAI,CAAC,CAAC;IAEtC,MAAMjB,sBAAsB,CAAC6D,MAAM,CAAC;MAAEC,GAAG,EAAE;IAAI,CAAC,CAAC;;IAEjD;AACR;AACA;AACA;AACA;IACQ,MAAMK,GAAG,GAAGC,IAAI,CAACC,SAAS,CAAC;MACvBhE,MAAM,EAAEA,MAAM,IAAIT,SAAS,CAAC,CAAC,CAACU,EAAE;MAChCC,MAAM,EAAEA,MAAM,IAAIT,SAAS,CAAC,CAAC,CAACU,IAAI;MAClC8D,QAAQ,EAAErE,OAAO,CAACsE,QAAQ,CAACC,sBAAsB,CAAC,CAAC,IAAAN,YAAA,GAAGrE,WAAW,CAAC,CAAC,cAAAqE,YAAA,uBAAbA,YAAA,CAAe5D,EAAE,GAAGmE;IAC9E,CAAC,CAAC;IACF,IAAItD,eAAe,CAACuD,GAAG,CAACP,GAAG,CAAC,EAAE;MAC1B,OAAOhD,eAAe,CAACwD,GAAG,CAACR,GAAG,CAAC;IACnC;IAEA,MAAMS,MAAM,GAAG,MAAAA,CAAA,KAAY;MACvB,MAAMC,QAAQ,GAAG,MAAMnC,uBAAuB,CAAC,CAAC;MAEhD,OAAO,IAAAoC,wBAAW,EAACD,QAAQ,EAAE,MAAMjE,KAAK,IAAI;QACxC,MAAMmE,SAAS,GAAG,MAAM/E,sBAAsB,CAAC6D,MAAM,CACjD;UAAEE,IAAI,EAAEnD,KAAK,CAACoD;QAAU,CAAC,EACzB;UAAEgB,KAAK,EAAE;QAAM,CACnB,CAAC;QAED,IAAI,CAACD,SAAS,EAAE;UACZ,OAAO,KAAK;QAChB;QAEA,OAAO,MAAM/E,sBAAsB,CAACiF,cAAc,CAAC;UAC/CrE;QACJ,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC;IAEDO,eAAe,CAAC+D,GAAG,CAACf,GAAG,EAAES,MAAM,CAAC,CAAC,CAAC;IAElC,OAAOzD,eAAe,CAACwD,GAAG,CAACR,GAAG,CAAC;EACnC,CAAC;EAED,MAAMgB,WAA2C,GAAG,MAAMC,KAAK,IAAI;IAC/D,MAAMpF,sBAAsB,CAAC6D,MAAM,CAAC;MAAEC,GAAG,EAAE;IAAI,CAAC,CAAC;IAEjD,MAAMuB,MAAM,GAAG,MAAM,IAAAC,uCAA2B,EAAC,CAAC,CAACC,cAAc,CAACH,KAAK,CAAC;IAExE,IAAI,CAACC,MAAM,CAACG,OAAO,EAAE;MACjB,MAAM,IAAAC,qBAAc,EAACJ,MAAM,CAACK,KAAK,CAAC;IACtC;IACA,MAAM5C,IAAI,GAAGuC,MAAM,CAACvC,IAAI;IAExB,MAAMwB,QAAQ,GAAGzE,WAAW,CAAC,CAAC;IAE9B,MAAMS,EAAE,GAAG,IAAAqF,YAAK,EAAC,CAAC;IAClB,MAAM/E,KAAe,OAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACdgC,IAAI;MACPxC,EAAE;MACFD,MAAM,EAAET,SAAS,CAAC,CAAC,CAACU,EAAE;MACtBC,MAAM,EAAET,SAAS,CAAC,CAAC,CAACU,IAAI;MACxBoF,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MACnCC,OAAO,EAAE,IAAIF,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MACjC9B,SAAS,EAAE;QACP1D,EAAE,EAAEgE,QAAQ,CAAChE,EAAE;QACf0F,WAAW,EAAE1B,QAAQ,CAAC0B,WAAW;QACjCnE,IAAI,EAAEyC,QAAQ,CAACzC;MACnB,CAAC;MACDM,aAAa,EAAElC,OAAO,CAACmC;IAAc,EACxC;IACD,IAAI;MACA,MAAMW,mBAAmB,CAACkD,OAAO,CAAC;QAC9BrF;MACJ,CAAC,CAAC;MAEF,MAAMyE,MAAM,GAAG,MAAMtF,iBAAiB,CAACgB,MAAM,CAACmF,MAAM,CAAC;QACjDtF;MACJ,CAAC,CAAC;MAEFS,gBAAgB,CAAC,CAAC;MAElB,MAAM4B,kBAAkB,CAACgD,OAAO,CAAC;QAC7BrF,KAAK,EAAEyE;MACX,CAAC,CAAC;MAEF,OAAOzE,KAAK;IAChB,CAAC,CAAC,OAAO+B,EAAE,EAAE;MACT,MAAMO,kBAAkB,CAAC+C,OAAO,CAAC;QAC7Bb,KAAK;QACLxE,KAAK;QACL8E,KAAK,EAAE/C;MACX,CAAC,CAAC;MACF,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,kCAAkC,EAChDF,EAAE,CAACnC,IAAI,IAAI,iBAAiB,MAAAK,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MAEpB6B,EAAE,CAACG,IAAI,IAAI,CAAC,CAAC;QACjBlC,KAAK;QACLwE;MAAK,EAEb,CAAC;IACL;EACJ,CAAC;EACD,MAAMe,WAA2C,GAAG,MAAAA,CAAO7F,EAAE,EAAE8E,KAAK,KAAK;IACrE,MAAMpF,sBAAsB,CAAC6D,MAAM,CAAC;MAAEC,GAAG,EAAE;IAAI,CAAC,CAAC;IAEjD,MAAMsC,QAAQ,GAAG,MAAM/D,qBAAqB,CAAC/B,EAAE,CAAC;IAEhD,MAAMN,sBAAsB,CAAC6D,MAAM,CAAC;MAAEE,IAAI,EAAEqC,QAAQ,CAACpC;IAAU,CAAC,CAAC;IAEjE,MAAMqB,MAAM,GAAG,MAAM,IAAAgB,uCAA2B,EAAC,CAAC,CAACd,cAAc,CAACH,KAAK,CAAC;IAExE,IAAI,CAACC,MAAM,CAACG,OAAO,EAAE;MACjB,MAAM,IAAAC,qBAAc,EAACJ,MAAM,CAACK,KAAK,CAAC;IACtC;IACA,MAAM5C,IAAI,GAAGuC,MAAM,CAACvC,IAAI;;IAExB;AACR;AACA;IACQ,IAAIvB,MAAM,CAAC+E,IAAI,CAACxD,IAAI,CAAC,CAACyD,MAAM,KAAK,CAAC,EAAE;MAChC,OAAOH,QAAQ;IACnB;IAEA,MAAMxF,KAAe,OAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACdsF,QAAQ,GACRtD,IAAI;MACPvC,MAAM,EAAET,SAAS,CAAC,CAAC,CAACU,IAAI;MACxBH,MAAM,EAAET,SAAS,CAAC,CAAC,CAACU,EAAE;MACtByF,OAAO,EAAE,IAAIF,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;IAAC,EACpC;IAED,IAAI;MACA,MAAM3C,mBAAmB,CAAC8C,OAAO,CAAC;QAC9BG,QAAQ;QACRxF;MACJ,CAAC,CAAC;MAEF,MAAM4F,YAAY,GAAG,MAAMzG,iBAAiB,CAACgB,MAAM,CAAC0F,MAAM,CAAC;QACvD7F;MACJ,CAAC,CAAC;MACFS,gBAAgB,CAAC,CAAC;MAElB,MAAM+B,kBAAkB,CAAC6C,OAAO,CAAC;QAC7BG,QAAQ;QACRxF,KAAK,EAAE4F;MACX,CAAC,CAAC;MAEF,OAAOA,YAAY;IACvB,CAAC,CAAC,OAAO7D,EAAE,EAAE;MACT,MAAMU,kBAAkB,CAAC4C,OAAO,CAAC;QAC7Bb,KAAK;QACLgB,QAAQ;QACRxF,KAAK;QACL8E,KAAK,EAAE/C;MACX,CAAC,CAAC;MACF,MAAM,IAAIC,cAAW,CAACD,EAAE,CAACE,OAAO,EAAEF,EAAE,CAACnC,IAAI,IAAI,cAAc,EAAE;QACzDkF,KAAK,EAAE/C,EAAE;QACTyD,QAAQ;QACRxF,KAAK;QACLwE;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;EACD,MAAMsB,WAA2C,GAAG,MAAMpG,EAAE,IAAI;IAC5D,MAAMN,sBAAsB,CAAC6D,MAAM,CAAC;MAAEC,GAAG,EAAE;IAAI,CAAC,CAAC;IAEjD,MAAMlD,KAAK,GAAG,MAAMyB,qBAAqB,CAAC/B,EAAE,CAAC;IAE7C,MAAMN,sBAAsB,CAAC6D,MAAM,CAAC;MAAEE,IAAI,EAAEnD,KAAK,CAACoD;IAAU,CAAC,CAAC;IAE9D,IAAI;MACA,MAAMV,mBAAmB,CAAC2C,OAAO,CAAC;QAC9BrF;MACJ,CAAC,CAAC;MAEF,MAAMb,iBAAiB,CAACgB,MAAM,CAAC4F,MAAM,CAAC;QAAE/F;MAAM,CAAC,CAAC;MAChDS,gBAAgB,CAAC,CAAC;MAElB,MAAMkC,kBAAkB,CAAC0C,OAAO,CAAC;QAC7BrF;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAO+B,EAAE,EAAE;MACT,MAAMa,kBAAkB,CAACyC,OAAO,CAAC;QAC7BrF,KAAK;QACL8E,KAAK,EAAE/C;MACX,CAAC,CAAC;MACF,MAAM,IAAIC,cAAW,CAACD,EAAE,CAACE,OAAO,EAAEF,EAAE,CAACnC,IAAI,IAAI,cAAc,MAAAK,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACnD6B,EAAE,CAACG,IAAI,IAAI,CAAC,CAAC;QACjBxC;MAAE,EACL,CAAC;IACN;IAEA,OAAO,IAAI;EACf,CAAC;EAED,OAAO;IACH;AACR;AACA;IACQsG,mBAAmB,EAAE7D,mBAAmB;IACxC8D,kBAAkB,EAAE5D,kBAAkB;IACtC6D,mBAAmB,EAAE3D,mBAAmB;IACxC4D,kBAAkB,EAAE3D,kBAAkB;IACtC4D,mBAAmB,EAAE1D,mBAAmB;IACxC2D,kBAAkB,EAAE1D,kBAAkB;IACtC;AACR;AACA;IACQR,mBAAmB;IACnBE,kBAAkB;IAClBC,kBAAkB;IAClBC,mBAAmB;IACnBC,kBAAkB;IAClBC,kBAAkB;IAClBC,mBAAmB;IACnBC,kBAAkB;IAClBC,kBAAkB;IAClBnC,gBAAgB;IAChBuC,QAAQ,EAAE,MAAMtD,EAAE,IAAI;MAClB,OAAOL,OAAO,CAACiH,SAAS,CAACC,OAAO,CAAC,kCAAkC,EAAE,YAAY;QAC7E,OAAOvD,QAAQ,CAACtD,EAAE,CAAC;MACvB,CAAC,CAAC;IACN,CAAC;IACDH,UAAU,EAAE,MAAMR,MAAM,IAAI;MACxB,OAAOM,OAAO,CAACiH,SAAS,CAACC,OAAO,CAAC,oCAAoC,EAAE,YAAY;QAC/E,OAAOhH,UAAU,CAACR,MAAM,CAAC;MAC7B,CAAC,CAAC;IACN,CAAC;IACDwF,WAAW,EAAE,MAAMC,KAAK,IAAI;MACxB,OAAOnF,OAAO,CAACiH,SAAS,CAACC,OAAO,CAAC,qCAAqC,EAAE,YAAY;QAChF,OAAOhC,WAAW,CAACC,KAAK,CAAC;MAC7B,CAAC,CAAC;IACN,CAAC;IACDe,WAAW,EAAE,MAAAA,CAAO7F,EAAE,EAAE8E,KAAK,KAAK;MAC9B,OAAOnF,OAAO,CAACiH,SAAS,CAACC,OAAO,CAAC,qCAAqC,EAAE,YAAY;QAChF,OAAOhB,WAAW,CAAC7F,EAAE,EAAE8E,KAAK,CAAC;MACjC,CAAC,CAAC;IACN,CAAC;IACDsB,WAAW,EAAE,MAAMpG,EAAE,IAAI;MACrB,OAAOL,OAAO,CAACiH,SAAS,CAACC,OAAO,CAAC,qCAAqC,EAAE,YAAY;QAChF,OAAOT,WAAW,CAACpG,EAAE,CAAC;MAC1B,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC;AAAC8G,OAAA,CAAA1H,qBAAA,GAAAA,qBAAA"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_CmsGroupPlugin","_pubsub","_beforeUpdate","_beforeCreate","_beforeDelete","_validation","_utils","_filterAsync","_utils2","_listGroupsFromDatabase","_handlerGraphql","createModelGroupsCrud","params","getTenant","getIdentity","getLocale","storageOperations","modelGroupsPermissions","context","listAllGroupsCache","createMemoryCache","listPluginGroupsCache","clearGroupsCache","clear","fetchPluginGroups","tenant","locale","pluginGroups","plugins","byType","CmsGroupPlugin","type","cacheKey","createCacheKey","groups","map","contentModelGroup","group","id","slug","savedOn","getOrSet","filter","plugin","t","l","_objectSpread2","default","webinyVersion","WEBINY_VERSION","fetchGroups","_getIdentity","identity","security","isAuthorizationEnabled","undefined","databaseGroups","listGroupsFromDatabase","concat","filterAsync","ownsGroup","ensure","owns","createdBy","throw","canAccessGroup","onGroupBeforeCreate","createTopic","onGroupAfterCreate","onGroupCreateError","onGroupBeforeUpdate","onGroupAfterUpdate","onGroupUpdateError","onGroupBeforeDelete","onGroupAfterDelete","onGroupDeleteError","assignBeforeGroupCreate","assignBeforeGroupUpdate","assignBeforeGroupDelete","getGroup","rwd","withoutAuthorization","code","find","NotFoundError","ensureCanAccessGroup","listGroups","where","createGroup","input","result","createGroupCreateValidation","safeParseAsync","success","createZodError","error","data","mdbid","createdOn","Date","toISOString","displayName","publish","create","ex","WebinyError","message","updateGroup","original","createGroupUpdateValidation","Object","keys","length","updatedGroup","update","deleteGroup","delete","benchmark","measure","exports"],"sources":["contentModelGroup.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsGroup,\n CmsGroupContext,\n HeadlessCmsStorageOperations,\n OnGroupAfterCreateTopicParams,\n OnGroupAfterDeleteTopicParams,\n OnGroupAfterUpdateTopicParams,\n OnGroupBeforeCreateTopicParams,\n OnGroupBeforeDeleteTopicParams,\n OnGroupBeforeUpdateTopicParams,\n OnGroupCreateErrorTopicParams,\n OnGroupDeleteErrorTopicParams,\n OnGroupUpdateErrorTopicParams\n} from \"~/types\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\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 { assignBeforeGroupUpdate } from \"./contentModelGroup/beforeUpdate\";\nimport { assignBeforeGroupCreate } from \"./contentModelGroup/beforeCreate\";\nimport { assignBeforeGroupDelete } from \"./contentModelGroup/beforeDelete\";\nimport {\n createGroupCreateValidation,\n createGroupUpdateValidation\n} from \"~/crud/contentModelGroup/validation\";\nimport { createZodError, mdbid } from \"@webiny/utils\";\nimport { ModelGroupsPermissions } from \"~/utils/permissions/ModelGroupsPermissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { createCacheKey, createMemoryCache } from \"~/utils\";\nimport { listGroupsFromDatabase } from \"~/crud/contentModelGroup/listGroupsFromDatabase\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\n\nexport interface CreateModelGroupsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n modelGroupsPermissions: ModelGroupsPermissions;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelGroupsCrud = (params: CreateModelGroupsCrudParams): CmsGroupContext => {\n const {\n getTenant,\n getIdentity,\n getLocale,\n storageOperations,\n modelGroupsPermissions,\n context\n } = params;\n\n const listAllGroupsCache = createMemoryCache<Promise<CmsGroup[]>>();\n const listPluginGroupsCache = createMemoryCache<CmsGroup[]>();\n const clearGroupsCache = (): void => {\n listPluginGroupsCache.clear();\n listAllGroupsCache.clear();\n };\n\n const fetchPluginGroups = (tenant: string, locale: string): CmsGroup[] => {\n const pluginGroups = context.plugins.byType<CmsGroupPlugin>(CmsGroupPlugin.type);\n\n const cacheKey = createCacheKey({\n tenant,\n locale,\n groups: pluginGroups.map(({ contentModelGroup: group }) => {\n return `${group.id}#${group.slug}#${group.savedOn || \"unknown\"}`;\n })\n });\n\n return listPluginGroupsCache.getOrSet(cacheKey, () => {\n return (\n pluginGroups\n /**\n * We need to filter out groups 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: t, locale: l } = plugin.contentModelGroup;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModelGroup,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n });\n };\n\n const fetchGroups = async (tenant: string, locale: string) => {\n const pluginGroups = fetchPluginGroups(tenant, locale);\n /**\n * Maybe we can cache based on permissions, not the identity id?\n *\n * TODO: @adrian please check if possible.\n */\n const cacheKey = createCacheKey({\n tenant,\n locale,\n identity: context.security.isAuthorizationEnabled() ? getIdentity()?.id : undefined,\n groups: pluginGroups.map(group => {\n return `${group.id}#${group.slug}#${group.savedOn || \"unknown\"}`;\n })\n });\n\n return listAllGroupsCache.getOrSet(cacheKey, async () => {\n const databaseGroups = await listGroupsFromDatabase({\n storageOperations,\n tenant,\n locale\n });\n const groups = databaseGroups.concat(pluginGroups);\n\n return filterAsync(groups, async group => {\n const ownsGroup = await modelGroupsPermissions.ensure(\n { owns: group.createdBy },\n { throw: false }\n );\n\n if (!ownsGroup) {\n return false;\n }\n\n return await modelGroupsPermissions.canAccessGroup({\n group\n });\n });\n });\n };\n\n /**\n * Create\n */\n const onGroupBeforeCreate =\n createTopic<OnGroupBeforeCreateTopicParams>(\"cms.onGroupBeforeCreate\");\n const onGroupAfterCreate = createTopic<OnGroupAfterCreateTopicParams>(\"cms.onGroupAfterCreate\");\n const onGroupCreateError = createTopic<OnGroupCreateErrorTopicParams>(\"cms.onGroupCreateError\");\n /**\n * Update\n */\n const onGroupBeforeUpdate =\n createTopic<OnGroupBeforeUpdateTopicParams>(\"cms.onGroupBeforeUpdate\");\n const onGroupAfterUpdate = createTopic<OnGroupAfterUpdateTopicParams>(\"cms.onGroupAfterUpdate\");\n const onGroupUpdateError = createTopic<OnGroupUpdateErrorTopicParams>(\"cms.onGroupUpdateError\");\n /**\n * Delete\n */\n const onGroupBeforeDelete =\n createTopic<OnGroupBeforeDeleteTopicParams>(\"cms.onGroupBeforeDelete\");\n const onGroupAfterDelete = createTopic<OnGroupAfterDeleteTopicParams>(\"cms.onGroupAfterDelete\");\n const onGroupDeleteError = createTopic<OnGroupDeleteErrorTopicParams>(\"cms.onGroupDeleteError\");\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeGroupCreate({\n onGroupBeforeCreate,\n plugins: context.plugins,\n storageOperations\n });\n assignBeforeGroupUpdate({\n onGroupBeforeUpdate,\n plugins: context.plugins\n });\n assignBeforeGroupDelete({\n onGroupBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n /**\n * CRUD Methods\n */\n const getGroup: CmsGroupContext[\"getGroup\"] = async id => {\n await modelGroupsPermissions.ensure({ rwd: \"r\" });\n\n const groups = await context.security.withoutAuthorization(async () => {\n return fetchGroups(getTenant().id, getLocale().code);\n });\n const group = groups.find(group => group.id === id);\n if (!group) {\n throw new NotFoundError(`Cms Group \"${id}\" was not found!`);\n }\n\n await modelGroupsPermissions.ensure({ owns: group.createdBy });\n await modelGroupsPermissions.ensureCanAccessGroup({\n group\n });\n\n return group;\n };\n\n const listGroups: CmsGroupContext[\"listGroups\"] = async params => {\n const { where } = params || {};\n\n const { tenant, locale } = where || {};\n\n await modelGroupsPermissions.ensure({ rwd: \"r\" });\n\n return fetchGroups(tenant || getTenant().id, locale || getLocale().code);\n };\n\n const createGroup: CmsGroupContext[\"createGroup\"] = async input => {\n await modelGroupsPermissions.ensure({ rwd: \"w\" });\n\n const result = await createGroupCreateValidation().safeParseAsync(input);\n\n if (!result.success) {\n throw createZodError(result.error);\n }\n const data = result.data;\n\n const identity = getIdentity();\n\n const id = data.id || mdbid();\n const group: CmsGroup = {\n ...data,\n id,\n tenant: getTenant().id,\n locale: getLocale().code,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n webinyVersion: context.WEBINY_VERSION\n };\n try {\n await onGroupBeforeCreate.publish({\n group\n });\n\n const result = await storageOperations.groups.create({\n group\n });\n\n clearGroupsCache();\n\n await onGroupAfterCreate.publish({\n group: result\n });\n\n return group;\n } catch (ex) {\n await onGroupCreateError.publish({\n input,\n group,\n error: ex\n });\n throw new WebinyError(\n ex.message || \"Could not save data model group.\",\n ex.code || \"ERROR_ON_CREATE\",\n {\n ...(ex.data || {}),\n group,\n input\n }\n );\n }\n };\n const updateGroup: CmsGroupContext[\"updateGroup\"] = async (id, input) => {\n await modelGroupsPermissions.ensure({ rwd: \"w\" });\n\n const original = await getGroup(id);\n\n await modelGroupsPermissions.ensure({ owns: original.createdBy });\n\n const result = await createGroupUpdateValidation().safeParseAsync(input);\n\n if (!result.success) {\n throw createZodError(result.error);\n }\n const data = result.data;\n\n /**\n * No need to continue if no values were changed\n */\n if (Object.keys(data).length === 0) {\n return original;\n }\n\n const group: CmsGroup = {\n ...original,\n ...data,\n locale: getLocale().code,\n tenant: getTenant().id,\n savedOn: new Date().toISOString()\n };\n\n try {\n await onGroupBeforeUpdate.publish({\n original,\n group\n });\n\n const updatedGroup = await storageOperations.groups.update({\n group\n });\n clearGroupsCache();\n\n await onGroupAfterUpdate.publish({\n original,\n group: updatedGroup\n });\n\n return updatedGroup;\n } catch (ex) {\n await onGroupUpdateError.publish({\n input,\n original,\n group,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code || \"UPDATE_ERROR\", {\n error: ex,\n original,\n group,\n input\n });\n }\n };\n const deleteGroup: CmsGroupContext[\"deleteGroup\"] = async id => {\n await modelGroupsPermissions.ensure({ rwd: \"d\" });\n\n const group = await getGroup(id);\n\n await modelGroupsPermissions.ensure({ owns: group.createdBy });\n\n try {\n await onGroupBeforeDelete.publish({\n group\n });\n\n await storageOperations.groups.delete({ group });\n clearGroupsCache();\n\n await onGroupAfterDelete.publish({\n group\n });\n } catch (ex) {\n await onGroupDeleteError.publish({\n group,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code || \"DELETE_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n\n return true;\n };\n\n return {\n onGroupBeforeCreate,\n onGroupAfterCreate,\n onGroupCreateError,\n onGroupBeforeUpdate,\n onGroupAfterUpdate,\n onGroupUpdateError,\n onGroupBeforeDelete,\n onGroupAfterDelete,\n onGroupDeleteError,\n clearGroupsCache,\n getGroup: async id => {\n return context.benchmark.measure(\"headlessCms.crud.groups.getGroup\", async () => {\n return getGroup(id);\n });\n },\n listGroups: async params => {\n return context.benchmark.measure(\"headlessCms.crud.groups.listGroups\", async () => {\n return listGroups(params);\n });\n },\n createGroup: async input => {\n return context.benchmark.measure(\"headlessCms.crud.groups.createGroup\", async () => {\n return createGroup(input);\n });\n },\n updateGroup: async (id, input) => {\n return context.benchmark.measure(\"headlessCms.crud.groups.updateGroup\", async () => {\n return updateGroup(id, input);\n });\n },\n deleteGroup: async id => {\n return context.benchmark.measure(\"headlessCms.crud.groups.deleteGroup\", async () => {\n return deleteGroup(id);\n });\n }\n };\n};\n"],"mappings":"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"}
@@ -55,12 +55,7 @@ const createSystemCrud = params => {
55
55
  };
56
56
  return {
57
57
  /**
58
- * Deprecated - will be removed in 5.36.0
59
- */
60
- onBeforeSystemInstall: onSystemBeforeInstall,
61
- onAfterSystemInstall: onSystemAfterInstall,
62
- /**
63
- * Released in 5.34.0
58
+ * Lifecycle Events.
64
59
  */
65
60
  onSystemBeforeInstall,
66
61
  onSystemAfterInstall,
@@ -123,4 +118,6 @@ const createSystemCrud = params => {
123
118
  }
124
119
  };
125
120
  };
126
- exports.createSystemCrud = createSystemCrud;
121
+ exports.createSystemCrud = createSystemCrud;
122
+
123
+ //# sourceMappingURL=system.crud.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_apiSecurity","require","_error","_interopRequireDefault","_pubsub","initialContentModelGroup","name","slug","description","icon","createSystemCrud","params","getTenant","getLocale","storageOperations","context","getIdentity","onSystemBeforeInstall","createTopic","onSystemAfterInstall","onSystemInstallError","getVersion","system","get","tenant","id","version","setVersion","original","_objectSpread2","default","create","update","onBeforeSystemInstall","onAfterSystemInstall","getSystemVersion","setSystemVersion","installSystem","identity","NotAuthorizedError","publish","locale","code","cms","createGroup","ex","WebinyError","message","group","WEBINY_VERSION","error","data","exports"],"sources":["system.crud.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport WebinyError from \"@webiny/error\";\nimport {\n OnSystemAfterInstallTopicParams,\n OnSystemBeforeInstallTopicParams,\n CmsContext,\n CmsSystem,\n CmsSystemContext,\n HeadlessCmsStorageOperations,\n OnSystemInstallErrorTopicParams\n} from \"~/types\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\n\nconst initialContentModelGroup = {\n name: \"Ungrouped\",\n slug: \"ungrouped\",\n description: \"A generic content model group\",\n icon: \"fas/star\"\n};\n\ninterface CreateSystemCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createSystemCrud = (params: CreateSystemCrudParams): CmsSystemContext => {\n const { getTenant, getLocale, storageOperations, context, getIdentity } = params;\n\n const onSystemBeforeInstall = createTopic<OnSystemBeforeInstallTopicParams>(\n \"cms.onSystemBeforeInstall\"\n );\n const onSystemAfterInstall = createTopic<OnSystemAfterInstallTopicParams>(\n \"cms.onSystemAfterInstall\"\n );\n\n const onSystemInstallError = createTopic<OnSystemInstallErrorTopicParams>(\n \"cms.onSystemInstallError\"\n );\n\n const getVersion = async () => {\n if (!getTenant()) {\n return null;\n }\n\n const system = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n return system?.version || null;\n };\n\n const setVersion = async (version: string) => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n const system: CmsSystem = {\n ...(original || {}),\n version,\n tenant: getTenant().id\n };\n if (!original) {\n await storageOperations.system.create({\n system\n });\n return;\n }\n await storageOperations.system.update({\n system\n });\n };\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeSystemInstall: onSystemBeforeInstall,\n onAfterSystemInstall: onSystemAfterInstall,\n /**\n * Released in 5.34.0\n */\n onSystemBeforeInstall,\n onSystemAfterInstall,\n onSystemInstallError,\n getSystemVersion: getVersion,\n setSystemVersion: setVersion,\n installSystem: async (): Promise<void> => {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const version = await getVersion();\n if (version) {\n return;\n }\n try {\n /**\n * First trigger before install event.\n */\n await onSystemBeforeInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n\n /**\n * Add default content model group.\n */\n try {\n await context.cms.createGroup(initialContentModelGroup);\n } catch (ex) {\n throw new WebinyError(\n ex.message,\n \"CMS_INSTALLATION_CONTENT_MODEL_GROUP_ERROR\",\n {\n group: initialContentModelGroup\n }\n );\n }\n\n const system: CmsSystem = {\n version: context.WEBINY_VERSION,\n tenant: getTenant().id\n };\n /**\n * We need to create the system data.\n */\n await storageOperations.system.create({\n system\n });\n /**\n * And trigger after install event.\n */\n await onSystemAfterInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n } catch (ex) {\n await onSystemInstallError.publish({\n error: ex,\n tenant: getTenant().id,\n locale: getLocale().code\n });\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n }\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_apiSecurity","require","_error","_interopRequireDefault","_pubsub","initialContentModelGroup","name","slug","description","icon","createSystemCrud","params","getTenant","getLocale","storageOperations","context","getIdentity","onSystemBeforeInstall","createTopic","onSystemAfterInstall","onSystemInstallError","getVersion","system","get","tenant","id","version","setVersion","original","_objectSpread2","default","create","update","getSystemVersion","setSystemVersion","installSystem","identity","NotAuthorizedError","publish","locale","code","cms","createGroup","ex","WebinyError","message","group","WEBINY_VERSION","error","data","exports"],"sources":["system.crud.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport WebinyError from \"@webiny/error\";\nimport {\n OnSystemAfterInstallTopicParams,\n OnSystemBeforeInstallTopicParams,\n CmsContext,\n CmsSystem,\n CmsSystemContext,\n HeadlessCmsStorageOperations,\n OnSystemInstallErrorTopicParams\n} from \"~/types\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\n\nconst initialContentModelGroup = {\n name: \"Ungrouped\",\n slug: \"ungrouped\",\n description: \"A generic content model group\",\n icon: \"fas/star\"\n};\n\ninterface CreateSystemCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createSystemCrud = (params: CreateSystemCrudParams): CmsSystemContext => {\n const { getTenant, getLocale, storageOperations, context, getIdentity } = params;\n\n const onSystemBeforeInstall = createTopic<OnSystemBeforeInstallTopicParams>(\n \"cms.onSystemBeforeInstall\"\n );\n const onSystemAfterInstall = createTopic<OnSystemAfterInstallTopicParams>(\n \"cms.onSystemAfterInstall\"\n );\n\n const onSystemInstallError = createTopic<OnSystemInstallErrorTopicParams>(\n \"cms.onSystemInstallError\"\n );\n\n const getVersion = async () => {\n if (!getTenant()) {\n return null;\n }\n\n const system = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n return system?.version || null;\n };\n\n const setVersion = async (version: string) => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n const system: CmsSystem = {\n ...(original || {}),\n version,\n tenant: getTenant().id\n };\n if (!original) {\n await storageOperations.system.create({\n system\n });\n return;\n }\n await storageOperations.system.update({\n system\n });\n };\n\n return {\n /**\n * Lifecycle Events.\n */\n onSystemBeforeInstall,\n onSystemAfterInstall,\n onSystemInstallError,\n getSystemVersion: getVersion,\n setSystemVersion: setVersion,\n installSystem: async (): Promise<void> => {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const version = await getVersion();\n if (version) {\n return;\n }\n try {\n /**\n * First trigger before install event.\n */\n await onSystemBeforeInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n\n /**\n * Add default content model group.\n */\n try {\n await context.cms.createGroup(initialContentModelGroup);\n } catch (ex) {\n throw new WebinyError(\n ex.message,\n \"CMS_INSTALLATION_CONTENT_MODEL_GROUP_ERROR\",\n {\n group: initialContentModelGroup\n }\n );\n }\n\n const system: CmsSystem = {\n version: context.WEBINY_VERSION,\n tenant: getTenant().id\n };\n /**\n * We need to create the system data.\n */\n await storageOperations.system.create({\n system\n });\n /**\n * And trigger after install event.\n */\n await onSystemAfterInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n } catch (ex) {\n await onSystemInstallError.publish({\n error: ex,\n tenant: getTenant().id,\n locale: getLocale().code\n });\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n }\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { HeadlessCmsExportStructure } from "../types";
2
+ import { CmsContext } from "../../types";
3
+ export declare const createExportStructureContext: (context: CmsContext) => HeadlessCmsExportStructure;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createExportStructureContext = void 0;
7
+ var _sanitize = require("./sanitize");
8
+ const createExportStructureContext = context => {
9
+ return async params => {
10
+ const {
11
+ models: modelIdList
12
+ } = params;
13
+ const groups = (await context.cms.listGroups()).map(_sanitize.sanitizeGroup);
14
+ /**
15
+ * We need all the models which:
16
+ * * are accessible by current user
17
+ * * are not private
18
+ * * are included (if targets are provided)
19
+ * * are part of one of the groups we already fetched
20
+ */
21
+ const models = (await context.cms.listModels()).filter(model => {
22
+ var _model$fields;
23
+ if (model.isPrivate) {
24
+ return false;
25
+ } else if (!((_model$fields = model.fields) !== null && _model$fields !== void 0 && _model$fields.length)) {
26
+ return false;
27
+ } else if (!(modelIdList !== null && modelIdList !== void 0 && modelIdList.length)) {
28
+ return true;
29
+ }
30
+ return modelIdList.includes(model.modelId);
31
+ }).map(model => {
32
+ const group = groups.find(group => group.id === model.group.id);
33
+ if (!group) {
34
+ return null;
35
+ }
36
+ return (0, _sanitize.sanitizeModel)(group, model);
37
+ }).filter(model => {
38
+ return !!model;
39
+ });
40
+ return {
41
+ groups: groups.filter(group => {
42
+ return models.some(model => model.group === group.id);
43
+ }),
44
+ models
45
+ };
46
+ };
47
+ };
48
+ exports.createExportStructureContext = createExportStructureContext;
49
+
50
+ //# sourceMappingURL=exporting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_sanitize","require","createExportStructureContext","context","params","models","modelIdList","groups","cms","listGroups","map","sanitizeGroup","listModels","filter","model","_model$fields","isPrivate","fields","length","includes","modelId","group","find","id","sanitizeModel","some","exports"],"sources":["exporting.ts"],"sourcesContent":["import { HeadlessCmsExportStructure, SanitizedCmsModel } from \"~/export/types\";\nimport { CmsContext } from \"~/types\";\nimport { sanitizeGroup, sanitizeModel } from \"./sanitize\";\n\nexport const createExportStructureContext = (context: CmsContext): HeadlessCmsExportStructure => {\n return async params => {\n const { models: modelIdList } = params;\n const groups = (await context.cms.listGroups()).map(sanitizeGroup);\n /**\n * We need all the models which:\n * * are accessible by current user\n * * are not private\n * * are included (if targets are provided)\n * * are part of one of the groups we already fetched\n */\n const models = (await context.cms.listModels())\n .filter(model => {\n if (model.isPrivate) {\n return false;\n } else if (!model.fields?.length) {\n return false;\n } else if (!modelIdList?.length) {\n return true;\n }\n return modelIdList.includes(model.modelId);\n })\n .map(model => {\n const group = groups.find(group => group.id === model.group.id);\n if (!group) {\n return null;\n }\n return sanitizeModel(group, model);\n })\n .filter((model): model is SanitizedCmsModel => {\n return !!model;\n });\n\n return {\n groups: groups.filter(group => {\n return models.some(model => model.group === group.id);\n }),\n models\n };\n };\n};\n"],"mappings":";;;;;;AAEA,IAAAA,SAAA,GAAAC,OAAA;AAEO,MAAMC,4BAA4B,GAAIC,OAAmB,IAAiC;EAC7F,OAAO,MAAMC,MAAM,IAAI;IACnB,MAAM;MAAEC,MAAM,EAAEC;IAAY,CAAC,GAAGF,MAAM;IACtC,MAAMG,MAAM,GAAG,CAAC,MAAMJ,OAAO,CAACK,GAAG,CAACC,UAAU,CAAC,CAAC,EAAEC,GAAG,CAACC,uBAAa,CAAC;IAClE;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,MAAMN,MAAM,GAAG,CAAC,MAAMF,OAAO,CAACK,GAAG,CAACI,UAAU,CAAC,CAAC,EACzCC,MAAM,CAACC,KAAK,IAAI;MAAA,IAAAC,aAAA;MACb,IAAID,KAAK,CAACE,SAAS,EAAE;QACjB,OAAO,KAAK;MAChB,CAAC,MAAM,IAAI,GAAAD,aAAA,GAACD,KAAK,CAACG,MAAM,cAAAF,aAAA,eAAZA,aAAA,CAAcG,MAAM,GAAE;QAC9B,OAAO,KAAK;MAChB,CAAC,MAAM,IAAI,EAACZ,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEY,MAAM,GAAE;QAC7B,OAAO,IAAI;MACf;MACA,OAAOZ,WAAW,CAACa,QAAQ,CAACL,KAAK,CAACM,OAAO,CAAC;IAC9C,CAAC,CAAC,CACDV,GAAG,CAACI,KAAK,IAAI;MACV,MAAMO,KAAK,GAAGd,MAAM,CAACe,IAAI,CAACD,KAAK,IAAIA,KAAK,CAACE,EAAE,KAAKT,KAAK,CAACO,KAAK,CAACE,EAAE,CAAC;MAC/D,IAAI,CAACF,KAAK,EAAE;QACR,OAAO,IAAI;MACf;MACA,OAAO,IAAAG,uBAAa,EAACH,KAAK,EAAEP,KAAK,CAAC;IACtC,CAAC,CAAC,CACDD,MAAM,CAAEC,KAAK,IAAiC;MAC3C,OAAO,CAAC,CAACA,KAAK;IAClB,CAAC,CAAC;IAEN,OAAO;MACHP,MAAM,EAAEA,MAAM,CAACM,MAAM,CAACQ,KAAK,IAAI;QAC3B,OAAOhB,MAAM,CAACoB,IAAI,CAACX,KAAK,IAAIA,KAAK,CAACO,KAAK,KAAKA,KAAK,CAACE,EAAE,CAAC;MACzD,CAAC,CAAC;MACFlB;IACJ,CAAC;EACL,CAAC;AACL,CAAC;AAACqB,OAAA,CAAAxB,4BAAA,GAAAA,4BAAA"}
@@ -0,0 +1,3 @@
1
+ import { HeadlessCmsImport } from "../types";
2
+ import { CmsContext } from "../../types";
3
+ export declare const createImportCrud: (context: CmsContext) => HeadlessCmsImport;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createImportCrud = void 0;
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
+ var _error = _interopRequireDefault(require("@webiny/error"));
10
+ var _importData = require("./imports/importData");
11
+ var _validateInput = require("./imports/validateInput");
12
+ const fetchGroupsAndModels = async context => {
13
+ return await context.security.withoutAuthorization(async () => {
14
+ return {
15
+ groups: await context.cms.listGroups(),
16
+ models: await context.cms.listModels()
17
+ };
18
+ });
19
+ };
20
+ const createImportCrud = context => {
21
+ return {
22
+ validate: async params => {
23
+ const {
24
+ data
25
+ } = params;
26
+ const {
27
+ groups,
28
+ models
29
+ } = await fetchGroupsAndModels(context);
30
+ const validated = await (0, _validateInput.validateInput)({
31
+ groups,
32
+ models,
33
+ data
34
+ });
35
+ if (validated.error) {
36
+ return {
37
+ groups: validated.groups,
38
+ models: validated.models,
39
+ message: validated.error
40
+ };
41
+ }
42
+ return {
43
+ groups: validated.groups,
44
+ models: validated.models,
45
+ message: "Validation done."
46
+ };
47
+ },
48
+ structure: async params => {
49
+ const {
50
+ data
51
+ } = params;
52
+ const {
53
+ groups,
54
+ models
55
+ } = await fetchGroupsAndModels(context);
56
+ const validated = await (0, _validateInput.validateInput)({
57
+ groups,
58
+ models,
59
+ data
60
+ });
61
+ if (validated.error) {
62
+ throw new _error.default(validated.error, "VALIDATION_ERROR");
63
+ }
64
+ const imported = await (0, _importData.importData)({
65
+ context,
66
+ groups: validated.groups,
67
+ models: validated.models
68
+ });
69
+ const modelError = imported.models.find(model => !!model.error);
70
+ const error = imported.error || modelError;
71
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, imported), {}, {
72
+ message: error ? null : "Import done."
73
+ });
74
+ }
75
+ };
76
+ };
77
+ exports.createImportCrud = createImportCrud;
78
+
79
+ //# sourceMappingURL=importing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_importData","_validateInput","fetchGroupsAndModels","context","security","withoutAuthorization","groups","cms","listGroups","models","listModels","createImportCrud","validate","params","data","validated","validateInput","error","message","structure","WebinyError","imported","importData","modelError","find","model","_objectSpread2","default","exports"],"sources":["importing.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { HeadlessCmsImport, ValidCmsGroupResult, ValidCmsModelResult } from \"~/export/types\";\nimport { CmsContext } from \"~/types\";\nimport { importData } from \"./imports/importData\";\nimport { validateInput } from \"./imports/validateInput\";\n\nconst fetchGroupsAndModels = async (context: CmsContext) => {\n return await context.security.withoutAuthorization(async () => {\n return {\n groups: await context.cms.listGroups(),\n models: await context.cms.listModels()\n };\n });\n};\n\nexport const createImportCrud = (context: CmsContext): HeadlessCmsImport => {\n return {\n validate: async params => {\n const { data } = params;\n\n const { groups, models } = await fetchGroupsAndModels(context);\n\n const validated = await validateInput({\n groups,\n models,\n data\n });\n if (validated.error) {\n return {\n groups: validated.groups,\n models: validated.models,\n message: validated.error\n };\n }\n\n return {\n groups: validated.groups,\n models: validated.models,\n message: \"Validation done.\"\n };\n },\n structure: async params => {\n const { data } = params;\n\n const { groups, models } = await fetchGroupsAndModels(context);\n\n const validated = await validateInput({\n groups,\n models,\n data\n });\n if (validated.error) {\n throw new WebinyError(validated.error, \"VALIDATION_ERROR\");\n }\n\n const imported = await importData({\n context,\n groups: validated.groups as ValidCmsGroupResult[],\n models: validated.models as ValidCmsModelResult[]\n });\n\n const modelError = imported.models.find(model => !!model.error);\n const error = imported.error || modelError;\n\n return {\n ...imported,\n message: error ? null : \"Import done.\"\n };\n }\n };\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAEA,MAAMG,oBAAoB,GAAG,MAAOC,OAAmB,IAAK;EACxD,OAAO,MAAMA,OAAO,CAACC,QAAQ,CAACC,oBAAoB,CAAC,YAAY;IAC3D,OAAO;MACHC,MAAM,EAAE,MAAMH,OAAO,CAACI,GAAG,CAACC,UAAU,CAAC,CAAC;MACtCC,MAAM,EAAE,MAAMN,OAAO,CAACI,GAAG,CAACG,UAAU,CAAC;IACzC,CAAC;EACL,CAAC,CAAC;AACN,CAAC;AAEM,MAAMC,gBAAgB,GAAIR,OAAmB,IAAwB;EACxE,OAAO;IACHS,QAAQ,EAAE,MAAMC,MAAM,IAAI;MACtB,MAAM;QAAEC;MAAK,CAAC,GAAGD,MAAM;MAEvB,MAAM;QAAEP,MAAM;QAAEG;MAAO,CAAC,GAAG,MAAMP,oBAAoB,CAACC,OAAO,CAAC;MAE9D,MAAMY,SAAS,GAAG,MAAM,IAAAC,4BAAa,EAAC;QAClCV,MAAM;QACNG,MAAM;QACNK;MACJ,CAAC,CAAC;MACF,IAAIC,SAAS,CAACE,KAAK,EAAE;QACjB,OAAO;UACHX,MAAM,EAAES,SAAS,CAACT,MAAM;UACxBG,MAAM,EAAEM,SAAS,CAACN,MAAM;UACxBS,OAAO,EAAEH,SAAS,CAACE;QACvB,CAAC;MACL;MAEA,OAAO;QACHX,MAAM,EAAES,SAAS,CAACT,MAAM;QACxBG,MAAM,EAAEM,SAAS,CAACN,MAAM;QACxBS,OAAO,EAAE;MACb,CAAC;IACL,CAAC;IACDC,SAAS,EAAE,MAAMN,MAAM,IAAI;MACvB,MAAM;QAAEC;MAAK,CAAC,GAAGD,MAAM;MAEvB,MAAM;QAAEP,MAAM;QAAEG;MAAO,CAAC,GAAG,MAAMP,oBAAoB,CAACC,OAAO,CAAC;MAE9D,MAAMY,SAAS,GAAG,MAAM,IAAAC,4BAAa,EAAC;QAClCV,MAAM;QACNG,MAAM;QACNK;MACJ,CAAC,CAAC;MACF,IAAIC,SAAS,CAACE,KAAK,EAAE;QACjB,MAAM,IAAIG,cAAW,CAACL,SAAS,CAACE,KAAK,EAAE,kBAAkB,CAAC;MAC9D;MAEA,MAAMI,QAAQ,GAAG,MAAM,IAAAC,sBAAU,EAAC;QAC9BnB,OAAO;QACPG,MAAM,EAAES,SAAS,CAACT,MAA+B;QACjDG,MAAM,EAAEM,SAAS,CAACN;MACtB,CAAC,CAAC;MAEF,MAAMc,UAAU,GAAGF,QAAQ,CAACZ,MAAM,CAACe,IAAI,CAACC,KAAK,IAAI,CAAC,CAACA,KAAK,CAACR,KAAK,CAAC;MAC/D,MAAMA,KAAK,GAAGI,QAAQ,CAACJ,KAAK,IAAIM,UAAU;MAE1C,WAAAG,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACON,QAAQ;QACXH,OAAO,EAAED,KAAK,GAAG,IAAI,GAAG;MAAc;IAE9C;EACJ,CAAC;AACL,CAAC;AAACW,OAAA,CAAAjB,gBAAA,GAAAA,gBAAA"}