@webiny/api-headless-cms 5.39.0-beta.0 → 5.39.0-beta.2
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/constants.d.ts +31 -0
- package/constants.js +48 -1
- package/constants.js.map +1 -1
- package/context.js +40 -34
- package/context.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryData.d.ts +20 -0
- package/crud/contentEntry/entryDataFactories/createEntryData.js +228 -0
- package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.d.ts +21 -0
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +114 -0
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.d.ts +13 -0
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.js +61 -0
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.d.ts +12 -0
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js +57 -0
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.d.ts +12 -0
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js +38 -0
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.d.ts +20 -0
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js +122 -0
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/index.d.ts +8 -0
- package/crud/contentEntry/entryDataFactories/index.js +95 -0
- package/crud/contentEntry/entryDataFactories/index.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.d.ts +5 -0
- package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.js +36 -0
- package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/statuses.d.ts +4 -0
- package/crud/contentEntry/entryDataFactories/statuses.js +15 -0
- package/crud/contentEntry/entryDataFactories/statuses.js.map +1 -0
- package/crud/contentEntry/entryDataValidation.js +29 -24
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +14 -9
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +10 -12
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry/searchableFields.js +2 -3
- package/crud/contentEntry/searchableFields.js.map +1 -1
- package/crud/contentEntry.crud.d.ts +1 -4
- package/crud/contentEntry.crud.js +140 -383
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/fields/descriptionField.js +1 -1
- package/crud/contentModel/fields/descriptionField.js.map +1 -1
- package/crud/contentModel/fields/imageField.js +3 -7
- package/crud/contentModel/fields/imageField.js.map +1 -1
- package/crud/contentModel/fields/titleField.js +1 -1
- package/crud/contentModel/fields/titleField.js.map +1 -1
- package/crud/contentModel/listModelsFromDatabase.js +3 -4
- package/crud/contentModel/listModelsFromDatabase.js.map +1 -1
- package/crud/contentModel/validateModelFields.js +4 -5
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +96 -96
- package/crud/contentModel.crud.js +28 -26
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/validation.d.ts +1 -1
- package/crud/contentModelGroup.crud.js +18 -15
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/system.crud.js +4 -4
- package/crud/system.crud.js.map +1 -1
- package/export/crud/exporting.js +2 -3
- package/export/crud/exporting.js.map +1 -1
- package/export/crud/importing.js +3 -3
- package/export/crud/importing.js.map +1 -1
- package/export/crud/imports/importData.js +30 -3
- package/export/crud/imports/importData.js.map +1 -1
- package/export/crud/imports/importGroups.js +15 -10
- package/export/crud/imports/importGroups.js.map +1 -1
- package/export/crud/imports/importModels.js +14 -12
- package/export/crud/imports/importModels.js.map +1 -1
- package/export/crud/imports/validateGroups.js +13 -7
- package/export/crud/imports/validateGroups.js.map +1 -1
- package/export/crud/imports/validateInput.js +15 -9
- package/export/crud/imports/validateInput.js.map +1 -1
- package/export/crud/imports/validateModels.d.ts +4 -1
- package/export/crud/imports/validateModels.js +24 -25
- package/export/crud/imports/validateModels.js.map +1 -1
- package/export/types.d.ts +2 -0
- package/export/types.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +1 -6
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +2 -7
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +44 -37
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/graphql/getSchema.js +15 -9
- package/graphql/getSchema.js.map +1 -1
- package/graphql/index.d.ts +1 -1
- package/graphql/schema/baseContentSchema.js +6 -7
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/baseSchema.js +1 -8
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/contentEntries.js +44 -13
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.js +1 -1
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.js +5 -5
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +11 -11
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.js +6 -9
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.js +30 -24
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +4 -5
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +4 -5
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.js +9 -4
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js +1 -1
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGet.js +9 -4
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolvePublish.d.ts +1 -2
- package/graphql/schema/resolvers/manage/resolvePublish.js +1 -1
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveGet.js +3 -4
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +3 -4
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphqlFields/datetime.js +1 -2
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.js +13 -13
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +6 -6
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -1
- package/graphqlFields/index.js +2 -1
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/json.d.ts +2 -0
- package/graphqlFields/json.js +49 -0
- package/graphqlFields/json.js.map +1 -0
- package/graphqlFields/object.js +20 -28
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +24 -14
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText/RichTextPluginsProcessor.d.ts +6 -0
- package/graphqlFields/richText/RichTextPluginsProcessor.js +34 -0
- package/graphqlFields/richText/RichTextPluginsProcessor.js.map +1 -0
- package/graphqlFields/richText/richTextResolver.d.ts +7 -0
- package/graphqlFields/richText/richTextResolver.js +39 -0
- package/graphqlFields/richText/richTextResolver.js.map +1 -0
- package/graphqlFields/richText.js +8 -2
- package/graphqlFields/richText.js.map +1 -1
- package/htmlRenderer/LexicalRenderer.d.ts +5 -0
- package/htmlRenderer/LexicalRenderer.js +28 -0
- package/htmlRenderer/LexicalRenderer.js.map +1 -0
- package/htmlRenderer/createLexicalHTMLRenderer.d.ts +2 -0
- package/htmlRenderer/createLexicalHTMLRenderer.js +31 -0
- package/htmlRenderer/createLexicalHTMLRenderer.js.map +1 -0
- package/index.d.ts +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.js +0 -4
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/package.json +21 -19
- package/parameters/context.js +1 -1
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +1 -2
- package/parameters/header.js.map +1 -1
- package/parameters/manual.js +6 -3
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +1 -2
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGraphQLSchemaPlugin.js +3 -4
- package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -1
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +1 -4
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -1
- package/plugins/CmsGroupPlugin.js +4 -7
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.js +3 -4
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +6 -4
- package/plugins/CmsModelPlugin.js +52 -27
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +1 -4
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/CmsRichTextRendererPlugin.d.ts +24 -0
- package/plugins/CmsRichTextRendererPlugin.js +28 -0
- package/plugins/CmsRichTextRendererPlugin.js.map +1 -0
- package/plugins/StorageOperationsCmsModelPlugin.js +3 -6
- package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.d.ts +2 -2
- package/plugins/StorageTransformPlugin.js +1 -4
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.d.ts +1 -0
- package/plugins/index.js +11 -0
- package/plugins/index.js.map +1 -1
- package/storage/index.d.ts +1 -0
- package/storage/index.js +15 -0
- package/storage/index.js.map +1 -0
- package/storage/json.d.ts +2 -0
- package/storage/json.js +27 -0
- package/storage/json.js.map +1 -0
- package/storage/object.js +5 -7
- package/storage/object.js.map +1 -1
- package/types.d.ts +182 -53
- package/types.js +0 -3
- package/types.js.map +1 -1
- package/utils/access.d.ts +0 -1
- package/utils/access.js +1 -10
- package/utils/access.js.map +1 -1
- package/utils/caching/Cache.js +3 -5
- package/utils/caching/Cache.js.map +1 -1
- package/utils/caching/CacheKey.js +0 -3
- package/utils/caching/CacheKey.js.map +1 -1
- package/utils/converters/Converter.js +1 -4
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.js +10 -6
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.js +3 -3
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/date.d.ts +2 -2
- package/utils/date.js +1 -1
- package/utils/date.js.map +1 -1
- package/utils/entryStorage.js +3 -3
- package/utils/entryStorage.js.map +1 -1
- package/utils/identity.d.ts +2 -0
- package/utils/identity.js +20 -0
- package/utils/identity.js.map +1 -0
- package/utils/permissions/ModelsPermissions.js +0 -3
- package/utils/permissions/ModelsPermissions.js.map +1 -1
- package/utils/renderGetFilterFields.js +2 -3
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderListFilterFields.js +9 -3
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +2 -1
- package/utils/renderSortEnum.js.map +1 -1
- package/validators/gte.js +1 -2
- package/validators/gte.js.map +1 -1
- package/validators/in.js +1 -2
- package/validators/in.js.map +1 -1
- package/validators/lte.js +1 -2
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +1 -2
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +1 -2
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +2 -2
- package/validators/pattern.js.map +1 -1
- package/validators/timeGte.js +1 -2
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +1 -2
- package/validators/timeLte.js.map +1 -1
- package/graphql/schema/resolvers/commonFieldResolvers.d.ts +0 -7
- package/graphql/schema/resolvers/commonFieldResolvers.js +0 -15
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.mapAndCleanUpdatedInputData = void 0;
|
|
8
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
9
|
+
/**
|
|
10
|
+
* Cleans the update input entry data.
|
|
11
|
+
*/
|
|
12
|
+
const mapAndCleanUpdatedInputData = (model, input) => {
|
|
13
|
+
return model.fields.reduce((acc, field) => {
|
|
14
|
+
/**
|
|
15
|
+
* This should never happen, but let's make it sure.
|
|
16
|
+
* The fix would be for the user to add the fieldId on the field definition.
|
|
17
|
+
*/
|
|
18
|
+
if (!field.fieldId) {
|
|
19
|
+
throw new _error.default("Field does not have an fieldId.", "MISSING_FIELD_ID", {
|
|
20
|
+
field
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* We cannot set default value here because user might want to update only certain field values.
|
|
25
|
+
*/
|
|
26
|
+
const value = input[field.fieldId];
|
|
27
|
+
if (value === undefined) {
|
|
28
|
+
return acc;
|
|
29
|
+
}
|
|
30
|
+
acc[field.fieldId] = value;
|
|
31
|
+
return acc;
|
|
32
|
+
}, {});
|
|
33
|
+
};
|
|
34
|
+
exports.mapAndCleanUpdatedInputData = mapAndCleanUpdatedInputData;
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=mapAndCleanUpdatedInputData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_error","_interopRequireDefault","require","mapAndCleanUpdatedInputData","model","input","fields","reduce","acc","field","fieldId","WebinyError","value","undefined","exports"],"sources":["mapAndCleanUpdatedInputData.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsModel } from \"~/types\";\n\n/**\n * Cleans the update input entry data.\n */\nexport const mapAndCleanUpdatedInputData = (model: CmsModel, input: Record<string, any>) => {\n return model.fields.reduce<Record<string, any>>((acc, field) => {\n /**\n * This should never happen, but let's make it sure.\n * The fix would be for the user to add the fieldId on the field definition.\n */\n if (!field.fieldId) {\n throw new WebinyError(\"Field does not have an fieldId.\", \"MISSING_FIELD_ID\", {\n field\n });\n }\n /**\n * We cannot set default value here because user might want to update only certain field values.\n */\n const value = input[field.fieldId];\n if (value === undefined) {\n return acc;\n }\n acc[field.fieldId] = value;\n return acc;\n }, {});\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA;AACA;AACA;AACO,MAAMC,2BAA2B,GAAGA,CAACC,KAAe,EAAEC,KAA0B,KAAK;EACxF,OAAOD,KAAK,CAACE,MAAM,CAACC,MAAM,CAAsB,CAACC,GAAG,EAAEC,KAAK,KAAK;IAC5D;AACR;AACA;AACA;IACQ,IAAI,CAACA,KAAK,CAACC,OAAO,EAAE;MAChB,MAAM,IAAIC,cAAW,CAAC,iCAAiC,EAAE,kBAAkB,EAAE;QACzEF;MACJ,CAAC,CAAC;IACN;IACA;AACR;AACA;IACQ,MAAMG,KAAK,GAAGP,KAAK,CAACI,KAAK,CAACC,OAAO,CAAC;IAClC,IAAIE,KAAK,KAAKC,SAAS,EAAE;MACrB,OAAOL,GAAG;IACd;IACAA,GAAG,CAACC,KAAK,CAACC,OAAO,CAAC,GAAGE,KAAK;IAC1B,OAAOJ,GAAG;EACd,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,CAAC;AAACM,OAAA,CAAAX,2BAAA,GAAAA,2BAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.STATUS_UNPUBLISHED = exports.STATUS_PUBLISHED = exports.STATUS_DRAFT = void 0;
|
|
7
|
+
var _types = require("../../../types");
|
|
8
|
+
const STATUS_DRAFT = _types.CONTENT_ENTRY_STATUS.DRAFT;
|
|
9
|
+
exports.STATUS_DRAFT = STATUS_DRAFT;
|
|
10
|
+
const STATUS_PUBLISHED = _types.CONTENT_ENTRY_STATUS.PUBLISHED;
|
|
11
|
+
exports.STATUS_PUBLISHED = STATUS_PUBLISHED;
|
|
12
|
+
const STATUS_UNPUBLISHED = _types.CONTENT_ENTRY_STATUS.UNPUBLISHED;
|
|
13
|
+
exports.STATUS_UNPUBLISHED = STATUS_UNPUBLISHED;
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=statuses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_types","require","STATUS_DRAFT","CONTENT_ENTRY_STATUS","DRAFT","exports","STATUS_PUBLISHED","PUBLISHED","STATUS_UNPUBLISHED","UNPUBLISHED"],"sources":["statuses.ts"],"sourcesContent":["import { CONTENT_ENTRY_STATUS } from \"~/types\";\n\nexport const STATUS_DRAFT = CONTENT_ENTRY_STATUS.DRAFT;\nexport const STATUS_PUBLISHED = CONTENT_ENTRY_STATUS.PUBLISHED;\nexport const STATUS_UNPUBLISHED = CONTENT_ENTRY_STATUS.UNPUBLISHED;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEO,MAAMC,YAAY,GAAGC,2BAAoB,CAACC,KAAK;AAACC,OAAA,CAAAH,YAAA,GAAAA,YAAA;AAChD,MAAMI,gBAAgB,GAAGH,2BAAoB,CAACI,SAAS;AAACF,OAAA,CAAAC,gBAAA,GAAAA,gBAAA;AACxD,MAAME,kBAAkB,GAAGL,2BAAoB,CAACM,WAAW;AAACJ,OAAA,CAAAG,kBAAA,GAAAA,kBAAA"}
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.validateModelEntryDataOrThrow = exports.validateModelEntryData = void 0;
|
|
8
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
10
9
|
var _camelCase = _interopRequireDefault(require("lodash/camelCase"));
|
|
11
10
|
const validateValue = async (params, fieldValidators, value) => {
|
|
@@ -69,7 +68,7 @@ const validatePredefinedValue = (field, value) => {
|
|
|
69
68
|
return "Value sent does not match any of the available predefined values.";
|
|
70
69
|
};
|
|
71
70
|
const getFieldValidation = listValidation => {
|
|
72
|
-
if (!
|
|
71
|
+
if (!listValidation?.length) {
|
|
73
72
|
return [];
|
|
74
73
|
}
|
|
75
74
|
return listValidation.filter(item => item.name !== "dynamicZone");
|
|
@@ -83,7 +82,7 @@ const runFieldMultipleValuesValidations = async params => {
|
|
|
83
82
|
field,
|
|
84
83
|
data
|
|
85
84
|
} = params;
|
|
86
|
-
const values = data
|
|
85
|
+
const values = data?.[field.fieldId];
|
|
87
86
|
const valuesError = await validateValue(params, getFieldValidation(field.listValidation), values);
|
|
88
87
|
if (valuesError) {
|
|
89
88
|
return valuesError;
|
|
@@ -174,7 +173,10 @@ const validateModelEntryData = async params => {
|
|
|
174
173
|
entry,
|
|
175
174
|
parents: [],
|
|
176
175
|
fields: model.fields,
|
|
177
|
-
data:
|
|
176
|
+
data: {
|
|
177
|
+
...entry?.values,
|
|
178
|
+
...data
|
|
179
|
+
}
|
|
178
180
|
});
|
|
179
181
|
};
|
|
180
182
|
exports.validateModelEntryData = validateModelEntryData;
|
|
@@ -199,8 +201,7 @@ const executeFieldValidation = async params => {
|
|
|
199
201
|
* Object field.
|
|
200
202
|
*/
|
|
201
203
|
if (field.type === "object") {
|
|
202
|
-
|
|
203
|
-
const fields = (_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.fields;
|
|
204
|
+
const fields = field.settings?.fields;
|
|
204
205
|
if (!Array.isArray(fields)) {
|
|
205
206
|
return [];
|
|
206
207
|
}
|
|
@@ -208,9 +209,10 @@ const executeFieldValidation = async params => {
|
|
|
208
209
|
/**
|
|
209
210
|
* We need to validate the object field as well.
|
|
210
211
|
*/
|
|
211
|
-
const error = await execValidation(
|
|
212
|
+
const error = await execValidation({
|
|
213
|
+
...params,
|
|
212
214
|
field
|
|
213
|
-
})
|
|
215
|
+
});
|
|
214
216
|
if (error) {
|
|
215
217
|
validations.push({
|
|
216
218
|
id: field.id,
|
|
@@ -220,7 +222,7 @@ const executeFieldValidation = async params => {
|
|
|
220
222
|
parents: params.parents
|
|
221
223
|
});
|
|
222
224
|
}
|
|
223
|
-
const objectValue =
|
|
225
|
+
const objectValue = params.data?.[field.fieldId];
|
|
224
226
|
if (!objectValue) {
|
|
225
227
|
return validations;
|
|
226
228
|
}
|
|
@@ -229,11 +231,12 @@ const executeFieldValidation = async params => {
|
|
|
229
231
|
const parents = field.multipleValues ? [field.fieldId, index] : [field.fieldId];
|
|
230
232
|
const value = values[index];
|
|
231
233
|
for (const childField of fields) {
|
|
232
|
-
const errors = await executeFieldValidation(
|
|
234
|
+
const errors = await executeFieldValidation({
|
|
235
|
+
...params,
|
|
233
236
|
parents: params.parents.concat(parents),
|
|
234
237
|
field: childField,
|
|
235
238
|
data: value
|
|
236
|
-
})
|
|
239
|
+
});
|
|
237
240
|
if (errors.length === 0) {
|
|
238
241
|
continue;
|
|
239
242
|
}
|
|
@@ -247,11 +250,11 @@ const executeFieldValidation = async params => {
|
|
|
247
250
|
*/
|
|
248
251
|
//
|
|
249
252
|
else if (field.type === "dynamicZone") {
|
|
250
|
-
var _field$settings2;
|
|
251
253
|
const validations = [];
|
|
252
|
-
const error = await execValidation(
|
|
254
|
+
const error = await execValidation({
|
|
255
|
+
...params,
|
|
253
256
|
field
|
|
254
|
-
})
|
|
257
|
+
});
|
|
255
258
|
if (error) {
|
|
256
259
|
validations.push({
|
|
257
260
|
id: field.id,
|
|
@@ -261,18 +264,16 @@ const executeFieldValidation = async params => {
|
|
|
261
264
|
parents: params.parents
|
|
262
265
|
});
|
|
263
266
|
}
|
|
264
|
-
const templates =
|
|
267
|
+
const templates = field.settings?.templates || [];
|
|
265
268
|
for (const template of templates) {
|
|
266
|
-
var _params$data2;
|
|
267
269
|
const fields = template.fields;
|
|
268
|
-
const fieldData =
|
|
270
|
+
const fieldData = params.data?.[field.fieldId];
|
|
269
271
|
if (!fieldData) {
|
|
270
272
|
continue;
|
|
271
273
|
}
|
|
272
274
|
const values = Array.isArray(fieldData) ? fieldData : [fieldData];
|
|
273
275
|
for (const index in values) {
|
|
274
|
-
|
|
275
|
-
const templateValue = (_values$index = values[index]) === null || _values$index === void 0 ? void 0 : _values$index[template.gqlTypeName];
|
|
276
|
+
const templateValue = values[index]?.[template.gqlTypeName];
|
|
276
277
|
if (!templateValue) {
|
|
277
278
|
continue;
|
|
278
279
|
}
|
|
@@ -288,11 +289,12 @@ const executeFieldValidation = async params => {
|
|
|
288
289
|
}
|
|
289
290
|
parents.push(template.gqlTypeName);
|
|
290
291
|
for (const childField of fields) {
|
|
291
|
-
const errors = await executeFieldValidation(
|
|
292
|
+
const errors = await executeFieldValidation({
|
|
293
|
+
...params,
|
|
292
294
|
parents: params.parents.concat(parents),
|
|
293
295
|
field: childField,
|
|
294
296
|
data: templateValue
|
|
295
|
-
})
|
|
297
|
+
});
|
|
296
298
|
if (errors.length === 0) {
|
|
297
299
|
continue;
|
|
298
300
|
}
|
|
@@ -302,7 +304,9 @@ const executeFieldValidation = async params => {
|
|
|
302
304
|
}
|
|
303
305
|
return validations;
|
|
304
306
|
}
|
|
305
|
-
const error = await execValidation(
|
|
307
|
+
const error = await execValidation({
|
|
308
|
+
...params
|
|
309
|
+
});
|
|
306
310
|
if (!error) {
|
|
307
311
|
return [];
|
|
308
312
|
}
|
|
@@ -320,9 +324,10 @@ const validate = async params => {
|
|
|
320
324
|
} = params;
|
|
321
325
|
const errors = [];
|
|
322
326
|
for (const field of fields) {
|
|
323
|
-
const results = await executeFieldValidation(
|
|
327
|
+
const results = await executeFieldValidation({
|
|
328
|
+
...params,
|
|
324
329
|
field
|
|
325
|
-
})
|
|
330
|
+
});
|
|
326
331
|
if (results.length === 0) {
|
|
327
332
|
continue;
|
|
328
333
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_error","_interopRequireDefault","require","_camelCase","validateValue","params","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","length","validate","result","validator","message","ex","validatePredefinedValue","enabled","values","predefinedValues","Array","isArray","undefined","predefinedValue","getFieldValidation","listValidation","filter","item","runFieldMultipleValuesValidations","data","fieldId","valuesError","valueError","validation","predefinedValueError","runFieldValueValidations","error","execValidation","multipleValues","validateModelEntryData","skipValidators","isValidatorSkipped","plugin","includes","camelCase","skippedValidators","Set","validators","plugins","byType","isSkipped","add","push","keys","Object","size","parents","fields","_objectSpread2","default","exports","validateModelEntryDataOrThrow","invalidFields","WebinyError","executeFieldValidation","type","_field$settings","_params$data","settings","id","storageId","objectValue","index","childField","errors","concat","_field$settings2","templates","template","_params$data2","fieldData","_values$index","templateValue","gqlTypeName","results"],"sources":["entryDataValidation.ts"],"sourcesContent":["import {\n CmsContext,\n CmsDynamicZoneTemplate,\n CmsEntry,\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation,\n CmsModelFieldValidatorPlugin,\n CmsModelFieldValidatorValidateParams\n} from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport camelCase from \"lodash/camelCase\";\n\ntype PluginValidationCallable = (params: CmsModelFieldValidatorValidateParams) => Promise<boolean>;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\ntype InputData = Record<string, any>;\n\ninterface ExecuteValidationParams {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n data: InputData;\n context: CmsContext;\n entry?: CmsEntry;\n}\n\ntype PossibleValue = boolean | number | string | null | undefined;\n\nconst validateValue = async (\n params: ExecuteValidationParams,\n fieldValidators: CmsModelFieldValidation[],\n value: PossibleValue | PossibleValue[]\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n const { validatorList, context, field, model, entry } = params;\n try {\n for (const fieldValidator of fieldValidators) {\n const name = fieldValidator.name;\n const validations = validatorList[name];\n if (!validations || validations.length === 0) {\n return `There are no \"${name}\" validators defined.`;\n }\n for (const validate of validations) {\n const result = await validate({\n value,\n context,\n validator: fieldValidator,\n field,\n model,\n entry\n });\n if (!result) {\n return fieldValidator.message;\n }\n }\n }\n } catch (ex) {\n return ex.message;\n }\n\n return null;\n};\n\nconst validatePredefinedValue = (field: CmsModelField, value: any | any[]): string | null => {\n const { enabled = false, values: predefinedValues = [] } = field.predefinedValues || {};\n if (!enabled) {\n return null;\n } else if (Array.isArray(predefinedValues) === false || predefinedValues.length === 0) {\n return \"Missing predefined values to validate against.\";\n } else if (value == \"\" || value == null || value == undefined) {\n return null;\n }\n for (const predefinedValue of predefinedValues) {\n /**\n * No strict compare because the value sent can be 12345 (number) and predefinedValue can be \"12345\" (string),\n * and we want it to match.\n */\n if (predefinedValue.value == value) {\n return null;\n }\n }\n return \"Value sent does not match any of the available predefined values.\";\n};\n\nconst getFieldValidation = (\n listValidation?: CmsModelFieldValidation[]\n): CmsModelFieldValidation[] => {\n if (!listValidation?.length) {\n return [];\n }\n return listValidation.filter(item => item.name !== \"dynamicZone\");\n};\n/**\n * When multiple values is selected we must run validations on the array containing the values\n * And then on each value in the array\n */\nconst runFieldMultipleValuesValidations = async (\n params: ExecuteValidationParams\n): Promise<string | null> => {\n const { field, data } = params;\n const values = data?.[field.fieldId];\n const valuesError = await validateValue(\n params,\n getFieldValidation(field.listValidation),\n values\n );\n if (valuesError) {\n return valuesError;\n }\n if (values === null || values === undefined) {\n return null;\n }\n for (const value of values) {\n const valueError = await validateValue(params, getFieldValidation(field.validation), value);\n if (valueError) {\n return valueError;\n }\n const predefinedValueError = validatePredefinedValue(field, value);\n if (predefinedValueError) {\n return predefinedValueError;\n }\n }\n return null;\n};\n/**\n * Runs validation on given value.\n */\nconst runFieldValueValidations = async (\n params: ExecuteValidationParams\n): Promise<string | null> => {\n const { data, field } = params;\n const value = data[field.fieldId];\n const error = await validateValue(params, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (params: ExecuteValidationParams): Promise<string | null> => {\n const { field } = params;\n if (field.multipleValues) {\n return await runFieldMultipleValuesValidations(params);\n }\n return await runFieldValueValidations(params);\n};\n\nexport interface ValidateModelEntryDataParams {\n context: CmsContext;\n model: CmsModel;\n data: InputData;\n entry?: CmsEntry;\n skipValidators?: string[];\n}\n\nexport const validateModelEntryData = async (params: ValidateModelEntryDataParams) => {\n const { context, model, entry, data, skipValidators } = params;\n\n const isValidatorSkipped = (plugin: CmsModelFieldValidatorPlugin) => {\n if (!skipValidators) {\n return false;\n }\n return skipValidators.includes(camelCase(plugin.validator.name));\n };\n\n const skippedValidators = new Set<string>();\n\n /**\n * To later simplify searching for the validations we map them to a name.\n * @see CmsModelFieldValidatorPlugin.validator.validate\n */\n const validatorList: PluginValidationList = {};\n const validators = context.plugins.byType<CmsModelFieldValidatorPlugin>(\n \"cms-model-field-validator\"\n );\n for (const plugin of validators) {\n const name = plugin.validator.name;\n if (!validatorList[name]) {\n validatorList[name] = [];\n }\n const isSkipped = isValidatorSkipped(plugin);\n if (isSkipped) {\n skippedValidators.add(name);\n }\n validatorList[name].push(isSkipped ? async () => true : plugin.validator.validate);\n }\n /**\n * No point in continuing if all validators are skipped.\n */\n const keys = Object.keys(validatorList);\n if (keys.length === skippedValidators.size) {\n return [];\n }\n\n return await validate({\n validatorList,\n context,\n model,\n entry,\n parents: [],\n fields: model.fields,\n data: {\n ...entry?.values,\n ...data\n }\n });\n};\n\nexport const validateModelEntryDataOrThrow = async (params: ValidateModelEntryDataParams) => {\n const invalidFields = await validateModelEntryData(params);\n if (invalidFields.length === 0) {\n return;\n }\n throw new WebinyError(\"Validation failed.\", \"VALIDATION_FAILED\", invalidFields);\n};\n\n/**\n *\n */\ninterface FieldError {\n id: string;\n fieldId: string;\n storageId: string;\n error: any;\n parents: string[];\n}\n\ninterface ValidateParams {\n validatorList: PluginValidationList;\n parents: string[];\n model: CmsModel;\n data: InputData;\n context: CmsContext;\n fields: CmsModelField[];\n entry?: CmsEntry;\n}\n\nconst executeFieldValidation = async (\n params: Omit<ValidateParams, \"fields\"> & {\n field: CmsModelField;\n }\n): Promise<FieldError[]> => {\n // TODO put per-field validation into plugins.\n const { field } = params;\n /**\n * Object field.\n */\n if (field.type === \"object\") {\n const fields = field.settings?.fields;\n if (!Array.isArray(fields)) {\n return [];\n }\n const validations: FieldError[] = [];\n /**\n * We need to validate the object field as well.\n */\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n const objectValue = params.data?.[field.fieldId];\n if (!objectValue) {\n return validations;\n }\n const values = Array.isArray(objectValue) ? objectValue : [objectValue];\n for (const index in values) {\n const parents = field.multipleValues ? [field.fieldId, index] : [field.fieldId];\n const value = values[index];\n for (const childField of fields) {\n const errors = await executeFieldValidation({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n data: value\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n return validations;\n }\n /**\n * Dynamic Zone Field\n */\n //\n else if (field.type === \"dynamicZone\") {\n const validations: FieldError[] = [];\n\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n\n const templates = (field.settings?.templates || []) as CmsDynamicZoneTemplate[];\n for (const template of templates) {\n const fields = template.fields;\n const fieldData = params.data?.[field.fieldId];\n if (!fieldData) {\n continue;\n }\n const values = Array.isArray(fieldData) ? fieldData : [fieldData];\n for (const index in values) {\n const templateValue = values[index]?.[template.gqlTypeName];\n if (!templateValue) {\n continue;\n }\n /**\n * Order of the parents must be\n * - fieldId\n * - index (if multiple values)\n * - gqlTypeName\n */\n const parents = [field.fieldId];\n if (field.multipleValues) {\n parents.push(index);\n }\n parents.push(template.gqlTypeName);\n for (const childField of fields) {\n const errors = await executeFieldValidation({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n data: templateValue\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n }\n\n return validations;\n }\n const error = await execValidation({\n ...params\n });\n if (!error) {\n return [];\n }\n return [\n {\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n }\n ];\n};\n\nconst validate = async (params: ValidateParams): Promise<any[]> => {\n const { fields } = params;\n const errors: FieldError[] = [];\n for (const field of fields) {\n const results = await executeFieldValidation({\n ...params,\n field\n });\n if (results.length === 0) {\n continue;\n }\n errors.push(...results);\n }\n return errors;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_error","_interopRequireDefault","require","_camelCase","validateValue","params","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","length","validate","result","validator","message","ex","validatePredefinedValue","enabled","values","predefinedValues","Array","isArray","undefined","predefinedValue","getFieldValidation","listValidation","filter","item","runFieldMultipleValuesValidations","data","fieldId","valuesError","valueError","validation","predefinedValueError","runFieldValueValidations","error","execValidation","multipleValues","validateModelEntryData","skipValidators","isValidatorSkipped","plugin","includes","camelCase","skippedValidators","Set","validators","plugins","byType","isSkipped","add","push","keys","Object","size","parents","fields","exports","validateModelEntryDataOrThrow","invalidFields","WebinyError","executeFieldValidation","type","settings","id","storageId","objectValue","index","childField","errors","concat","templates","template","fieldData","templateValue","gqlTypeName","results"],"sources":["entryDataValidation.ts"],"sourcesContent":["import {\n CmsContext,\n CmsDynamicZoneTemplate,\n CmsEntry,\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation,\n CmsModelFieldValidatorPlugin,\n CmsModelFieldValidatorValidateParams\n} from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport camelCase from \"lodash/camelCase\";\n\ntype PluginValidationCallable = (params: CmsModelFieldValidatorValidateParams) => Promise<boolean>;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\ntype InputData = Record<string, any>;\n\ninterface ExecuteValidationParams {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n data: InputData;\n context: CmsContext;\n entry?: CmsEntry;\n}\n\ntype PossibleValue = boolean | number | string | null | undefined;\n\nconst validateValue = async (\n params: ExecuteValidationParams,\n fieldValidators: CmsModelFieldValidation[],\n value: PossibleValue | PossibleValue[]\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n const { validatorList, context, field, model, entry } = params;\n try {\n for (const fieldValidator of fieldValidators) {\n const name = fieldValidator.name;\n const validations = validatorList[name];\n if (!validations || validations.length === 0) {\n return `There are no \"${name}\" validators defined.`;\n }\n for (const validate of validations) {\n const result = await validate({\n value,\n context,\n validator: fieldValidator,\n field,\n model,\n entry\n });\n if (!result) {\n return fieldValidator.message;\n }\n }\n }\n } catch (ex) {\n return ex.message;\n }\n\n return null;\n};\n\nconst validatePredefinedValue = (field: CmsModelField, value: any | any[]): string | null => {\n const { enabled = false, values: predefinedValues = [] } = field.predefinedValues || {};\n if (!enabled) {\n return null;\n } else if (Array.isArray(predefinedValues) === false || predefinedValues.length === 0) {\n return \"Missing predefined values to validate against.\";\n } else if (value == \"\" || value == null || value == undefined) {\n return null;\n }\n for (const predefinedValue of predefinedValues) {\n /**\n * No strict compare because the value sent can be 12345 (number) and predefinedValue can be \"12345\" (string),\n * and we want it to match.\n */\n if (predefinedValue.value == value) {\n return null;\n }\n }\n return \"Value sent does not match any of the available predefined values.\";\n};\n\nconst getFieldValidation = (\n listValidation?: CmsModelFieldValidation[]\n): CmsModelFieldValidation[] => {\n if (!listValidation?.length) {\n return [];\n }\n return listValidation.filter(item => item.name !== \"dynamicZone\");\n};\n/**\n * When multiple values is selected we must run validations on the array containing the values\n * And then on each value in the array\n */\nconst runFieldMultipleValuesValidations = async (\n params: ExecuteValidationParams\n): Promise<string | null> => {\n const { field, data } = params;\n const values = data?.[field.fieldId];\n const valuesError = await validateValue(\n params,\n getFieldValidation(field.listValidation),\n values\n );\n if (valuesError) {\n return valuesError;\n }\n if (values === null || values === undefined) {\n return null;\n }\n for (const value of values) {\n const valueError = await validateValue(params, getFieldValidation(field.validation), value);\n if (valueError) {\n return valueError;\n }\n const predefinedValueError = validatePredefinedValue(field, value);\n if (predefinedValueError) {\n return predefinedValueError;\n }\n }\n return null;\n};\n/**\n * Runs validation on given value.\n */\nconst runFieldValueValidations = async (\n params: ExecuteValidationParams\n): Promise<string | null> => {\n const { data, field } = params;\n const value = data[field.fieldId];\n const error = await validateValue(params, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (params: ExecuteValidationParams): Promise<string | null> => {\n const { field } = params;\n if (field.multipleValues) {\n return await runFieldMultipleValuesValidations(params);\n }\n return await runFieldValueValidations(params);\n};\n\nexport interface ValidateModelEntryDataParams {\n context: CmsContext;\n model: CmsModel;\n data: InputData;\n entry?: CmsEntry;\n skipValidators?: string[];\n}\n\nexport const validateModelEntryData = async (params: ValidateModelEntryDataParams) => {\n const { context, model, entry, data, skipValidators } = params;\n\n const isValidatorSkipped = (plugin: CmsModelFieldValidatorPlugin) => {\n if (!skipValidators) {\n return false;\n }\n return skipValidators.includes(camelCase(plugin.validator.name));\n };\n\n const skippedValidators = new Set<string>();\n\n /**\n * To later simplify searching for the validations we map them to a name.\n * @see CmsModelFieldValidatorPlugin.validator.validate\n */\n const validatorList: PluginValidationList = {};\n const validators = context.plugins.byType<CmsModelFieldValidatorPlugin>(\n \"cms-model-field-validator\"\n );\n for (const plugin of validators) {\n const name = plugin.validator.name;\n if (!validatorList[name]) {\n validatorList[name] = [];\n }\n const isSkipped = isValidatorSkipped(plugin);\n if (isSkipped) {\n skippedValidators.add(name);\n }\n validatorList[name].push(isSkipped ? async () => true : plugin.validator.validate);\n }\n /**\n * No point in continuing if all validators are skipped.\n */\n const keys = Object.keys(validatorList);\n if (keys.length === skippedValidators.size) {\n return [];\n }\n\n return await validate({\n validatorList,\n context,\n model,\n entry,\n parents: [],\n fields: model.fields,\n data: {\n ...entry?.values,\n ...data\n }\n });\n};\n\nexport const validateModelEntryDataOrThrow = async (params: ValidateModelEntryDataParams) => {\n const invalidFields = await validateModelEntryData(params);\n if (invalidFields.length === 0) {\n return;\n }\n throw new WebinyError(\"Validation failed.\", \"VALIDATION_FAILED\", invalidFields);\n};\n\n/**\n *\n */\ninterface FieldError {\n id: string;\n fieldId: string;\n storageId: string;\n error: any;\n parents: string[];\n}\n\ninterface ValidateParams {\n validatorList: PluginValidationList;\n parents: string[];\n model: CmsModel;\n data: InputData;\n context: CmsContext;\n fields: CmsModelField[];\n entry?: CmsEntry;\n}\n\nconst executeFieldValidation = async (\n params: Omit<ValidateParams, \"fields\"> & {\n field: CmsModelField;\n }\n): Promise<FieldError[]> => {\n // TODO put per-field validation into plugins.\n const { field } = params;\n /**\n * Object field.\n */\n if (field.type === \"object\") {\n const fields = field.settings?.fields;\n if (!Array.isArray(fields)) {\n return [];\n }\n const validations: FieldError[] = [];\n /**\n * We need to validate the object field as well.\n */\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n const objectValue = params.data?.[field.fieldId];\n if (!objectValue) {\n return validations;\n }\n const values = Array.isArray(objectValue) ? objectValue : [objectValue];\n for (const index in values) {\n const parents = field.multipleValues ? [field.fieldId, index] : [field.fieldId];\n const value = values[index];\n for (const childField of fields) {\n const errors = await executeFieldValidation({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n data: value\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n return validations;\n }\n /**\n * Dynamic Zone Field\n */\n //\n else if (field.type === \"dynamicZone\") {\n const validations: FieldError[] = [];\n\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n\n const templates = (field.settings?.templates || []) as CmsDynamicZoneTemplate[];\n for (const template of templates) {\n const fields = template.fields;\n const fieldData = params.data?.[field.fieldId];\n if (!fieldData) {\n continue;\n }\n const values = Array.isArray(fieldData) ? fieldData : [fieldData];\n for (const index in values) {\n const templateValue = values[index]?.[template.gqlTypeName];\n if (!templateValue) {\n continue;\n }\n /**\n * Order of the parents must be\n * - fieldId\n * - index (if multiple values)\n * - gqlTypeName\n */\n const parents = [field.fieldId];\n if (field.multipleValues) {\n parents.push(index);\n }\n parents.push(template.gqlTypeName);\n for (const childField of fields) {\n const errors = await executeFieldValidation({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n data: templateValue\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n }\n\n return validations;\n }\n const error = await execValidation({\n ...params\n });\n if (!error) {\n return [];\n }\n return [\n {\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n }\n ];\n};\n\nconst validate = async (params: ValidateParams): Promise<any[]> => {\n const { fields } = params;\n const errors: FieldError[] = [];\n for (const field of fields) {\n const results = await executeFieldValidation({\n ...params,\n field\n });\n if (results.length === 0) {\n continue;\n }\n errors.push(...results);\n }\n return errors;\n};\n"],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.markUnlockedFields = exports.markLockedFields = void 0;
|
|
8
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
10
9
|
var _CmsModelPlugin = require("../../plugins/CmsModelPlugin");
|
|
11
10
|
var _getBaseFieldType = require("../../utils/getBaseFieldType");
|
|
@@ -39,13 +38,17 @@ const markLockedFields = async params => {
|
|
|
39
38
|
const data = plugin.getLockedFieldData({
|
|
40
39
|
field
|
|
41
40
|
});
|
|
42
|
-
lockedFieldData =
|
|
41
|
+
lockedFieldData = {
|
|
42
|
+
...lockedFieldData,
|
|
43
|
+
...data
|
|
44
|
+
};
|
|
43
45
|
}
|
|
44
|
-
lockedFields.push(
|
|
46
|
+
lockedFields.push({
|
|
45
47
|
fieldId: field.storageId,
|
|
46
48
|
multipleValues: !!field.multipleValues,
|
|
47
|
-
type: baseType
|
|
48
|
-
|
|
49
|
+
type: baseType,
|
|
50
|
+
...lockedFieldData
|
|
51
|
+
});
|
|
49
52
|
}
|
|
50
53
|
// no need to update anything if no locked fields were added
|
|
51
54
|
if (lockedFields.length === 0) {
|
|
@@ -58,9 +61,10 @@ const markLockedFields = async params => {
|
|
|
58
61
|
* At this point we know this is a CmsModel, so it is safe to cast.
|
|
59
62
|
*/
|
|
60
63
|
original: model,
|
|
61
|
-
model:
|
|
64
|
+
model: {
|
|
65
|
+
...model,
|
|
62
66
|
lockedFields: newLockedFields
|
|
63
|
-
}
|
|
67
|
+
}
|
|
64
68
|
});
|
|
65
69
|
model.lockedFields = newLockedFields;
|
|
66
70
|
} catch (ex) {
|
|
@@ -87,9 +91,10 @@ const markUnlockedFields = async params => {
|
|
|
87
91
|
try {
|
|
88
92
|
await context.cms.updateModelDirect({
|
|
89
93
|
original: model,
|
|
90
|
-
model:
|
|
94
|
+
model: {
|
|
95
|
+
...model,
|
|
91
96
|
lockedFields: []
|
|
92
|
-
}
|
|
97
|
+
}
|
|
93
98
|
});
|
|
94
99
|
model.lockedFields = [];
|
|
95
100
|
} catch (ex) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_error","_interopRequireDefault","require","_CmsModelPlugin","_getBaseFieldType","markLockedFields","params","model","context","plugins","byType","CmsModelPlugin","type","find","plugin","contentModel","modelId","cmsLockedFieldPlugins","existingLockedFields","lockedFields","field","fields","baseType","getBaseFieldType","alreadyLocked","some","lockedField","fieldId","storageId","lockedFieldData","lockedFieldPlugins","filter","pl","fieldType","getLockedFieldData","data","
|
|
1
|
+
{"version":3,"names":["_error","_interopRequireDefault","require","_CmsModelPlugin","_getBaseFieldType","markLockedFields","params","model","context","plugins","byType","CmsModelPlugin","type","find","plugin","contentModel","modelId","cmsLockedFieldPlugins","existingLockedFields","lockedFields","field","fields","baseType","getBaseFieldType","alreadyLocked","some","lockedField","fieldId","storageId","lockedFieldData","lockedFieldPlugins","filter","pl","fieldType","getLockedFieldData","data","push","multipleValues","length","newLockedFields","concat","cms","updateModelDirect","original","ex","WebinyError","message","code","exports","markUnlockedFields"],"sources":["markLockedFields.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsContext, CmsModelLockedFieldPlugin, LockedField, CmsModel } from \"~/types\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface MarkLockedFieldsParams {\n model: CmsModel;\n entry: CmsEntry;\n context: CmsContext;\n}\n\nexport const markLockedFields = async (params: MarkLockedFieldsParams): Promise<void> => {\n const { model, context } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n const cmsLockedFieldPlugins =\n context.plugins.byType<CmsModelLockedFieldPlugin>(\"cms-model-locked-field\");\n\n const existingLockedFields = model.lockedFields || [];\n const lockedFields: LockedField[] = [];\n for (const field of model.fields) {\n const baseType = getBaseFieldType(field);\n const alreadyLocked = existingLockedFields.some(\n lockedField => lockedField.fieldId === field.storageId\n );\n if (alreadyLocked) {\n continue;\n }\n\n let lockedFieldData = {};\n\n const lockedFieldPlugins = cmsLockedFieldPlugins.filter(pl => pl.fieldType === baseType);\n for (const plugin of lockedFieldPlugins) {\n if (typeof plugin.getLockedFieldData !== \"function\") {\n continue;\n }\n const data = plugin.getLockedFieldData({\n field\n });\n lockedFieldData = { ...lockedFieldData, ...data };\n }\n\n lockedFields.push({\n fieldId: field.storageId,\n multipleValues: !!field.multipleValues,\n type: baseType,\n ...lockedFieldData\n });\n }\n // no need to update anything if no locked fields were added\n if (lockedFields.length === 0) {\n return;\n }\n\n const newLockedFields = existingLockedFields.concat(lockedFields);\n\n try {\n await context.cms.updateModelDirect({\n /**\n * At this point we know this is a CmsModel, so it is safe to cast.\n */\n original: model as CmsModel,\n model: {\n ...model,\n lockedFields: newLockedFields\n } as CmsModel\n });\n model.lockedFields = newLockedFields;\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with new locked fields.`,\n \"MODEL_LOCKED_FIELDS_UPDATE_FAILED\",\n {\n message: ex.message,\n code: ex.code,\n data: ex.data\n }\n );\n }\n};\n\nexport interface MarkFieldsUnlockedParams {\n context: CmsContext;\n model: CmsModel;\n}\n\nexport const markUnlockedFields = async (params: MarkFieldsUnlockedParams) => {\n const { context, model } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n try {\n await context.cms.updateModelDirect({\n original: model as CmsModel,\n model: {\n ...model,\n lockedFields: []\n } as CmsModel\n });\n model.lockedFields = [];\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with unlocked fields.`,\n \"MODEL_UNLOCKED_FIELDS_UPDATE_FAILED\",\n {\n message: ex.message,\n code: ex.code,\n data: ex.data\n }\n );\n }\n};\n"],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.referenceFieldsMapping = void 0;
|
|
8
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
10
9
|
var _dotProp = _interopRequireDefault(require("dot-prop"));
|
|
11
10
|
var _utils = require("@webiny/utils");
|
|
@@ -19,7 +18,6 @@ const buildReferenceFieldPaths = params => {
|
|
|
19
18
|
const parentPaths = [...initialParentPaths];
|
|
20
19
|
const isMultipleValues = Array.isArray(input);
|
|
21
20
|
return fields.filter(field => ["object", "ref", "dynamicZone"].includes((0, _getBaseFieldType.getBaseFieldType)(field))).reduce((collection, field) => {
|
|
22
|
-
var _field$settings3;
|
|
23
21
|
/**
|
|
24
22
|
* First we check the ref field
|
|
25
23
|
*/
|
|
@@ -48,8 +46,7 @@ const buildReferenceFieldPaths = params => {
|
|
|
48
46
|
return collection;
|
|
49
47
|
}
|
|
50
48
|
if (baseType === "dynamicZone") {
|
|
51
|
-
|
|
52
|
-
const templates = ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.templates) || [];
|
|
49
|
+
const templates = field.settings?.templates || [];
|
|
53
50
|
if (field.multipleValues) {
|
|
54
51
|
const values = _dotProp.default.get(input, field.fieldId, []);
|
|
55
52
|
if (!Array.isArray(values)) {
|
|
@@ -113,9 +110,8 @@ const buildReferenceFieldPaths = params => {
|
|
|
113
110
|
return collection;
|
|
114
111
|
}
|
|
115
112
|
for (const key in objFieldInputValue) {
|
|
116
|
-
var _field$settings2;
|
|
117
113
|
const result = buildReferenceFieldPaths({
|
|
118
|
-
fields:
|
|
114
|
+
fields: field.settings?.fields || [],
|
|
119
115
|
input: objFieldInputValue[key],
|
|
120
116
|
parentPaths: parentPaths.concat([field.fieldId, key])
|
|
121
117
|
});
|
|
@@ -128,7 +124,7 @@ const buildReferenceFieldPaths = params => {
|
|
|
128
124
|
* Single value reference field.
|
|
129
125
|
*/
|
|
130
126
|
const results = buildReferenceFieldPaths({
|
|
131
|
-
fields:
|
|
127
|
+
fields: field.settings?.fields || [],
|
|
132
128
|
input: objFieldInputValue,
|
|
133
129
|
parentPaths: parentPaths.concat([field.fieldId])
|
|
134
130
|
});
|
|
@@ -161,7 +157,9 @@ const referenceFieldsMapping = async params => {
|
|
|
161
157
|
input,
|
|
162
158
|
validateEntries = false
|
|
163
159
|
} = params;
|
|
164
|
-
let output =
|
|
160
|
+
let output = {
|
|
161
|
+
...input
|
|
162
|
+
};
|
|
165
163
|
const referenceFieldPaths = buildReferenceFieldPaths({
|
|
166
164
|
fields: model.fields,
|
|
167
165
|
input,
|
|
@@ -222,7 +220,6 @@ async function validateReferencedEntries({
|
|
|
222
220
|
* Group references by modelId.
|
|
223
221
|
*/
|
|
224
222
|
for (const path of referenceFieldPaths) {
|
|
225
|
-
var _referencesByModel$ge;
|
|
226
223
|
const ref = _dotProp.default.get(output, path);
|
|
227
224
|
const {
|
|
228
225
|
id,
|
|
@@ -234,7 +231,7 @@ async function validateReferencedEntries({
|
|
|
234
231
|
if (!referencesByModel.has(modelId)) {
|
|
235
232
|
referencesByModel.set(modelId, []);
|
|
236
233
|
}
|
|
237
|
-
|
|
234
|
+
referencesByModel.get(modelId)?.push(id);
|
|
238
235
|
}
|
|
239
236
|
if (!referencesByModel.size) {
|
|
240
237
|
return;
|
|
@@ -266,9 +263,10 @@ async function validateReferencedEntries({
|
|
|
266
263
|
});
|
|
267
264
|
const allEntries = await Promise.all(promises).then(res => res.flat());
|
|
268
265
|
const entriesByModel = allEntries.reduce((acc, entry) => {
|
|
269
|
-
return
|
|
266
|
+
return {
|
|
267
|
+
...acc,
|
|
270
268
|
[entry.modelId]: [...(acc[entry.modelId] || []), entry.id]
|
|
271
|
-
}
|
|
269
|
+
};
|
|
272
270
|
}, {});
|
|
273
271
|
|
|
274
272
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_error","_interopRequireDefault","require","_dotProp","_utils","_getBaseFieldType","buildReferenceFieldPaths","params","fields","parentPaths","initialParentPaths","input","isMultipleValues","Array","isArray","filter","field","includes","getBaseFieldType","reduce","collection","_field$settings3","baseType","parentPathsValue","length","join","multipleValues","inputValue","dotProp","get","fieldId","key","path","push","_field$settings","templates","settings","values","forEach","value","index","valueTemplate","Object","keys","template","find","tpl","gqlTypeName","result","concat","String","objFieldPath","objFieldInputValue","_field$settings2","results","getReferenceFieldValue","ref","id","modelId","entryId","trim","referenceFieldsMapping","context","model","validateEntries","output","_objectSpread2","default","referenceFieldPaths","validateReferencedEntries","refValue","maybeEntryId","parseIdentifier","set","exports","referencesByModel","Map","_referencesByModel$ge","has","size","models","security","withoutAuthorization","cms","listModels","entries","promises","map","getEntriesByIds","allEntries","Promise","all","then","res","flat","entriesByModel","acc","entry","ids","modelEntriesInDb","WebinyError"],"sources":["referenceFieldsMapping.ts"],"sourcesContent":["import { CmsContext, CmsDynamicZoneTemplate, CmsModel, CmsModelField } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport dotProp from \"dot-prop\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface CmsRefEntry {\n id: string;\n entryId: string;\n modelId: string;\n}\n\ntype RefValue = Pick<CmsRefEntry, \"id\" | \"modelId\"> & {\n entryId?: string;\n};\n\ninterface ReferenceObject {\n id: string;\n modelId: string;\n}\n\ninterface Params {\n context: CmsContext;\n model: CmsModel;\n input: Record<string, ReferenceObject | ReferenceObject[]>;\n validateEntries?: boolean;\n}\n\ninterface BuildReferenceFieldPaths {\n fields: CmsModelField[];\n parentPaths: string[];\n input: Record<string, any>;\n}\n\nconst buildReferenceFieldPaths = (params: BuildReferenceFieldPaths): string[] => {\n const { fields, parentPaths: initialParentPaths, input } = params;\n\n const parentPaths = [...initialParentPaths];\n\n const isMultipleValues = Array.isArray(input);\n\n return fields\n .filter(field => [\"object\", \"ref\", \"dynamicZone\"].includes(getBaseFieldType(field)))\n .reduce((collection, field) => {\n /**\n * First we check the ref field\n */\n const baseType = getBaseFieldType(field);\n if (baseType === \"ref\") {\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n if (field.multipleValues) {\n const inputValue = dotProp.get(input, `${field.fieldId}`, []);\n if (!Array.isArray(inputValue)) {\n return collection;\n }\n\n for (const key in inputValue) {\n const path = `${parentPathsValue}${field.fieldId}.${key}`;\n collection.push(path);\n }\n return collection;\n }\n\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n collection.push(`${parentPathsValue}${field.fieldId}`);\n\n return collection;\n }\n\n if (baseType === \"dynamicZone\") {\n const templates: CmsDynamicZoneTemplate[] = field.settings?.templates || [];\n\n if (field.multipleValues) {\n const values = dotProp.get(input, field.fieldId, []);\n if (!Array.isArray(values)) {\n return collection;\n }\n\n values.forEach((value, index) => {\n const valueTemplate = Object.keys(value)[0];\n const template = templates.find(tpl => tpl.gqlTypeName === valueTemplate);\n if (!template) {\n return;\n }\n\n const result = buildReferenceFieldPaths({\n fields: template.fields,\n input: value[valueTemplate],\n parentPaths: parentPaths.concat([\n field.fieldId,\n String(index),\n template.gqlTypeName\n ])\n });\n\n collection.push(...result);\n });\n\n return collection;\n }\n\n const value = dotProp.get(input, field.fieldId, {});\n if (!value) {\n return collection;\n }\n\n const valueTemplate = Object.keys(value)[0];\n const template = templates.find(tpl => tpl.gqlTypeName === valueTemplate);\n\n if (!template) {\n return collection;\n }\n\n const result = buildReferenceFieldPaths({\n fields: template.fields,\n input: dotProp.get(value, valueTemplate, {}),\n parentPaths: parentPaths.concat([field.fieldId, template.gqlTypeName])\n });\n collection.push(...result);\n\n return collection;\n }\n\n /**\n * Then we move onto the object field\n */\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n /**\n * This is if received input is array. We need to map key with fieldId at this point.\n */\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n const objFieldPath = `${field.fieldId}`;\n const objFieldInputValue = dotProp.get(input, objFieldPath, []);\n\n /**\n * If field is multiple values one, we need to go through the input and use the existing keys.\n */\n if (field.multipleValues) {\n if (Array.isArray(objFieldInputValue) === false) {\n return collection;\n }\n for (const key in objFieldInputValue) {\n const result = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue[key],\n parentPaths: parentPaths.concat([field.fieldId, key])\n });\n collection.push(...result);\n }\n\n return collection;\n }\n\n /**\n * Single value reference field.\n */\n const results = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue,\n parentPaths: parentPaths.concat([field.fieldId])\n });\n\n return collection.concat(results);\n }, [] as string[]);\n};\n\nconst getReferenceFieldValue = (ref: any): { id: string | null; modelId: string | null } => {\n if (!ref) {\n return {\n id: null,\n modelId: null\n };\n }\n return {\n id: (ref.id || ref.entryId || \"\").trim() || null,\n modelId: (ref.modelId || \"\").trim() || null\n };\n};\n\n/**\n * This function traverses the content entry input value, extracts all occurrences of the `ref` field,\n * optionally verifies that those referenced entries exist (by loading them), and normalizes the `ref` value to\n * always contain `{ id, modelId, entryId }`. `entryId` is important when data is being loaded via\n * the `read` and `preview` endpoint.\n */\nexport const referenceFieldsMapping = async (params: Params): Promise<Record<string, any>> => {\n const { context, model, input, validateEntries = false } = params;\n\n let output: Record<string, any> = {\n ...input\n };\n\n const referenceFieldPaths = buildReferenceFieldPaths({\n fields: model.fields,\n input,\n parentPaths: []\n });\n\n if (!referenceFieldPaths.length) {\n return output;\n }\n\n if (validateEntries) {\n await validateReferencedEntries({ output, context, referenceFieldPaths });\n }\n\n /**\n * Assign the entryId, id and model values to the output.\n */\n for (const path of referenceFieldPaths) {\n // It is safe to cast here, because `referenceFieldPaths` array is generated from the `input`.\n const refValue: RefValue | undefined = dotProp.get(input, path);\n if (!refValue) {\n continue;\n }\n\n /**\n * Over time, the structure of `RefInput` was changing, and we need to handle different cases for backwards\n * compatibility. The latest valid structure of a `ref` field value is { id, modelId }, but we also need\n * to make sure that the legacy structure { entryId, modelId } is supported.\n */\n const { id, modelId, entryId: maybeEntryId } = refValue;\n\n const { id: entryId } = parseIdentifier(maybeEntryId || id);\n\n output = dotProp.set(output, path, {\n // If `id` is not set, we're dealing with the legacy structure.\n id: id ?? maybeEntryId,\n entryId,\n modelId\n });\n }\n\n return output;\n};\n\ninterface ValidateReferencedEntriesParams {\n output: Record<string, any>;\n context: CmsContext;\n referenceFieldPaths: string[];\n}\n\nasync function validateReferencedEntries({\n output,\n context,\n referenceFieldPaths\n}: ValidateReferencedEntriesParams) {\n const referencesByModel = new Map<string, string[]>();\n\n /**\n * Group references by modelId.\n */\n for (const path of referenceFieldPaths) {\n const ref = dotProp.get(output, path) as ReferenceObject | any;\n\n const { id, modelId } = getReferenceFieldValue(ref);\n\n if (!id || !modelId) {\n continue;\n }\n\n if (!referencesByModel.has(modelId)) {\n referencesByModel.set(modelId, []);\n }\n\n referencesByModel.get(modelId)?.push(id);\n }\n\n if (!referencesByModel.size) {\n return;\n }\n\n /**\n * Load all models and use only those that are used in reference.\n */\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.cms.listModels()).filter(model => {\n const entries = referencesByModel.get(model.modelId);\n if (!Array.isArray(entries) || entries.length === 0) {\n return false;\n }\n return true;\n });\n });\n\n if (!models.length) {\n return;\n }\n\n /**\n * Load all the entries by their IDs.\n */\n const promises = await context.security.withoutAuthorization(async () => {\n return models.map(model => {\n return context.cms.getEntriesByIds(model, referencesByModel.get(model.modelId) || []);\n });\n });\n\n const allEntries = await Promise.all(promises).then(res => res.flat());\n const entriesByModel = allEntries.reduce<Record<string, string[]>>((acc, entry) => {\n return { ...acc, [entry.modelId]: [...(acc[entry.modelId] || []), entry.id] };\n }, {});\n\n /**\n * Verify that all entries exist.\n */\n referencesByModel.forEach((ids, modelId) => {\n const modelEntriesInDb = entriesByModel[modelId];\n for (const id of ids) {\n if (!modelEntriesInDb.includes(id)) {\n throw new WebinyError(\n `Missing referenced entry with id \"${id}\" in model \"${modelId}\".`,\n \"ENTRY_NOT_FOUND\",\n {\n id,\n model: modelId\n }\n );\n }\n }\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_error","_interopRequireDefault","require","_dotProp","_utils","_getBaseFieldType","buildReferenceFieldPaths","params","fields","parentPaths","initialParentPaths","input","isMultipleValues","Array","isArray","filter","field","includes","getBaseFieldType","reduce","collection","baseType","parentPathsValue","length","join","multipleValues","inputValue","dotProp","get","fieldId","key","path","push","templates","settings","values","forEach","value","index","valueTemplate","Object","keys","template","find","tpl","gqlTypeName","result","concat","String","objFieldPath","objFieldInputValue","results","getReferenceFieldValue","ref","id","modelId","entryId","trim","referenceFieldsMapping","context","model","validateEntries","output","referenceFieldPaths","validateReferencedEntries","refValue","maybeEntryId","parseIdentifier","set","exports","referencesByModel","Map","has","size","models","security","withoutAuthorization","cms","listModels","entries","promises","map","getEntriesByIds","allEntries","Promise","all","then","res","flat","entriesByModel","acc","entry","ids","modelEntriesInDb","WebinyError"],"sources":["referenceFieldsMapping.ts"],"sourcesContent":["import { CmsContext, CmsDynamicZoneTemplate, CmsModel, CmsModelField } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport dotProp from \"dot-prop\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface CmsRefEntry {\n id: string;\n entryId: string;\n modelId: string;\n}\n\ntype RefValue = Pick<CmsRefEntry, \"id\" | \"modelId\"> & {\n entryId?: string;\n};\n\ninterface ReferenceObject {\n id: string;\n modelId: string;\n}\n\ninterface Params {\n context: CmsContext;\n model: CmsModel;\n input: Record<string, ReferenceObject | ReferenceObject[]>;\n validateEntries?: boolean;\n}\n\ninterface BuildReferenceFieldPaths {\n fields: CmsModelField[];\n parentPaths: string[];\n input: Record<string, any>;\n}\n\nconst buildReferenceFieldPaths = (params: BuildReferenceFieldPaths): string[] => {\n const { fields, parentPaths: initialParentPaths, input } = params;\n\n const parentPaths = [...initialParentPaths];\n\n const isMultipleValues = Array.isArray(input);\n\n return fields\n .filter(field => [\"object\", \"ref\", \"dynamicZone\"].includes(getBaseFieldType(field)))\n .reduce((collection, field) => {\n /**\n * First we check the ref field\n */\n const baseType = getBaseFieldType(field);\n if (baseType === \"ref\") {\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n if (field.multipleValues) {\n const inputValue = dotProp.get(input, `${field.fieldId}`, []);\n if (!Array.isArray(inputValue)) {\n return collection;\n }\n\n for (const key in inputValue) {\n const path = `${parentPathsValue}${field.fieldId}.${key}`;\n collection.push(path);\n }\n return collection;\n }\n\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n collection.push(`${parentPathsValue}${field.fieldId}`);\n\n return collection;\n }\n\n if (baseType === \"dynamicZone\") {\n const templates: CmsDynamicZoneTemplate[] = field.settings?.templates || [];\n\n if (field.multipleValues) {\n const values = dotProp.get(input, field.fieldId, []);\n if (!Array.isArray(values)) {\n return collection;\n }\n\n values.forEach((value, index) => {\n const valueTemplate = Object.keys(value)[0];\n const template = templates.find(tpl => tpl.gqlTypeName === valueTemplate);\n if (!template) {\n return;\n }\n\n const result = buildReferenceFieldPaths({\n fields: template.fields,\n input: value[valueTemplate],\n parentPaths: parentPaths.concat([\n field.fieldId,\n String(index),\n template.gqlTypeName\n ])\n });\n\n collection.push(...result);\n });\n\n return collection;\n }\n\n const value = dotProp.get(input, field.fieldId, {});\n if (!value) {\n return collection;\n }\n\n const valueTemplate = Object.keys(value)[0];\n const template = templates.find(tpl => tpl.gqlTypeName === valueTemplate);\n\n if (!template) {\n return collection;\n }\n\n const result = buildReferenceFieldPaths({\n fields: template.fields,\n input: dotProp.get(value, valueTemplate, {}),\n parentPaths: parentPaths.concat([field.fieldId, template.gqlTypeName])\n });\n collection.push(...result);\n\n return collection;\n }\n\n /**\n * Then we move onto the object field\n */\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n /**\n * This is if received input is array. We need to map key with fieldId at this point.\n */\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n const objFieldPath = `${field.fieldId}`;\n const objFieldInputValue = dotProp.get(input, objFieldPath, []);\n\n /**\n * If field is multiple values one, we need to go through the input and use the existing keys.\n */\n if (field.multipleValues) {\n if (Array.isArray(objFieldInputValue) === false) {\n return collection;\n }\n for (const key in objFieldInputValue) {\n const result = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue[key],\n parentPaths: parentPaths.concat([field.fieldId, key])\n });\n collection.push(...result);\n }\n\n return collection;\n }\n\n /**\n * Single value reference field.\n */\n const results = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue,\n parentPaths: parentPaths.concat([field.fieldId])\n });\n\n return collection.concat(results);\n }, [] as string[]);\n};\n\nconst getReferenceFieldValue = (ref: any): { id: string | null; modelId: string | null } => {\n if (!ref) {\n return {\n id: null,\n modelId: null\n };\n }\n return {\n id: (ref.id || ref.entryId || \"\").trim() || null,\n modelId: (ref.modelId || \"\").trim() || null\n };\n};\n\n/**\n * This function traverses the content entry input value, extracts all occurrences of the `ref` field,\n * optionally verifies that those referenced entries exist (by loading them), and normalizes the `ref` value to\n * always contain `{ id, modelId, entryId }`. `entryId` is important when data is being loaded via\n * the `read` and `preview` endpoint.\n */\nexport const referenceFieldsMapping = async (params: Params): Promise<Record<string, any>> => {\n const { context, model, input, validateEntries = false } = params;\n\n let output: Record<string, any> = {\n ...input\n };\n\n const referenceFieldPaths = buildReferenceFieldPaths({\n fields: model.fields,\n input,\n parentPaths: []\n });\n\n if (!referenceFieldPaths.length) {\n return output;\n }\n\n if (validateEntries) {\n await validateReferencedEntries({ output, context, referenceFieldPaths });\n }\n\n /**\n * Assign the entryId, id and model values to the output.\n */\n for (const path of referenceFieldPaths) {\n // It is safe to cast here, because `referenceFieldPaths` array is generated from the `input`.\n const refValue: RefValue | undefined = dotProp.get(input, path);\n if (!refValue) {\n continue;\n }\n\n /**\n * Over time, the structure of `RefInput` was changing, and we need to handle different cases for backwards\n * compatibility. The latest valid structure of a `ref` field value is { id, modelId }, but we also need\n * to make sure that the legacy structure { entryId, modelId } is supported.\n */\n const { id, modelId, entryId: maybeEntryId } = refValue;\n\n const { id: entryId } = parseIdentifier(maybeEntryId || id);\n\n output = dotProp.set(output, path, {\n // If `id` is not set, we're dealing with the legacy structure.\n id: id ?? maybeEntryId,\n entryId,\n modelId\n });\n }\n\n return output;\n};\n\ninterface ValidateReferencedEntriesParams {\n output: Record<string, any>;\n context: CmsContext;\n referenceFieldPaths: string[];\n}\n\nasync function validateReferencedEntries({\n output,\n context,\n referenceFieldPaths\n}: ValidateReferencedEntriesParams) {\n const referencesByModel = new Map<string, string[]>();\n\n /**\n * Group references by modelId.\n */\n for (const path of referenceFieldPaths) {\n const ref = dotProp.get(output, path) as ReferenceObject | any;\n\n const { id, modelId } = getReferenceFieldValue(ref);\n\n if (!id || !modelId) {\n continue;\n }\n\n if (!referencesByModel.has(modelId)) {\n referencesByModel.set(modelId, []);\n }\n\n referencesByModel.get(modelId)?.push(id);\n }\n\n if (!referencesByModel.size) {\n return;\n }\n\n /**\n * Load all models and use only those that are used in reference.\n */\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.cms.listModels()).filter(model => {\n const entries = referencesByModel.get(model.modelId);\n if (!Array.isArray(entries) || entries.length === 0) {\n return false;\n }\n return true;\n });\n });\n\n if (!models.length) {\n return;\n }\n\n /**\n * Load all the entries by their IDs.\n */\n const promises = await context.security.withoutAuthorization(async () => {\n return models.map(model => {\n return context.cms.getEntriesByIds(model, referencesByModel.get(model.modelId) || []);\n });\n });\n\n const allEntries = await Promise.all(promises).then(res => res.flat());\n const entriesByModel = allEntries.reduce<Record<string, string[]>>((acc, entry) => {\n return { ...acc, [entry.modelId]: [...(acc[entry.modelId] || []), entry.id] };\n }, {});\n\n /**\n * Verify that all entries exist.\n */\n referencesByModel.forEach((ids, modelId) => {\n const modelEntriesInDb = entriesByModel[modelId];\n for (const id of ids) {\n if (!modelEntriesInDb.includes(id)) {\n throw new WebinyError(\n `Missing referenced entry with id \"${id}\" in model \"${modelId}\".`,\n \"ENTRY_NOT_FOUND\",\n {\n id,\n model: modelId\n }\n );\n }\n }\n });\n}\n"],"mappings":"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"}
|