@webiny/api-headless-cms 0.0.0-unstable.5e7233243f → 0.0.0-unstable.6e5425ee89
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 +3 -22
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.d.ts +2 -2
- package/crud/contentEntry/afterDelete.js +2 -7
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.d.ts +2 -2
- package/crud/contentEntry/beforeCreate.js +2 -5
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.d.ts +2 -2
- package/crud/contentEntry/beforeUpdate.js +2 -5
- package/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.js +4 -47
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +8 -35
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +8 -68
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry.crud.d.ts +0 -2
- package/crud/contentEntry.crud.js +201 -361
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/afterCreate.d.ts +3 -3
- package/crud/contentModel/afterCreate.js +5 -7
- package/crud/contentModel/afterCreate.js.map +1 -1
- package/crud/contentModel/afterCreateFrom.d.ts +3 -3
- package/crud/contentModel/afterCreateFrom.js +5 -7
- package/crud/contentModel/afterCreateFrom.js.map +1 -1
- package/crud/contentModel/afterDelete.d.ts +3 -3
- package/crud/contentModel/afterDelete.js +5 -7
- package/crud/contentModel/afterDelete.js.map +1 -1
- package/crud/contentModel/afterUpdate.d.ts +3 -3
- package/crud/contentModel/afterUpdate.js +5 -7
- package/crud/contentModel/afterUpdate.js.map +1 -1
- package/crud/contentModel/beforeCreate.d.ts +4 -4
- package/crud/contentModel/beforeCreate.js +14 -42
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.d.ts +3 -3
- package/crud/contentModel/beforeDelete.js +6 -16
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.d.ts +3 -3
- package/crud/contentModel/beforeUpdate.js +5 -10
- 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 +1 -9
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.js +11 -67
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel.crud.js +84 -145
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.d.ts +2 -2
- package/crud/contentModelGroup/beforeCreate.js +3 -15
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.d.ts +2 -2
- package/crud/contentModelGroup/beforeDelete.js +3 -11
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.d.ts +2 -2
- package/crud/contentModelGroup/beforeUpdate.js +2 -7
- package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
- package/crud/contentModelGroup.crud.js +59 -76
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/index.js +3 -23
- package/crud/index.js.map +1 -1
- package/crud/settings.crud.js +3 -20
- package/crud/settings.crud.js.map +1 -1
- package/crud/system.crud.js +61 -84
- package/crud/system.crud.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +1 -14
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +16 -71
- 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 +4 -29
- 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 +6 -18
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/contentEntries.js +3 -43
- 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 +7 -31
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.js +4 -44
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.js +4 -21
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +3 -17
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +3 -17
- 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 +5 -25
- 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 +3 -15
- 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 +3 -15
- 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 +7 -37
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +21 -59
- 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.d.ts +7 -7
- package/modelManager/DefaultCmsModelManager.js +1 -17
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +0 -4
- package/modelManager/index.js.map +1 -1
- package/package.json +27 -28
- package/parameters/context.js +0 -4
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +1 -12
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +0 -8
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +7 -15
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +1 -12
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGroupPlugin.js +1 -9
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.js +1 -6
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +6 -2
- package/plugins/CmsModelPlugin.js +18 -49
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +1 -8
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.js +1 -10
- 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 +3 -25
- package/storage/object.js.map +1 -1
- package/types.d.ts +267 -126
- package/types.js +0 -64
- package/types.js.map +1 -1
- package/upgrades/5.33.0/index.js +8 -35
- 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 +1 -14
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.d.ts +7 -0
- package/utils/converters/ConverterCollection.js +31 -30
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.js +3 -33
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeName.js +1 -9
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +13 -33
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +0 -5
- package/utils/filterAsync.js.map +1 -1
- package/utils/filterModelFields.js +8 -18
- 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 +7 -26
- package/utils/permissions.js.map +1 -1
- package/utils/pluralizedTypeName.js +1 -7
- 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 +7 -8
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +0 -7
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +1 -5
- 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 +1 -8
- package/validators/unique.js.map +1 -1
|
@@ -1,36 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.
|
|
9
|
-
|
|
7
|
+
exports.assignModelBeforeCreate = void 0;
|
|
10
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
11
|
-
|
|
12
9
|
var _camelCase = _interopRequireDefault(require("lodash/camelCase"));
|
|
13
|
-
|
|
14
10
|
var _pluralize = _interopRequireDefault(require("pluralize"));
|
|
15
|
-
|
|
16
11
|
var _CmsModelPlugin = require("../../plugins/CmsModelPlugin");
|
|
17
|
-
|
|
18
12
|
var _validateModel = require("./validateModel");
|
|
19
|
-
|
|
20
13
|
var _validateLayout = require("./validateLayout");
|
|
21
|
-
|
|
22
14
|
const disallowedModelIdList = ["contentModel", "contentModels", "contentModelGroup", "contentModelGroups"];
|
|
23
15
|
/**
|
|
24
16
|
* This list is to disallow creating models that might interfere with GraphQL schema creation.
|
|
25
17
|
* Add more if required.
|
|
26
18
|
*/
|
|
27
|
-
|
|
28
19
|
const disallowedModelIdEndingList = ["Response", "List", "Meta", "Input", "Sorter", "RefType"];
|
|
20
|
+
|
|
29
21
|
/**
|
|
30
22
|
* Checks for the uniqueness of provided modelId, against the provided list of models.
|
|
31
23
|
* It also takes plural / singular forms of the provided modelId into account.
|
|
32
24
|
*/
|
|
33
|
-
|
|
34
25
|
const checkModelIdUniqueness = (modelIdList, modelId) => {
|
|
35
26
|
if (modelIdList.includes(modelId) === true) {
|
|
36
27
|
throw new _error.default(`Content model with modelId "${modelId}" already exists.`, "MODEL_ID_EXISTS", {
|
|
@@ -42,23 +33,18 @@ const checkModelIdUniqueness = (modelIdList, modelId) => {
|
|
|
42
33
|
* from creating, for example, "event" and "events" models, which would break the GraphQL schema.
|
|
43
34
|
* 1. First check if user wants to create the "event" model, but the "events" model already exists.
|
|
44
35
|
*/
|
|
45
|
-
|
|
46
|
-
|
|
47
36
|
const pluralizedModelIdCamelCase = (0, _pluralize.default)(modelId);
|
|
48
|
-
|
|
49
37
|
if (modelIdList.includes(pluralizedModelIdCamelCase) === true) {
|
|
50
38
|
throw new _error.default(`Content model with modelId "${modelId}" does not exist, but a model with modelId "${pluralizedModelIdCamelCase}" does.`, "MODEL_ID_PLURAL_ERROR", {
|
|
51
39
|
modelId,
|
|
52
40
|
plural: pluralizedModelIdCamelCase
|
|
53
41
|
});
|
|
54
42
|
}
|
|
43
|
+
|
|
55
44
|
/**
|
|
56
45
|
* 2. Then check if user wants to create the "events" model, but the "event" model already exists.
|
|
57
46
|
*/
|
|
58
|
-
|
|
59
|
-
|
|
60
47
|
const singularizedModelIdCamelCase = _pluralize.default.singular(modelId);
|
|
61
|
-
|
|
62
48
|
if (modelIdList.includes(singularizedModelIdCamelCase) === true) {
|
|
63
49
|
throw new _error.default(`Content model with modelId "${modelId}" does not exist, but a model with modelId "${singularizedModelIdCamelCase}" does.`, "MODEL_ID_SINGULAR_ERROR", {
|
|
64
50
|
modelId,
|
|
@@ -66,48 +52,39 @@ const checkModelIdUniqueness = (modelIdList, modelId) => {
|
|
|
66
52
|
});
|
|
67
53
|
}
|
|
68
54
|
};
|
|
69
|
-
|
|
70
55
|
const checkModelIdAllowed = modelId => {
|
|
71
56
|
if (disallowedModelIdList.includes(modelId) === false) {
|
|
72
57
|
return;
|
|
73
58
|
}
|
|
74
|
-
|
|
75
59
|
throw new _error.default(`Provided model ID "${modelId}" is not allowed.`);
|
|
76
60
|
};
|
|
77
|
-
|
|
78
61
|
const checkModelIdEndingAllowed = modelId => {
|
|
79
62
|
for (const ending of disallowedModelIdEndingList) {
|
|
80
63
|
const re = new RegExp(`${ending}$`, "i");
|
|
81
64
|
const matched = modelId.match(re);
|
|
82
|
-
|
|
83
65
|
if (matched === null) {
|
|
84
66
|
continue;
|
|
85
67
|
}
|
|
86
|
-
|
|
87
68
|
throw new _error.default(`ModelId that ends with "${ending}" is not allowed.`, "MODEL_ID_NOT_ALLOWED", {
|
|
88
69
|
modelId
|
|
89
70
|
});
|
|
90
71
|
}
|
|
91
72
|
};
|
|
92
|
-
|
|
93
73
|
const getModelId = model => {
|
|
94
74
|
const {
|
|
95
75
|
modelId,
|
|
96
76
|
name
|
|
97
77
|
} = model;
|
|
98
|
-
|
|
99
78
|
if (!!modelId) {
|
|
100
79
|
return (0, _camelCase.default)(modelId.trim());
|
|
101
80
|
} else if (name) {
|
|
102
81
|
return (0, _camelCase.default)(name.trim());
|
|
103
82
|
}
|
|
104
|
-
|
|
105
83
|
throw new _error.default(`There is no "modelId" or "name" passed into the create model method.`, "MISSING_MODEL_DATA", {
|
|
106
84
|
model
|
|
107
85
|
});
|
|
108
86
|
};
|
|
109
|
-
|
|
110
|
-
const createOnBeforeCb = ({
|
|
87
|
+
const createOnModelBeforeCb = ({
|
|
111
88
|
plugins,
|
|
112
89
|
storageOperations
|
|
113
90
|
}) => {
|
|
@@ -117,13 +94,11 @@ const createOnBeforeCb = ({
|
|
|
117
94
|
} = params;
|
|
118
95
|
const modelId = getModelId(model);
|
|
119
96
|
const modelPlugin = plugins.byType(_CmsModelPlugin.CmsModelPlugin.type).find(item => item.contentModel.modelId === modelId);
|
|
120
|
-
|
|
121
97
|
if (modelPlugin) {
|
|
122
98
|
throw new _error.default(`Cannot create "${model.modelId}" content model because one is already registered via a plugin.`, "CONTENT_MODEL_CREATE_ERROR", {
|
|
123
99
|
modelId: model.modelId
|
|
124
100
|
});
|
|
125
101
|
}
|
|
126
|
-
|
|
127
102
|
const models = await storageOperations.models.list({
|
|
128
103
|
where: {
|
|
129
104
|
tenant: model.tenant,
|
|
@@ -131,32 +106,31 @@ const createOnBeforeCb = ({
|
|
|
131
106
|
}
|
|
132
107
|
});
|
|
133
108
|
const modelIdList = models.map(m => m.modelId);
|
|
109
|
+
|
|
134
110
|
/**
|
|
135
111
|
* We need to check for:
|
|
136
112
|
* - is that exact modelId allowed
|
|
137
113
|
* - is modelId unique
|
|
138
114
|
* - is model ending allowed
|
|
139
115
|
*/
|
|
140
|
-
|
|
141
116
|
checkModelIdAllowed(modelId);
|
|
142
117
|
checkModelIdEndingAllowed(modelId);
|
|
143
118
|
checkModelIdUniqueness(modelIdList, modelId);
|
|
144
119
|
model.modelId = modelId;
|
|
145
120
|
};
|
|
146
121
|
};
|
|
147
|
-
|
|
148
122
|
/**
|
|
149
123
|
* We attach both on before create and createFrom events here.
|
|
150
124
|
* Callables are identical.
|
|
151
125
|
*/
|
|
152
|
-
const
|
|
126
|
+
const assignModelBeforeCreate = params => {
|
|
153
127
|
const {
|
|
154
|
-
|
|
155
|
-
|
|
128
|
+
onModelBeforeCreate,
|
|
129
|
+
onModelBeforeCreateFrom,
|
|
156
130
|
storageOperations,
|
|
157
131
|
plugins
|
|
158
132
|
} = params;
|
|
159
|
-
|
|
133
|
+
onModelBeforeCreate.subscribe(async ({
|
|
160
134
|
model,
|
|
161
135
|
input
|
|
162
136
|
}) => {
|
|
@@ -167,8 +141,7 @@ const assignBeforeModelCreate = params => {
|
|
|
167
141
|
/**
|
|
168
142
|
* then we run the shared create/createFrom methods.
|
|
169
143
|
*/
|
|
170
|
-
|
|
171
|
-
const cb = createOnBeforeCb({
|
|
144
|
+
const cb = createOnModelBeforeCb({
|
|
172
145
|
storageOperations,
|
|
173
146
|
plugins
|
|
174
147
|
});
|
|
@@ -176,19 +149,18 @@ const assignBeforeModelCreate = params => {
|
|
|
176
149
|
model,
|
|
177
150
|
input
|
|
178
151
|
});
|
|
152
|
+
|
|
179
153
|
/**
|
|
180
154
|
* and then we move onto model and fields...
|
|
181
155
|
*/
|
|
182
|
-
|
|
183
156
|
await (0, _validateModel.validateModel)({
|
|
184
157
|
model,
|
|
185
158
|
plugins
|
|
186
159
|
});
|
|
187
160
|
});
|
|
188
|
-
|
|
161
|
+
onModelBeforeCreateFrom.subscribe(createOnModelBeforeCb({
|
|
189
162
|
storageOperations,
|
|
190
163
|
plugins
|
|
191
164
|
}));
|
|
192
165
|
};
|
|
193
|
-
|
|
194
|
-
exports.assignBeforeModelCreate = assignBeforeModelCreate;
|
|
166
|
+
exports.assignModelBeforeCreate = assignModelBeforeCreate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["disallowedModelIdList","disallowedModelIdEndingList","checkModelIdUniqueness","modelIdList","modelId","includes","WebinyError","pluralizedModelIdCamelCase","pluralize","plural","singularizedModelIdCamelCase","singular","checkModelIdAllowed","checkModelIdEndingAllowed","ending","re","RegExp","matched","match","getModelId","model","name","camelCase","trim","createOnBeforeCb","plugins","storageOperations","params","modelPlugin","byType","CmsModelPlugin","type","find","item","contentModel","models","list","where","tenant","locale","map","m","assignBeforeModelCreate","onBeforeModelCreate","onBeforeModelCreateFrom","subscribe","input","validateLayout","layout","fields","cb","validateModel"],"sources":["beforeCreate.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport camelCase from \"lodash/camelCase\";\nimport pluralize from \"pluralize\";\nimport {\n BeforeModelCreateFromTopicParams,\n BeforeModelCreateTopicParams,\n CmsModel,\n HeadlessCmsStorageOperations\n} from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { validateModel } from \"./validateModel\";\nimport { validateLayout } from \"./validateLayout\";\n\nconst disallowedModelIdList: string[] = [\n \"contentModel\",\n \"contentModels\",\n \"contentModelGroup\",\n \"contentModelGroups\"\n];\n/**\n * This list is to disallow creating models that might interfere with GraphQL schema creation.\n * Add more if required.\n */\nconst disallowedModelIdEndingList: string[] = [\n \"Response\",\n \"List\",\n \"Meta\",\n \"Input\",\n \"Sorter\",\n \"RefType\"\n];\n\n/**\n * Checks for the uniqueness of provided modelId, against the provided list of models.\n * It also takes plural / singular forms of the provided modelId into account.\n */\nconst checkModelIdUniqueness = (modelIdList: string[], modelId: string) => {\n if (modelIdList.includes(modelId) === true) {\n throw new WebinyError(\n `Content model with modelId \"${modelId}\" already exists.`,\n \"MODEL_ID_EXISTS\",\n {\n modelId\n }\n );\n }\n /**\n * Additionally, check if the plural form of the received modelId exists too. This prevents users\n * from creating, for example, \"event\" and \"events\" models, which would break the GraphQL schema.\n * 1. First check if user wants to create the \"event\" model, but the \"events\" model already exists.\n */\n const pluralizedModelIdCamelCase = pluralize(modelId);\n if (modelIdList.includes(pluralizedModelIdCamelCase) === true) {\n throw new WebinyError(\n `Content model with modelId \"${modelId}\" does not exist, but a model with modelId \"${pluralizedModelIdCamelCase}\" does.`,\n \"MODEL_ID_PLURAL_ERROR\",\n {\n modelId,\n plural: pluralizedModelIdCamelCase\n }\n );\n }\n\n /**\n * 2. Then check if user wants to create the \"events\" model, but the \"event\" model already exists.\n */\n const singularizedModelIdCamelCase = pluralize.singular(modelId);\n if (modelIdList.includes(singularizedModelIdCamelCase) === true) {\n throw new WebinyError(\n `Content model with modelId \"${modelId}\" does not exist, but a model with modelId \"${singularizedModelIdCamelCase}\" does.`,\n \"MODEL_ID_SINGULAR_ERROR\",\n {\n modelId,\n singular: singularizedModelIdCamelCase\n }\n );\n }\n};\n\nconst checkModelIdAllowed = (modelId: string): void => {\n if (disallowedModelIdList.includes(modelId) === false) {\n return;\n }\n throw new WebinyError(`Provided model ID \"${modelId}\" is not allowed.`);\n};\n\nconst checkModelIdEndingAllowed = (modelId: string): void => {\n for (const ending of disallowedModelIdEndingList) {\n const re = new RegExp(`${ending}$`, \"i\");\n const matched = modelId.match(re);\n if (matched === null) {\n continue;\n }\n throw new WebinyError(\n `ModelId that ends with \"${ending}\" is not allowed.`,\n \"MODEL_ID_NOT_ALLOWED\",\n {\n modelId\n }\n );\n }\n};\n\nconst getModelId = (model: CmsModel): string => {\n const { modelId, name } = model;\n if (!!modelId) {\n return camelCase(modelId.trim());\n } else if (name) {\n return camelCase(name.trim());\n }\n throw new WebinyError(\n `There is no \"modelId\" or \"name\" passed into the create model method.`,\n \"MISSING_MODEL_DATA\",\n {\n model\n }\n );\n};\n\ninterface CreateOnBeforeCreateCbParams {\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nconst createOnBeforeCb = ({ plugins, storageOperations }: CreateOnBeforeCreateCbParams) => {\n return async (params: BeforeModelCreateTopicParams | BeforeModelCreateFromTopicParams) => {\n const { model } = params;\n\n const modelId = getModelId(model);\n\n const modelPlugin = plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n .find((item: CmsModelPlugin) => item.contentModel.modelId === modelId);\n\n if (modelPlugin) {\n throw new WebinyError(\n `Cannot create \"${model.modelId}\" content model because one is already registered via a plugin.`,\n \"CONTENT_MODEL_CREATE_ERROR\",\n {\n modelId: model.modelId\n }\n );\n }\n\n const models = await storageOperations.models.list({\n where: {\n tenant: model.tenant,\n locale: model.locale\n }\n });\n const modelIdList = models.map(m => m.modelId);\n\n /**\n * We need to check for:\n * - is that exact modelId allowed\n * - is modelId unique\n * - is model ending allowed\n */\n checkModelIdAllowed(modelId);\n checkModelIdEndingAllowed(modelId);\n checkModelIdUniqueness(modelIdList, modelId);\n model.modelId = modelId;\n };\n};\n\ninterface AssignBeforeModelCreateParams {\n onBeforeModelCreate: Topic<BeforeModelCreateTopicParams>;\n onBeforeModelCreateFrom: Topic<BeforeModelCreateFromTopicParams>;\n storageOperations: HeadlessCmsStorageOperations;\n plugins: PluginsContainer;\n}\n\n/**\n * We attach both on before create and createFrom events here.\n * Callables are identical.\n */\nexport const assignBeforeModelCreate = (params: AssignBeforeModelCreateParams) => {\n const { onBeforeModelCreate, onBeforeModelCreateFrom, storageOperations, plugins } = params;\n\n onBeforeModelCreate.subscribe(async ({ model, input }) => {\n /**\n * First the layout...\n */\n validateLayout(model.layout, model.fields);\n /**\n * then we run the shared create/createFrom methods.\n */\n const cb = createOnBeforeCb({\n storageOperations,\n plugins\n });\n await cb({\n model,\n input\n });\n\n /**\n * and then we move onto model and fields...\n */\n await validateModel({\n model,\n plugins\n });\n });\n\n onBeforeModelCreateFrom.subscribe(\n createOnBeforeCb({\n storageOperations,\n plugins\n })\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["disallowedModelIdList","disallowedModelIdEndingList","checkModelIdUniqueness","modelIdList","modelId","includes","WebinyError","pluralizedModelIdCamelCase","pluralize","plural","singularizedModelIdCamelCase","singular","checkModelIdAllowed","checkModelIdEndingAllowed","ending","re","RegExp","matched","match","getModelId","model","name","camelCase","trim","createOnModelBeforeCb","plugins","storageOperations","params","modelPlugin","byType","CmsModelPlugin","type","find","item","contentModel","models","list","where","tenant","locale","map","m","assignModelBeforeCreate","onModelBeforeCreate","onModelBeforeCreateFrom","subscribe","input","validateLayout","layout","fields","cb","validateModel"],"sources":["beforeCreate.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport camelCase from \"lodash/camelCase\";\nimport pluralize from \"pluralize\";\nimport {\n OnModelBeforeCreateFromTopicParams,\n OnModelBeforeCreateTopicParams,\n CmsModel,\n HeadlessCmsStorageOperations\n} from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { validateModel } from \"./validateModel\";\nimport { validateLayout } from \"./validateLayout\";\n\nconst disallowedModelIdList: string[] = [\n \"contentModel\",\n \"contentModels\",\n \"contentModelGroup\",\n \"contentModelGroups\"\n];\n/**\n * This list is to disallow creating models that might interfere with GraphQL schema creation.\n * Add more if required.\n */\nconst disallowedModelIdEndingList: string[] = [\n \"Response\",\n \"List\",\n \"Meta\",\n \"Input\",\n \"Sorter\",\n \"RefType\"\n];\n\n/**\n * Checks for the uniqueness of provided modelId, against the provided list of models.\n * It also takes plural / singular forms of the provided modelId into account.\n */\nconst checkModelIdUniqueness = (modelIdList: string[], modelId: string) => {\n if (modelIdList.includes(modelId) === true) {\n throw new WebinyError(\n `Content model with modelId \"${modelId}\" already exists.`,\n \"MODEL_ID_EXISTS\",\n {\n modelId\n }\n );\n }\n /**\n * Additionally, check if the plural form of the received modelId exists too. This prevents users\n * from creating, for example, \"event\" and \"events\" models, which would break the GraphQL schema.\n * 1. First check if user wants to create the \"event\" model, but the \"events\" model already exists.\n */\n const pluralizedModelIdCamelCase = pluralize(modelId);\n if (modelIdList.includes(pluralizedModelIdCamelCase) === true) {\n throw new WebinyError(\n `Content model with modelId \"${modelId}\" does not exist, but a model with modelId \"${pluralizedModelIdCamelCase}\" does.`,\n \"MODEL_ID_PLURAL_ERROR\",\n {\n modelId,\n plural: pluralizedModelIdCamelCase\n }\n );\n }\n\n /**\n * 2. Then check if user wants to create the \"events\" model, but the \"event\" model already exists.\n */\n const singularizedModelIdCamelCase = pluralize.singular(modelId);\n if (modelIdList.includes(singularizedModelIdCamelCase) === true) {\n throw new WebinyError(\n `Content model with modelId \"${modelId}\" does not exist, but a model with modelId \"${singularizedModelIdCamelCase}\" does.`,\n \"MODEL_ID_SINGULAR_ERROR\",\n {\n modelId,\n singular: singularizedModelIdCamelCase\n }\n );\n }\n};\n\nconst checkModelIdAllowed = (modelId: string): void => {\n if (disallowedModelIdList.includes(modelId) === false) {\n return;\n }\n throw new WebinyError(`Provided model ID \"${modelId}\" is not allowed.`);\n};\n\nconst checkModelIdEndingAllowed = (modelId: string): void => {\n for (const ending of disallowedModelIdEndingList) {\n const re = new RegExp(`${ending}$`, \"i\");\n const matched = modelId.match(re);\n if (matched === null) {\n continue;\n }\n throw new WebinyError(\n `ModelId that ends with \"${ending}\" is not allowed.`,\n \"MODEL_ID_NOT_ALLOWED\",\n {\n modelId\n }\n );\n }\n};\n\nconst getModelId = (model: CmsModel): string => {\n const { modelId, name } = model;\n if (!!modelId) {\n return camelCase(modelId.trim());\n } else if (name) {\n return camelCase(name.trim());\n }\n throw new WebinyError(\n `There is no \"modelId\" or \"name\" passed into the create model method.`,\n \"MISSING_MODEL_DATA\",\n {\n model\n }\n );\n};\n\ninterface CreateOnModelBeforeCreateCbParams {\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nconst createOnModelBeforeCb = ({\n plugins,\n storageOperations\n}: CreateOnModelBeforeCreateCbParams) => {\n return async (params: OnModelBeforeCreateTopicParams | OnModelBeforeCreateFromTopicParams) => {\n const { model } = params;\n\n const modelId = getModelId(model);\n\n const modelPlugin = plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n .find((item: CmsModelPlugin) => item.contentModel.modelId === modelId);\n\n if (modelPlugin) {\n throw new WebinyError(\n `Cannot create \"${model.modelId}\" content model because one is already registered via a plugin.`,\n \"CONTENT_MODEL_CREATE_ERROR\",\n {\n modelId: model.modelId\n }\n );\n }\n\n const models = await storageOperations.models.list({\n where: {\n tenant: model.tenant,\n locale: model.locale\n }\n });\n const modelIdList = models.map(m => m.modelId);\n\n /**\n * We need to check for:\n * - is that exact modelId allowed\n * - is modelId unique\n * - is model ending allowed\n */\n checkModelIdAllowed(modelId);\n checkModelIdEndingAllowed(modelId);\n checkModelIdUniqueness(modelIdList, modelId);\n model.modelId = modelId;\n };\n};\n\ninterface AssignBeforeModelCreateParams {\n onModelBeforeCreate: Topic<OnModelBeforeCreateTopicParams>;\n onModelBeforeCreateFrom: Topic<OnModelBeforeCreateFromTopicParams>;\n storageOperations: HeadlessCmsStorageOperations;\n plugins: PluginsContainer;\n}\n\n/**\n * We attach both on before create and createFrom events here.\n * Callables are identical.\n */\nexport const assignModelBeforeCreate = (params: AssignBeforeModelCreateParams) => {\n const { onModelBeforeCreate, onModelBeforeCreateFrom, storageOperations, plugins } = params;\n\n onModelBeforeCreate.subscribe(async ({ model, input }) => {\n /**\n * First the layout...\n */\n validateLayout(model.layout, model.fields);\n /**\n * then we run the shared create/createFrom methods.\n */\n const cb = createOnModelBeforeCb({\n storageOperations,\n plugins\n });\n await cb({\n model,\n input\n });\n\n /**\n * and then we move onto model and fields...\n */\n await validateModel({\n model,\n plugins\n });\n });\n\n onModelBeforeCreateFrom.subscribe(\n createOnModelBeforeCb({\n storageOperations,\n plugins\n })\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Topic } from "@webiny/pubsub/types";
|
|
2
|
-
import {
|
|
2
|
+
import { OnModelBeforeDeleteTopicParams, HeadlessCmsStorageOperations } from "../../types";
|
|
3
3
|
import { PluginsContainer } from "@webiny/plugins";
|
|
4
4
|
interface AssignBeforeModelDeleteParams {
|
|
5
|
-
|
|
5
|
+
onModelBeforeDelete: Topic<OnModelBeforeDeleteTopicParams>;
|
|
6
6
|
storageOperations: HeadlessCmsStorageOperations;
|
|
7
7
|
plugins: PluginsContainer;
|
|
8
8
|
}
|
|
9
|
-
export declare const
|
|
9
|
+
export declare const assignModelBeforeDelete: (params: AssignBeforeModelDeleteParams) => void;
|
|
10
10
|
export {};
|
|
@@ -1,38 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.
|
|
9
|
-
|
|
7
|
+
exports.assignModelBeforeDelete = void 0;
|
|
10
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
11
|
-
|
|
12
9
|
var _CmsModelPlugin = require("../../plugins/CmsModelPlugin");
|
|
13
|
-
|
|
14
10
|
var _valueKeyStorageConverter = require("../../utils/converters/valueKeyStorageConverter");
|
|
15
|
-
|
|
16
|
-
const assignBeforeModelDelete = params => {
|
|
11
|
+
const assignModelBeforeDelete = params => {
|
|
17
12
|
const {
|
|
18
|
-
|
|
13
|
+
onModelBeforeDelete,
|
|
19
14
|
storageOperations,
|
|
20
15
|
plugins
|
|
21
16
|
} = params;
|
|
22
|
-
|
|
17
|
+
onModelBeforeDelete.subscribe(async params => {
|
|
23
18
|
const {
|
|
24
19
|
model
|
|
25
20
|
} = params;
|
|
26
21
|
const modelPlugin = plugins.byType(_CmsModelPlugin.CmsModelPlugin.type).find(item => item.contentModel.modelId === model.modelId);
|
|
27
|
-
|
|
28
22
|
if (modelPlugin) {
|
|
29
23
|
throw new _error.default("Content models defined via plugins cannot be deleted.", "CONTENT_MODEL_DELETE_ERROR", {
|
|
30
24
|
modelId: model.modelId
|
|
31
25
|
});
|
|
32
26
|
}
|
|
33
|
-
|
|
34
27
|
let entries = [];
|
|
35
|
-
|
|
36
28
|
try {
|
|
37
29
|
const result = await storageOperations.entries.list((0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
38
30
|
model,
|
|
@@ -50,11 +42,9 @@ const assignBeforeModelDelete = params => {
|
|
|
50
42
|
model
|
|
51
43
|
});
|
|
52
44
|
}
|
|
53
|
-
|
|
54
45
|
if (entries.length > 0) {
|
|
55
46
|
throw new _error.default(`Cannot delete content model "${model.modelId}" because there are existing entries.`, "CONTENT_MODEL_BEFORE_DELETE_HOOK_FAILED");
|
|
56
47
|
}
|
|
57
48
|
});
|
|
58
49
|
};
|
|
59
|
-
|
|
60
|
-
exports.assignBeforeModelDelete = assignBeforeModelDelete;
|
|
50
|
+
exports.assignModelBeforeDelete = assignModelBeforeDelete;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["assignModelBeforeDelete","params","onModelBeforeDelete","storageOperations","plugins","subscribe","model","modelPlugin","byType","CmsModelPlugin","type","find","item","contentModel","modelId","WebinyError","entries","result","list","attachCmsModelFieldConverters","where","latest","limit","items","ex","error","length"],"sources":["beforeDelete.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { OnModelBeforeDeleteTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { attachCmsModelFieldConverters } from \"~/utils/converters/valueKeyStorageConverter\";\n\ninterface AssignBeforeModelDeleteParams {\n onModelBeforeDelete: Topic<OnModelBeforeDeleteTopicParams>;\n storageOperations: HeadlessCmsStorageOperations;\n plugins: PluginsContainer;\n}\nexport const assignModelBeforeDelete = (params: AssignBeforeModelDeleteParams) => {\n const { onModelBeforeDelete, storageOperations, plugins } = params;\n\n onModelBeforeDelete.subscribe(async params => {\n const { model } = 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 deleted.\",\n \"CONTENT_MODEL_DELETE_ERROR\",\n {\n modelId: model.modelId\n }\n );\n }\n\n let entries = [];\n try {\n const result = await storageOperations.entries.list(\n attachCmsModelFieldConverters({\n model,\n plugins\n }),\n {\n where: {\n latest: true\n },\n limit: 1\n }\n );\n entries = result.items;\n } catch (ex) {\n throw new WebinyError(\n \"Could not retrieve a list of content entries from the model.\",\n \"ENTRIES_ERROR\",\n {\n error: ex,\n model\n }\n );\n }\n if (entries.length > 0) {\n throw new WebinyError(\n `Cannot delete content model \"${model.modelId}\" because there are existing entries.`,\n \"CONTENT_MODEL_BEFORE_DELETE_HOOK_FAILED\"\n );\n }\n });\n};\n"],"mappings":";;;;;;;AAGA;AACA;AACA;AAOO,MAAMA,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC,iBAAiB;IAAEC;EAAQ,CAAC,GAAGH,MAAM;EAElEC,mBAAmB,CAACG,SAAS,CAAC,MAAMJ,MAAM,IAAI;IAC1C,MAAM;MAAEK;IAAM,CAAC,GAAGL,MAAM;IAExB,MAAMM,WAAW,GAAGH,OAAO,CACtBI,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC,CAC3CC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,YAAY,CAACC,OAAO,KAAKR,KAAK,CAACQ,OAAO,CAAC;IAE9D,IAAIP,WAAW,EAAE;MACb,MAAM,IAAIQ,cAAW,CACjB,uDAAuD,EACvD,4BAA4B,EAC5B;QACID,OAAO,EAAER,KAAK,CAACQ;MACnB,CAAC,CACJ;IACL;IAEA,IAAIE,OAAO,GAAG,EAAE;IAChB,IAAI;MACA,MAAMC,MAAM,GAAG,MAAMd,iBAAiB,CAACa,OAAO,CAACE,IAAI,CAC/C,IAAAC,uDAA6B,EAAC;QAC1Bb,KAAK;QACLF;MACJ,CAAC,CAAC,EACF;QACIgB,KAAK,EAAE;UACHC,MAAM,EAAE;QACZ,CAAC;QACDC,KAAK,EAAE;MACX,CAAC,CACJ;MACDN,OAAO,GAAGC,MAAM,CAACM,KAAK;IAC1B,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAM,IAAIT,cAAW,CACjB,8DAA8D,EAC9D,eAAe,EACf;QACIU,KAAK,EAAED,EAAE;QACTlB;MACJ,CAAC,CACJ;IACL;IACA,IAAIU,OAAO,CAACU,MAAM,GAAG,CAAC,EAAE;MACpB,MAAM,IAAIX,cAAW,CAChB,gCAA+BT,KAAK,CAACQ,OAAQ,uCAAsC,EACpF,yCAAyC,CAC5C;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Topic } from "@webiny/pubsub/types";
|
|
2
|
-
import {
|
|
2
|
+
import { OnModelBeforeUpdateTopicParams, HeadlessCmsStorageOperations } from "../../types";
|
|
3
3
|
import { PluginsContainer } from "@webiny/plugins";
|
|
4
4
|
interface AssignBeforeModelUpdateParams {
|
|
5
|
-
|
|
5
|
+
onModelBeforeUpdate: Topic<OnModelBeforeUpdateTopicParams>;
|
|
6
6
|
storageOperations: HeadlessCmsStorageOperations;
|
|
7
7
|
plugins: PluginsContainer;
|
|
8
8
|
}
|
|
9
|
-
export declare const
|
|
9
|
+
export declare const assignModelBeforeUpdate: (params: AssignBeforeModelUpdateParams) => void;
|
|
10
10
|
export {};
|
|
@@ -3,18 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
6
|
+
exports.assignModelBeforeUpdate = void 0;
|
|
8
7
|
var _validateModel = require("./validateModel");
|
|
9
|
-
|
|
10
8
|
var _validateLayout = require("./validateLayout");
|
|
11
|
-
|
|
12
|
-
const assignBeforeModelUpdate = params => {
|
|
9
|
+
const assignModelBeforeUpdate = params => {
|
|
13
10
|
const {
|
|
14
|
-
|
|
11
|
+
onModelBeforeUpdate,
|
|
15
12
|
plugins
|
|
16
13
|
} = params;
|
|
17
|
-
|
|
14
|
+
onModelBeforeUpdate.subscribe(async ({
|
|
18
15
|
model,
|
|
19
16
|
original
|
|
20
17
|
}) => {
|
|
@@ -25,7 +22,6 @@ const assignBeforeModelUpdate = params => {
|
|
|
25
22
|
/**
|
|
26
23
|
* then the model and fields...
|
|
27
24
|
*/
|
|
28
|
-
|
|
29
25
|
await (0, _validateModel.validateModel)({
|
|
30
26
|
model,
|
|
31
27
|
original,
|
|
@@ -33,5 +29,4 @@ const assignBeforeModelUpdate = params => {
|
|
|
33
29
|
});
|
|
34
30
|
});
|
|
35
31
|
};
|
|
36
|
-
|
|
37
|
-
exports.assignBeforeModelUpdate = assignBeforeModelUpdate;
|
|
32
|
+
exports.assignModelBeforeUpdate = assignModelBeforeUpdate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["assignModelBeforeUpdate","params","onModelBeforeUpdate","plugins","subscribe","model","original","validateLayout","layout","fields","validateModel"],"sources":["beforeUpdate.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { OnModelBeforeUpdateTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { validateModel } from \"./validateModel\";\nimport { validateLayout } from \"./validateLayout\";\n\ninterface AssignBeforeModelUpdateParams {\n onModelBeforeUpdate: Topic<OnModelBeforeUpdateTopicParams>;\n storageOperations: HeadlessCmsStorageOperations;\n plugins: PluginsContainer;\n}\n\nexport const assignModelBeforeUpdate = (params: AssignBeforeModelUpdateParams) => {\n const { onModelBeforeUpdate, plugins } = params;\n\n onModelBeforeUpdate.subscribe(async ({ model, original }) => {\n /**\n * First we go through the layout...\n */\n validateLayout(model.layout, model.fields);\n /**\n * then the model and fields...\n */\n await validateModel({\n model,\n original,\n plugins\n });\n });\n};\n"],"mappings":";;;;;;AAGA;AACA;AAQO,MAAMA,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EAE/CC,mBAAmB,CAACE,SAAS,CAAC,OAAO;IAAEC,KAAK;IAAEC;EAAS,CAAC,KAAK;IACzD;AACR;AACA;IACQ,IAAAC,8BAAc,EAACF,KAAK,CAACG,MAAM,EAAEH,KAAK,CAACI,MAAM,CAAC;IAC1C;AACR;AACA;IACQ,MAAM,IAAAC,4BAAa,EAAC;MAChBL,KAAK;MACLC,QAAQ;MACRH;IACJ,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC;AAAC"}
|
|
@@ -5,25 +5,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.contentModelManagerFactory = void 0;
|
|
7
7
|
const defaultName = "content-model-manager-default";
|
|
8
|
-
|
|
9
8
|
const contentModelManagerFactory = async (context, model) => {
|
|
10
9
|
const pluginsByType = context.plugins.byType("cms-content-model-manager").reverse();
|
|
11
|
-
|
|
12
10
|
for (const plugin of pluginsByType) {
|
|
13
11
|
const target = Array.isArray(plugin.modelId) ? plugin.modelId : [plugin.modelId];
|
|
14
|
-
|
|
15
12
|
if (target.includes(model.modelId) === true && plugin.name !== defaultName) {
|
|
16
13
|
return await plugin.create(context, model);
|
|
17
14
|
}
|
|
18
15
|
}
|
|
19
|
-
|
|
20
16
|
const plugin = pluginsByType.find(plugin => plugin.name === defaultName);
|
|
21
|
-
|
|
22
17
|
if (!plugin) {
|
|
23
18
|
throw new Error("There is no default plugin to create CmsModelManager");
|
|
24
19
|
}
|
|
25
|
-
|
|
26
20
|
return await plugin.create(context, model);
|
|
27
21
|
};
|
|
28
|
-
|
|
29
22
|
exports.contentModelManagerFactory = contentModelManagerFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["defaultName","contentModelManagerFactory","context","model","pluginsByType","plugins","byType","reverse","plugin","target","Array","isArray","modelId","includes","name","create","find","Error"],"sources":["contentModelManagerFactory.ts"],"sourcesContent":["import { CmsModel, CmsContext, ModelManagerPlugin, CmsModelManager } from \"~/types\";\n\nconst defaultName = \"content-model-manager-default\";\n\nexport const contentModelManagerFactory = async (\n context: CmsContext,\n model: CmsModel\n): Promise<CmsModelManager> => {\n const pluginsByType = context.plugins\n .byType<ModelManagerPlugin>(\"cms-content-model-manager\")\n .reverse();\n for (const plugin of pluginsByType) {\n const target = Array.isArray(plugin.modelId) ? plugin.modelId : [plugin.modelId];\n if (target.includes(model.modelId) === true && plugin.name !== defaultName) {\n return await plugin.create(context, model);\n }\n }\n const plugin = pluginsByType.find(plugin => plugin.name === defaultName);\n if (!plugin) {\n throw new Error(\"There is no default plugin to create CmsModelManager\");\n }\n return await plugin.create(context, model);\n};\n"],"mappings":";;;;;;AAEA,MAAMA,WAAW,GAAG,+
|
|
1
|
+
{"version":3,"names":["defaultName","contentModelManagerFactory","context","model","pluginsByType","plugins","byType","reverse","plugin","target","Array","isArray","modelId","includes","name","create","find","Error"],"sources":["contentModelManagerFactory.ts"],"sourcesContent":["import { CmsModel, CmsContext, ModelManagerPlugin, CmsModelManager } from \"~/types\";\n\nconst defaultName = \"content-model-manager-default\";\n\nexport const contentModelManagerFactory = async (\n context: CmsContext,\n model: CmsModel\n): Promise<CmsModelManager> => {\n const pluginsByType = context.plugins\n .byType<ModelManagerPlugin>(\"cms-content-model-manager\")\n .reverse();\n for (const plugin of pluginsByType) {\n const target = Array.isArray(plugin.modelId) ? plugin.modelId : [plugin.modelId];\n if (target.includes(model.modelId) === true && plugin.name !== defaultName) {\n return await plugin.create(context, model);\n }\n }\n const plugin = pluginsByType.find(plugin => plugin.name === defaultName);\n if (!plugin) {\n throw new Error(\"There is no default plugin to create CmsModelManager\");\n }\n return await plugin.create(context, model);\n};\n"],"mappings":";;;;;;AAEA,MAAMA,WAAW,GAAG,+BAA+B;AAE5C,MAAMC,0BAA0B,GAAG,OACtCC,OAAmB,EACnBC,KAAe,KACY;EAC3B,MAAMC,aAAa,GAAGF,OAAO,CAACG,OAAO,CAChCC,MAAM,CAAqB,2BAA2B,CAAC,CACvDC,OAAO,EAAE;EACd,KAAK,MAAMC,MAAM,IAAIJ,aAAa,EAAE;IAChC,MAAMK,MAAM,GAAGC,KAAK,CAACC,OAAO,CAACH,MAAM,CAACI,OAAO,CAAC,GAAGJ,MAAM,CAACI,OAAO,GAAG,CAACJ,MAAM,CAACI,OAAO,CAAC;IAChF,IAAIH,MAAM,CAACI,QAAQ,CAACV,KAAK,CAACS,OAAO,CAAC,KAAK,IAAI,IAAIJ,MAAM,CAACM,IAAI,KAAKd,WAAW,EAAE;MACxE,OAAO,MAAMQ,MAAM,CAACO,MAAM,CAACb,OAAO,EAAEC,KAAK,CAAC;IAC9C;EACJ;EACA,MAAMK,MAAM,GAAGJ,aAAa,CAACY,IAAI,CAACR,MAAM,IAAIA,MAAM,CAACM,IAAI,KAAKd,WAAW,CAAC;EACxE,IAAI,CAACQ,MAAM,EAAE;IACT,MAAM,IAAIS,KAAK,CAAC,sDAAsD,CAAC;EAC3E;EACA,OAAO,MAAMT,MAAM,CAACO,MAAM,CAACb,OAAO,EAAEC,KAAK,CAAC;AAC9C,CAAC;AAAC"}
|
|
@@ -4,23 +4,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createFieldModels = void 0;
|
|
7
|
-
|
|
8
7
|
var _models = require("./models");
|
|
9
|
-
|
|
10
8
|
const createFieldModels = async input => {
|
|
11
9
|
if (!input || input.length === 0) {
|
|
12
10
|
return [];
|
|
13
11
|
}
|
|
14
|
-
|
|
15
12
|
const fields = [];
|
|
16
|
-
|
|
17
13
|
for (const field of input) {
|
|
18
14
|
const fieldData = new _models.ContentModelFieldModel().populate(field);
|
|
19
15
|
await fieldData.validate();
|
|
20
16
|
fields.push(await fieldData.toJSON());
|
|
21
17
|
}
|
|
22
|
-
|
|
23
18
|
return fields;
|
|
24
19
|
};
|
|
25
|
-
|
|
26
20
|
exports.createFieldModels = createFieldModels;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createFieldModels","input","length","fields","field","fieldData","ContentModelFieldModel","populate","validate","push","toJSON"],"sources":["createFieldModels.ts"],"sourcesContent":["import { CmsModelField, CmsModelFieldInput } from \"~/types\";\nimport { ContentModelFieldModel } from \"./models\";\n\nexport const createFieldModels = async (input?: CmsModelFieldInput[]): Promise<CmsModelField[]> => {\n if (!input || input.length === 0) {\n return [];\n }\n const fields: CmsModelField[] = [];\n for (const field of input) {\n const fieldData = new ContentModelFieldModel().populate(field);\n await fieldData.validate();\n fields.push(await fieldData.toJSON());\n }\n return fields;\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["createFieldModels","input","length","fields","field","fieldData","ContentModelFieldModel","populate","validate","push","toJSON"],"sources":["createFieldModels.ts"],"sourcesContent":["import { CmsModelField, CmsModelFieldInput } from \"~/types\";\nimport { ContentModelFieldModel } from \"./models\";\n\nexport const createFieldModels = async (input?: CmsModelFieldInput[]): Promise<CmsModelField[]> => {\n if (!input || input.length === 0) {\n return [];\n }\n const fields: CmsModelField[] = [];\n for (const field of input) {\n const fieldData = new ContentModelFieldModel().populate(field);\n await fieldData.validate();\n fields.push(await fieldData.toJSON());\n }\n return fields;\n};\n"],"mappings":";;;;;;AACA;AAEO,MAAMA,iBAAiB,GAAG,MAAOC,KAA4B,IAA+B;EAC/F,IAAI,CAACA,KAAK,IAAIA,KAAK,CAACC,MAAM,KAAK,CAAC,EAAE;IAC9B,OAAO,EAAE;EACb;EACA,MAAMC,MAAuB,GAAG,EAAE;EAClC,KAAK,MAAMC,KAAK,IAAIH,KAAK,EAAE;IACvB,MAAMI,SAAS,GAAG,IAAIC,8BAAsB,EAAE,CAACC,QAAQ,CAACH,KAAK,CAAC;IAC9D,MAAMC,SAAS,CAACG,QAAQ,EAAE;IAC1BL,MAAM,CAACM,IAAI,CAAC,MAAMJ,SAAS,CAACK,MAAM,EAAE,CAAC;EACzC;EACA,OAAOP,MAAM;AACjB,CAAC;AAAC"}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createFieldStorageId = void 0;
|
|
7
|
-
|
|
8
7
|
const createFieldStorageId = params => {
|
|
9
8
|
const {
|
|
10
9
|
type,
|
|
@@ -12,5 +11,4 @@ const createFieldStorageId = params => {
|
|
|
12
11
|
} = params;
|
|
13
12
|
return `${type}@${id}`;
|
|
14
13
|
};
|
|
15
|
-
|
|
16
14
|
exports.createFieldStorageId = createFieldStorageId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createFieldStorageId","params","type","id"],"sources":["createFieldStorageId.ts"],"sourcesContent":["import { CmsModelField } from \"~/types\";\n\nexport const createFieldStorageId = (params: Pick<CmsModelField, \"id\" | \"type\">): string => {\n const { type, id } = params;\n return `${type}@${id}`;\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["createFieldStorageId","params","type","id"],"sources":["createFieldStorageId.ts"],"sourcesContent":["import { CmsModelField } from \"~/types\";\n\nexport const createFieldStorageId = (params: Pick<CmsModelField, \"id\" | \"type\">): string => {\n const { type, id } = params;\n return `${type}@${id}`;\n};\n"],"mappings":";;;;;;AAEO,MAAMA,oBAAoB,GAAIC,MAA0C,IAAa;EACxF,MAAM;IAAEC,IAAI;IAAEC;EAAG,CAAC,GAAGF,MAAM;EAC3B,OAAQ,GAAEC,IAAK,IAAGC,EAAG,EAAC;AAC1B,CAAC;AAAC"}
|
|
@@ -4,15 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.validateFieldId = void 0;
|
|
7
|
-
|
|
8
7
|
var _validation = require("@webiny/validation");
|
|
9
|
-
|
|
10
8
|
var _systemFields = require("./systemFields");
|
|
11
|
-
|
|
12
9
|
const validateFieldId = async input => {
|
|
13
10
|
await _validation.validation.validate(input, "required,maxLength:100");
|
|
14
11
|
const value = String(input || "").trim();
|
|
15
|
-
|
|
16
12
|
if (!value.charAt(0).match(/^[a-zA-Z]/)) {
|
|
17
13
|
throw new Error(`Provided ${value} is not valid - must not start with a number.`);
|
|
18
14
|
} else if (value.match(/^([a-zA-Z0-9]+)$/) === null) {
|
|
@@ -21,5 +17,4 @@ const validateFieldId = async input => {
|
|
|
21
17
|
throw new Error(`Provided ${value} is not valid - "${value}" is an auto-generated field.`);
|
|
22
18
|
}
|
|
23
19
|
};
|
|
24
|
-
|
|
25
20
|
exports.validateFieldId = validateFieldId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["validateFieldId","input","validation","validate","value","String","trim","charAt","match","Error","fieldSystemFields","includes"],"sources":["fieldIdValidation.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { fieldSystemFields } from \"~/crud/contentModel/systemFields\";\n\nexport const validateFieldId = async (input: string): Promise<void> => {\n await validation.validate(input, \"required,maxLength:100\");\n\n const value = String(input || \"\").trim();\n\n if (!value.charAt(0).match(/^[a-zA-Z]/)) {\n throw new Error(`Provided ${value} is not valid - must not start with a number.`);\n } else if (value.match(/^([a-zA-Z0-9]+)$/) === null) {\n throw new Error(`Provided ${value} is not valid - must be alphanumeric string.`);\n } else if (fieldSystemFields.includes(value)) {\n throw new Error(`Provided ${value} is not valid - \"${value}\" is an auto-generated field.`);\n }\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["validateFieldId","input","validation","validate","value","String","trim","charAt","match","Error","fieldSystemFields","includes"],"sources":["fieldIdValidation.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { fieldSystemFields } from \"~/crud/contentModel/systemFields\";\n\nexport const validateFieldId = async (input: string): Promise<void> => {\n await validation.validate(input, \"required,maxLength:100\");\n\n const value = String(input || \"\").trim();\n\n if (!value.charAt(0).match(/^[a-zA-Z]/)) {\n throw new Error(`Provided ${value} is not valid - must not start with a number.`);\n } else if (value.match(/^([a-zA-Z0-9]+)$/) === null) {\n throw new Error(`Provided ${value} is not valid - must be alphanumeric string.`);\n } else if (fieldSystemFields.includes(value)) {\n throw new Error(`Provided ${value} is not valid - \"${value}\" is an auto-generated field.`);\n }\n};\n"],"mappings":";;;;;;AAAA;AACA;AAEO,MAAMA,eAAe,GAAG,MAAOC,KAAa,IAAoB;EACnE,MAAMC,sBAAU,CAACC,QAAQ,CAACF,KAAK,EAAE,wBAAwB,CAAC;EAE1D,MAAMG,KAAK,GAAGC,MAAM,CAACJ,KAAK,IAAI,EAAE,CAAC,CAACK,IAAI,EAAE;EAExC,IAAI,CAACF,KAAK,CAACG,MAAM,CAAC,CAAC,CAAC,CAACC,KAAK,CAAC,WAAW,CAAC,EAAE;IACrC,MAAM,IAAIC,KAAK,CAAE,YAAWL,KAAM,+CAA8C,CAAC;EACrF,CAAC,MAAM,IAAIA,KAAK,CAACI,KAAK,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;IACjD,MAAM,IAAIC,KAAK,CAAE,YAAWL,KAAM,8CAA6C,CAAC;EACpF,CAAC,MAAM,IAAIM,+BAAiB,CAACC,QAAQ,CAACP,KAAK,CAAC,EAAE;IAC1C,MAAM,IAAIK,KAAK,CAAE,YAAWL,KAAM,oBAAmBA,KAAM,+BAA8B,CAAC;EAC9F;AACJ,CAAC;AAAC"}
|
|
@@ -4,19 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.validateId = void 0;
|
|
7
|
-
|
|
8
7
|
var _validation = require("@webiny/validation");
|
|
9
|
-
|
|
10
8
|
const validateId = async value => {
|
|
11
9
|
await _validation.validation.validate(value, "required,maxLength:100");
|
|
12
|
-
|
|
13
10
|
if (!value.charAt(0).match(/[a-zA-Z]/)) {
|
|
14
11
|
throw new Error(`Provided ID ${value} is not valid - must not start with a number.`);
|
|
15
12
|
}
|
|
16
|
-
|
|
17
13
|
if (value.trim().toLowerCase() === "id") {
|
|
18
14
|
throw new Error(`Provided ID ${value} is not valid - "id" is an auto-generated field.`);
|
|
19
15
|
}
|
|
20
16
|
};
|
|
21
|
-
|
|
22
17
|
exports.validateId = validateId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["validateId","value","validation","validate","charAt","match","Error","trim","toLowerCase"],"sources":["idValidation.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\n\nexport const validateId = async (value: string): Promise<void> => {\n await validation.validate(value, \"required,maxLength:100\");\n if (!value.charAt(0).match(/[a-zA-Z]/)) {\n throw new Error(`Provided ID ${value} is not valid - must not start with a number.`);\n }\n if (value.trim().toLowerCase() === \"id\") {\n throw new Error(`Provided ID ${value} is not valid - \"id\" is an auto-generated field.`);\n }\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["validateId","value","validation","validate","charAt","match","Error","trim","toLowerCase"],"sources":["idValidation.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\n\nexport const validateId = async (value: string): Promise<void> => {\n await validation.validate(value, \"required,maxLength:100\");\n if (!value.charAt(0).match(/[a-zA-Z]/)) {\n throw new Error(`Provided ID ${value} is not valid - must not start with a number.`);\n }\n if (value.trim().toLowerCase() === \"id\") {\n throw new Error(`Provided ID ${value} is not valid - \"id\" is an auto-generated field.`);\n }\n};\n"],"mappings":";;;;;;AAAA;AAEO,MAAMA,UAAU,GAAG,MAAOC,KAAa,IAAoB;EAC9D,MAAMC,sBAAU,CAACC,QAAQ,CAACF,KAAK,EAAE,wBAAwB,CAAC;EAC1D,IAAI,CAACA,KAAK,CAACG,MAAM,CAAC,CAAC,CAAC,CAACC,KAAK,CAAC,UAAU,CAAC,EAAE;IACpC,MAAM,IAAIC,KAAK,CAAE,eAAcL,KAAM,+CAA8C,CAAC;EACxF;EACA,IAAIA,KAAK,CAACM,IAAI,EAAE,CAACC,WAAW,EAAE,KAAK,IAAI,EAAE;IACrC,MAAM,IAAIF,KAAK,CAAE,eAAcL,KAAM,kDAAiD,CAAC;EAC3F;AACJ,CAAC;AAAC"}
|
|
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.UpdateContentModelModel = exports.CreateContentModelModelFrom = exports.CreateContentModelModel = exports.ContentModelFieldModel = void 0;
|
|
7
|
-
|
|
8
7
|
var _validation = require("@webiny/validation");
|
|
9
|
-
|
|
10
8
|
var _commodoFieldsObject = require("commodo-fields-object");
|
|
11
|
-
|
|
12
9
|
var _fields = require("@commodo/fields");
|
|
13
|
-
|
|
14
10
|
var _fieldIdValidation = require("./fieldIdValidation");
|
|
15
|
-
|
|
16
11
|
/**
|
|
17
12
|
* Package commodo-fields-object does not have types
|
|
18
13
|
*/
|
|
@@ -22,10 +17,9 @@ var _fieldIdValidation = require("./fieldIdValidation");
|
|
|
22
17
|
* Package commodo-fields does not have object.
|
|
23
18
|
*/
|
|
24
19
|
// @ts-ignore
|
|
25
|
-
const requiredShortString = _validation.validation.create("required,maxLength:255");
|
|
26
20
|
|
|
21
|
+
const requiredShortString = _validation.validation.create("required,maxLength:255");
|
|
27
22
|
const shortString = _validation.validation.create("maxLength:255");
|
|
28
|
-
|
|
29
23
|
const RendererModel = (0, _fields.withFields)({
|
|
30
24
|
name: (0, _fields.string)({
|
|
31
25
|
validation: requiredShortString
|
|
@@ -109,7 +103,6 @@ const ContentModelFieldModel = (0, _fields.withFields)({
|
|
|
109
103
|
* By the default, field is not deleted.
|
|
110
104
|
*/
|
|
111
105
|
// isDeleted: boolean({ value: false })
|
|
112
|
-
|
|
113
106
|
})();
|
|
114
107
|
exports.ContentModelFieldModel = ContentModelFieldModel;
|
|
115
108
|
const CreateContentModelModel = (0, _fields.withFields)({
|