@webiny/api-headless-cms 0.0.0-unstable.1e66d121db → 0.0.0-unstable.611c5af35e
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.
- package/context.js +0 -15
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.js +0 -5
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.js +0 -3
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.js +0 -3
- package/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.js +1 -40
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +2 -25
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +5 -59
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry.crud.js +27 -145
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/afterCreate.js +0 -2
- package/crud/contentModel/afterCreate.js.map +1 -1
- package/crud/contentModel/afterCreateFrom.js +0 -2
- package/crud/contentModel/afterCreateFrom.js.map +1 -1
- package/crud/contentModel/afterDelete.js +0 -2
- package/crud/contentModel/afterDelete.js.map +1 -1
- package/crud/contentModel/afterUpdate.js +0 -2
- package/crud/contentModel/afterUpdate.js.map +1 -1
- package/crud/contentModel/beforeCreate.js +4 -32
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.js +0 -10
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.js +0 -5
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/contentModelManagerFactory.js +0 -7
- package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
- package/crud/contentModel/createFieldModels.js +0 -6
- package/crud/contentModel/createFieldModels.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +0 -2
- package/crud/contentModel/createFieldStorageId.js.map +1 -1
- package/crud/contentModel/fieldIdValidation.js +0 -5
- package/crud/contentModel/fieldIdValidation.js.map +1 -1
- package/crud/contentModel/idValidation.js +0 -5
- package/crud/contentModel/idValidation.js.map +1 -1
- package/crud/contentModel/models.js +1 -8
- package/crud/contentModel/models.js.map +1 -1
- package/crud/contentModel/systemFields.js.map +1 -1
- package/crud/contentModel/validateLayout.js +0 -8
- package/crud/contentModel/validateLayout.js.map +1 -1
- package/crud/contentModel/validateModel.js +0 -8
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.js +8 -60
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel.crud.js +25 -95
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.js +0 -12
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.js +0 -8
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.js +0 -5
- package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
- package/crud/contentModelGroup.crud.js +10 -47
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/index.js +0 -16
- package/crud/index.js.map +1 -1
- package/crud/settings.crud.js +0 -12
- package/crud/settings.crud.js.map +1 -1
- package/crud/system.crud.js +2 -37
- package/crud/system.crud.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +0 -13
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +0 -53
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.js +0 -4
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.js +5 -9
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/graphQLHandlerFactory.js +3 -28
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/index.js +1 -8
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.js +3 -11
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/contentEntries.js +2 -42
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.js +2 -19
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.js +20 -17
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +3 -21
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.js +0 -26
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.js +1 -14
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +0 -10
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +0 -10
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.js +0 -10
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/commonFieldResolvers.js +0 -2
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreate.js +0 -3
- package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js +0 -3
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +0 -6
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGet.js +0 -16
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetByIds.js +0 -3
- package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js +0 -3
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveList.js +0 -3
- package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolvePublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveRepublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUnpublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUpdate.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveGet.js +0 -8
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveList.js +0 -3
- package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +0 -8
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveList.js +0 -3
- package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
- package/graphql/schema/schemaPlugins.js +5 -19
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.js +1 -14
- package/graphql/system.js.map +1 -1
- package/graphqlFields/boolean.js +0 -12
- package/graphqlFields/boolean.js.map +1 -1
- package/graphqlFields/datetime.js +0 -17
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/file.js +0 -8
- package/graphqlFields/file.js.map +1 -1
- package/graphqlFields/helpers.js +0 -10
- package/graphqlFields/helpers.js.map +1 -1
- package/graphqlFields/index.js +0 -11
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/longText.js +0 -10
- package/graphqlFields/longText.js.map +1 -1
- package/graphqlFields/number.js +0 -12
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +6 -36
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +17 -51
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText.js +0 -9
- package/graphqlFields/richText.js.map +1 -1
- package/graphqlFields/text.js +0 -11
- package/graphqlFields/text.js.map +1 -1
- package/index.js +0 -19
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.js +0 -16
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +0 -4
- package/modelManager/index.js.map +1 -1
- package/package.json +24 -25
- package/parameters/context.js +0 -4
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +0 -11
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +0 -8
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +1 -8
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +0 -11
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGroupPlugin.js +0 -8
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.js +0 -5
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.js +2 -38
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +0 -7
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.js +0 -9
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.js +0 -10
- package/plugins/index.js.map +1 -1
- package/storage/default.js +0 -3
- package/storage/default.js.map +1 -1
- package/storage/object.js +0 -18
- package/storage/object.js.map +1 -1
- package/types.d.ts +14 -3
- package/types.js +0 -62
- package/types.js.map +1 -1
- package/upgrades/5.33.0/index.js +3 -26
- package/upgrades/5.33.0/index.js.map +1 -1
- package/upgrades/index.js +0 -3
- package/upgrades/index.js.map +1 -1
- package/utils/access.js +11 -25
- package/utils/access.js.map +1 -1
- package/utils/converters/Converter.js +0 -13
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.d.ts +7 -0
- package/utils/converters/ConverterCollection.js +27 -24
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.js +0 -26
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeName.js +0 -8
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +10 -26
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +0 -5
- package/utils/filterAsync.js.map +1 -1
- package/utils/filterModelFields.js +3 -9
- package/utils/filterModelFields.js.map +1 -1
- package/utils/getEntryTitle.js +0 -9
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.js +2 -6
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/ownership.js +0 -8
- package/utils/ownership.js.map +1 -1
- package/utils/permissions.js +8 -23
- package/utils/permissions.js.map +1 -1
- package/utils/pluralizedTypeName.js +0 -6
- package/utils/pluralizedTypeName.js.map +1 -1
- package/utils/renderFields.js +0 -8
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.js +0 -11
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.js +0 -8
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.js +1 -9
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +0 -7
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +0 -4
- package/utils/toSlug.js.map +1 -1
- package/validators/dateGte.js +0 -7
- package/validators/dateGte.js.map +1 -1
- package/validators/dateLte.js +0 -7
- package/validators/dateLte.js.map +1 -1
- package/validators/gte.js +0 -8
- package/validators/gte.js.map +1 -1
- package/validators/in.js +0 -8
- package/validators/in.js.map +1 -1
- package/validators/index.js +0 -15
- package/validators/index.js.map +1 -1
- package/validators/lte.js +0 -8
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +0 -8
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +0 -8
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +0 -9
- package/validators/pattern.js.map +1 -1
- package/validators/patternPlugins/email.js +0 -2
- package/validators/patternPlugins/email.js.map +1 -1
- package/validators/patternPlugins/index.js +0 -8
- package/validators/patternPlugins/index.js.map +1 -1
- package/validators/patternPlugins/lowerCase.js +0 -2
- package/validators/patternPlugins/lowerCase.js.map +1 -1
- package/validators/patternPlugins/lowerCaseSpace.js +0 -2
- package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
- package/validators/patternPlugins/upperCase.js +0 -2
- package/validators/patternPlugins/upperCase.js.map +1 -1
- package/validators/patternPlugins/upperCaseSpace.js +0 -2
- package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
- package/validators/patternPlugins/url.js +0 -2
- package/validators/patternPlugins/url.js.map +1 -1
- package/validators/required.js +0 -5
- package/validators/required.js.map +1 -1
- package/validators/timeGte.js +0 -8
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +0 -8
- package/validators/timeLte.js.map +1 -1
- package/validators/unique.js +0 -7
- package/validators/unique.js.map +1 -1
|
@@ -1,86 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.createModelsCrud = void 0;
|
|
9
|
-
|
|
10
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
-
|
|
12
9
|
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
13
|
-
|
|
14
10
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
15
|
-
|
|
16
11
|
var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
|
|
17
|
-
|
|
18
12
|
var _models = require("./contentModel/models");
|
|
19
|
-
|
|
20
13
|
var _createFieldModels = require("./contentModel/createFieldModels");
|
|
21
|
-
|
|
22
14
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
23
|
-
|
|
24
15
|
var _pubsub = require("@webiny/pubsub");
|
|
25
|
-
|
|
26
16
|
var _beforeCreate = require("./contentModel/beforeCreate");
|
|
27
|
-
|
|
28
17
|
var _beforeUpdate = require("./contentModel/beforeUpdate");
|
|
29
|
-
|
|
30
18
|
var _beforeDelete = require("./contentModel/beforeDelete");
|
|
31
|
-
|
|
32
19
|
var _afterCreate = require("./contentModel/afterCreate");
|
|
33
|
-
|
|
34
20
|
var _afterUpdate = require("./contentModel/afterUpdate");
|
|
35
|
-
|
|
36
21
|
var _afterDelete = require("./contentModel/afterDelete");
|
|
37
|
-
|
|
38
22
|
var _afterCreateFrom = require("./contentModel/afterCreateFrom");
|
|
39
|
-
|
|
40
23
|
var _CmsModelPlugin = require("../plugins/CmsModelPlugin");
|
|
41
|
-
|
|
42
24
|
var _permissions = require("../utils/permissions");
|
|
43
|
-
|
|
44
25
|
var _filterAsync = require("../utils/filterAsync");
|
|
45
|
-
|
|
46
26
|
var _ownership = require("../utils/ownership");
|
|
47
|
-
|
|
48
27
|
var _access = require("../utils/access");
|
|
49
|
-
|
|
50
28
|
var _validateModelFields = require("./contentModel/validateModelFields");
|
|
51
|
-
|
|
52
29
|
var _semver = _interopRequireDefault(require("semver"));
|
|
53
|
-
|
|
54
30
|
/**
|
|
55
31
|
* TODO: remove for 5.34.0
|
|
56
32
|
* Required because of the 5.33.0 upgrade.
|
|
57
33
|
* Until the upgrade is done, API will break because there is no storageId assigned.
|
|
58
34
|
*/
|
|
59
35
|
const featureVersion = _semver.default.coerce("5.33.0");
|
|
60
|
-
|
|
61
36
|
const attachStorageIdToFields = fields => {
|
|
62
37
|
return fields.map(field => {
|
|
63
38
|
var _field$settings;
|
|
64
|
-
|
|
65
39
|
if ((_field$settings = field.settings) !== null && _field$settings !== void 0 && _field$settings.fields) {
|
|
66
40
|
field.settings.fields = attachStorageIdToFields(field.settings.fields);
|
|
67
41
|
}
|
|
68
|
-
|
|
69
42
|
if (!field.storageId) {
|
|
70
43
|
field.storageId = field.fieldId;
|
|
71
44
|
}
|
|
72
|
-
|
|
73
45
|
return field;
|
|
74
46
|
});
|
|
75
47
|
};
|
|
76
|
-
|
|
77
48
|
const attachStorageIdToModelFields = model => {
|
|
78
49
|
if (!model.webinyVersion) {
|
|
79
50
|
return model.fields;
|
|
80
51
|
}
|
|
81
|
-
|
|
82
52
|
const version = _semver.default.coerce(model.webinyVersion);
|
|
83
|
-
|
|
84
53
|
if (!version) {
|
|
85
54
|
return model.fields;
|
|
86
55
|
}
|
|
@@ -88,19 +57,14 @@ const attachStorageIdToModelFields = model => {
|
|
|
88
57
|
* Unfortunately we need to check for beta and next.
|
|
89
58
|
* TODO remove after 5.33.0
|
|
90
59
|
*/
|
|
91
|
-
|
|
92
|
-
|
|
93
60
|
if (model.webinyVersion.match(/beta|next/)) {
|
|
94
61
|
return attachStorageIdToFields(model.fields);
|
|
95
62
|
}
|
|
96
|
-
|
|
97
63
|
if (_semver.default.compare(version, featureVersion) >= 0) {
|
|
98
64
|
return model.fields;
|
|
99
65
|
}
|
|
100
|
-
|
|
101
66
|
return attachStorageIdToFields(model.fields);
|
|
102
67
|
};
|
|
103
|
-
|
|
104
68
|
const createModelsCrud = params => {
|
|
105
69
|
const {
|
|
106
70
|
getTenant,
|
|
@@ -126,27 +90,22 @@ const createModelsCrud = params => {
|
|
|
126
90
|
})];
|
|
127
91
|
})
|
|
128
92
|
};
|
|
129
|
-
|
|
130
93
|
const clearModelsCache = () => {
|
|
131
94
|
for (const loader of Object.values(loaders)) {
|
|
132
95
|
loader.clearAll();
|
|
133
96
|
}
|
|
134
97
|
};
|
|
135
|
-
|
|
136
98
|
const managers = new Map();
|
|
137
|
-
|
|
138
99
|
const updateManager = async (context, model) => {
|
|
139
100
|
const manager = await (0, _contentModelManagerFactory.contentModelManagerFactory)(context, model);
|
|
140
101
|
managers.set(model.modelId, manager);
|
|
141
102
|
return manager;
|
|
142
103
|
};
|
|
143
|
-
|
|
144
104
|
const checkModelPermissions = check => {
|
|
145
105
|
return (0, _permissions.checkPermissions)(context, "cms.contentModel", {
|
|
146
106
|
rwd: check
|
|
147
107
|
});
|
|
148
108
|
};
|
|
149
|
-
|
|
150
109
|
const getModelsAsPlugins = () => {
|
|
151
110
|
const tenant = getTenant().id;
|
|
152
111
|
const locale = getLocale().code;
|
|
@@ -154,19 +113,16 @@ const createModelsCrud = params => {
|
|
|
154
113
|
/**
|
|
155
114
|
* We need to filter out models that are not for this tenant or locale.
|
|
156
115
|
* If it does not have tenant or locale define, it is for every locale and tenant
|
|
157
|
-
|
|
158
|
-
.filter(plugin => {
|
|
116
|
+
*/.filter(plugin => {
|
|
159
117
|
const {
|
|
160
118
|
tenant: t,
|
|
161
119
|
locale: l
|
|
162
120
|
} = plugin.contentModel;
|
|
163
|
-
|
|
164
121
|
if (t && t !== tenant) {
|
|
165
122
|
return false;
|
|
166
123
|
} else if (l && l !== locale) {
|
|
167
124
|
return false;
|
|
168
125
|
}
|
|
169
|
-
|
|
170
126
|
return true;
|
|
171
127
|
}).map(plugin => {
|
|
172
128
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
|
|
@@ -178,46 +134,37 @@ const createModelsCrud = params => {
|
|
|
178
134
|
/**
|
|
179
135
|
* Only point where we can truly validate the user model is in the runtime.
|
|
180
136
|
*/
|
|
181
|
-
|
|
182
137
|
for (const model of models) {
|
|
183
138
|
(0, _validateModelFields.validateModelFields)({
|
|
184
139
|
model,
|
|
185
140
|
plugins: context.plugins
|
|
186
141
|
});
|
|
187
142
|
}
|
|
188
|
-
|
|
189
143
|
return models;
|
|
190
144
|
};
|
|
191
|
-
|
|
192
145
|
const modelsGet = async modelId => {
|
|
193
146
|
const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);
|
|
194
|
-
|
|
195
147
|
if (pluginModel) {
|
|
196
148
|
return pluginModel;
|
|
197
149
|
}
|
|
198
|
-
|
|
199
150
|
const model = await storageOperations.models.get({
|
|
200
151
|
tenant: getTenant().id,
|
|
201
152
|
locale: getLocale().code,
|
|
202
153
|
modelId
|
|
203
154
|
});
|
|
204
|
-
|
|
205
155
|
if (!model) {
|
|
206
156
|
throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
|
|
207
157
|
}
|
|
208
|
-
|
|
209
158
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
210
159
|
tenant: model.tenant || getTenant().id,
|
|
211
160
|
locale: model.locale || getLocale().code
|
|
212
161
|
});
|
|
213
162
|
};
|
|
214
|
-
|
|
215
163
|
const modelsList = async () => {
|
|
216
164
|
const databaseModels = await loaders.listModels.load("listModels");
|
|
217
165
|
const pluginsModels = getModelsAsPlugins();
|
|
218
166
|
return databaseModels.concat(pluginsModels);
|
|
219
167
|
};
|
|
220
|
-
|
|
221
168
|
const listModels = async () => {
|
|
222
169
|
const permission = await checkModelPermissions("r");
|
|
223
170
|
const models = await modelsList();
|
|
@@ -225,11 +172,9 @@ const createModelsCrud = params => {
|
|
|
225
172
|
if (!(0, _ownership.validateOwnership)(context, permission, model)) {
|
|
226
173
|
return false;
|
|
227
174
|
}
|
|
228
|
-
|
|
229
175
|
return (0, _access.validateModelAccess)(context, model);
|
|
230
176
|
});
|
|
231
177
|
};
|
|
232
|
-
|
|
233
178
|
const getModel = async modelId => {
|
|
234
179
|
const permission = await checkModelPermissions("r");
|
|
235
180
|
const model = await modelsGet(modelId);
|
|
@@ -237,40 +182,35 @@ const createModelsCrud = params => {
|
|
|
237
182
|
await (0, _access.checkModelAccess)(context, model);
|
|
238
183
|
return model;
|
|
239
184
|
};
|
|
240
|
-
|
|
241
185
|
const getModelManager = async target => {
|
|
242
186
|
const modelId = typeof target === "string" ? target : target.modelId;
|
|
243
|
-
|
|
244
187
|
if (managers.has(modelId)) {
|
|
245
188
|
return managers.get(modelId);
|
|
246
189
|
}
|
|
247
|
-
|
|
248
190
|
const models = await modelsList();
|
|
249
191
|
const model = models.find(m => m.modelId === modelId);
|
|
250
|
-
|
|
251
192
|
if (!model) {
|
|
252
193
|
throw new _handlerGraphql.NotFoundError(`There is no content model "${modelId}".`);
|
|
253
194
|
}
|
|
254
|
-
|
|
255
195
|
return await updateManager(context, model);
|
|
256
|
-
};
|
|
257
|
-
|
|
196
|
+
};
|
|
258
197
|
|
|
198
|
+
// create
|
|
259
199
|
const onModelBeforeCreate = (0, _pubsub.createTopic)("cms.onModelBeforeCreate");
|
|
260
|
-
const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
|
|
261
|
-
|
|
200
|
+
const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
|
|
201
|
+
// create from
|
|
262
202
|
const onModelBeforeCreateFrom = (0, _pubsub.createTopic)("cms.onModelBeforeCreateFrom");
|
|
263
|
-
const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
|
|
264
|
-
|
|
203
|
+
const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
|
|
204
|
+
// update
|
|
265
205
|
const onModelBeforeUpdate = (0, _pubsub.createTopic)("cms.onModelBeforeUpdate");
|
|
266
|
-
const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
|
|
267
|
-
|
|
206
|
+
const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
|
|
207
|
+
// delete
|
|
268
208
|
const onModelBeforeDelete = (0, _pubsub.createTopic)("cms.onModelBeforeDelete");
|
|
269
209
|
const onModelAfterDelete = (0, _pubsub.createTopic)("cms.onModelAfterDelete");
|
|
210
|
+
const onModelInitialize = (0, _pubsub.createTopic)("cms.onModelInitialize");
|
|
270
211
|
/**
|
|
271
212
|
* We need to assign some default behaviors.
|
|
272
213
|
*/
|
|
273
|
-
|
|
274
214
|
(0, _beforeCreate.assignModelBeforeCreate)({
|
|
275
215
|
onModelBeforeCreate,
|
|
276
216
|
onModelBeforeCreateFrom,
|
|
@@ -315,7 +255,6 @@ const createModelsCrud = params => {
|
|
|
315
255
|
onAfterModelUpdate: onModelAfterUpdate,
|
|
316
256
|
onBeforeModelDelete: onModelBeforeDelete,
|
|
317
257
|
onAfterModelDelete: onModelAfterDelete,
|
|
318
|
-
|
|
319
258
|
/**
|
|
320
259
|
* Released in 5.34.0
|
|
321
260
|
*/
|
|
@@ -327,10 +266,10 @@ const createModelsCrud = params => {
|
|
|
327
266
|
onModelAfterUpdate,
|
|
328
267
|
onModelBeforeDelete,
|
|
329
268
|
onModelAfterDelete,
|
|
269
|
+
onModelInitialize,
|
|
330
270
|
clearModelsCache,
|
|
331
271
|
getModel,
|
|
332
272
|
listModels,
|
|
333
|
-
|
|
334
273
|
async createModel(inputData) {
|
|
335
274
|
await checkModelPermissions("w");
|
|
336
275
|
const createdData = new _models.CreateContentModelModel().populate(inputData);
|
|
@@ -339,11 +278,9 @@ const createModelsCrud = params => {
|
|
|
339
278
|
context.security.disableAuthorization();
|
|
340
279
|
const group = await context.cms.getGroup(input.group);
|
|
341
280
|
context.security.enableAuthorization();
|
|
342
|
-
|
|
343
281
|
if (!group) {
|
|
344
282
|
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
345
283
|
}
|
|
346
|
-
|
|
347
284
|
const fields = await (0, _createFieldModels.createFieldModels)(input.fields);
|
|
348
285
|
const identity = getIdentity();
|
|
349
286
|
const model = {
|
|
@@ -384,7 +321,6 @@ const createModelsCrud = params => {
|
|
|
384
321
|
});
|
|
385
322
|
return createdModel;
|
|
386
323
|
},
|
|
387
|
-
|
|
388
324
|
/**
|
|
389
325
|
* Method does not check for permissions or ownership.
|
|
390
326
|
* @internal
|
|
@@ -416,13 +352,11 @@ const createModelsCrud = params => {
|
|
|
416
352
|
});
|
|
417
353
|
return resultModel;
|
|
418
354
|
},
|
|
419
|
-
|
|
420
355
|
async createModelFrom(modelId, data) {
|
|
421
356
|
await checkModelPermissions("w");
|
|
422
357
|
/**
|
|
423
358
|
* Get a model record; this will also perform ownership validation.
|
|
424
359
|
*/
|
|
425
|
-
|
|
426
360
|
const original = await getModel(modelId);
|
|
427
361
|
const createdData = new _models.CreateContentModelModelFrom().populate({
|
|
428
362
|
name: data.name,
|
|
@@ -434,25 +368,20 @@ const createModelsCrud = params => {
|
|
|
434
368
|
await createdData.validate();
|
|
435
369
|
const input = await createdData.toJSON();
|
|
436
370
|
const locale = await context.i18n.getLocale(input.locale || original.locale);
|
|
437
|
-
|
|
438
371
|
if (!locale) {
|
|
439
372
|
throw new _handlerGraphql.NotFoundError(`There is no locale "${input.locale}".`);
|
|
440
373
|
}
|
|
441
374
|
/**
|
|
442
375
|
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
443
376
|
*/
|
|
444
|
-
|
|
445
|
-
|
|
446
377
|
const group = await context.cms.storageOperations.groups.get({
|
|
447
378
|
id: input.group,
|
|
448
379
|
tenant: original.tenant,
|
|
449
380
|
locale: locale.code
|
|
450
381
|
});
|
|
451
|
-
|
|
452
382
|
if (!group) {
|
|
453
383
|
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
454
384
|
}
|
|
455
|
-
|
|
456
385
|
const identity = getIdentity();
|
|
457
386
|
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
|
|
458
387
|
locale: locale.code,
|
|
@@ -490,44 +419,38 @@ const createModelsCrud = params => {
|
|
|
490
419
|
});
|
|
491
420
|
return createdModel;
|
|
492
421
|
},
|
|
493
|
-
|
|
494
422
|
async updateModel(modelId, inputData) {
|
|
495
|
-
await checkModelPermissions("w");
|
|
423
|
+
await checkModelPermissions("w");
|
|
496
424
|
|
|
425
|
+
// Get a model record; this will also perform ownership validation.
|
|
497
426
|
const original = await getModel(modelId);
|
|
498
427
|
const updatedData = new _models.UpdateContentModelModel().populate(inputData);
|
|
499
428
|
await updatedData.validate();
|
|
500
429
|
const input = await updatedData.toJSON({
|
|
501
430
|
onlyDirty: true
|
|
502
431
|
});
|
|
503
|
-
|
|
504
432
|
if (Object.keys(input).length === 0) {
|
|
505
433
|
/**
|
|
506
434
|
* We need to return the original if nothing is to be updated.
|
|
507
435
|
*/
|
|
508
436
|
return original;
|
|
509
437
|
}
|
|
510
|
-
|
|
511
438
|
let group = {
|
|
512
439
|
id: original.group.id,
|
|
513
440
|
name: original.group.name
|
|
514
441
|
};
|
|
515
|
-
|
|
516
442
|
if (input.group) {
|
|
517
443
|
context.security.disableAuthorization();
|
|
518
444
|
const groupData = await context.cms.getGroup(input.group);
|
|
519
445
|
context.security.enableAuthorization();
|
|
520
|
-
|
|
521
446
|
if (!groupData) {
|
|
522
447
|
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
523
448
|
}
|
|
524
|
-
|
|
525
449
|
group = {
|
|
526
450
|
id: groupData.id,
|
|
527
451
|
name: groupData.name
|
|
528
452
|
};
|
|
529
453
|
}
|
|
530
|
-
|
|
531
454
|
const fields = await (0, _createFieldModels.createFieldModels)(inputData.fields);
|
|
532
455
|
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input), {}, {
|
|
533
456
|
group,
|
|
@@ -553,14 +476,12 @@ const createModelsCrud = params => {
|
|
|
553
476
|
});
|
|
554
477
|
return resultModel;
|
|
555
478
|
},
|
|
556
|
-
|
|
557
479
|
async deleteModel(modelId) {
|
|
558
480
|
await checkModelPermissions("d");
|
|
559
481
|
const model = await getModel(modelId);
|
|
560
482
|
await onModelBeforeDelete.publish({
|
|
561
483
|
model
|
|
562
484
|
});
|
|
563
|
-
|
|
564
485
|
try {
|
|
565
486
|
await storageOperations.models.delete({
|
|
566
487
|
model
|
|
@@ -571,13 +492,23 @@ const createModelsCrud = params => {
|
|
|
571
492
|
modelId: model.modelId
|
|
572
493
|
});
|
|
573
494
|
}
|
|
574
|
-
|
|
575
495
|
await onModelAfterDelete.publish({
|
|
576
496
|
model
|
|
577
497
|
});
|
|
578
498
|
managers.delete(model.modelId);
|
|
579
499
|
},
|
|
580
|
-
|
|
500
|
+
async initializeModel(modelId) {
|
|
501
|
+
/**
|
|
502
|
+
* We require that users have write permissions to initialize models.
|
|
503
|
+
* Maybe introduce another permission for it?
|
|
504
|
+
*/
|
|
505
|
+
await checkModelPermissions("w");
|
|
506
|
+
const model = await getModel(modelId);
|
|
507
|
+
await onModelInitialize.publish({
|
|
508
|
+
model
|
|
509
|
+
});
|
|
510
|
+
return true;
|
|
511
|
+
},
|
|
581
512
|
getModelManager,
|
|
582
513
|
getEntryManager: async model => {
|
|
583
514
|
return getModelManager(model);
|
|
@@ -586,5 +517,4 @@ const createModelsCrud = params => {
|
|
|
586
517
|
getEntryManagers: () => managers
|
|
587
518
|
};
|
|
588
519
|
};
|
|
589
|
-
|
|
590
520
|
exports.createModelsCrud = createModelsCrud;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["featureVersion","semver","coerce","attachStorageIdToFields","fields","map","field","settings","storageId","fieldId","attachStorageIdToModelFields","model","webinyVersion","version","match","compare","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","WEBINY_VERSION","validateModelFields","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelBeforeUpdate","onModelAfterUpdate","onModelBeforeDelete","onModelAfterDelete","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","createFieldModels","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","layout","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 OnModelBeforeCreateTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelAfterCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput,\n CmsModelField\n} from \"~/types\";\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 WebinyError from \"@webiny/error\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { assignModelAfterCreate } from \"./contentModel/afterCreate\";\nimport { assignModelAfterUpdate } from \"./contentModel/afterUpdate\";\nimport { assignModelAfterDelete } from \"./contentModel/afterDelete\";\nimport { assignModelAfterCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport { validateModelFields } from \"~/crud/contentModel/validateModelFields\";\nimport semver, { SemVer } from \"semver\";\n\n/**\n * TODO: remove for 5.34.0\n * Required because of the 5.33.0 upgrade.\n * Until the upgrade is done, API will break because there is no storageId assigned.\n */\nconst featureVersion = semver.coerce(\"5.33.0\") as SemVer;\n\nconst attachStorageIdToFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.map(field => {\n if (field.settings?.fields) {\n field.settings.fields = attachStorageIdToFields(field.settings.fields);\n }\n if (!field.storageId) {\n field.storageId = field.fieldId;\n }\n return field;\n });\n};\n\nconst attachStorageIdToModelFields = (model: CmsModel): CmsModelField[] => {\n if (!model.webinyVersion) {\n return model.fields;\n }\n\n const version = semver.coerce(model.webinyVersion);\n if (!version) {\n return model.fields;\n }\n /**\n * Unfortunately we need to check for beta and next.\n * TODO remove after 5.33.0\n */\n if (model.webinyVersion.match(/beta|next/)) {\n return attachStorageIdToFields(model.fields);\n }\n if (semver.compare(version, featureVersion) >= 0) {\n return model.fields;\n }\n return attachStorageIdToFields(model.fields);\n};\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 fields: attachStorageIdToModelFields(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 checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const models = 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 * Only point where we can truly validate the user model is in the runtime.\n */\n for (const model of models) {\n validateModelFields({\n model,\n plugins: context.plugins\n });\n }\n return models;\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 filterAsync(models, async model => {\n if (!validateOwnership(context, permission, model)) {\n return false;\n }\n return 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 checkOwnership(context, permission, model);\n await 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 // create\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n // create from\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n // update\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n // delete\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterUpdate({\n context,\n onModelAfterUpdate\n });\n assignModelAfterCreateFrom({\n context,\n onModelAfterCreateFrom\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterDelete({\n context,\n onModelAfterDelete\n });\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeModelCreate: onModelBeforeCreate,\n onAfterModelCreate: onModelAfterCreate,\n onBeforeModelCreateFrom: onModelBeforeCreateFrom,\n onAfterModelCreateFrom: onModelAfterCreateFrom,\n onBeforeModelUpdate: onModelBeforeUpdate,\n onAfterModelUpdate: onModelAfterUpdate,\n onBeforeModelDelete: onModelBeforeDelete,\n onAfterModelDelete: onModelAfterDelete,\n /**\n * Released in 5.34.0\n */\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelBeforeDelete,\n onModelAfterDelete,\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 await onModelBeforeCreate.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 onModelAfterCreate.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 onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\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 onModelBeforeCreateFrom.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 onModelAfterCreateFrom.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\n await onModelBeforeUpdate.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 onModelAfterUpdate.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 onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\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
|
+
{"version":3,"names":["featureVersion","semver","coerce","attachStorageIdToFields","fields","map","field","settings","storageId","fieldId","attachStorageIdToModelFields","model","webinyVersion","version","match","compare","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","WEBINY_VERSION","validateModelFields","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelBeforeUpdate","onModelAfterUpdate","onModelBeforeDelete","onModelAfterDelete","onModelInitialize","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","createFieldModels","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","layout","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","initializeModel","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n CmsModelPermission,\n HeadlessCmsStorageOperations,\n OnModelBeforeCreateTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelInitializeParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelAfterCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput,\n CmsModelField\n} from \"~/types\";\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 WebinyError from \"@webiny/error\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { assignModelAfterCreate } from \"./contentModel/afterCreate\";\nimport { assignModelAfterUpdate } from \"./contentModel/afterUpdate\";\nimport { assignModelAfterDelete } from \"./contentModel/afterDelete\";\nimport { assignModelAfterCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport { validateModelFields } from \"~/crud/contentModel/validateModelFields\";\nimport semver, { SemVer } from \"semver\";\n\n/**\n * TODO: remove for 5.34.0\n * Required because of the 5.33.0 upgrade.\n * Until the upgrade is done, API will break because there is no storageId assigned.\n */\nconst featureVersion = semver.coerce(\"5.33.0\") as SemVer;\n\nconst attachStorageIdToFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.map(field => {\n if (field.settings?.fields) {\n field.settings.fields = attachStorageIdToFields(field.settings.fields);\n }\n if (!field.storageId) {\n field.storageId = field.fieldId;\n }\n return field;\n });\n};\n\nconst attachStorageIdToModelFields = (model: CmsModel): CmsModelField[] => {\n if (!model.webinyVersion) {\n return model.fields;\n }\n\n const version = semver.coerce(model.webinyVersion);\n if (!version) {\n return model.fields;\n }\n /**\n * Unfortunately we need to check for beta and next.\n * TODO remove after 5.33.0\n */\n if (model.webinyVersion.match(/beta|next/)) {\n return attachStorageIdToFields(model.fields);\n }\n if (semver.compare(version, featureVersion) >= 0) {\n return model.fields;\n }\n return attachStorageIdToFields(model.fields);\n};\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 fields: attachStorageIdToModelFields(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 checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const models = 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 * Only point where we can truly validate the user model is in the runtime.\n */\n for (const model of models) {\n validateModelFields({\n model,\n plugins: context.plugins\n });\n }\n return models;\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 filterAsync(models, async model => {\n if (!validateOwnership(context, permission, model)) {\n return false;\n }\n return 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 checkOwnership(context, permission, model);\n await 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 // create\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n // create from\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n // update\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n // delete\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterUpdate({\n context,\n onModelAfterUpdate\n });\n assignModelAfterCreateFrom({\n context,\n onModelAfterCreateFrom\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterDelete({\n context,\n onModelAfterDelete\n });\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeModelCreate: onModelBeforeCreate,\n onAfterModelCreate: onModelAfterCreate,\n onBeforeModelCreateFrom: onModelBeforeCreateFrom,\n onAfterModelCreateFrom: onModelAfterCreateFrom,\n onBeforeModelUpdate: onModelBeforeUpdate,\n onAfterModelUpdate: onModelAfterUpdate,\n onBeforeModelDelete: onModelBeforeDelete,\n onAfterModelDelete: onModelAfterDelete,\n /**\n * Released in 5.34.0\n */\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelInitialize,\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 await onModelBeforeCreate.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 onModelAfterCreate.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 onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\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 onModelBeforeCreateFrom.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 onModelAfterCreateFrom.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\n await onModelBeforeUpdate.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 onModelAfterUpdate.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 onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\n async initializeModel(modelId) {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n await checkModelPermissions(\"w\");\n\n const model = await getModel(modelId);\n\n await onModelInitialize.publish({ model });\n\n return true;\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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"}
|