@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
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.validateModels = void 0;
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
+ var _validation = require("../../../crud/contentModel/validation");
10
+ var _types = require("../../types");
11
+ var _utils = require("@webiny/utils");
12
+ const addCodeMessage = params => {
13
+ if (params.action !== _types.CmsImportAction.CODE) {
14
+ return params;
15
+ }
16
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
17
+ errors: [{
18
+ message: `The model is defined via plugin and it cannot be updated.`,
19
+ code: "MODEL_IS_A_PLUGIN"
20
+ }]
21
+ });
22
+ };
23
+ const validateModel = params => {
24
+ const {
25
+ model,
26
+ models
27
+ } = params;
28
+ /**
29
+ * Let's check if model values that must be unique, already exist.
30
+ */
31
+ const existingModelId = models.find(m => m.modelId.toLowerCase() === model.modelId.toLowerCase());
32
+ const existingSingularApiName = models.find(m => m.singularApiName.toLowerCase() === model.singularApiName.toLowerCase() || m.singularApiName.toLowerCase() === model.pluralApiName.toString());
33
+ const existingPluralApiName = models.find(m => m.pluralApiName.toLowerCase() === model.pluralApiName.toLowerCase() || m.pluralApiName.toLowerCase() === model.singularApiName.toString());
34
+ const UPDATE_KEYWORD = existingModelId !== null && existingModelId !== void 0 && existingModelId.isPlugin ? _types.CmsImportAction.CODE : _types.CmsImportAction.UPDATE;
35
+ /**
36
+ * There are few cases that we must address:
37
+ *
38
+ * 1. modelId, singular and plural names do not exist in any of the models
39
+ * - this is OK, we can create the model
40
+ */
41
+ if (!existingModelId && !existingSingularApiName && !existingPluralApiName) {
42
+ return {
43
+ action: _types.CmsImportAction.CREATE
44
+ };
45
+ }
46
+ /**
47
+ * 2. modelId, singular and plural names are a part of a single model
48
+ * - this is OK, we can update the model
49
+ */
50
+ if (existingModelId && existingSingularApiName && existingPluralApiName && existingModelId.modelId === existingSingularApiName.modelId && existingModelId.modelId === existingPluralApiName.modelId) {
51
+ return addCodeMessage({
52
+ action: UPDATE_KEYWORD
53
+ });
54
+ }
55
+ /**
56
+ * 3. modelId already exists, but singular and plural names do not
57
+ * - this is OK, we can update the model
58
+ */
59
+ if (existingModelId && !existingSingularApiName && !existingPluralApiName) {
60
+ return addCodeMessage({
61
+ action: UPDATE_KEYWORD
62
+ });
63
+ }
64
+ /**
65
+ * 4. modelId already exists, but only the singular name exists.
66
+ * - this is OK, we can update the model
67
+ */
68
+ if (existingModelId && (existingSingularApiName === null || existingSingularApiName === void 0 ? void 0 : existingSingularApiName.modelId) === existingModelId.modelId && !existingPluralApiName) {
69
+ return addCodeMessage({
70
+ action: UPDATE_KEYWORD
71
+ });
72
+ }
73
+ /**
74
+ * 5. modelId already exists, but only the plural name exists.
75
+ * - this is OK, we can update the model
76
+ */
77
+ if (existingModelId && (existingPluralApiName === null || existingPluralApiName === void 0 ? void 0 : existingPluralApiName.modelId) === existingModelId.modelId && !existingSingularApiName) {
78
+ return addCodeMessage({
79
+ action: UPDATE_KEYWORD
80
+ });
81
+ }
82
+ /**
83
+ * 6. modelId already exists, but singular and plural names are in different models.
84
+ */
85
+ if (existingModelId && ((existingSingularApiName === null || existingSingularApiName === void 0 ? void 0 : existingSingularApiName.modelId) !== existingModelId.modelId || (existingPluralApiName === null || existingPluralApiName === void 0 ? void 0 : existingPluralApiName.modelId) !== existingModelId.modelId)) {
86
+ return {
87
+ action: _types.CmsImportAction.NONE,
88
+ errors: [{
89
+ message: `The model has singular or plural API names same as some other model.`,
90
+ code: "MODEL_API_NAMES_ERROR"
91
+ }]
92
+ };
93
+ }
94
+ return {
95
+ action: _types.CmsImportAction.NONE,
96
+ errors: [{
97
+ message: `The model cannot be imported.`,
98
+ code: "MODEL_IMPORT_ERROR",
99
+ data: {
100
+ modelId: existingModelId === null || existingModelId === void 0 ? void 0 : existingModelId.modelId,
101
+ singularApiName: existingSingularApiName === null || existingSingularApiName === void 0 ? void 0 : existingSingularApiName.modelId,
102
+ pluralApiName: existingPluralApiName === null || existingPluralApiName === void 0 ? void 0 : existingPluralApiName.modelId
103
+ }
104
+ }]
105
+ };
106
+ };
107
+ const getRelatedModels = params => {
108
+ const {
109
+ fields,
110
+ models
111
+ } = params;
112
+ const result = [];
113
+ for (const field of fields) {
114
+ if (field.type === "ref") {
115
+ for (const model of ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.models) || []) {
116
+ var _field$settings;
117
+ result.push(model.modelId);
118
+ }
119
+ } else if (field.type === "object") {
120
+ var _field$settings2;
121
+ result.push(...getRelatedModels({
122
+ fields: ((_field$settings2 = field.settings) === null || _field$settings2 === void 0 ? void 0 : _field$settings2.fields) || [],
123
+ models
124
+ }));
125
+ } else if (field.type === "dynamicZone") {
126
+ var _field$settings3;
127
+ const templates = ((_field$settings3 = field.settings) === null || _field$settings3 === void 0 ? void 0 : _field$settings3.templates) || [];
128
+ for (const tpl of templates) {
129
+ result.push(...getRelatedModels({
130
+ fields: tpl.fields || [],
131
+ models
132
+ }));
133
+ }
134
+ }
135
+ }
136
+ return Array.from(new Set(result));
137
+ };
138
+ const validateModels = async params => {
139
+ const {
140
+ groups,
141
+ models,
142
+ input
143
+ } = params;
144
+ const validation = (0, _validation.createModelImportValidation)();
145
+ return await Promise.all(input.map(async model => {
146
+ var _model$fields, _modelValidationResul;
147
+ const result = await validation.safeParseAsync(model);
148
+ if (!result.success) {
149
+ const error = (0, _utils.createZodError)(result.error);
150
+ return {
151
+ model: model,
152
+ action: _types.CmsImportAction.NONE,
153
+ error: {
154
+ message: error.message,
155
+ code: error.code,
156
+ data: error.data
157
+ }
158
+ };
159
+ }
160
+ const data = result.data;
161
+ const group = groups.find(g => g.id === data.group);
162
+ if (!group) {
163
+ return {
164
+ model: data,
165
+ action: _types.CmsImportAction.NONE,
166
+ error: {
167
+ message: `The model group "${data.group}" does not exist.`,
168
+ code: "MODEL_GROUP_NOT_FOUND"
169
+ }
170
+ };
171
+ } else if (!((_model$fields = model.fields) !== null && _model$fields !== void 0 && _model$fields.length)) {
172
+ return {
173
+ model: data,
174
+ action: _types.CmsImportAction.NONE,
175
+ error: {
176
+ message: `Model is missing fields.`,
177
+ code: "MODEL_FIELDS_MISSING"
178
+ }
179
+ };
180
+ }
181
+ const modelValidationResult = validateModel({
182
+ model: data,
183
+ models
184
+ });
185
+ if (!((_modelValidationResul = modelValidationResult.errors) !== null && _modelValidationResul !== void 0 && _modelValidationResul.length)) {
186
+ return {
187
+ model: data,
188
+ related: getRelatedModels({
189
+ fields: data.fields,
190
+ models
191
+ }),
192
+ action: modelValidationResult.action
193
+ };
194
+ }
195
+ return {
196
+ model: data,
197
+ action: modelValidationResult.action,
198
+ error: modelValidationResult.errors[0]
199
+ };
200
+ }));
201
+ };
202
+ exports.validateModels = validateModels;
203
+
204
+ //# sourceMappingURL=validateModels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_validation","require","_types","_utils","addCodeMessage","params","action","CmsImportAction","CODE","_objectSpread2","default","errors","message","code","validateModel","model","models","existingModelId","find","m","modelId","toLowerCase","existingSingularApiName","singularApiName","pluralApiName","toString","existingPluralApiName","UPDATE_KEYWORD","isPlugin","UPDATE","CREATE","NONE","data","getRelatedModels","fields","result","field","type","_field$settings","settings","push","_field$settings2","_field$settings3","templates","tpl","Array","from","Set","validateModels","groups","input","validation","createModelImportValidation","Promise","all","map","_model$fields","_modelValidationResul","safeParseAsync","success","error","createZodError","group","g","id","length","modelValidationResult","related","exports"],"sources":["validateModels.ts"],"sourcesContent":["import { createModelImportValidation } from \"~/crud/contentModel/validation\";\nimport {\n CmsImportAction,\n CmsImportError,\n HeadlessCmsImportStructureParamsDataModel,\n ValidatedCmsModel,\n ValidatedCmsModelResult\n} from \"~/export/types\";\nimport { CmsDynamicZoneTemplate, CmsGroup, CmsModel, CmsModelField } from \"~/types\";\nimport { createZodError } from \"@webiny/utils\";\n\ninterface CreateModelValidationParams {\n model: ValidatedCmsModel;\n models: CmsModel[];\n}\n\ninterface AddCodeMessageParams {\n action: CmsImportAction;\n}\n\nconst addCodeMessage = (params: AddCodeMessageParams) => {\n if (params.action !== CmsImportAction.CODE) {\n return params;\n }\n return {\n ...params,\n errors: [\n {\n message: `The model is defined via plugin and it cannot be updated.`,\n code: \"MODEL_IS_A_PLUGIN\"\n }\n ]\n };\n};\n\ninterface ValidationResult {\n errors?: CmsImportError[];\n action: CmsImportAction;\n}\n\nconst validateModel = (params: CreateModelValidationParams): ValidationResult => {\n const { model, models } = params;\n /**\n * Let's check if model values that must be unique, already exist.\n */\n const existingModelId = models.find(\n m => m.modelId.toLowerCase() === model.modelId.toLowerCase()\n );\n const existingSingularApiName = models.find(\n m =>\n m.singularApiName.toLowerCase() === model.singularApiName.toLowerCase() ||\n m.singularApiName.toLowerCase() === model.pluralApiName.toString()\n );\n const existingPluralApiName = models.find(\n m =>\n m.pluralApiName.toLowerCase() === model.pluralApiName.toLowerCase() ||\n m.pluralApiName.toLowerCase() === model.singularApiName.toString()\n );\n\n const UPDATE_KEYWORD = existingModelId?.isPlugin\n ? CmsImportAction.CODE\n : CmsImportAction.UPDATE;\n /**\n * There are few cases that we must address:\n *\n * 1. modelId, singular and plural names do not exist in any of the models\n * - this is OK, we can create the model\n */\n if (!existingModelId && !existingSingularApiName && !existingPluralApiName) {\n return {\n action: CmsImportAction.CREATE\n };\n }\n /**\n * 2. modelId, singular and plural names are a part of a single model\n * - this is OK, we can update the model\n */\n if (\n existingModelId &&\n existingSingularApiName &&\n existingPluralApiName &&\n existingModelId.modelId === existingSingularApiName.modelId &&\n existingModelId.modelId === existingPluralApiName.modelId\n ) {\n return addCodeMessage({\n action: UPDATE_KEYWORD\n });\n }\n /**\n * 3. modelId already exists, but singular and plural names do not\n * - this is OK, we can update the model\n */\n if (existingModelId && !existingSingularApiName && !existingPluralApiName) {\n return addCodeMessage({\n action: UPDATE_KEYWORD\n });\n }\n /**\n * 4. modelId already exists, but only the singular name exists.\n * - this is OK, we can update the model\n */\n if (\n existingModelId &&\n existingSingularApiName?.modelId === existingModelId.modelId &&\n !existingPluralApiName\n ) {\n return addCodeMessage({\n action: UPDATE_KEYWORD\n });\n }\n /**\n * 5. modelId already exists, but only the plural name exists.\n * - this is OK, we can update the model\n */\n if (\n existingModelId &&\n existingPluralApiName?.modelId === existingModelId.modelId &&\n !existingSingularApiName\n ) {\n return addCodeMessage({\n action: UPDATE_KEYWORD\n });\n }\n /**\n * 6. modelId already exists, but singular and plural names are in different models.\n */\n if (\n existingModelId &&\n (existingSingularApiName?.modelId !== existingModelId.modelId ||\n existingPluralApiName?.modelId !== existingModelId.modelId)\n ) {\n return {\n action: CmsImportAction.NONE,\n errors: [\n {\n message: `The model has singular or plural API names same as some other model.`,\n code: \"MODEL_API_NAMES_ERROR\"\n }\n ]\n };\n }\n\n return {\n action: CmsImportAction.NONE,\n errors: [\n {\n message: `The model cannot be imported.`,\n code: \"MODEL_IMPORT_ERROR\",\n data: {\n modelId: existingModelId?.modelId,\n singularApiName: existingSingularApiName?.modelId,\n pluralApiName: existingPluralApiName?.modelId\n }\n }\n ]\n };\n};\n\ninterface Params {\n groups: Pick<CmsGroup, \"id\">[];\n models: CmsModel[];\n input: HeadlessCmsImportStructureParamsDataModel[];\n}\n\ninterface GetRelatedModelsParams {\n fields: CmsModelField[];\n models: CmsModel[];\n}\n\nconst getRelatedModels = (params: GetRelatedModelsParams): string[] => {\n const { fields, models } = params;\n\n const result: string[] = [];\n for (const field of fields) {\n if (field.type === \"ref\") {\n for (const model of field.settings?.models || []) {\n result.push(model.modelId);\n }\n } else if (field.type === \"object\") {\n result.push(...getRelatedModels({ fields: field.settings?.fields || [], models }));\n } else if (field.type === \"dynamicZone\") {\n const templates = (field.settings?.templates || []) as CmsDynamicZoneTemplate[];\n for (const tpl of templates) {\n result.push(\n ...getRelatedModels({\n fields: tpl.fields || [],\n models\n })\n );\n }\n }\n }\n\n return Array.from(new Set(result));\n};\n\nexport const validateModels = async (params: Params): Promise<ValidatedCmsModelResult[]> => {\n const { groups, models, input } = params;\n\n const validation = createModelImportValidation();\n\n return await Promise.all(\n input.map(async (model): Promise<ValidatedCmsModelResult> => {\n const result = await validation.safeParseAsync(model);\n if (!result.success) {\n const error = createZodError(result.error);\n return {\n model: model as ValidatedCmsModel,\n action: CmsImportAction.NONE,\n error: {\n message: error.message,\n code: error.code,\n data: error.data\n }\n };\n }\n const data = result.data as unknown as ValidatedCmsModel;\n const group = groups.find(g => g.id === data.group);\n if (!group) {\n return {\n model: data,\n action: CmsImportAction.NONE,\n error: {\n message: `The model group \"${data.group}\" does not exist.`,\n code: \"MODEL_GROUP_NOT_FOUND\"\n }\n };\n } else if (!model.fields?.length) {\n return {\n model: data,\n action: CmsImportAction.NONE,\n error: {\n message: `Model is missing fields.`,\n code: \"MODEL_FIELDS_MISSING\"\n }\n };\n }\n\n const modelValidationResult = validateModel({\n model: data,\n models\n });\n\n if (!modelValidationResult.errors?.length) {\n return {\n model: data,\n related: getRelatedModels({\n fields: data.fields,\n models\n }),\n action: modelValidationResult.action\n };\n }\n return {\n model: data,\n action: modelValidationResult.action,\n error: modelValidationResult.errors[0]\n };\n })\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { CmsContext } from "../../types";
2
+ export declare const createExportCrud: (context: CmsContext) => {
3
+ structure: import("../types").HeadlessCmsExportStructure;
4
+ };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createExportCrud = void 0;
7
+ var _exporting = require("./exporting");
8
+ const createExportCrud = context => {
9
+ return {
10
+ structure: (0, _exporting.createExportStructureContext)(context)
11
+ };
12
+ };
13
+ exports.createExportCrud = createExportCrud;
14
+
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_exporting","require","createExportCrud","context","structure","createExportStructureContext","exports"],"sources":["index.ts"],"sourcesContent":["import { CmsContext } from \"~/types\";\nimport { createExportStructureContext } from \"./exporting\";\n\nexport const createExportCrud = (context: CmsContext) => {\n return {\n structure: createExportStructureContext(context)\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAEO,MAAMC,gBAAgB,GAAIC,OAAmB,IAAK;EACrD,OAAO;IACHC,SAAS,EAAE,IAAAC,uCAA4B,EAACF,OAAO;EACnD,CAAC;AACL,CAAC;AAACG,OAAA,CAAAJ,gBAAA,GAAAA,gBAAA"}
@@ -0,0 +1,4 @@
1
+ import { CmsGroup, CmsModel } from "../../types";
2
+ import { SanitizedCmsGroup, SanitizedCmsModel } from "../types";
3
+ export declare const sanitizeGroup: (group: CmsGroup) => SanitizedCmsGroup;
4
+ export declare const sanitizeModel: (group: Pick<CmsGroup, "id" | "name">, model: CmsModel) => SanitizedCmsModel;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.sanitizeModel = exports.sanitizeGroup = void 0;
7
+ const sanitizeGroup = group => {
8
+ return {
9
+ id: group.id,
10
+ name: group.name,
11
+ slug: group.slug,
12
+ description: group.description,
13
+ icon: group.icon
14
+ };
15
+ };
16
+ exports.sanitizeGroup = sanitizeGroup;
17
+ const sanitizeModel = (group, model) => {
18
+ return {
19
+ modelId: model.modelId,
20
+ name: model.name,
21
+ group: group.id,
22
+ icon: model.icon,
23
+ description: model.description,
24
+ singularApiName: model.singularApiName,
25
+ pluralApiName: model.pluralApiName,
26
+ fields: model.fields,
27
+ layout: model.layout,
28
+ titleFieldId: model.titleFieldId,
29
+ descriptionFieldId: model.descriptionFieldId,
30
+ imageFieldId: model.imageFieldId
31
+ };
32
+ };
33
+ exports.sanitizeModel = sanitizeModel;
34
+
35
+ //# sourceMappingURL=sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["sanitizeGroup","group","id","name","slug","description","icon","exports","sanitizeModel","model","modelId","singularApiName","pluralApiName","fields","layout","titleFieldId","descriptionFieldId","imageFieldId"],"sources":["sanitize.ts"],"sourcesContent":["import { CmsGroup, CmsModel } from \"~/types\";\nimport { SanitizedCmsGroup, SanitizedCmsModel } from \"~/export/types\";\n\nexport const sanitizeGroup = (group: CmsGroup): SanitizedCmsGroup => {\n return {\n id: group.id,\n name: group.name,\n slug: group.slug,\n description: group.description,\n icon: group.icon\n };\n};\n\nexport const sanitizeModel = (\n group: Pick<CmsGroup, \"id\" | \"name\">,\n model: CmsModel\n): SanitizedCmsModel => {\n return {\n modelId: model.modelId,\n name: model.name,\n group: group.id,\n icon: model.icon,\n description: model.description,\n singularApiName: model.singularApiName,\n pluralApiName: model.pluralApiName,\n fields: model.fields,\n layout: model.layout,\n titleFieldId: model.titleFieldId,\n descriptionFieldId: model.descriptionFieldId,\n imageFieldId: model.imageFieldId\n };\n};\n"],"mappings":";;;;;;AAGO,MAAMA,aAAa,GAAIC,KAAe,IAAwB;EACjE,OAAO;IACHC,EAAE,EAAED,KAAK,CAACC,EAAE;IACZC,IAAI,EAAEF,KAAK,CAACE,IAAI;IAChBC,IAAI,EAAEH,KAAK,CAACG,IAAI;IAChBC,WAAW,EAAEJ,KAAK,CAACI,WAAW;IAC9BC,IAAI,EAAEL,KAAK,CAACK;EAChB,CAAC;AACL,CAAC;AAACC,OAAA,CAAAP,aAAA,GAAAA,aAAA;AAEK,MAAMQ,aAAa,GAAGA,CACzBP,KAAoC,EACpCQ,KAAe,KACK;EACpB,OAAO;IACHC,OAAO,EAAED,KAAK,CAACC,OAAO;IACtBP,IAAI,EAAEM,KAAK,CAACN,IAAI;IAChBF,KAAK,EAAEA,KAAK,CAACC,EAAE;IACfI,IAAI,EAAEG,KAAK,CAACH,IAAI;IAChBD,WAAW,EAAEI,KAAK,CAACJ,WAAW;IAC9BM,eAAe,EAAEF,KAAK,CAACE,eAAe;IACtCC,aAAa,EAAEH,KAAK,CAACG,aAAa;IAClCC,MAAM,EAAEJ,KAAK,CAACI,MAAM;IACpBC,MAAM,EAAEL,KAAK,CAACK,MAAM;IACpBC,YAAY,EAAEN,KAAK,CAACM,YAAY;IAChCC,kBAAkB,EAAEP,KAAK,CAACO,kBAAkB;IAC5CC,YAAY,EAAER,KAAK,CAACQ;EACxB,CAAC;AACL,CAAC;AAACV,OAAA,CAAAC,aAAA,GAAAA,aAAA"}
@@ -0,0 +1,3 @@
1
+ import { ContextPlugin } from "@webiny/handler";
2
+ import { CmsContext } from "../../types";
3
+ export declare const createExportGraphQL: () => ContextPlugin<CmsContext>;
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createExportGraphQL = void 0;
7
+ var _plugins = require("../../plugins");
8
+ var _handlerGraphql = require("@webiny/handler-graphql");
9
+ var _handler = require("@webiny/handler");
10
+ const plugin = new _plugins.CmsGraphQLSchemaPlugin({
11
+ typeDefs: /* GraphQL */`
12
+ type CmsExportStructureResponse {
13
+ data: String
14
+ error: CmsError
15
+ }
16
+
17
+ input CmsImportStructureGroupInput {
18
+ id: ID!
19
+ name: String!
20
+ slug: String
21
+ description: String
22
+ icon: String!
23
+ }
24
+
25
+ input CmsImportStructureModelInput {
26
+ name: String!
27
+ singularApiName: String!
28
+ pluralApiName: String!
29
+ modelId: String!
30
+ group: String!
31
+ icon: String
32
+ description: String
33
+ layout: [[ID!]!]!
34
+ fields: [CmsContentModelFieldInput!]!
35
+ titleFieldId: String!
36
+ descriptionFieldId: String
37
+ imageFieldId: String
38
+ tags: [String!]
39
+ }
40
+
41
+ enum CmsImportGroupStructureAction {
42
+ create
43
+ update
44
+ code
45
+ none
46
+ }
47
+
48
+ enum CmsImportModelStructureAction {
49
+ create
50
+ update
51
+ code
52
+ none
53
+ }
54
+
55
+ input CmsImportStructureInput {
56
+ groups: [CmsImportStructureGroupInput!]!
57
+ models: [CmsImportStructureModelInput!]!
58
+ }
59
+
60
+ type CmsImportValidateResponseDataGroupResultItem {
61
+ id: String
62
+ name: String
63
+ }
64
+
65
+ type CmsImportValidateResponseDataGroupResult {
66
+ group: CmsImportValidateResponseDataGroupResultItem!
67
+ error: CmsError
68
+ action: CmsImportGroupStructureAction
69
+ }
70
+
71
+ type CmsImportValidateResponseDataModelResultItem {
72
+ modelId: String
73
+ name: String
74
+ group: String
75
+ }
76
+
77
+ type CmsImportValidateResponseDataModelResult {
78
+ model: CmsImportValidateResponseDataModelResultItem!
79
+ related: [String!]
80
+ error: CmsError
81
+ action: CmsImportModelStructureAction
82
+ }
83
+
84
+ type CmsImportValidateResponseData {
85
+ groups: [CmsImportValidateResponseDataGroupResult!]!
86
+ models: [CmsImportValidateResponseDataModelResult!]!
87
+ message: String!
88
+ }
89
+
90
+ type CmsImportValidateResponse {
91
+ data: CmsImportValidateResponseData
92
+ error: CmsError
93
+ }
94
+
95
+ type CmsImportStructureResponseDataGroupResultItem {
96
+ id: String!
97
+ name: String!
98
+ }
99
+ type CmsImportStructureResponseDataGroupResult {
100
+ group: CmsImportStructureResponseDataGroupResultItem!
101
+ error: CmsError
102
+ action: CmsImportGroupStructureAction
103
+ imported: Boolean
104
+ }
105
+
106
+ type CmsImportStructureResponseDataResultItem {
107
+ modelId: String!
108
+ name: String!
109
+ group: String!
110
+ }
111
+
112
+ type CmsImportStructureResponseDataModelResult {
113
+ model: CmsImportStructureResponseDataResultItem!
114
+ related: [String!]
115
+ error: CmsError
116
+ action: CmsImportModelStructureAction
117
+ imported: Boolean
118
+ }
119
+
120
+ type CmsImportStructureResponseData {
121
+ groups: [CmsImportStructureResponseDataGroupResult!]!
122
+ models: [CmsImportStructureResponseDataModelResult!]!
123
+ message: String
124
+ }
125
+
126
+ type CmsImportStructureResponse {
127
+ data: CmsImportStructureResponseData
128
+ error: CmsError
129
+ }
130
+
131
+ extend type Query {
132
+ exportStructure(models: [String!]): CmsExportStructureResponse!
133
+ }
134
+
135
+ extend type Mutation {
136
+ validateImportStructure(data: CmsImportStructureInput!): CmsImportValidateResponse!
137
+ importStructure(data: CmsImportStructureInput!): CmsImportStructureResponse!
138
+ }
139
+ `,
140
+ resolvers: {
141
+ Query: {
142
+ exportStructure: async (_, args, context) => {
143
+ try {
144
+ const result = await context.cms.export.structure({
145
+ models: args.models
146
+ });
147
+ return new _handlerGraphql.Response(JSON.stringify(result));
148
+ } catch (ex) {
149
+ return new _handlerGraphql.ErrorResponse(ex);
150
+ }
151
+ }
152
+ },
153
+ Mutation: {
154
+ validateImportStructure: async (_, args, context) => {
155
+ try {
156
+ const result = await context.cms.importing.validate({
157
+ data: args.data
158
+ });
159
+ return new _handlerGraphql.Response(result);
160
+ } catch (ex) {
161
+ return new _handlerGraphql.ErrorResponse(ex);
162
+ }
163
+ },
164
+ importStructure: async (_, args, context) => {
165
+ try {
166
+ const result = await context.cms.importing.structure({
167
+ data: args.data
168
+ });
169
+ return new _handlerGraphql.Response(result);
170
+ } catch (ex) {
171
+ return new _handlerGraphql.ErrorResponse(ex);
172
+ }
173
+ }
174
+ }
175
+ }
176
+ });
177
+ plugin.name = "headless-cms.graphql.export";
178
+ const createExportGraphQL = () => {
179
+ return new _handler.ContextPlugin(async context => {
180
+ if (!context.cms.MANAGE) {
181
+ return;
182
+ }
183
+ context.plugins.register(plugin);
184
+ });
185
+ };
186
+ exports.createExportGraphQL = createExportGraphQL;
187
+
188
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_plugins","require","_handlerGraphql","_handler","plugin","CmsGraphQLSchemaPlugin","typeDefs","resolvers","Query","exportStructure","_","args","context","result","cms","export","structure","models","Response","JSON","stringify","ex","ErrorResponse","Mutation","validateImportStructure","importing","validate","data","importStructure","name","createExportGraphQL","ContextPlugin","MANAGE","plugins","register","exports"],"sources":["index.ts"],"sourcesContent":["import { CmsGraphQLSchemaPlugin } from \"~/plugins\";\nimport { ErrorResponse, Response } from \"@webiny/handler-graphql\";\nimport { ContextPlugin } from \"@webiny/handler\";\nimport { CmsContext } from \"~/types\";\n\nconst plugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type CmsExportStructureResponse {\n data: String\n error: CmsError\n }\n\n input CmsImportStructureGroupInput {\n id: ID!\n name: String!\n slug: String\n description: String\n icon: String!\n }\n\n input CmsImportStructureModelInput {\n name: String!\n singularApiName: String!\n pluralApiName: String!\n modelId: String!\n group: String!\n icon: String\n description: String\n layout: [[ID!]!]!\n fields: [CmsContentModelFieldInput!]!\n titleFieldId: String!\n descriptionFieldId: String\n imageFieldId: String\n tags: [String!]\n }\n\n enum CmsImportGroupStructureAction {\n create\n update\n code\n none\n }\n\n enum CmsImportModelStructureAction {\n create\n update\n code\n none\n }\n\n input CmsImportStructureInput {\n groups: [CmsImportStructureGroupInput!]!\n models: [CmsImportStructureModelInput!]!\n }\n\n type CmsImportValidateResponseDataGroupResultItem {\n id: String\n name: String\n }\n\n type CmsImportValidateResponseDataGroupResult {\n group: CmsImportValidateResponseDataGroupResultItem!\n error: CmsError\n action: CmsImportGroupStructureAction\n }\n\n type CmsImportValidateResponseDataModelResultItem {\n modelId: String\n name: String\n group: String\n }\n\n type CmsImportValidateResponseDataModelResult {\n model: CmsImportValidateResponseDataModelResultItem!\n related: [String!]\n error: CmsError\n action: CmsImportModelStructureAction\n }\n\n type CmsImportValidateResponseData {\n groups: [CmsImportValidateResponseDataGroupResult!]!\n models: [CmsImportValidateResponseDataModelResult!]!\n message: String!\n }\n\n type CmsImportValidateResponse {\n data: CmsImportValidateResponseData\n error: CmsError\n }\n\n type CmsImportStructureResponseDataGroupResultItem {\n id: String!\n name: String!\n }\n type CmsImportStructureResponseDataGroupResult {\n group: CmsImportStructureResponseDataGroupResultItem!\n error: CmsError\n action: CmsImportGroupStructureAction\n imported: Boolean\n }\n\n type CmsImportStructureResponseDataResultItem {\n modelId: String!\n name: String!\n group: String!\n }\n\n type CmsImportStructureResponseDataModelResult {\n model: CmsImportStructureResponseDataResultItem!\n related: [String!]\n error: CmsError\n action: CmsImportModelStructureAction\n imported: Boolean\n }\n\n type CmsImportStructureResponseData {\n groups: [CmsImportStructureResponseDataGroupResult!]!\n models: [CmsImportStructureResponseDataModelResult!]!\n message: String\n }\n\n type CmsImportStructureResponse {\n data: CmsImportStructureResponseData\n error: CmsError\n }\n\n extend type Query {\n exportStructure(models: [String!]): CmsExportStructureResponse!\n }\n\n extend type Mutation {\n validateImportStructure(data: CmsImportStructureInput!): CmsImportValidateResponse!\n importStructure(data: CmsImportStructureInput!): CmsImportStructureResponse!\n }\n `,\n resolvers: {\n Query: {\n exportStructure: async (_, args, context) => {\n try {\n const result = await context.cms.export.structure({\n models: args.models\n });\n return new Response(JSON.stringify(result));\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n },\n Mutation: {\n validateImportStructure: async (_, args, context) => {\n try {\n const result = await context.cms.importing.validate({\n data: args.data\n });\n return new Response(result);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n },\n importStructure: async (_, args, context) => {\n try {\n const result = await context.cms.importing.structure({\n data: args.data\n });\n return new Response(result);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n }\n }\n});\nplugin.name = \"headless-cms.graphql.export\";\n\nexport const createExportGraphQL = () => {\n return new ContextPlugin<CmsContext>(async context => {\n if (!context.cms.MANAGE) {\n return;\n }\n context.plugins.register(plugin);\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAGA,MAAMG,MAAM,GAAG,IAAIC,+BAAsB,CAAC;EACtCC,QAAQ,EAAE,aAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;EACDC,SAAS,EAAE;IACPC,KAAK,EAAE;MACHC,eAAe,EAAE,MAAAA,CAAOC,CAAC,EAAEC,IAAI,EAAEC,OAAO,KAAK;QACzC,IAAI;UACA,MAAMC,MAAM,GAAG,MAAMD,OAAO,CAACE,GAAG,CAACC,MAAM,CAACC,SAAS,CAAC;YAC9CC,MAAM,EAAEN,IAAI,CAACM;UACjB,CAAC,CAAC;UACF,OAAO,IAAIC,wBAAQ,CAACC,IAAI,CAACC,SAAS,CAACP,MAAM,CAAC,CAAC;QAC/C,CAAC,CAAC,OAAOQ,EAAE,EAAE;UACT,OAAO,IAAIC,6BAAa,CAACD,EAAE,CAAC;QAChC;MACJ;IACJ,CAAC;IACDE,QAAQ,EAAE;MACNC,uBAAuB,EAAE,MAAAA,CAAOd,CAAC,EAAEC,IAAI,EAAEC,OAAO,KAAK;QACjD,IAAI;UACA,MAAMC,MAAM,GAAG,MAAMD,OAAO,CAACE,GAAG,CAACW,SAAS,CAACC,QAAQ,CAAC;YAChDC,IAAI,EAAEhB,IAAI,CAACgB;UACf,CAAC,CAAC;UACF,OAAO,IAAIT,wBAAQ,CAACL,MAAM,CAAC;QAC/B,CAAC,CAAC,OAAOQ,EAAE,EAAE;UACT,OAAO,IAAIC,6BAAa,CAACD,EAAE,CAAC;QAChC;MACJ,CAAC;MACDO,eAAe,EAAE,MAAAA,CAAOlB,CAAC,EAAEC,IAAI,EAAEC,OAAO,KAAK;QACzC,IAAI;UACA,MAAMC,MAAM,GAAG,MAAMD,OAAO,CAACE,GAAG,CAACW,SAAS,CAACT,SAAS,CAAC;YACjDW,IAAI,EAAEhB,IAAI,CAACgB;UACf,CAAC,CAAC;UACF,OAAO,IAAIT,wBAAQ,CAACL,MAAM,CAAC;QAC/B,CAAC,CAAC,OAAOQ,EAAE,EAAE;UACT,OAAO,IAAIC,6BAAa,CAACD,EAAE,CAAC;QAChC;MACJ;IACJ;EACJ;AACJ,CAAC,CAAC;AACFjB,MAAM,CAACyB,IAAI,GAAG,6BAA6B;AAEpC,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;EACrC,OAAO,IAAIC,sBAAa,CAAa,MAAMnB,OAAO,IAAI;IAClD,IAAI,CAACA,OAAO,CAACE,GAAG,CAACkB,MAAM,EAAE;MACrB;IACJ;IACApB,OAAO,CAACqB,OAAO,CAACC,QAAQ,CAAC9B,MAAM,CAAC;EACpC,CAAC,CAAC;AACN,CAAC;AAAC+B,OAAA,CAAAL,mBAAA,GAAAA,mBAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "./crud";
2
+ export * from "./graphql";
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _crud = require("./crud");
7
+ Object.keys(_crud).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _crud[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _crud[key];
14
+ }
15
+ });
16
+ });
17
+ var _graphql = require("./graphql");
18
+ Object.keys(_graphql).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _graphql[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _graphql[key];
25
+ }
26
+ });
27
+ });
28
+
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_crud","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_graphql"],"sources":["index.ts"],"sourcesContent":["export * from \"./crud\";\nexport * from \"./graphql\";\n"],"mappings":";;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,KAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,KAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,KAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,QAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,QAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,QAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,QAAA,CAAAL,GAAA;IAAA;EAAA;AAAA"}