@webiny/api-headless-cms 5.27.0 → 5.29.0-beta.0

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 (138) hide show
  1. package/content/contextSetup.js.map +1 -1
  2. package/content/graphQLHandlerFactory.js.map +1 -1
  3. package/content/parameterPlugins.js.map +1 -1
  4. package/content/plugins/CmsGroupPlugin.js.map +1 -1
  5. package/content/plugins/CmsModelPlugin.js.map +1 -1
  6. package/content/plugins/CmsParametersPlugin.js.map +1 -1
  7. package/content/plugins/buildSchemaPlugins.js.map +1 -1
  8. package/content/plugins/crud/contentEntry/afterDelete.js.map +1 -1
  9. package/content/plugins/crud/contentEntry/beforeCreate.js.map +1 -1
  10. package/content/plugins/crud/contentEntry/beforeUpdate.js.map +1 -1
  11. package/content/plugins/crud/contentEntry/entryDataValidation.js.map +1 -1
  12. package/content/plugins/crud/contentEntry/markLockedFields.js.map +1 -1
  13. package/content/plugins/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  14. package/content/plugins/crud/contentEntry.crud.js.map +1 -1
  15. package/content/plugins/crud/contentModel/afterCreate.js.map +1 -1
  16. package/content/plugins/crud/contentModel/afterCreateFrom.js.map +1 -1
  17. package/content/plugins/crud/contentModel/afterDelete.js.map +1 -1
  18. package/content/plugins/crud/contentModel/afterUpdate.js.map +1 -1
  19. package/content/plugins/crud/contentModel/beforeCreate.js +26 -4
  20. package/content/plugins/crud/contentModel/beforeCreate.js.map +1 -1
  21. package/content/plugins/crud/contentModel/beforeDelete.js.map +1 -1
  22. package/content/plugins/crud/contentModel/beforeUpdate.js +5 -188
  23. package/content/plugins/crud/contentModel/beforeUpdate.js.map +1 -1
  24. package/content/plugins/crud/contentModel/contentModelManagerFactory.js.map +1 -1
  25. package/content/plugins/crud/contentModel/createFieldModels.d.ts +2 -2
  26. package/content/plugins/crud/contentModel/createFieldModels.js +6 -2
  27. package/content/plugins/crud/contentModel/createFieldModels.js.map +1 -1
  28. package/content/plugins/crud/contentModel/idValidation.js.map +1 -1
  29. package/content/plugins/crud/contentModel/models.d.ts +1 -1
  30. package/content/plugins/crud/contentModel/models.js +43 -33
  31. package/content/plugins/crud/contentModel/models.js.map +1 -1
  32. package/content/plugins/crud/contentModel/validateLayout.d.ts +1 -1
  33. package/content/plugins/crud/contentModel/validateLayout.js +2 -3
  34. package/content/plugins/crud/contentModel/validateLayout.js.map +1 -1
  35. package/content/plugins/crud/contentModel/validateModelFields.d.ts +8 -0
  36. package/content/plugins/crud/contentModel/validateModelFields.js +201 -0
  37. package/content/plugins/crud/contentModel/validateModelFields.js.map +1 -0
  38. package/content/plugins/crud/contentModel.crud.js +7 -5
  39. package/content/plugins/crud/contentModel.crud.js.map +1 -1
  40. package/content/plugins/crud/contentModelGroup/beforeCreate.js.map +1 -1
  41. package/content/plugins/crud/contentModelGroup/beforeDelete.js.map +1 -1
  42. package/content/plugins/crud/contentModelGroup/beforeUpdate.js.map +1 -1
  43. package/content/plugins/crud/contentModelGroup.crud.js.map +1 -1
  44. package/content/plugins/crud/index.js.map +1 -1
  45. package/content/plugins/graphqlFields/boolean.js.map +1 -1
  46. package/content/plugins/graphqlFields/datetime.js.map +1 -1
  47. package/content/plugins/graphqlFields/file.js.map +1 -1
  48. package/content/plugins/graphqlFields/helpers.js.map +1 -1
  49. package/content/plugins/graphqlFields/index.js.map +1 -1
  50. package/content/plugins/graphqlFields/longText.js.map +1 -1
  51. package/content/plugins/graphqlFields/number.js.map +1 -1
  52. package/content/plugins/graphqlFields/object.js.map +1 -1
  53. package/content/plugins/graphqlFields/ref.js.map +1 -1
  54. package/content/plugins/graphqlFields/richText.js.map +1 -1
  55. package/content/plugins/graphqlFields/text.js.map +1 -1
  56. package/content/plugins/internalSecurity/InternalAuthenticationPlugin.js.map +1 -1
  57. package/content/plugins/internalSecurity/InternalAuthorizationPlugin.js.map +1 -1
  58. package/content/plugins/modelManager/DefaultCmsModelManager.js.map +1 -1
  59. package/content/plugins/modelManager/index.js.map +1 -1
  60. package/content/plugins/schema/baseSchema.js.map +1 -1
  61. package/content/plugins/schema/contentEntries.js.map +1 -1
  62. package/content/plugins/schema/contentModelGroups.js.map +1 -1
  63. package/content/plugins/schema/contentModels.js +3 -0
  64. package/content/plugins/schema/contentModels.js.map +1 -1
  65. package/content/plugins/schema/createFieldResolvers.js.map +1 -1
  66. package/content/plugins/schema/createManageResolvers.js.map +1 -1
  67. package/content/plugins/schema/createManageSDL.js.map +1 -1
  68. package/content/plugins/schema/createPreviewResolvers.js.map +1 -1
  69. package/content/plugins/schema/createReadResolvers.js.map +1 -1
  70. package/content/plugins/schema/createReadSDL.js.map +1 -1
  71. package/content/plugins/schema/resolvers/commonFieldResolvers.js.map +1 -1
  72. package/content/plugins/schema/resolvers/manage/resolveCreate.js.map +1 -1
  73. package/content/plugins/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  74. package/content/plugins/schema/resolvers/manage/resolveDelete.js.map +1 -1
  75. package/content/plugins/schema/resolvers/manage/resolveGet.js.map +1 -1
  76. package/content/plugins/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
  77. package/content/plugins/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
  78. package/content/plugins/schema/resolvers/manage/resolveList.js.map +1 -1
  79. package/content/plugins/schema/resolvers/manage/resolvePublish.js.map +1 -1
  80. package/content/plugins/schema/resolvers/manage/resolveRepublish.js.map +1 -1
  81. package/content/plugins/schema/resolvers/manage/resolveRequestChanges.js.map +1 -1
  82. package/content/plugins/schema/resolvers/manage/resolveRequestReview.js.map +1 -1
  83. package/content/plugins/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
  84. package/content/plugins/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  85. package/content/plugins/schema/resolvers/preview/resolveGet.js.map +1 -1
  86. package/content/plugins/schema/resolvers/preview/resolveList.js.map +1 -1
  87. package/content/plugins/schema/resolvers/read/resolveGet.js.map +1 -1
  88. package/content/plugins/schema/resolvers/read/resolveList.js.map +1 -1
  89. package/content/plugins/schema/schemaPlugins.js.map +1 -1
  90. package/content/plugins/storage/StorageTransformPlugin.js.map +1 -1
  91. package/content/plugins/storage/default.js.map +1 -1
  92. package/content/plugins/storage/object.js.map +1 -1
  93. package/content/plugins/utils/createTypeName.js.map +1 -1
  94. package/content/plugins/utils/entryStorage.js.map +1 -1
  95. package/content/plugins/utils/getEntryTitle.js.map +1 -1
  96. package/content/plugins/utils/getSchemaFromFieldPlugins.js.map +1 -1
  97. package/content/plugins/utils/pluralizedTypeName.js.map +1 -1
  98. package/content/plugins/utils/renderFields.js.map +1 -1
  99. package/content/plugins/utils/renderGetFilterFields.js.map +1 -1
  100. package/content/plugins/utils/renderInputFields.js.map +1 -1
  101. package/content/plugins/utils/renderListFilterFields.js.map +1 -1
  102. package/content/plugins/utils/renderSortEnum.js.map +1 -1
  103. package/content/plugins/validators/dateGte.js.map +1 -1
  104. package/content/plugins/validators/dateLte.js.map +1 -1
  105. package/content/plugins/validators/gte.js.map +1 -1
  106. package/content/plugins/validators/in.js.map +1 -1
  107. package/content/plugins/validators/index.js.map +1 -1
  108. package/content/plugins/validators/lte.js.map +1 -1
  109. package/content/plugins/validators/maxLength.js.map +1 -1
  110. package/content/plugins/validators/minLength.js.map +1 -1
  111. package/content/plugins/validators/pattern.js.map +1 -1
  112. package/content/plugins/validators/patternPlugins/email.js.map +1 -1
  113. package/content/plugins/validators/patternPlugins/index.js.map +1 -1
  114. package/content/plugins/validators/patternPlugins/lowerCase.js.map +1 -1
  115. package/content/plugins/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
  116. package/content/plugins/validators/patternPlugins/upperCase.js.map +1 -1
  117. package/content/plugins/validators/patternPlugins/upperCaseSpace.js.map +1 -1
  118. package/content/plugins/validators/patternPlugins/url.js.map +1 -1
  119. package/content/plugins/validators/required.js.map +1 -1
  120. package/content/plugins/validators/timeGte.js.map +1 -1
  121. package/content/plugins/validators/timeLte.js.map +1 -1
  122. package/content/plugins/validators/unique.js.map +1 -1
  123. package/index.js.map +1 -1
  124. package/migrateCMSPermissions.js.map +1 -1
  125. package/package.json +26 -25
  126. package/plugins/context.js.map +1 -1
  127. package/plugins/crud/index.js.map +1 -1
  128. package/plugins/crud/settings.crud.js.map +1 -1
  129. package/plugins/crud/system.crud.js.map +1 -1
  130. package/plugins/graphql/system.js.map +1 -1
  131. package/plugins/graphql.js.map +1 -1
  132. package/plugins/upgrades/index.js.map +1 -1
  133. package/plugins/upgrades/v5.5.0/helpers.js.map +1 -1
  134. package/plugins/upgrades/v5.5.0/index.js.map +1 -1
  135. package/transformers.js.map +1 -1
  136. package/types.d.ts +20 -0
  137. package/types.js.map +1 -1
  138. package/utils.js.map +1 -1
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.validateModelFields = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
13
+
14
+ var _error = _interopRequireDefault(require("@webiny/error"));
15
+
16
+ var _CmsModelPlugin = require("../../CmsModelPlugin");
17
+
18
+ var _createManageSDL = require("../../schema/createManageSDL");
19
+
20
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
+
22
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
23
+
24
+ const defaultTitleFieldId = "id";
25
+ const allowedTitleFieldTypes = ["text", "number"];
26
+
27
+ const getContentModelTitleFieldId = (fields, titleFieldId) => {
28
+ // if there is no title field defined either in input data or existing content model data
29
+ // we will take first text field that has no multiple values enabled
30
+ // or if initial titleFieldId is the default one also try to find first available text field
31
+ if (!titleFieldId || titleFieldId === defaultTitleFieldId) {
32
+ const titleField = fields.find(field => {
33
+ return field.type === "text" && !field.multipleValues;
34
+ });
35
+ return titleField ? titleField.fieldId : defaultTitleFieldId;
36
+ } // check existing titleFieldId for existence in the model
37
+ // for correct type
38
+ // and that it is not multiple values field
39
+
40
+
41
+ const target = fields.find(f => f.fieldId === titleFieldId);
42
+
43
+ if (!target) {
44
+ throw new _error.default(`Field does not exist in the model.`, "VALIDATION_ERROR", {
45
+ fieldId: titleFieldId,
46
+ fields
47
+ });
48
+ }
49
+
50
+ if (allowedTitleFieldTypes.includes(target.type) === false) {
51
+ throw new _error.default(`Only ${allowedTitleFieldTypes.join(", ")} and id fields can be used as an entry title.`, "ENTRY_TITLE_FIELD_TYPE", {
52
+ fieldId: target.fieldId,
53
+ type: target.type
54
+ });
55
+ }
56
+
57
+ if (target.multipleValues) {
58
+ throw new _error.default(`Fields that accept multiple values cannot be used as the entry title.`, "ENTRY_TITLE_FIELD_TYPE", {
59
+ fieldId: target.fieldId,
60
+ type: target.type
61
+ });
62
+ }
63
+
64
+ return target.fieldId;
65
+ };
66
+
67
+ const extractInvalidField = (model, err) => {
68
+ var _err$source;
69
+
70
+ const sdl = ((_err$source = err.source) === null || _err$source === void 0 ? void 0 : _err$source.body) || ""; // Find the invalid type
71
+
72
+ const {
73
+ line: lineNumber
74
+ } = err.locations ? err.locations[0] : {
75
+ line: 0
76
+ };
77
+ const sdlLines = sdl.split("\n");
78
+ let sdlLine;
79
+ let gqlType;
80
+
81
+ for (let i = lineNumber; i > 0; i--) {
82
+ if (sdlLine && sdlLine.includes("type ")) {
83
+ gqlType = sdlLine.match(/type\s+(.*?)\s+{/);
84
+ break;
85
+ }
86
+
87
+ sdlLine = sdlLines[i];
88
+ }
89
+
90
+ let invalidField = undefined;
91
+
92
+ if (Array.isArray(gqlType)) {
93
+ const fieldRegex = new RegExp(`([^\\s+].*?):\\s+\\[?${gqlType[1]}!?\\]?`);
94
+ const matched = sdl.match(fieldRegex);
95
+
96
+ if (matched) {
97
+ invalidField = matched[1];
98
+ }
99
+ }
100
+
101
+ let message = `See more details in the browser console.`;
102
+
103
+ if (invalidField) {
104
+ message = `Please review the definition of "${invalidField}" field.`;
105
+ }
106
+
107
+ return {
108
+ data: {
109
+ modelId: model.modelId,
110
+ sdl,
111
+ invalidField
112
+ },
113
+ code: "INVALID_MODEL_DEFINITION",
114
+ message: [`Model "${model.modelId}" was not saved!`, message].join("\n")
115
+ };
116
+ };
117
+
118
+ const validateModelFields = async params => {
119
+ const {
120
+ model,
121
+ plugins
122
+ } = params;
123
+ const modelPlugin = plugins.byType(_CmsModelPlugin.CmsModelPlugin.type).find(item => item.contentModel.modelId === model.modelId);
124
+
125
+ if (modelPlugin) {
126
+ throw new _error.default("Content models defined via plugins cannot be updated.", "CONTENT_MODEL_UPDATE_ERROR", {
127
+ modelId: model.modelId
128
+ });
129
+ }
130
+
131
+ const {
132
+ titleFieldId
133
+ } = model; // There should be fields/locked fields in either model or data to be updated.
134
+
135
+ const {
136
+ fields = [],
137
+ lockedFields = []
138
+ } = model; // Let's inspect the fields of the received content model. We prevent saving of a content model if it
139
+ // contains a field for which a "cms-model-field-to-graphql" plugin does not exist on the backend.
140
+
141
+ const fieldTypePlugins = plugins.byType("cms-model-field-to-graphql");
142
+
143
+ for (let i = 0; i < fields.length; i++) {
144
+ const field = fields[i];
145
+
146
+ if (!fieldTypePlugins.find(item => item.fieldType === field.type)) {
147
+ throw new Error(`Cannot update content model because of the unknown "${field.type}" field.`);
148
+ }
149
+ }
150
+
151
+ if (fields.length) {
152
+ // Make sure that this model can be safely converted to a GraphQL SDL
153
+ const schema = (0, _createManageSDL.createManageSDL)({
154
+ model,
155
+ fieldTypePlugins: fieldTypePlugins.reduce((acc, pl) => _objectSpread(_objectSpread({}, acc), {}, {
156
+ [pl.fieldType]: pl
157
+ }), {})
158
+ });
159
+
160
+ try {
161
+ (0, _graphqlTag.default)(schema);
162
+ } catch (err) {
163
+ throw new _error.default(extractInvalidField(model, err));
164
+ }
165
+ }
166
+
167
+ model.titleFieldId = getContentModelTitleFieldId(fields, titleFieldId);
168
+ const cmsLockedFieldPlugins = plugins.byType("cms-model-locked-field"); // We must not allow removal or changes in fields that are already in use in content entries.
169
+
170
+ for (const lockedField of lockedFields) {
171
+ const existingField = fields.find(item => item.fieldId === lockedField.fieldId);
172
+
173
+ if (!existingField) {
174
+ throw new _error.default(`Cannot remove the field "${lockedField.fieldId}" because it's already in use in created content.`, "ENTRY_FIELD_USED");
175
+ }
176
+
177
+ if (lockedField.multipleValues !== existingField.multipleValues) {
178
+ throw new _error.default(`Cannot change "multipleValues" for the "${lockedField.fieldId}" field because it's already in use in created content.`, "ENTRY_FIELD_USED");
179
+ }
180
+
181
+ if (lockedField.type !== existingField.type) {
182
+ throw new _error.default(`Cannot change field type for the "${lockedField.fieldId}" field because it's already in use in created content.`, "ENTRY_FIELD_USED");
183
+ } // Check `lockedField` invariant for specific field
184
+
185
+
186
+ const lockedFieldsByType = cmsLockedFieldPlugins.filter(pl => pl.fieldType === lockedField.type);
187
+
188
+ for (const plugin of lockedFieldsByType) {
189
+ if (typeof plugin.checkLockedField !== "function") {
190
+ continue;
191
+ }
192
+
193
+ plugin.checkLockedField({
194
+ lockedField,
195
+ field: existingField
196
+ });
197
+ }
198
+ }
199
+ };
200
+
201
+ exports.validateModelFields = validateModelFields;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["defaultTitleFieldId","allowedTitleFieldTypes","getContentModelTitleFieldId","fields","titleFieldId","titleField","find","field","type","multipleValues","fieldId","target","f","WebinyError","includes","join","extractInvalidField","model","err","sdl","source","body","line","lineNumber","locations","sdlLines","split","sdlLine","gqlType","i","match","invalidField","undefined","Array","isArray","fieldRegex","RegExp","matched","message","data","modelId","code","validateModelFields","params","plugins","modelPlugin","byType","CmsModelPlugin","item","contentModel","lockedFields","fieldTypePlugins","length","fieldType","Error","schema","createManageSDL","reduce","acc","pl","gql","cmsLockedFieldPlugins","lockedField","existingField","lockedFieldsByType","filter","plugin","checkLockedField"],"sources":["validateModelFields.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\nimport {\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin,\n CmsModelLockedFieldPlugin\n} from \"~/types\";\nimport { createManageSDL } from \"~/content/plugins/schema/createManageSDL\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { GraphQLError } from \"graphql\";\n\nconst defaultTitleFieldId = \"id\";\n\nconst allowedTitleFieldTypes = [\"text\", \"number\"];\n\nconst getContentModelTitleFieldId = (fields: CmsModelField[], titleFieldId?: string): string => {\n // if there is no title field defined either in input data or existing content model data\n // we will take first text field that has no multiple values enabled\n // or if initial titleFieldId is the default one also try to find first available text field\n if (!titleFieldId || titleFieldId === defaultTitleFieldId) {\n const titleField = fields.find(field => {\n return field.type === \"text\" && !field.multipleValues;\n });\n return titleField ? titleField.fieldId : defaultTitleFieldId;\n }\n // check existing titleFieldId for existence in the model\n // for correct type\n // and that it is not multiple values field\n const target = fields.find(f => f.fieldId === titleFieldId);\n if (!target) {\n throw new WebinyError(`Field does not exist in the model.`, \"VALIDATION_ERROR\", {\n fieldId: titleFieldId,\n fields\n });\n }\n\n if (allowedTitleFieldTypes.includes(target.type) === false) {\n throw new WebinyError(\n `Only ${allowedTitleFieldTypes.join(\n \", \"\n )} and id fields can be used as an entry title.`,\n \"ENTRY_TITLE_FIELD_TYPE\",\n {\n fieldId: target.fieldId,\n type: target.type\n }\n );\n }\n\n if (target.multipleValues) {\n throw new WebinyError(\n `Fields that accept multiple values cannot be used as the entry title.`,\n \"ENTRY_TITLE_FIELD_TYPE\",\n {\n fieldId: target.fieldId,\n type: target.type\n }\n );\n }\n\n return target.fieldId;\n};\n\nconst extractInvalidField = (model: CmsModel, err: GraphQLError) => {\n const sdl = err.source?.body || \"\";\n\n // Find the invalid type\n const { line: lineNumber } = err.locations\n ? err.locations[0]\n : {\n line: 0\n };\n const sdlLines = sdl.split(\"\\n\");\n let sdlLine;\n let gqlType;\n for (let i = lineNumber; i > 0; i--) {\n if (sdlLine && sdlLine.includes(\"type \")) {\n gqlType = sdlLine.match(/type\\s+(.*?)\\s+{/);\n break;\n }\n\n sdlLine = sdlLines[i];\n }\n\n let invalidField: string | undefined = undefined;\n if (Array.isArray(gqlType)) {\n const fieldRegex = new RegExp(`([^\\\\s+].*?):\\\\s+\\\\[?${gqlType[1]}!?\\\\]?`);\n\n const matched = sdl.match(fieldRegex);\n if (matched) {\n invalidField = matched[1];\n }\n }\n\n let message = `See more details in the browser console.`;\n if (invalidField) {\n message = `Please review the definition of \"${invalidField}\" field.`;\n }\n\n return {\n data: {\n modelId: model.modelId,\n sdl,\n invalidField\n },\n code: \"INVALID_MODEL_DEFINITION\",\n message: [`Model \"${model.modelId}\" was not saved!`, message].join(\"\\n\")\n };\n};\n\ninterface ValidateModelParams {\n model: CmsModel;\n plugins: PluginsContainer;\n}\n\nexport const validateModelFields = async (params: ValidateModelParams) => {\n const { model, plugins } = params;\n\n const modelPlugin = plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n .find(item => item.contentModel.modelId === model.modelId);\n\n if (modelPlugin) {\n throw new WebinyError(\n \"Content models defined via plugins cannot be updated.\",\n \"CONTENT_MODEL_UPDATE_ERROR\",\n {\n modelId: model.modelId\n }\n );\n }\n\n const { titleFieldId } = model;\n\n // There should be fields/locked fields in either model or data to be updated.\n const { fields = [], lockedFields = [] } = model;\n\n // Let's inspect the fields of the received content model. We prevent saving of a content model if it\n // contains a field for which a \"cms-model-field-to-graphql\" plugin does not exist on the backend.\n const fieldTypePlugins = plugins.byType<CmsModelFieldToGraphQLPlugin>(\n \"cms-model-field-to-graphql\"\n );\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n if (!fieldTypePlugins.find(item => item.fieldType === field.type)) {\n throw new Error(\n `Cannot update content model because of the unknown \"${field.type}\" field.`\n );\n }\n }\n\n if (fields.length) {\n // Make sure that this model can be safely converted to a GraphQL SDL\n const schema = createManageSDL({\n model,\n fieldTypePlugins: fieldTypePlugins.reduce(\n (acc, pl) => ({ ...acc, [pl.fieldType]: pl }),\n {}\n )\n });\n\n try {\n gql(schema);\n } catch (err) {\n throw new WebinyError(extractInvalidField(model, err));\n }\n }\n\n model.titleFieldId = getContentModelTitleFieldId(fields, titleFieldId);\n\n const cmsLockedFieldPlugins =\n plugins.byType<CmsModelLockedFieldPlugin>(\"cms-model-locked-field\");\n\n // We must not allow removal or changes in fields that are already in use in content entries.\n for (const lockedField of lockedFields) {\n const existingField = fields.find(item => item.fieldId === lockedField.fieldId);\n if (!existingField) {\n throw new WebinyError(\n `Cannot remove the field \"${lockedField.fieldId}\" because it's already in use in created content.`,\n \"ENTRY_FIELD_USED\"\n );\n }\n\n if (lockedField.multipleValues !== existingField.multipleValues) {\n throw new WebinyError(\n `Cannot change \"multipleValues\" for the \"${lockedField.fieldId}\" field because it's already in use in created content.`,\n \"ENTRY_FIELD_USED\"\n );\n }\n\n if (lockedField.type !== existingField.type) {\n throw new WebinyError(\n `Cannot change field type for the \"${lockedField.fieldId}\" field because it's already in use in created content.`,\n \"ENTRY_FIELD_USED\"\n );\n }\n\n // Check `lockedField` invariant for specific field\n const lockedFieldsByType = cmsLockedFieldPlugins.filter(\n pl => pl.fieldType === lockedField.type\n );\n for (const plugin of lockedFieldsByType) {\n if (typeof plugin.checkLockedField !== \"function\") {\n continue;\n }\n plugin.checkLockedField({\n lockedField,\n field: existingField\n });\n }\n }\n};\n"],"mappings":"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"}
@@ -262,6 +262,7 @@ const createModelsCrud = params => {
262
262
  throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
263
263
  }
264
264
 
265
+ const fields = await (0, _createFieldModels.createFieldModels)(input.fields);
265
266
  const identity = getIdentity();
266
267
  const model = {
267
268
  name: input.name,
@@ -281,11 +282,12 @@ const createModelsCrud = params => {
281
282
  },
282
283
  createdOn: new Date().toISOString(),
283
284
  savedOn: new Date().toISOString(),
284
- fields: [],
285
+ fields,
285
286
  lockedFields: [],
286
- layout: [],
287
+ layout: input.layout || [],
287
288
  webinyVersion: context.WEBINY_VERSION
288
289
  };
290
+ (0, _validateLayout.validateLayout)(model, fields);
289
291
  await onBeforeModelCreate.publish({
290
292
  input,
291
293
  model
@@ -449,18 +451,18 @@ const createModelsCrud = params => {
449
451
  };
450
452
  }
451
453
 
452
- const modelFields = await (0, _createFieldModels.createFieldModels)(original, inputData);
454
+ const fields = await (0, _createFieldModels.createFieldModels)(inputData.fields);
453
455
 
454
456
  const model = _objectSpread(_objectSpread(_objectSpread({}, original), input), {}, {
455
457
  group,
456
458
  tenant: original.tenant || getTenant().id,
457
459
  locale: original.locale || getLocale().code,
458
460
  webinyVersion: context.WEBINY_VERSION,
459
- fields: modelFields,
461
+ fields,
460
462
  savedOn: new Date().toISOString()
461
463
  });
462
464
 
463
- (0, _validateLayout.validateLayout)(model, modelFields);
465
+ (0, _validateLayout.validateLayout)(model, fields);
464
466
  await onBeforeModelUpdate.publish({
465
467
  input,
466
468
  original,
@@ -1 +1 @@
1
- {"version":3,"sources":["contentModel.crud.ts"],"names":["createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","model","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","set","modelId","checkModelPermissions","check","utils","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","webinyVersion","WEBINY_VERSION","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","fields","lockedFields","layout","publish","createdModel","create","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","data","CreateContentModelModelFrom","i18n","groups","updateModel","updatedData","UpdateContentModelModel","onlyDirty","keys","length","groupData","modelFields","deleteModel","delete","ex","WebinyError","message","error","getEntryManager","getManagers","getEntryManagers"],"mappings":"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","sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n CmsModelPermission,\n HeadlessCmsStorageOperations,\n BeforeModelCreateTopicParams,\n AfterModelCreateTopicParams,\n BeforeModelUpdateTopicParams,\n AfterModelUpdateTopicParams,\n BeforeModelDeleteTopicParams,\n AfterModelDeleteTopicParams,\n BeforeModelCreateFromTopicParams,\n AfterModelCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport DataLoader from \"dataloader\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport {\n CreateContentModelModel,\n CreateContentModelModelFrom,\n UpdateContentModelModel\n} from \"./contentModel/models\";\nimport { createFieldModels } from \"./contentModel/createFieldModels\";\nimport { validateLayout } from \"./contentModel/validateLayout\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\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 { assignBeforeModelCreate } from \"./contentModel/beforeCreate\";\nimport { assignBeforeModelUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignBeforeModelDelete } from \"./contentModel/beforeDelete\";\nimport { assignAfterModelCreate } from \"./contentModel/afterCreate\";\nimport { assignAfterModelUpdate } from \"./contentModel/afterUpdate\";\nimport { assignAfterModelDelete } from \"./contentModel/afterDelete\";\nimport { assignAfterModelCreateFrom } from \"~/content/plugins/crud/contentModel/afterCreateFrom\";\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (check: string): Promise<CmsModelPermission> => {\n return utils.checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModel;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string): Promise<CmsModel> => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return utils.filterAsync(models, async model => {\n if (!utils.validateOwnership(context, permission, model)) {\n return false;\n }\n return utils.validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n utils.checkOwnership(context, permission, model);\n await utils.checkModelAccess(context, model);\n\n return model;\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n const onBeforeModelCreate = createTopic<BeforeModelCreateTopicParams>();\n const onAfterModelCreate = createTopic<AfterModelCreateTopicParams>();\n const onBeforeModelCreateFrom = createTopic<BeforeModelCreateFromTopicParams>();\n const onAfterModelCreateFrom = createTopic<AfterModelCreateFromTopicParams>();\n const onBeforeModelUpdate = createTopic<BeforeModelUpdateTopicParams>();\n const onAfterModelUpdate = createTopic<AfterModelUpdateTopicParams>();\n const onBeforeModelDelete = createTopic<BeforeModelDeleteTopicParams>();\n const onAfterModelDelete = createTopic<AfterModelDeleteTopicParams>();\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeModelCreate({\n onBeforeModelCreate,\n onBeforeModelCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelCreate({\n context,\n onAfterModelCreate\n });\n assignBeforeModelUpdate({\n onBeforeModelUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelUpdate({\n context,\n onAfterModelUpdate\n });\n assignAfterModelCreateFrom({\n context,\n onAfterModelCreateFrom\n });\n assignBeforeModelDelete({\n onBeforeModelDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelDelete({\n context,\n onAfterModelDelete\n });\n\n return {\n onBeforeModelCreate,\n onAfterModelCreate,\n onBeforeModelCreateFrom,\n onAfterModelCreateFrom,\n onBeforeModelUpdate,\n onAfterModelUpdate,\n onBeforeModelDelete,\n onAfterModelDelete,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(inputData) {\n await checkModelPermissions(\"w\");\n\n const createdData = new CreateContentModelModel().populate(inputData);\n await createdData.validate();\n const input: CmsModelCreateInput = await createdData.toJSON();\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: input.name,\n description: input.description || \"\",\n modelId: input.modelId || \"\",\n titleFieldId: \"id\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n fields: [],\n lockedFields: [],\n layout: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreate.publish({\n input,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreate.publish({\n input,\n model: createdModel\n });\n\n return createdModel;\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onAfterModelUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async createModelFrom(modelId, data) {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const createdData = new CreateContentModelModelFrom().populate({\n name: data.name,\n modelId: data.modelId,\n description: data.description || original.description,\n group: data.group,\n locale: data.locale\n });\n\n await createdData.validate();\n const input: CmsModelCreateFromInput = await createdData.toJSON();\n\n const locale = await context.i18n.getLocale(input.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${input.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: input.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n name: input.name,\n modelId: input.modelId || \"\",\n description: input.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreateFrom.publish({\n input,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreateFrom.publish({\n input,\n original,\n model: createdModel\n });\n\n return createdModel;\n },\n async updateModel(modelId, inputData) {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const updatedData = new UpdateContentModelModel().populate(inputData);\n await updatedData.validate();\n\n const input: CmsModelUpdateInput = await updatedData.toJSON({ onlyDirty: true });\n if (Object.keys(input).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModel[\"group\"] = {\n id: original.group.id,\n name: original.group.name\n };\n if (input.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const modelFields = await createFieldModels(original, inputData);\n const model: CmsModel = {\n ...original,\n ...input,\n group,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n fields: modelFields,\n savedOn: new Date().toISOString() as any\n };\n validateLayout(model, modelFields);\n\n await onBeforeModelUpdate.publish({\n input,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onAfterModelUpdate.publish({\n input,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n await onBeforeModelDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onAfterModelDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"]}
1
+ {"version":3,"names":["createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","model","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","utils","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","webinyVersion","WEBINY_VERSION","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onBeforeModelCreate","createTopic","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","assignBeforeModelCreate","assignAfterModelCreate","assignBeforeModelUpdate","assignAfterModelUpdate","assignAfterModelCreateFrom","assignBeforeModelDelete","assignAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","fields","createFieldModels","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","layout","validateLayout","publish","createdModel","create","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","data","CreateContentModelModelFrom","i18n","groups","updateModel","updatedData","UpdateContentModelModel","onlyDirty","keys","length","groupData","deleteModel","delete","ex","WebinyError","message","error","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n CmsModelPermission,\n HeadlessCmsStorageOperations,\n BeforeModelCreateTopicParams,\n AfterModelCreateTopicParams,\n BeforeModelUpdateTopicParams,\n AfterModelUpdateTopicParams,\n BeforeModelDeleteTopicParams,\n AfterModelDeleteTopicParams,\n BeforeModelCreateFromTopicParams,\n AfterModelCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport DataLoader from \"dataloader\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport {\n CreateContentModelModel,\n CreateContentModelModelFrom,\n UpdateContentModelModel\n} from \"./contentModel/models\";\nimport { createFieldModels } from \"./contentModel/createFieldModels\";\nimport { validateLayout } from \"./contentModel/validateLayout\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\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 { assignBeforeModelCreate } from \"./contentModel/beforeCreate\";\nimport { assignBeforeModelUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignBeforeModelDelete } from \"./contentModel/beforeDelete\";\nimport { assignAfterModelCreate } from \"./contentModel/afterCreate\";\nimport { assignAfterModelUpdate } from \"./contentModel/afterUpdate\";\nimport { assignAfterModelDelete } from \"./contentModel/afterDelete\";\nimport { assignAfterModelCreateFrom } from \"~/content/plugins/crud/contentModel/afterCreateFrom\";\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (check: string): Promise<CmsModelPermission> => {\n return utils.checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModel;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string): Promise<CmsModel> => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return utils.filterAsync(models, async model => {\n if (!utils.validateOwnership(context, permission, model)) {\n return false;\n }\n return utils.validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n utils.checkOwnership(context, permission, model);\n await utils.checkModelAccess(context, model);\n\n return model;\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n const onBeforeModelCreate = createTopic<BeforeModelCreateTopicParams>();\n const onAfterModelCreate = createTopic<AfterModelCreateTopicParams>();\n const onBeforeModelCreateFrom = createTopic<BeforeModelCreateFromTopicParams>();\n const onAfterModelCreateFrom = createTopic<AfterModelCreateFromTopicParams>();\n const onBeforeModelUpdate = createTopic<BeforeModelUpdateTopicParams>();\n const onAfterModelUpdate = createTopic<AfterModelUpdateTopicParams>();\n const onBeforeModelDelete = createTopic<BeforeModelDeleteTopicParams>();\n const onAfterModelDelete = createTopic<AfterModelDeleteTopicParams>();\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeModelCreate({\n onBeforeModelCreate,\n onBeforeModelCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelCreate({\n context,\n onAfterModelCreate\n });\n assignBeforeModelUpdate({\n onBeforeModelUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelUpdate({\n context,\n onAfterModelUpdate\n });\n assignAfterModelCreateFrom({\n context,\n onAfterModelCreateFrom\n });\n assignBeforeModelDelete({\n onBeforeModelDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelDelete({\n context,\n onAfterModelDelete\n });\n\n return {\n onBeforeModelCreate,\n onAfterModelCreate,\n onBeforeModelCreateFrom,\n onAfterModelCreateFrom,\n onBeforeModelUpdate,\n onAfterModelUpdate,\n onBeforeModelDelete,\n onAfterModelDelete,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(inputData) {\n await checkModelPermissions(\"w\");\n\n const createdData = new CreateContentModelModel().populate(inputData);\n await createdData.validate();\n const input: CmsModelCreateInput = await createdData.toJSON();\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const fields = await createFieldModels(input.fields);\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: input.name,\n description: input.description || \"\",\n modelId: input.modelId || \"\",\n titleFieldId: \"id\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n fields,\n lockedFields: [],\n layout: input.layout || [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n validateLayout(model, fields);\n\n await onBeforeModelCreate.publish({\n input,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreate.publish({\n input,\n model: createdModel\n });\n\n return createdModel;\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onAfterModelUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async createModelFrom(modelId, data) {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const createdData = new CreateContentModelModelFrom().populate({\n name: data.name,\n modelId: data.modelId,\n description: data.description || original.description,\n group: data.group,\n locale: data.locale\n });\n\n await createdData.validate();\n const input: CmsModelCreateFromInput = await createdData.toJSON();\n\n const locale = await context.i18n.getLocale(input.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${input.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: input.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n name: input.name,\n modelId: input.modelId || \"\",\n description: input.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreateFrom.publish({\n input,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreateFrom.publish({\n input,\n original,\n model: createdModel\n });\n\n return createdModel;\n },\n async updateModel(modelId, inputData) {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const updatedData = new UpdateContentModelModel().populate(inputData);\n await updatedData.validate();\n\n const input: CmsModelUpdateInput = await updatedData.toJSON({ onlyDirty: true });\n if (Object.keys(input).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModel[\"group\"] = {\n id: original.group.id,\n name: original.group.name\n };\n if (input.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const fields = await createFieldModels(inputData.fields);\n const model: CmsModel = {\n ...original,\n ...input,\n group,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n fields,\n savedOn: new Date().toISOString()\n };\n validateLayout(model, fields);\n\n await onBeforeModelUpdate.publish({\n input,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onAfterModelUpdate.publish({\n input,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n await onBeforeModelDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onAfterModelDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["beforeCreate.ts"],"names":["assignBeforeGroupCreate","params","onBeforeCreate","plugins","storageOperations","subscribe","group","slug","trim","groups","list","where","tenant","locale","length","WebinyError","name","shortid","generate","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","Error"],"mappings":";;;;;;;;;AAEA;;AAEA;;AACA;;AACA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;AAC9E,QAAM;AAAEC,IAAAA,cAAF;AAAkBC,IAAAA,OAAlB;AAA2BC,IAAAA;AAA3B,MAAiDH,MAAvD;AAEAC,EAAAA,cAAc,CAACG,SAAf,CAAyB,MAAMJ,MAAN,IAAgB;AACrC,UAAM;AAAEK,MAAAA;AAAF,QAAYL,MAAlB;;AAEA,QAAIK,KAAK,CAACC,IAAN,IAAcD,KAAK,CAACC,IAAN,CAAWC,IAAX,EAAlB,EAAqC;AACjC,YAAMC,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAlB,CAAyBC,IAAzB,CAA8B;AAC/CC,QAAAA,KAAK,EAAE;AACHC,UAAAA,MAAM,EAAEN,KAAK,CAACM,MADX;AAEHC,UAAAA,MAAM,EAAEP,KAAK,CAACO,MAFX;AAGHN,UAAAA,IAAI,EAAED,KAAK,CAACC;AAHT;AADwC,OAA9B,CAArB;;AAOA,UAAIE,MAAM,CAACK,MAAP,GAAgB,CAApB,EAAuB;AACnB,cAAM,IAAIC,cAAJ,CACD,4BAA2BT,KAAK,CAACC,IAAK,mBADrC,EAEF,qBAFE,CAAN;AAIH;AACJ,KAdD,MAcO;AACH,YAAMA,IAAI,GAAG,mBAAOD,KAAK,CAACU,IAAb,CAAb;AACA,YAAMP,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAlB,CAAyBC,IAAzB,CAA8B;AAC/CC,QAAAA,KAAK,EAAE;AACHC,UAAAA,MAAM,EAAEN,KAAK,CAACM,MADX;AAEHC,UAAAA,MAAM,EAAEP,KAAK,CAACO,MAFX;AAGHN,UAAAA;AAHG;AADwC,OAA9B,CAArB;;AAQA,UAAIE,MAAM,CAACK,MAAP,KAAkB,CAAtB,EAAyB;AACrBR,QAAAA,KAAK,CAACC,IAAN,GAAaA,IAAb;AACH,OAFD,MAEO;AACHD,QAAAA,KAAK,CAACC,IAAN,GAAc,GAAEA,IAAK,IAAGU,iBAAQC,QAAR,EAAmB,EAA3C;AACH;AACJ;;AAED,UAAMC,WAAW,GAAGhB,OAAO,CACtBiB,MADe,CACQC,+BAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBlB,IAAvB,KAAgCD,KAAK,CAACC,IAFpC,CAApB;;AAIA,QAAIY,WAAJ,EAAiB;AACb,YAAM,IAAIO,KAAJ,CACD,kBAAiBpB,KAAK,CAACC,IAAK,uEAD3B,CAAN;AAGH;AACJ,GA3CD;AA4CH,CA/CM","sourcesContent":["import { BeforeGroupCreateTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { CmsGroupPlugin } from \"~/content/plugins/CmsGroupPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { toSlug } from \"~/utils\";\nimport WebinyError from \"@webiny/error\";\nimport shortid from \"shortid\";\n\ninterface AssignBeforeGroupCreateParams {\n onBeforeCreate: Topic<BeforeGroupCreateTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupCreate = (params: AssignBeforeGroupCreateParams) => {\n const { onBeforeCreate, plugins, storageOperations } = params;\n\n onBeforeCreate.subscribe(async params => {\n const { group } = params;\n\n if (group.slug && group.slug.trim()) {\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug: group.slug\n }\n });\n if (groups.length > 0) {\n throw new WebinyError(\n `Cms Group with the slug \"${group.slug}\" already exists.`,\n \"SLUG_ALREADY_EXISTS\"\n );\n }\n } else {\n const slug = toSlug(group.name);\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug\n }\n });\n\n if (groups.length === 0) {\n group.slug = slug;\n } else {\n group.slug = `${slug}-${shortid.generate()}`;\n }\n }\n\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n\n if (groupPlugin) {\n throw new Error(\n `Cannot create \"${group.slug}\" content model group because one is already registered via a plugin.`\n );\n }\n });\n};\n"]}
1
+ {"version":3,"names":["assignBeforeGroupCreate","params","onBeforeCreate","plugins","storageOperations","subscribe","group","slug","trim","groups","list","where","tenant","locale","length","WebinyError","toSlug","name","shortid","generate","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","Error"],"sources":["beforeCreate.ts"],"sourcesContent":["import { BeforeGroupCreateTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { CmsGroupPlugin } from \"~/content/plugins/CmsGroupPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { toSlug } from \"~/utils\";\nimport WebinyError from \"@webiny/error\";\nimport shortid from \"shortid\";\n\ninterface AssignBeforeGroupCreateParams {\n onBeforeCreate: Topic<BeforeGroupCreateTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupCreate = (params: AssignBeforeGroupCreateParams) => {\n const { onBeforeCreate, plugins, storageOperations } = params;\n\n onBeforeCreate.subscribe(async params => {\n const { group } = params;\n\n if (group.slug && group.slug.trim()) {\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug: group.slug\n }\n });\n if (groups.length > 0) {\n throw new WebinyError(\n `Cms Group with the slug \"${group.slug}\" already exists.`,\n \"SLUG_ALREADY_EXISTS\"\n );\n }\n } else {\n const slug = toSlug(group.name);\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug\n }\n });\n\n if (groups.length === 0) {\n group.slug = slug;\n } else {\n group.slug = `${slug}-${shortid.generate()}`;\n }\n }\n\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n\n if (groupPlugin) {\n throw new Error(\n `Cannot create \"${group.slug}\" content model group because one is already registered via a plugin.`\n );\n }\n });\n};\n"],"mappings":";;;;;;;;;AAEA;;AAEA;;AACA;;AACA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,cAAF;IAAkBC,OAAlB;IAA2BC;EAA3B,IAAiDH,MAAvD;EAEAC,cAAc,CAACG,SAAf,CAAyB,MAAMJ,MAAN,IAAgB;IACrC,MAAM;MAAEK;IAAF,IAAYL,MAAlB;;IAEA,IAAIK,KAAK,CAACC,IAAN,IAAcD,KAAK,CAACC,IAAN,CAAWC,IAAX,EAAlB,EAAqC;MACjC,MAAMC,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAlB,CAAyBC,IAAzB,CAA8B;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MADX;UAEHC,MAAM,EAAEP,KAAK,CAACO,MAFX;UAGHN,IAAI,EAAED,KAAK,CAACC;QAHT;MADwC,CAA9B,CAArB;;MAOA,IAAIE,MAAM,CAACK,MAAP,GAAgB,CAApB,EAAuB;QACnB,MAAM,IAAIC,cAAJ,CACD,4BAA2BT,KAAK,CAACC,IAAK,mBADrC,EAEF,qBAFE,CAAN;MAIH;IACJ,CAdD,MAcO;MACH,MAAMA,IAAI,GAAG,IAAAS,aAAA,EAAOV,KAAK,CAACW,IAAb,CAAb;MACA,MAAMR,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAlB,CAAyBC,IAAzB,CAA8B;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MADX;UAEHC,MAAM,EAAEP,KAAK,CAACO,MAFX;UAGHN;QAHG;MADwC,CAA9B,CAArB;;MAQA,IAAIE,MAAM,CAACK,MAAP,KAAkB,CAAtB,EAAyB;QACrBR,KAAK,CAACC,IAAN,GAAaA,IAAb;MACH,CAFD,MAEO;QACHD,KAAK,CAACC,IAAN,GAAc,GAAEA,IAAK,IAAGW,gBAAA,CAAQC,QAAR,EAAmB,EAA3C;MACH;IACJ;;IAED,MAAMC,WAAW,GAAGjB,OAAO,CACtBkB,MADe,CACQC,8BAAA,CAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBnB,IAAvB,KAAgCD,KAAK,CAACC,IAFpC,CAApB;;IAIA,IAAIa,WAAJ,EAAiB;MACb,MAAM,IAAIO,KAAJ,CACD,kBAAiBrB,KAAK,CAACC,IAAK,uEAD3B,CAAN;IAGH;EACJ,CA3CD;AA4CH,CA/CM"}
@@ -1 +1 @@
1
- {"version":3,"sources":["beforeDelete.ts"],"names":["assignBeforeGroupDelete","params","onBeforeDelete","plugins","storageOperations","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error","models","list","where","tenant","locale","items","filter","model","id","length","WebinyError"],"mappings":";;;;;;;;;AAGA;;AACA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;AAC9E,QAAM;AAAEC,IAAAA,cAAF;AAAkBC,IAAAA,OAAlB;AAA2BC,IAAAA;AAA3B,MAAiDH,MAAvD;AAEAC,EAAAA,cAAc,CAACG,SAAf,CAAyB,MAAMJ,MAAN,IAAgB;AACrC,UAAM;AAAEK,MAAAA;AAAF,QAAYL,MAAlB;AAEA,UAAMM,WAAW,GAAGJ,OAAO,CACtBK,MADe,CACQC,+BAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBC,IAAvB,KAAgCR,KAAK,CAACQ,IAFpC,CAApB;;AAIA,QAAIP,WAAJ,EAAiB;AACb,YAAM,IAAIQ,KAAJ,CAAW,mDAAX,CAAN;AACH;;AAED,UAAMC,MAAM,GAAG,MAAMZ,iBAAiB,CAACY,MAAlB,CAAyBC,IAAzB,CAA8B;AAC/CC,MAAAA,KAAK,EAAE;AACHC,QAAAA,MAAM,EAAEb,KAAK,CAACa,MADX;AAEHC,QAAAA,MAAM,EAAEd,KAAK,CAACc;AAFX;AADwC,KAA9B,CAArB;AAMA,UAAMC,KAAK,GAAGL,MAAM,CAACM,MAAP,CAAcC,KAAK,IAAI;AACjC,aAAOA,KAAK,CAACjB,KAAN,CAAYkB,EAAZ,KAAmBlB,KAAK,CAACkB,EAAhC;AACH,KAFa,CAAd;;AAGA,QAAIH,KAAK,CAACI,MAAN,GAAe,CAAnB,EAAsB;AAClB,YAAM,IAAIC,cAAJ,CACF,sEADE,EAEF,qBAFE,EAGF;AACIpB,QAAAA;AADJ,OAHE,CAAN;AAOH;AACJ,GA7BD;AA8BH,CAjCM","sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeGroupDeleteTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { CmsGroupPlugin } from \"~/content/plugins/CmsGroupPlugin\";\nimport WebinyError from \"@webiny/error\";\n\ninterface AssignBeforeGroupDeleteParams {\n onBeforeDelete: Topic<BeforeGroupDeleteTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupDelete = (params: AssignBeforeGroupDeleteParams) => {\n const { onBeforeDelete, plugins, storageOperations } = params;\n\n onBeforeDelete.subscribe(async params => {\n const { group } = params;\n\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n\n if (groupPlugin) {\n throw new Error(`Cms Groups defined via plugins cannot be deleted.`);\n }\n\n const models = await storageOperations.models.list({\n where: {\n tenant: group.tenant,\n locale: group.locale\n }\n });\n const items = models.filter(model => {\n return model.group.id === group.id;\n });\n if (items.length > 0) {\n throw new WebinyError(\n \"Cannot delete this group because there are models that belong to it.\",\n \"BEFORE_DELETE_ERROR\",\n {\n group\n }\n );\n }\n });\n};\n"]}
1
+ {"version":3,"names":["assignBeforeGroupDelete","params","onBeforeDelete","plugins","storageOperations","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error","models","list","where","tenant","locale","items","filter","model","id","length","WebinyError"],"sources":["beforeDelete.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeGroupDeleteTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { CmsGroupPlugin } from \"~/content/plugins/CmsGroupPlugin\";\nimport WebinyError from \"@webiny/error\";\n\ninterface AssignBeforeGroupDeleteParams {\n onBeforeDelete: Topic<BeforeGroupDeleteTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupDelete = (params: AssignBeforeGroupDeleteParams) => {\n const { onBeforeDelete, plugins, storageOperations } = params;\n\n onBeforeDelete.subscribe(async params => {\n const { group } = params;\n\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n\n if (groupPlugin) {\n throw new Error(`Cms Groups defined via plugins cannot be deleted.`);\n }\n\n const models = await storageOperations.models.list({\n where: {\n tenant: group.tenant,\n locale: group.locale\n }\n });\n const items = models.filter(model => {\n return model.group.id === group.id;\n });\n if (items.length > 0) {\n throw new WebinyError(\n \"Cannot delete this group because there are models that belong to it.\",\n \"BEFORE_DELETE_ERROR\",\n {\n group\n }\n );\n }\n });\n};\n"],"mappings":";;;;;;;;;AAGA;;AACA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,cAAF;IAAkBC,OAAlB;IAA2BC;EAA3B,IAAiDH,MAAvD;EAEAC,cAAc,CAACG,SAAf,CAAyB,MAAMJ,MAAN,IAAgB;IACrC,MAAM;MAAEK;IAAF,IAAYL,MAAlB;IAEA,MAAMM,WAAW,GAAGJ,OAAO,CACtBK,MADe,CACQC,8BAAA,CAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBC,IAAvB,KAAgCR,KAAK,CAACQ,IAFpC,CAApB;;IAIA,IAAIP,WAAJ,EAAiB;MACb,MAAM,IAAIQ,KAAJ,CAAW,mDAAX,CAAN;IACH;;IAED,MAAMC,MAAM,GAAG,MAAMZ,iBAAiB,CAACY,MAAlB,CAAyBC,IAAzB,CAA8B;MAC/CC,KAAK,EAAE;QACHC,MAAM,EAAEb,KAAK,CAACa,MADX;QAEHC,MAAM,EAAEd,KAAK,CAACc;MAFX;IADwC,CAA9B,CAArB;IAMA,MAAMC,KAAK,GAAGL,MAAM,CAACM,MAAP,CAAcC,KAAK,IAAI;MACjC,OAAOA,KAAK,CAACjB,KAAN,CAAYkB,EAAZ,KAAmBlB,KAAK,CAACkB,EAAhC;IACH,CAFa,CAAd;;IAGA,IAAIH,KAAK,CAACI,MAAN,GAAe,CAAnB,EAAsB;MAClB,MAAM,IAAIC,cAAJ,CACF,sEADE,EAEF,qBAFE,EAGF;QACIpB;MADJ,CAHE,CAAN;IAOH;EACJ,CA7BD;AA8BH,CAjCM"}
@@ -1 +1 @@
1
- {"version":3,"sources":["beforeUpdate.ts"],"names":["assignBeforeGroupUpdate","params","onBeforeUpdate","plugins","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error"],"mappings":";;;;;;;AAEA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;AAC9E,QAAM;AAAEC,IAAAA,cAAF;AAAkBC,IAAAA;AAAlB,MAA8BF,MAApC;AAEAC,EAAAA,cAAc,CAACE,SAAf,CAAyB,CAAC;AAAEC,IAAAA;AAAF,GAAD,KAAe;AACpC,UAAMC,WAAW,GAAGH,OAAO,CACtBI,MADe,CACQC,+BAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBC,IAAvB,KAAgCR,KAAK,CAACQ,IAFpC,CAApB;;AAGA,QAAI,CAACP,WAAL,EAAkB;AACd;AACH;;AACD,UAAM,IAAIQ,KAAJ,CAAW,mDAAX,CAAN;AACH,GARD;AASH,CAZM","sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeGroupUpdateTopicParams } from \"~/types\";\nimport { CmsGroupPlugin } from \"~/content/plugins/CmsGroupPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface AssignBeforeGroupUpdateParams {\n onBeforeUpdate: Topic<BeforeGroupUpdateTopicParams>;\n plugins: PluginsContainer;\n}\nexport const assignBeforeGroupUpdate = (params: AssignBeforeGroupUpdateParams) => {\n const { onBeforeUpdate, plugins } = params;\n\n onBeforeUpdate.subscribe(({ group }) => {\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n if (!groupPlugin) {\n return;\n }\n throw new Error(`Cms Groups defined via plugins cannot be updated.`);\n });\n};\n"]}
1
+ {"version":3,"names":["assignBeforeGroupUpdate","params","onBeforeUpdate","plugins","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error"],"sources":["beforeUpdate.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeGroupUpdateTopicParams } from \"~/types\";\nimport { CmsGroupPlugin } from \"~/content/plugins/CmsGroupPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface AssignBeforeGroupUpdateParams {\n onBeforeUpdate: Topic<BeforeGroupUpdateTopicParams>;\n plugins: PluginsContainer;\n}\nexport const assignBeforeGroupUpdate = (params: AssignBeforeGroupUpdateParams) => {\n const { onBeforeUpdate, plugins } = params;\n\n onBeforeUpdate.subscribe(({ group }) => {\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n if (!groupPlugin) {\n return;\n }\n throw new Error(`Cms Groups defined via plugins cannot be updated.`);\n });\n};\n"],"mappings":";;;;;;;AAEA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,cAAF;IAAkBC;EAAlB,IAA8BF,MAApC;EAEAC,cAAc,CAACE,SAAf,CAAyB,CAAC;IAAEC;EAAF,CAAD,KAAe;IACpC,MAAMC,WAAW,GAAGH,OAAO,CACtBI,MADe,CACQC,8BAAA,CAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBC,IAAvB,KAAgCR,KAAK,CAACQ,IAFpC,CAApB;;IAGA,IAAI,CAACP,WAAL,EAAkB;MACd;IACH;;IACD,MAAM,IAAIQ,KAAJ,CAAW,mDAAX,CAAN;EACH,CARD;AASH,CAZM"}
@@ -1 +1 @@
1
- {"version":3,"sources":["contentModelGroup.crud.ts"],"names":["CreateContentModelGroupModel","name","validation","create","slug","description","icon","UpdateContentModelGroupModel","createModelGroupsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","dataLoaders","listGroups","DataLoader","tenant","id","locale","code","pluginsGroups","getGroupsAsPlugins","map","group","groups","list","where","concat","clearGroupsCache","loader","Object","values","clearAll","plugins","byType","CmsGroupPlugin","type","filter","plugin","t","l","contentModelGroup","webinyVersion","WEBINY_VERSION","checkPermissions","check","utils","rwd","groupsGet","load","find","g","NotFoundError","groupsList","ex","WebinyError","message","data","onBeforeCreate","onAfterCreate","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","onBeforeGroupCreate","onAfterGroupCreate","onBeforeGroupUpdate","onAfterGroupUpdate","onBeforeGroupDelete","onAfterGroupDelete","getGroup","permission","checkOwnership","validateGroupAccess","response","validateOwnership","createGroup","inputData","createdData","populate","toSlug","validate","input","toJSON","identity","createdOn","Date","toISOString","savedOn","createdBy","displayName","publish","result","updateGroup","original","updatedDataJson","onlyDirty","keys","length","updatedGroup","update","error","deleteGroup","delete"],"mappings":"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","sourcesContent":["/**\n * Package @commodo/fields does not have types.\n */\n// @ts-ignore\nimport { withFields, string } from \"@commodo/fields\";\nimport { validation } from \"@webiny/validation\";\n/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport {\n CmsGroupContext,\n CmsGroupListParams,\n CmsGroupPermission,\n CmsGroup,\n CmsContext,\n HeadlessCmsStorageOperations,\n CmsGroupCreateInput,\n BeforeGroupCreateTopicParams,\n AfterGroupCreateTopicParams,\n BeforeGroupUpdateTopicParams,\n AfterGroupUpdateTopicParams,\n BeforeGroupDeleteTopicParams,\n AfterGroupDeleteTopicParams\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsGroupPlugin } from \"~/content/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 \"~/content/plugins/crud/contentModelGroup/beforeUpdate\";\nimport { assignBeforeGroupCreate } from \"~/content/plugins/crud/contentModelGroup/beforeCreate\";\nimport { assignBeforeGroupDelete } from \"~/content/plugins/crud/contentModelGroup/beforeDelete\";\nimport DataLoader from \"dataloader\";\n\nconst CreateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"required,maxLength:100\") }),\n slug: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"required,maxLength:255\") })\n})();\n\nconst UpdateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"maxLength:255\") })\n})();\n\nexport interface CreateModelGroupsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelGroupsCrud = (params: CreateModelGroupsCrudParams): CmsGroupContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = 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 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 checkPermissions = (check: string): Promise<CmsGroupPermission> => {\n return utils.checkPermissions(context, \"cms.contentModelGroup\", { rwd: check });\n };\n\n const groupsGet = 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 groupsList = async (params: CmsGroupListParams) => {\n const { where } = params || {};\n\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 where\n });\n }\n };\n\n const onBeforeCreate = createTopic<BeforeGroupCreateTopicParams>();\n const onAfterCreate = createTopic<AfterGroupCreateTopicParams>();\n const onBeforeUpdate = createTopic<BeforeGroupUpdateTopicParams>();\n const onAfterUpdate = createTopic<AfterGroupUpdateTopicParams>();\n const onBeforeDelete = createTopic<BeforeGroupDeleteTopicParams>();\n const onAfterDelete = createTopic<AfterGroupDeleteTopicParams>();\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeGroupCreate({\n onBeforeCreate,\n plugins: context.plugins,\n storageOperations\n });\n assignBeforeGroupUpdate({\n onBeforeUpdate,\n plugins: context.plugins\n });\n assignBeforeGroupDelete({\n onBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n\n return {\n onBeforeGroupCreate: onBeforeCreate,\n onAfterGroupCreate: onAfterCreate,\n onBeforeGroupUpdate: onBeforeUpdate,\n onAfterGroupUpdate: onAfterUpdate,\n onBeforeGroupDelete: onBeforeDelete,\n onAfterGroupDelete: onAfterDelete,\n clearGroupsCache,\n getGroup: async id => {\n const permission = await checkPermissions(\"r\");\n\n const group = await groupsGet(id);\n utils.checkOwnership(context, permission, group);\n utils.validateGroupAccess(context, permission, group);\n\n return group;\n },\n listGroups: async params => {\n const { where } = params || {};\n\n const { tenant, locale } = where || {};\n const permission = await checkPermissions(\"r\");\n\n const response = await groupsList({\n ...(params || {}),\n where: {\n ...(where || {}),\n tenant: tenant || getTenant().id,\n locale: locale || getLocale().code\n }\n });\n\n return response.filter(group => {\n if (!utils.validateOwnership(context, permission, group)) {\n return false;\n }\n return utils.validateGroupAccess(context, permission, group);\n });\n },\n createGroup: async inputData => {\n await checkPermissions(\"w\");\n\n const createdData = new CreateContentModelGroupModel().populate({\n ...inputData,\n slug: inputData.slug ? utils.toSlug(inputData.slug) : \"\",\n description: inputData.description || \"\"\n });\n await createdData.validate();\n const input: CmsGroupCreateInput & { slug: string; description: string } =\n await createdData.toJSON();\n\n const identity = getIdentity();\n\n const id = mdbid();\n const group: CmsGroup = {\n ...input,\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 onBeforeCreate.publish({\n group\n });\n\n const result = await storageOperations.groups.create({\n group\n });\n\n clearGroupsCache();\n\n await onAfterCreate.publish({\n group: result\n });\n\n return group;\n } catch (ex) {\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 updateGroup: async (id, inputData) => {\n const permission = await checkPermissions(\"w\");\n\n const original = await groupsGet(id);\n\n utils.checkOwnership(context, permission, original);\n\n const input = new UpdateContentModelGroupModel().populate(inputData);\n await input.validate();\n\n const updatedDataJson: Partial<CmsGroup> = await input.toJSON({\n onlyDirty: true\n });\n\n /**\n * No need to continue if no values were changed\n */\n if (Object.keys(updatedDataJson).length === 0) {\n return original;\n }\n\n const group: CmsGroup = {\n ...original,\n ...updatedDataJson,\n locale: getLocale().code,\n tenant: getTenant().id,\n savedOn: new Date().toISOString()\n };\n\n try {\n await onBeforeUpdate.publish({\n original,\n group\n });\n\n const updatedGroup = await storageOperations.groups.update({\n group\n });\n clearGroupsCache();\n\n await onAfterUpdate.publish({\n original,\n group: updatedGroup\n });\n\n return updatedGroup;\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"UPDATE_ERROR\", {\n error: ex,\n original,\n group,\n input\n });\n }\n },\n deleteGroup: async id => {\n const permission = await checkPermissions(\"d\");\n\n const group = await groupsGet(id);\n\n utils.checkOwnership(context, permission, group);\n\n try {\n await onBeforeDelete.publish({\n group\n });\n\n await storageOperations.groups.delete({ group });\n clearGroupsCache();\n\n await onAfterDelete.publish({\n group\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"DELETE_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n\n return true;\n }\n };\n};\n"]}
1
+ {"version":3,"names":["CreateContentModelGroupModel","withFields","name","string","validation","create","slug","description","icon","UpdateContentModelGroupModel","createModelGroupsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","dataLoaders","listGroups","DataLoader","tenant","id","locale","code","pluginsGroups","getGroupsAsPlugins","map","group","groups","list","where","concat","clearGroupsCache","loader","Object","values","clearAll","plugins","byType","CmsGroupPlugin","type","filter","plugin","t","l","contentModelGroup","webinyVersion","WEBINY_VERSION","checkPermissions","check","utils","rwd","groupsGet","load","find","g","NotFoundError","groupsList","ex","WebinyError","message","data","onBeforeCreate","createTopic","onAfterCreate","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","assignBeforeGroupCreate","assignBeforeGroupUpdate","assignBeforeGroupDelete","onBeforeGroupCreate","onAfterGroupCreate","onBeforeGroupUpdate","onAfterGroupUpdate","onBeforeGroupDelete","onAfterGroupDelete","getGroup","permission","checkOwnership","validateGroupAccess","response","validateOwnership","createGroup","inputData","createdData","populate","toSlug","validate","input","toJSON","identity","mdbid","createdOn","Date","toISOString","savedOn","createdBy","displayName","publish","result","updateGroup","original","updatedDataJson","onlyDirty","keys","length","updatedGroup","update","error","deleteGroup","delete"],"sources":["contentModelGroup.crud.ts"],"sourcesContent":["/**\n * Package @commodo/fields does not have types.\n */\n// @ts-ignore\nimport { withFields, string } from \"@commodo/fields\";\nimport { validation } from \"@webiny/validation\";\n/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport {\n CmsGroupContext,\n CmsGroupListParams,\n CmsGroupPermission,\n CmsGroup,\n CmsContext,\n HeadlessCmsStorageOperations,\n CmsGroupCreateInput,\n BeforeGroupCreateTopicParams,\n AfterGroupCreateTopicParams,\n BeforeGroupUpdateTopicParams,\n AfterGroupUpdateTopicParams,\n BeforeGroupDeleteTopicParams,\n AfterGroupDeleteTopicParams\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsGroupPlugin } from \"~/content/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 \"~/content/plugins/crud/contentModelGroup/beforeUpdate\";\nimport { assignBeforeGroupCreate } from \"~/content/plugins/crud/contentModelGroup/beforeCreate\";\nimport { assignBeforeGroupDelete } from \"~/content/plugins/crud/contentModelGroup/beforeDelete\";\nimport DataLoader from \"dataloader\";\n\nconst CreateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"required,maxLength:100\") }),\n slug: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"required,maxLength:255\") })\n})();\n\nconst UpdateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"maxLength:255\") })\n})();\n\nexport interface CreateModelGroupsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelGroupsCrud = (params: CreateModelGroupsCrudParams): CmsGroupContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = 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 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 checkPermissions = (check: string): Promise<CmsGroupPermission> => {\n return utils.checkPermissions(context, \"cms.contentModelGroup\", { rwd: check });\n };\n\n const groupsGet = 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 groupsList = async (params: CmsGroupListParams) => {\n const { where } = params || {};\n\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 where\n });\n }\n };\n\n const onBeforeCreate = createTopic<BeforeGroupCreateTopicParams>();\n const onAfterCreate = createTopic<AfterGroupCreateTopicParams>();\n const onBeforeUpdate = createTopic<BeforeGroupUpdateTopicParams>();\n const onAfterUpdate = createTopic<AfterGroupUpdateTopicParams>();\n const onBeforeDelete = createTopic<BeforeGroupDeleteTopicParams>();\n const onAfterDelete = createTopic<AfterGroupDeleteTopicParams>();\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeGroupCreate({\n onBeforeCreate,\n plugins: context.plugins,\n storageOperations\n });\n assignBeforeGroupUpdate({\n onBeforeUpdate,\n plugins: context.plugins\n });\n assignBeforeGroupDelete({\n onBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n\n return {\n onBeforeGroupCreate: onBeforeCreate,\n onAfterGroupCreate: onAfterCreate,\n onBeforeGroupUpdate: onBeforeUpdate,\n onAfterGroupUpdate: onAfterUpdate,\n onBeforeGroupDelete: onBeforeDelete,\n onAfterGroupDelete: onAfterDelete,\n clearGroupsCache,\n getGroup: async id => {\n const permission = await checkPermissions(\"r\");\n\n const group = await groupsGet(id);\n utils.checkOwnership(context, permission, group);\n utils.validateGroupAccess(context, permission, group);\n\n return group;\n },\n listGroups: async params => {\n const { where } = params || {};\n\n const { tenant, locale } = where || {};\n const permission = await checkPermissions(\"r\");\n\n const response = await groupsList({\n ...(params || {}),\n where: {\n ...(where || {}),\n tenant: tenant || getTenant().id,\n locale: locale || getLocale().code\n }\n });\n\n return response.filter(group => {\n if (!utils.validateOwnership(context, permission, group)) {\n return false;\n }\n return utils.validateGroupAccess(context, permission, group);\n });\n },\n createGroup: async inputData => {\n await checkPermissions(\"w\");\n\n const createdData = new CreateContentModelGroupModel().populate({\n ...inputData,\n slug: inputData.slug ? utils.toSlug(inputData.slug) : \"\",\n description: inputData.description || \"\"\n });\n await createdData.validate();\n const input: CmsGroupCreateInput & { slug: string; description: string } =\n await createdData.toJSON();\n\n const identity = getIdentity();\n\n const id = mdbid();\n const group: CmsGroup = {\n ...input,\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 onBeforeCreate.publish({\n group\n });\n\n const result = await storageOperations.groups.create({\n group\n });\n\n clearGroupsCache();\n\n await onAfterCreate.publish({\n group: result\n });\n\n return group;\n } catch (ex) {\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 updateGroup: async (id, inputData) => {\n const permission = await checkPermissions(\"w\");\n\n const original = await groupsGet(id);\n\n utils.checkOwnership(context, permission, original);\n\n const input = new UpdateContentModelGroupModel().populate(inputData);\n await input.validate();\n\n const updatedDataJson: Partial<CmsGroup> = await input.toJSON({\n onlyDirty: true\n });\n\n /**\n * No need to continue if no values were changed\n */\n if (Object.keys(updatedDataJson).length === 0) {\n return original;\n }\n\n const group: CmsGroup = {\n ...original,\n ...updatedDataJson,\n locale: getLocale().code,\n tenant: getTenant().id,\n savedOn: new Date().toISOString()\n };\n\n try {\n await onBeforeUpdate.publish({\n original,\n group\n });\n\n const updatedGroup = await storageOperations.groups.update({\n group\n });\n clearGroupsCache();\n\n await onAfterUpdate.publish({\n original,\n group: updatedGroup\n });\n\n return updatedGroup;\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"UPDATE_ERROR\", {\n error: ex,\n original,\n group,\n input\n });\n }\n },\n deleteGroup: async id => {\n const permission = await checkPermissions(\"d\");\n\n const group = await groupsGet(id);\n\n utils.checkOwnership(context, permission, group);\n\n try {\n await onBeforeDelete.publish({\n group\n });\n\n await storageOperations.groups.delete({ group });\n clearGroupsCache();\n\n await onAfterDelete.publish({\n group\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"DELETE_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n\n return true;\n }\n };\n};\n"],"mappings":"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"}