@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,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createEntryRevisionFromData = void 0;
|
|
8
|
+
var _date = require("../../../utils/date");
|
|
9
|
+
var _identity = require("../../../utils/identity");
|
|
10
|
+
var _mapAndCleanUpdatedInputData = require(".//mapAndCleanUpdatedInputData");
|
|
11
|
+
var _entryDataValidation = require("../entryDataValidation");
|
|
12
|
+
var _referenceFieldsMapping = require("../referenceFieldsMapping");
|
|
13
|
+
var _utils = require("@webiny/utils");
|
|
14
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
15
|
+
var _statuses = require("./statuses");
|
|
16
|
+
const createEntryRevisionFromData = async ({
|
|
17
|
+
sourceId,
|
|
18
|
+
model,
|
|
19
|
+
rawInput,
|
|
20
|
+
options,
|
|
21
|
+
context,
|
|
22
|
+
getIdentity: getSecurityIdentity,
|
|
23
|
+
originalEntry,
|
|
24
|
+
latestStorageEntry
|
|
25
|
+
}) => {
|
|
26
|
+
/**
|
|
27
|
+
* Make sure we only work with fields that are defined in the model.
|
|
28
|
+
*/
|
|
29
|
+
const input = (0, _mapAndCleanUpdatedInputData.mapAndCleanUpdatedInputData)(model, rawInput);
|
|
30
|
+
const initialValues = {
|
|
31
|
+
...originalEntry.values,
|
|
32
|
+
...input
|
|
33
|
+
};
|
|
34
|
+
await (0, _entryDataValidation.validateModelEntryDataOrThrow)({
|
|
35
|
+
context,
|
|
36
|
+
model,
|
|
37
|
+
data: initialValues,
|
|
38
|
+
entry: originalEntry,
|
|
39
|
+
skipValidators: options?.skipValidators
|
|
40
|
+
});
|
|
41
|
+
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
42
|
+
context,
|
|
43
|
+
model,
|
|
44
|
+
input: initialValues,
|
|
45
|
+
validateEntries: false
|
|
46
|
+
});
|
|
47
|
+
const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;
|
|
48
|
+
const {
|
|
49
|
+
id,
|
|
50
|
+
version: nextVersion
|
|
51
|
+
} = increaseEntryIdVersion(latestId);
|
|
52
|
+
const currentIdentity = getSecurityIdentity();
|
|
53
|
+
const currentDateTime = new Date();
|
|
54
|
+
const entry = {
|
|
55
|
+
...originalEntry,
|
|
56
|
+
id,
|
|
57
|
+
version: nextVersion,
|
|
58
|
+
/**
|
|
59
|
+
* Entry-level meta fields. 👇
|
|
60
|
+
*/
|
|
61
|
+
createdOn: (0, _date.getDate)(rawInput.createdOn, latestStorageEntry.createdOn),
|
|
62
|
+
savedOn: (0, _date.getDate)(rawInput.savedOn, currentDateTime),
|
|
63
|
+
modifiedOn: (0, _date.getDate)(rawInput.modifiedOn, currentDateTime),
|
|
64
|
+
firstPublishedOn: (0, _date.getDate)(rawInput.firstPublishedOn, latestStorageEntry.firstPublishedOn),
|
|
65
|
+
lastPublishedOn: (0, _date.getDate)(rawInput.lastPublishedOn, latestStorageEntry.lastPublishedOn),
|
|
66
|
+
createdBy: (0, _identity.getIdentity)(rawInput.createdBy, latestStorageEntry.createdBy),
|
|
67
|
+
savedBy: (0, _identity.getIdentity)(rawInput.savedBy, currentIdentity),
|
|
68
|
+
modifiedBy: (0, _identity.getIdentity)(rawInput.modifiedBy, currentIdentity),
|
|
69
|
+
firstPublishedBy: (0, _identity.getIdentity)(rawInput.firstPublishedBy, latestStorageEntry.firstPublishedBy),
|
|
70
|
+
lastPublishedBy: (0, _identity.getIdentity)(rawInput.lastPublishedBy, latestStorageEntry.lastPublishedBy),
|
|
71
|
+
/**
|
|
72
|
+
* Revision-level meta fields. 👇
|
|
73
|
+
*/
|
|
74
|
+
revisionCreatedOn: (0, _date.getDate)(rawInput.revisionCreatedOn, currentDateTime),
|
|
75
|
+
revisionSavedOn: (0, _date.getDate)(rawInput.revisionSavedOn, currentDateTime),
|
|
76
|
+
revisionModifiedOn: (0, _date.getDate)(rawInput.revisionModifiedOn, null),
|
|
77
|
+
revisionFirstPublishedOn: (0, _date.getDate)(rawInput.revisionFirstPublishedOn, null),
|
|
78
|
+
revisionLastPublishedOn: (0, _date.getDate)(rawInput.revisionLastPublishedOn, null),
|
|
79
|
+
revisionCreatedBy: (0, _identity.getIdentity)(rawInput.revisionCreatedBy, currentIdentity),
|
|
80
|
+
revisionSavedBy: (0, _identity.getIdentity)(rawInput.revisionSavedBy, currentIdentity),
|
|
81
|
+
revisionModifiedBy: (0, _identity.getIdentity)(rawInput.revisionModifiedBy, null),
|
|
82
|
+
revisionFirstPublishedBy: (0, _identity.getIdentity)(rawInput.revisionFirstPublishedBy, null),
|
|
83
|
+
revisionLastPublishedBy: (0, _identity.getIdentity)(rawInput.revisionLastPublishedBy, null),
|
|
84
|
+
locked: false,
|
|
85
|
+
status: _statuses.STATUS_DRAFT,
|
|
86
|
+
values
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
entry,
|
|
90
|
+
input
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
exports.createEntryRevisionFromData = createEntryRevisionFromData;
|
|
94
|
+
const increaseEntryIdVersion = id => {
|
|
95
|
+
const {
|
|
96
|
+
id: entryId,
|
|
97
|
+
version
|
|
98
|
+
} = (0, _utils.parseIdentifier)(id);
|
|
99
|
+
if (!version) {
|
|
100
|
+
throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
|
|
101
|
+
id
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
entryId,
|
|
106
|
+
version: version + 1,
|
|
107
|
+
id: (0, _utils.createIdentifier)({
|
|
108
|
+
id: entryId,
|
|
109
|
+
version: version + 1
|
|
110
|
+
})
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=createEntryRevisionFromData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_date","require","_identity","_mapAndCleanUpdatedInputData","_entryDataValidation","_referenceFieldsMapping","_utils","_error","_interopRequireDefault","_statuses","createEntryRevisionFromData","sourceId","model","rawInput","options","context","getIdentity","getSecurityIdentity","originalEntry","latestStorageEntry","input","mapAndCleanUpdatedInputData","initialValues","values","validateModelEntryDataOrThrow","data","entry","skipValidators","referenceFieldsMapping","validateEntries","latestId","id","version","nextVersion","increaseEntryIdVersion","currentIdentity","currentDateTime","Date","createdOn","getDate","savedOn","modifiedOn","firstPublishedOn","lastPublishedOn","createdBy","savedBy","modifiedBy","firstPublishedBy","lastPublishedBy","revisionCreatedOn","revisionSavedOn","revisionModifiedOn","revisionFirstPublishedOn","revisionLastPublishedOn","revisionCreatedBy","revisionSavedBy","revisionModifiedBy","revisionFirstPublishedBy","revisionLastPublishedBy","locked","status","STATUS_DRAFT","exports","entryId","parseIdentifier","WebinyError","createIdentifier"],"sources":["createEntryRevisionFromData.ts"],"sourcesContent":["import {\n CmsContext,\n CmsEntry,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types\";\nimport { getDate } from \"~/utils/date\";\nimport { getIdentity } from \"~/utils/identity\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { mapAndCleanUpdatedInputData } from \".//mapAndCleanUpdatedInputData\";\nimport { validateModelEntryDataOrThrow } from \"../entryDataValidation\";\nimport { referenceFieldsMapping } from \"../referenceFieldsMapping\";\nimport { createIdentifier, parseIdentifier } from \"@webiny/utils\";\nimport WebinyError from \"@webiny/error\";\nimport { STATUS_DRAFT } from \"./statuses\";\n\ntype CreateEntryRevisionFromDataParams = {\n sourceId: string;\n model: CmsModel;\n rawInput: CreateCmsEntryInput;\n options?: CreateCmsEntryOptionsInput;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n originalEntry: CmsEntry;\n latestStorageEntry: CmsEntry;\n};\n\nexport const createEntryRevisionFromData = async ({\n sourceId,\n model,\n rawInput,\n options,\n context,\n getIdentity: getSecurityIdentity,\n originalEntry,\n latestStorageEntry\n}: CreateEntryRevisionFromDataParams): Promise<{\n entry: CmsEntry;\n input: Record<string, any>;\n}> => {\n /**\n * Make sure we only work with fields that are defined in the model.\n */\n const input = mapAndCleanUpdatedInputData(model, rawInput);\n\n const initialValues = {\n ...originalEntry.values,\n ...input\n };\n\n await validateModelEntryDataOrThrow({\n context,\n model,\n data: initialValues,\n entry: originalEntry,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping({\n context,\n model,\n input: initialValues,\n validateEntries: false\n });\n\n const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;\n const { id, version: nextVersion } = increaseEntryIdVersion(latestId);\n\n const currentIdentity = getSecurityIdentity();\n const currentDateTime = new Date();\n\n const entry: CmsEntry = {\n ...originalEntry,\n id,\n version: nextVersion,\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: getDate(rawInput.createdOn, latestStorageEntry.createdOn),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, currentDateTime),\n firstPublishedOn: getDate(rawInput.firstPublishedOn, latestStorageEntry.firstPublishedOn),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, latestStorageEntry.lastPublishedOn),\n createdBy: getIdentity(rawInput.createdBy, latestStorageEntry.createdBy),\n savedBy: getIdentity(rawInput.savedBy, currentIdentity),\n modifiedBy: getIdentity(rawInput.modifiedBy, currentIdentity),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n latestStorageEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, latestStorageEntry.lastPublishedBy),\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, null),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity),\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity),\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n revisionFirstPublishedBy: getIdentity(rawInput.revisionFirstPublishedBy, null),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, null),\n\n locked: false,\n status: STATUS_DRAFT,\n values\n };\n\n return { entry, input };\n};\n\nconst increaseEntryIdVersion = (id: string) => {\n const { id: entryId, version } = parseIdentifier(id);\n if (!version) {\n throw new WebinyError(\n \"Cannot increase version on the ID without the version part.\",\n \"WRONG_ID\",\n {\n id\n }\n );\n }\n return {\n entryId,\n version: version + 1,\n id: createIdentifier({\n id: entryId,\n version: version + 1\n })\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CmsContext, CmsEntry, CmsModel } from "../../../types";
|
|
2
|
+
import { SecurityIdentity } from "@webiny/api-security/types";
|
|
3
|
+
declare type CreatePublishEntryDataParams = {
|
|
4
|
+
model: CmsModel;
|
|
5
|
+
context: CmsContext;
|
|
6
|
+
getIdentity: () => SecurityIdentity;
|
|
7
|
+
originalEntry: CmsEntry;
|
|
8
|
+
latestEntry: CmsEntry;
|
|
9
|
+
};
|
|
10
|
+
export declare const createPublishEntryData: ({ model, context, getIdentity: getSecurityIdentity, originalEntry, latestEntry }: CreatePublishEntryDataParams) => Promise<{
|
|
11
|
+
entry: CmsEntry;
|
|
12
|
+
}>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createPublishEntryData = void 0;
|
|
7
|
+
var _statuses = require("./statuses");
|
|
8
|
+
var _entryDataValidation = require("../entryDataValidation");
|
|
9
|
+
const createPublishEntryData = async ({
|
|
10
|
+
model,
|
|
11
|
+
context,
|
|
12
|
+
getIdentity: getSecurityIdentity,
|
|
13
|
+
originalEntry,
|
|
14
|
+
latestEntry
|
|
15
|
+
}) => {
|
|
16
|
+
await (0, _entryDataValidation.validateModelEntryDataOrThrow)({
|
|
17
|
+
context,
|
|
18
|
+
model,
|
|
19
|
+
data: originalEntry.values,
|
|
20
|
+
entry: originalEntry
|
|
21
|
+
});
|
|
22
|
+
const currentDateTime = new Date().toISOString();
|
|
23
|
+
const currentIdentity = getSecurityIdentity();
|
|
24
|
+
const entry = {
|
|
25
|
+
...originalEntry,
|
|
26
|
+
status: _statuses.STATUS_PUBLISHED,
|
|
27
|
+
locked: true,
|
|
28
|
+
/**
|
|
29
|
+
* Entry-level meta fields. 👇
|
|
30
|
+
*/
|
|
31
|
+
createdOn: latestEntry.createdOn,
|
|
32
|
+
modifiedOn: currentDateTime,
|
|
33
|
+
savedOn: currentDateTime,
|
|
34
|
+
firstPublishedOn: latestEntry.firstPublishedOn || currentDateTime,
|
|
35
|
+
lastPublishedOn: currentDateTime,
|
|
36
|
+
createdBy: latestEntry.createdBy,
|
|
37
|
+
modifiedBy: currentIdentity,
|
|
38
|
+
savedBy: currentIdentity,
|
|
39
|
+
firstPublishedBy: latestEntry.firstPublishedBy || currentIdentity,
|
|
40
|
+
lastPublishedBy: currentIdentity,
|
|
41
|
+
/**
|
|
42
|
+
* Revision-level meta fields. 👇
|
|
43
|
+
*/
|
|
44
|
+
revisionCreatedOn: originalEntry.revisionCreatedOn,
|
|
45
|
+
revisionSavedOn: currentDateTime,
|
|
46
|
+
revisionModifiedOn: currentDateTime,
|
|
47
|
+
revisionFirstPublishedOn: originalEntry.revisionFirstPublishedOn || currentDateTime,
|
|
48
|
+
revisionLastPublishedOn: currentDateTime,
|
|
49
|
+
revisionCreatedBy: originalEntry.revisionCreatedBy,
|
|
50
|
+
revisionSavedBy: currentIdentity,
|
|
51
|
+
revisionModifiedBy: currentIdentity,
|
|
52
|
+
revisionFirstPublishedBy: originalEntry.revisionFirstPublishedBy || currentIdentity,
|
|
53
|
+
revisionLastPublishedBy: currentIdentity
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
entry
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
exports.createPublishEntryData = createPublishEntryData;
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=createPublishEntryData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_statuses","require","_entryDataValidation","createPublishEntryData","model","context","getIdentity","getSecurityIdentity","originalEntry","latestEntry","validateModelEntryDataOrThrow","data","values","entry","currentDateTime","Date","toISOString","currentIdentity","status","STATUS_PUBLISHED","locked","createdOn","modifiedOn","savedOn","firstPublishedOn","lastPublishedOn","createdBy","modifiedBy","savedBy","firstPublishedBy","lastPublishedBy","revisionCreatedOn","revisionSavedOn","revisionModifiedOn","revisionFirstPublishedOn","revisionLastPublishedOn","revisionCreatedBy","revisionSavedBy","revisionModifiedBy","revisionFirstPublishedBy","revisionLastPublishedBy","exports"],"sources":["createPublishEntryData.ts"],"sourcesContent":["import { CmsContext, CmsEntry, CmsModel } from \"~/types\";\nimport { STATUS_PUBLISHED } from \"./statuses\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation\";\n\ntype CreatePublishEntryDataParams = {\n model: CmsModel;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n originalEntry: CmsEntry;\n latestEntry: CmsEntry;\n};\n\nexport const createPublishEntryData = async ({\n model,\n context,\n getIdentity: getSecurityIdentity,\n originalEntry,\n latestEntry\n}: CreatePublishEntryDataParams): Promise<{\n entry: CmsEntry;\n}> => {\n await validateModelEntryDataOrThrow({\n context,\n model,\n data: originalEntry.values,\n entry: originalEntry\n });\n\n const currentDateTime = new Date().toISOString();\n const currentIdentity = getSecurityIdentity();\n\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_PUBLISHED,\n locked: true,\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: latestEntry.createdOn,\n modifiedOn: currentDateTime,\n savedOn: currentDateTime,\n firstPublishedOn: latestEntry.firstPublishedOn || currentDateTime,\n lastPublishedOn: currentDateTime,\n createdBy: latestEntry.createdBy,\n modifiedBy: currentIdentity,\n savedBy: currentIdentity,\n firstPublishedBy: latestEntry.firstPublishedBy || currentIdentity,\n lastPublishedBy: currentIdentity,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: originalEntry.revisionCreatedOn,\n revisionSavedOn: currentDateTime,\n revisionModifiedOn: currentDateTime,\n revisionFirstPublishedOn: originalEntry.revisionFirstPublishedOn || currentDateTime,\n revisionLastPublishedOn: currentDateTime,\n revisionCreatedBy: originalEntry.revisionCreatedBy,\n revisionSavedBy: currentIdentity,\n revisionModifiedBy: currentIdentity,\n revisionFirstPublishedBy: originalEntry.revisionFirstPublishedBy || currentIdentity,\n revisionLastPublishedBy: currentIdentity\n };\n\n return { entry };\n};\n"],"mappings":";;;;;;AACA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,oBAAA,GAAAD,OAAA;AAUO,MAAME,sBAAsB,GAAG,MAAAA,CAAO;EACzCC,KAAK;EACLC,OAAO;EACPC,WAAW,EAAEC,mBAAmB;EAChCC,aAAa;EACbC;AAC0B,CAAC,KAEzB;EACF,MAAM,IAAAC,kDAA6B,EAAC;IAChCL,OAAO;IACPD,KAAK;IACLO,IAAI,EAAEH,aAAa,CAACI,MAAM;IAC1BC,KAAK,EAAEL;EACX,CAAC,CAAC;EAEF,MAAMM,eAAe,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAChD,MAAMC,eAAe,GAAGV,mBAAmB,CAAC,CAAC;EAE7C,MAAMM,KAAe,GAAG;IACpB,GAAGL,aAAa;IAChBU,MAAM,EAAEC,0BAAgB;IACxBC,MAAM,EAAE,IAAI;IAEZ;AACR;AACA;IACQC,SAAS,EAAEZ,WAAW,CAACY,SAAS;IAChCC,UAAU,EAAER,eAAe;IAC3BS,OAAO,EAAET,eAAe;IACxBU,gBAAgB,EAAEf,WAAW,CAACe,gBAAgB,IAAIV,eAAe;IACjEW,eAAe,EAAEX,eAAe;IAChCY,SAAS,EAAEjB,WAAW,CAACiB,SAAS;IAChCC,UAAU,EAAEV,eAAe;IAC3BW,OAAO,EAAEX,eAAe;IACxBY,gBAAgB,EAAEpB,WAAW,CAACoB,gBAAgB,IAAIZ,eAAe;IACjEa,eAAe,EAAEb,eAAe;IAEhC;AACR;AACA;IACQc,iBAAiB,EAAEvB,aAAa,CAACuB,iBAAiB;IAClDC,eAAe,EAAElB,eAAe;IAChCmB,kBAAkB,EAAEnB,eAAe;IACnCoB,wBAAwB,EAAE1B,aAAa,CAAC0B,wBAAwB,IAAIpB,eAAe;IACnFqB,uBAAuB,EAAErB,eAAe;IACxCsB,iBAAiB,EAAE5B,aAAa,CAAC4B,iBAAiB;IAClDC,eAAe,EAAEpB,eAAe;IAChCqB,kBAAkB,EAAErB,eAAe;IACnCsB,wBAAwB,EAAE/B,aAAa,CAAC+B,wBAAwB,IAAItB,eAAe;IACnFuB,uBAAuB,EAAEvB;EAC7B,CAAC;EAED,OAAO;IAAEJ;EAAM,CAAC;AACpB,CAAC;AAAC4B,OAAA,CAAAtC,sBAAA,GAAAA,sBAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CmsContext, CmsEntry, CmsModel } from "../../../types";
|
|
2
|
+
import { SecurityIdentity } from "@webiny/api-security/types";
|
|
3
|
+
declare type CreateRepublishEntryDataParams = {
|
|
4
|
+
model: CmsModel;
|
|
5
|
+
context: CmsContext;
|
|
6
|
+
getIdentity: () => SecurityIdentity;
|
|
7
|
+
originalEntry: CmsEntry;
|
|
8
|
+
};
|
|
9
|
+
export declare const createRepublishEntryData: ({ model, context, getIdentity: getSecurityIdentity, originalEntry }: CreateRepublishEntryDataParams) => Promise<{
|
|
10
|
+
entry: CmsEntry;
|
|
11
|
+
}>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createRepublishEntryData = void 0;
|
|
7
|
+
var _referenceFieldsMapping = require("../referenceFieldsMapping");
|
|
8
|
+
var _statuses = require("./statuses");
|
|
9
|
+
const createRepublishEntryData = async ({
|
|
10
|
+
model,
|
|
11
|
+
context,
|
|
12
|
+
getIdentity: getSecurityIdentity,
|
|
13
|
+
originalEntry
|
|
14
|
+
}) => {
|
|
15
|
+
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
16
|
+
context,
|
|
17
|
+
model,
|
|
18
|
+
input: originalEntry.values,
|
|
19
|
+
validateEntries: false
|
|
20
|
+
});
|
|
21
|
+
const currentDateTime = new Date().toISOString();
|
|
22
|
+
const currentIdentity = getSecurityIdentity();
|
|
23
|
+
const entry = {
|
|
24
|
+
...originalEntry,
|
|
25
|
+
status: _statuses.STATUS_PUBLISHED,
|
|
26
|
+
/**
|
|
27
|
+
* Entry-level meta fields. 👇
|
|
28
|
+
*/
|
|
29
|
+
savedOn: currentDateTime,
|
|
30
|
+
modifiedOn: currentDateTime,
|
|
31
|
+
savedBy: currentIdentity,
|
|
32
|
+
modifiedBy: currentIdentity,
|
|
33
|
+
firstPublishedOn: originalEntry.firstPublishedOn || currentDateTime,
|
|
34
|
+
firstPublishedBy: originalEntry.firstPublishedBy || currentIdentity,
|
|
35
|
+
lastPublishedOn: currentDateTime,
|
|
36
|
+
lastPublishedBy: currentIdentity,
|
|
37
|
+
/**
|
|
38
|
+
* Revision-level meta fields. 👇
|
|
39
|
+
*/
|
|
40
|
+
revisionSavedOn: currentDateTime,
|
|
41
|
+
revisionModifiedOn: currentDateTime,
|
|
42
|
+
revisionSavedBy: currentIdentity,
|
|
43
|
+
revisionModifiedBy: currentIdentity,
|
|
44
|
+
revisionFirstPublishedOn: originalEntry.revisionFirstPublishedOn || currentDateTime,
|
|
45
|
+
revisionFirstPublishedBy: originalEntry.revisionFirstPublishedBy || currentIdentity,
|
|
46
|
+
revisionLastPublishedOn: currentDateTime,
|
|
47
|
+
revisionLastPublishedBy: currentIdentity,
|
|
48
|
+
webinyVersion: context.WEBINY_VERSION,
|
|
49
|
+
values
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
entry
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
exports.createRepublishEntryData = createRepublishEntryData;
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=createRepublishEntryData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_referenceFieldsMapping","require","_statuses","createRepublishEntryData","model","context","getIdentity","getSecurityIdentity","originalEntry","values","referenceFieldsMapping","input","validateEntries","currentDateTime","Date","toISOString","currentIdentity","entry","status","STATUS_PUBLISHED","savedOn","modifiedOn","savedBy","modifiedBy","firstPublishedOn","firstPublishedBy","lastPublishedOn","lastPublishedBy","revisionSavedOn","revisionModifiedOn","revisionSavedBy","revisionModifiedBy","revisionFirstPublishedOn","revisionFirstPublishedBy","revisionLastPublishedOn","revisionLastPublishedBy","webinyVersion","WEBINY_VERSION","exports"],"sources":["createRepublishEntryData.ts"],"sourcesContent":["import { CmsContext, CmsEntry, CmsModel } from \"~/types\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping\";\nimport { STATUS_PUBLISHED } from \"./statuses\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\n\ntype CreateRepublishEntryDataParams = {\n model: CmsModel;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n originalEntry: CmsEntry;\n};\n\nexport const createRepublishEntryData = async ({\n model,\n context,\n getIdentity: getSecurityIdentity,\n originalEntry\n}: CreateRepublishEntryDataParams): Promise<{\n entry: CmsEntry;\n}> => {\n const values = await referenceFieldsMapping({\n context,\n model,\n input: originalEntry.values,\n validateEntries: false\n });\n\n const currentDateTime = new Date().toISOString();\n const currentIdentity = getSecurityIdentity();\n\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_PUBLISHED,\n\n /**\n * Entry-level meta fields. 👇\n */\n savedOn: currentDateTime,\n modifiedOn: currentDateTime,\n savedBy: currentIdentity,\n modifiedBy: currentIdentity,\n firstPublishedOn: originalEntry.firstPublishedOn || currentDateTime,\n firstPublishedBy: originalEntry.firstPublishedBy || currentIdentity,\n lastPublishedOn: currentDateTime,\n lastPublishedBy: currentIdentity,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionSavedOn: currentDateTime,\n revisionModifiedOn: currentDateTime,\n revisionSavedBy: currentIdentity,\n revisionModifiedBy: currentIdentity,\n revisionFirstPublishedOn: originalEntry.revisionFirstPublishedOn || currentDateTime,\n revisionFirstPublishedBy: originalEntry.revisionFirstPublishedBy || currentIdentity,\n revisionLastPublishedOn: currentDateTime,\n revisionLastPublishedBy: currentIdentity,\n\n webinyVersion: context.WEBINY_VERSION,\n values\n };\n\n return { entry };\n};\n"],"mappings":";;;;;;AACA,IAAAA,uBAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAUO,MAAME,wBAAwB,GAAG,MAAAA,CAAO;EAC3CC,KAAK;EACLC,OAAO;EACPC,WAAW,EAAEC,mBAAmB;EAChCC;AAC4B,CAAC,KAE3B;EACF,MAAMC,MAAM,GAAG,MAAM,IAAAC,8CAAsB,EAAC;IACxCL,OAAO;IACPD,KAAK;IACLO,KAAK,EAAEH,aAAa,CAACC,MAAM;IAC3BG,eAAe,EAAE;EACrB,CAAC,CAAC;EAEF,MAAMC,eAAe,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAChD,MAAMC,eAAe,GAAGT,mBAAmB,CAAC,CAAC;EAE7C,MAAMU,KAAe,GAAG;IACpB,GAAGT,aAAa;IAChBU,MAAM,EAAEC,0BAAgB;IAExB;AACR;AACA;IACQC,OAAO,EAAEP,eAAe;IACxBQ,UAAU,EAAER,eAAe;IAC3BS,OAAO,EAAEN,eAAe;IACxBO,UAAU,EAAEP,eAAe;IAC3BQ,gBAAgB,EAAEhB,aAAa,CAACgB,gBAAgB,IAAIX,eAAe;IACnEY,gBAAgB,EAAEjB,aAAa,CAACiB,gBAAgB,IAAIT,eAAe;IACnEU,eAAe,EAAEb,eAAe;IAChCc,eAAe,EAAEX,eAAe;IAEhC;AACR;AACA;IACQY,eAAe,EAAEf,eAAe;IAChCgB,kBAAkB,EAAEhB,eAAe;IACnCiB,eAAe,EAAEd,eAAe;IAChCe,kBAAkB,EAAEf,eAAe;IACnCgB,wBAAwB,EAAExB,aAAa,CAACwB,wBAAwB,IAAInB,eAAe;IACnFoB,wBAAwB,EAAEzB,aAAa,CAACyB,wBAAwB,IAAIjB,eAAe;IACnFkB,uBAAuB,EAAErB,eAAe;IACxCsB,uBAAuB,EAAEnB,eAAe;IAExCoB,aAAa,EAAE/B,OAAO,CAACgC,cAAc;IACrC5B;EACJ,CAAC;EAED,OAAO;IAAEQ;EAAM,CAAC;AACpB,CAAC;AAACqB,OAAA,CAAAnC,wBAAA,GAAAA,wBAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CmsContext, CmsEntry, CmsModel } from "../../../types";
|
|
2
|
+
import { SecurityIdentity } from "@webiny/api-security/types";
|
|
3
|
+
declare type CreateRepublishEntryDataParams = {
|
|
4
|
+
model: CmsModel;
|
|
5
|
+
context: CmsContext;
|
|
6
|
+
getIdentity: () => SecurityIdentity;
|
|
7
|
+
originalEntry: CmsEntry;
|
|
8
|
+
};
|
|
9
|
+
export declare const createUnpublishEntryData: ({ getIdentity: getSecurityIdentity, originalEntry }: CreateRepublishEntryDataParams) => Promise<{
|
|
10
|
+
entry: CmsEntry;
|
|
11
|
+
}>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createUnpublishEntryData = void 0;
|
|
7
|
+
var _statuses = require("./statuses");
|
|
8
|
+
const createUnpublishEntryData = async ({
|
|
9
|
+
getIdentity: getSecurityIdentity,
|
|
10
|
+
originalEntry
|
|
11
|
+
}) => {
|
|
12
|
+
const currentDateTime = new Date().toISOString();
|
|
13
|
+
const currentIdentity = getSecurityIdentity();
|
|
14
|
+
const entry = {
|
|
15
|
+
...originalEntry,
|
|
16
|
+
status: _statuses.STATUS_UNPUBLISHED,
|
|
17
|
+
/**
|
|
18
|
+
* Entry-level meta fields. 👇
|
|
19
|
+
*/
|
|
20
|
+
savedOn: currentDateTime,
|
|
21
|
+
modifiedOn: currentDateTime,
|
|
22
|
+
savedBy: currentIdentity,
|
|
23
|
+
modifiedBy: currentIdentity,
|
|
24
|
+
/**
|
|
25
|
+
* Revision-level meta fields. 👇
|
|
26
|
+
*/
|
|
27
|
+
revisionSavedOn: currentDateTime,
|
|
28
|
+
revisionModifiedOn: currentDateTime,
|
|
29
|
+
revisionSavedBy: currentIdentity,
|
|
30
|
+
revisionModifiedBy: currentIdentity
|
|
31
|
+
};
|
|
32
|
+
return {
|
|
33
|
+
entry
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
exports.createUnpublishEntryData = createUnpublishEntryData;
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=createUnpublishEntryData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_statuses","require","createUnpublishEntryData","getIdentity","getSecurityIdentity","originalEntry","currentDateTime","Date","toISOString","currentIdentity","entry","status","STATUS_UNPUBLISHED","savedOn","modifiedOn","savedBy","modifiedBy","revisionSavedOn","revisionModifiedOn","revisionSavedBy","revisionModifiedBy","exports"],"sources":["createUnpublishEntryData.ts"],"sourcesContent":["import { CmsContext, CmsEntry, CmsModel } from \"~/types\";\nimport { STATUS_UNPUBLISHED } from \"./statuses\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\n\ntype CreateRepublishEntryDataParams = {\n model: CmsModel;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n originalEntry: CmsEntry;\n};\n\nexport const createUnpublishEntryData = async ({\n getIdentity: getSecurityIdentity,\n originalEntry\n}: CreateRepublishEntryDataParams): Promise<{\n entry: CmsEntry;\n}> => {\n const currentDateTime = new Date().toISOString();\n const currentIdentity = getSecurityIdentity();\n\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_UNPUBLISHED,\n\n /**\n * Entry-level meta fields. 👇\n */\n savedOn: currentDateTime,\n modifiedOn: currentDateTime,\n savedBy: currentIdentity,\n modifiedBy: currentIdentity,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionSavedOn: currentDateTime,\n revisionModifiedOn: currentDateTime,\n revisionSavedBy: currentIdentity,\n revisionModifiedBy: currentIdentity\n };\n\n return { entry };\n};\n"],"mappings":";;;;;;AACA,IAAAA,SAAA,GAAAC,OAAA;AAUO,MAAMC,wBAAwB,GAAG,MAAAA,CAAO;EAC3CC,WAAW,EAAEC,mBAAmB;EAChCC;AAC4B,CAAC,KAE3B;EACF,MAAMC,eAAe,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAChD,MAAMC,eAAe,GAAGL,mBAAmB,CAAC,CAAC;EAE7C,MAAMM,KAAe,GAAG;IACpB,GAAGL,aAAa;IAChBM,MAAM,EAAEC,4BAAkB;IAE1B;AACR;AACA;IACQC,OAAO,EAAEP,eAAe;IACxBQ,UAAU,EAAER,eAAe;IAC3BS,OAAO,EAAEN,eAAe;IACxBO,UAAU,EAAEP,eAAe;IAE3B;AACR;AACA;IACQQ,eAAe,EAAEX,eAAe;IAChCY,kBAAkB,EAAEZ,eAAe;IACnCa,eAAe,EAAEV,eAAe;IAChCW,kBAAkB,EAAEX;EACxB,CAAC;EAED,OAAO;IAAEC;EAAM,CAAC;AACpB,CAAC;AAACW,OAAA,CAAAnB,wBAAA,GAAAA,wBAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CmsContext, CmsEntry, CmsModel, UpdateCmsEntryInput, UpdateCmsEntryOptionsInput } from "../../../types";
|
|
2
|
+
import { SecurityIdentity } from "@webiny/api-security/types";
|
|
3
|
+
import { Tenant } from "@webiny/api-tenancy/types";
|
|
4
|
+
import { I18NLocale } from "@webiny/api-i18n/types";
|
|
5
|
+
declare type CreateEntryRevisionFromDataParams = {
|
|
6
|
+
metaInput?: Record<string, any>;
|
|
7
|
+
model: CmsModel;
|
|
8
|
+
rawInput: UpdateCmsEntryInput;
|
|
9
|
+
options?: UpdateCmsEntryOptionsInput;
|
|
10
|
+
context: CmsContext;
|
|
11
|
+
getIdentity: () => SecurityIdentity;
|
|
12
|
+
getTenant: () => Tenant;
|
|
13
|
+
getLocale: () => I18NLocale;
|
|
14
|
+
originalEntry: CmsEntry;
|
|
15
|
+
};
|
|
16
|
+
export declare const createUpdateEntryData: ({ model, rawInput, options, context, metaInput, getIdentity: getSecurityIdentity, originalEntry }: CreateEntryRevisionFromDataParams) => Promise<{
|
|
17
|
+
entry: CmsEntry;
|
|
18
|
+
input: Record<string, any>;
|
|
19
|
+
}>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createUpdateEntryData = void 0;
|
|
8
|
+
var _date = require("../../../utils/date");
|
|
9
|
+
var _identity = require("../../../utils/identity");
|
|
10
|
+
var _entryDataValidation = require("../entryDataValidation");
|
|
11
|
+
var _referenceFieldsMapping = require("../referenceFieldsMapping");
|
|
12
|
+
var _mapAndCleanUpdatedInputData = require("./mapAndCleanUpdatedInputData");
|
|
13
|
+
var _merge = _interopRequireDefault(require("lodash/merge"));
|
|
14
|
+
var _utils = require("@webiny/utils");
|
|
15
|
+
const createUpdateEntryData = async ({
|
|
16
|
+
model,
|
|
17
|
+
rawInput,
|
|
18
|
+
options,
|
|
19
|
+
context,
|
|
20
|
+
metaInput,
|
|
21
|
+
getIdentity: getSecurityIdentity,
|
|
22
|
+
originalEntry
|
|
23
|
+
}) => {
|
|
24
|
+
/**
|
|
25
|
+
* Make sure we only work with fields that are defined in the model.
|
|
26
|
+
*/
|
|
27
|
+
const input = (0, _mapAndCleanUpdatedInputData.mapAndCleanUpdatedInputData)(model, rawInput);
|
|
28
|
+
await (0, _entryDataValidation.validateModelEntryDataOrThrow)({
|
|
29
|
+
context,
|
|
30
|
+
model,
|
|
31
|
+
data: input,
|
|
32
|
+
entry: originalEntry,
|
|
33
|
+
skipValidators: options?.skipValidators
|
|
34
|
+
});
|
|
35
|
+
const initialValues = {
|
|
36
|
+
/**
|
|
37
|
+
* Existing values from the database, transformed back to original, of course.
|
|
38
|
+
*/
|
|
39
|
+
...originalEntry.values,
|
|
40
|
+
/**
|
|
41
|
+
* Add new values.
|
|
42
|
+
*/
|
|
43
|
+
...input
|
|
44
|
+
};
|
|
45
|
+
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
46
|
+
context,
|
|
47
|
+
model,
|
|
48
|
+
input: initialValues,
|
|
49
|
+
validateEntries: false
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* If users wants to remove a key from meta values, they need to send meta key with the null value.
|
|
54
|
+
*/
|
|
55
|
+
const meta = createEntryMeta(metaInput, originalEntry.meta);
|
|
56
|
+
const currentIdentity = getSecurityIdentity();
|
|
57
|
+
const currentDateTime = new Date();
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* We always send the full entry to the hooks and storage operations update.
|
|
61
|
+
*/
|
|
62
|
+
const entry = {
|
|
63
|
+
...originalEntry,
|
|
64
|
+
/**
|
|
65
|
+
* Revision-level meta fields. 👇
|
|
66
|
+
*/
|
|
67
|
+
revisionCreatedOn: (0, _date.getDate)(rawInput.revisionCreatedOn, originalEntry.revisionCreatedOn),
|
|
68
|
+
revisionModifiedOn: (0, _date.getDate)(rawInput.revisionModifiedOn, currentDateTime),
|
|
69
|
+
revisionSavedOn: (0, _date.getDate)(rawInput.revisionSavedOn, currentDateTime),
|
|
70
|
+
revisionFirstPublishedOn: (0, _date.getDate)(rawInput.revisionFirstPublishedOn, originalEntry.revisionFirstPublishedOn),
|
|
71
|
+
revisionLastPublishedOn: (0, _date.getDate)(rawInput.revisionLastPublishedOn, originalEntry.revisionLastPublishedOn),
|
|
72
|
+
revisionCreatedBy: (0, _identity.getIdentity)(rawInput.revisionCreatedBy, originalEntry.revisionCreatedBy),
|
|
73
|
+
revisionModifiedBy: (0, _identity.getIdentity)(rawInput.revisionModifiedBy, currentIdentity),
|
|
74
|
+
revisionSavedBy: (0, _identity.getIdentity)(rawInput.revisionSavedBy, currentIdentity),
|
|
75
|
+
revisionFirstPublishedBy: (0, _identity.getIdentity)(rawInput.revisionFirstPublishedBy, originalEntry.revisionFirstPublishedBy),
|
|
76
|
+
revisionLastPublishedBy: (0, _identity.getIdentity)(rawInput.revisionLastPublishedBy, originalEntry.revisionLastPublishedBy),
|
|
77
|
+
/**
|
|
78
|
+
* Entry-level meta fields. 👇
|
|
79
|
+
* If required, within storage operations, these entry-level updates
|
|
80
|
+
* will be propagated to the latest revision too.
|
|
81
|
+
*/
|
|
82
|
+
createdOn: (0, _date.getDate)(rawInput.createdOn, originalEntry.createdOn),
|
|
83
|
+
savedOn: (0, _date.getDate)(rawInput.savedOn, currentDateTime),
|
|
84
|
+
modifiedOn: (0, _date.getDate)(rawInput.modifiedOn, currentDateTime),
|
|
85
|
+
firstPublishedOn: (0, _date.getDate)(rawInput.firstPublishedOn, originalEntry.firstPublishedOn),
|
|
86
|
+
lastPublishedOn: (0, _date.getDate)(rawInput.lastPublishedOn, originalEntry.lastPublishedOn),
|
|
87
|
+
createdBy: (0, _identity.getIdentity)(rawInput.createdBy, originalEntry.createdBy),
|
|
88
|
+
savedBy: (0, _identity.getIdentity)(rawInput.savedBy, currentIdentity),
|
|
89
|
+
modifiedBy: (0, _identity.getIdentity)(rawInput.modifiedBy, currentIdentity),
|
|
90
|
+
firstPublishedBy: (0, _identity.getIdentity)(rawInput.firstPublishedBy, originalEntry.firstPublishedBy),
|
|
91
|
+
lastPublishedBy: (0, _identity.getIdentity)(rawInput.lastPublishedBy, originalEntry.lastPublishedBy),
|
|
92
|
+
values,
|
|
93
|
+
meta,
|
|
94
|
+
status: transformEntryStatus(originalEntry.status)
|
|
95
|
+
};
|
|
96
|
+
const folderId = rawInput.wbyAco_location?.folderId;
|
|
97
|
+
if (folderId) {
|
|
98
|
+
entry.location = {
|
|
99
|
+
folderId
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
entry,
|
|
104
|
+
input
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* This method takes original entry meta and new input.
|
|
110
|
+
* When new meta is merged onto the existing one, everything that has undefined or null value is removed.
|
|
111
|
+
*/
|
|
112
|
+
exports.createUpdateEntryData = createUpdateEntryData;
|
|
113
|
+
const createEntryMeta = (input, original) => {
|
|
114
|
+
const meta = (0, _merge.default)(original || {}, input || {});
|
|
115
|
+
return (0, _utils.removeUndefinedValues)((0, _utils.removeNullValues)(meta));
|
|
116
|
+
};
|
|
117
|
+
const allowedEntryStatus = ["draft", "published", "unpublished"];
|
|
118
|
+
const transformEntryStatus = status => {
|
|
119
|
+
return allowedEntryStatus.includes(status) ? status : "draft";
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
//# sourceMappingURL=createUpdateEntryData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_date","require","_identity","_entryDataValidation","_referenceFieldsMapping","_mapAndCleanUpdatedInputData","_merge","_interopRequireDefault","_utils","createUpdateEntryData","model","rawInput","options","context","metaInput","getIdentity","getSecurityIdentity","originalEntry","input","mapAndCleanUpdatedInputData","validateModelEntryDataOrThrow","data","entry","skipValidators","initialValues","values","referenceFieldsMapping","validateEntries","meta","createEntryMeta","currentIdentity","currentDateTime","Date","revisionCreatedOn","getDate","revisionModifiedOn","revisionSavedOn","revisionFirstPublishedOn","revisionLastPublishedOn","revisionCreatedBy","revisionModifiedBy","revisionSavedBy","revisionFirstPublishedBy","revisionLastPublishedBy","createdOn","savedOn","modifiedOn","firstPublishedOn","lastPublishedOn","createdBy","savedBy","modifiedBy","firstPublishedBy","lastPublishedBy","status","transformEntryStatus","folderId","wbyAco_location","location","exports","original","lodashMerge","removeUndefinedValues","removeNullValues","allowedEntryStatus","includes"],"sources":["createUpdateEntryData.ts"],"sourcesContent":["import {\n CmsContext,\n CmsEntry,\n CmsEntryStatus,\n CmsModel,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput\n} from \"~/types\";\nimport { getDate } from \"~/utils/date\";\nimport { getIdentity } from \"~/utils/identity\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { validateModelEntryDataOrThrow } from \"../entryDataValidation\";\nimport { referenceFieldsMapping } from \"../referenceFieldsMapping\";\nimport { mapAndCleanUpdatedInputData } from \"./mapAndCleanUpdatedInputData\";\nimport lodashMerge from \"lodash/merge\";\nimport { removeNullValues, removeUndefinedValues } from \"@webiny/utils\";\n\ntype CreateEntryRevisionFromDataParams = {\n metaInput?: Record<string, any>;\n model: CmsModel;\n rawInput: UpdateCmsEntryInput;\n options?: UpdateCmsEntryOptionsInput;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n originalEntry: CmsEntry;\n};\n\nexport const createUpdateEntryData = async ({\n model,\n rawInput,\n options,\n context,\n metaInput,\n getIdentity: getSecurityIdentity,\n originalEntry\n}: CreateEntryRevisionFromDataParams): Promise<{\n entry: CmsEntry;\n input: Record<string, any>;\n}> => {\n /**\n * Make sure we only work with fields that are defined in the model.\n */\n const input = mapAndCleanUpdatedInputData(model, rawInput);\n\n await validateModelEntryDataOrThrow({\n context,\n model,\n data: input,\n entry: originalEntry,\n skipValidators: options?.skipValidators\n });\n\n const initialValues = {\n /**\n * Existing values from the database, transformed back to original, of course.\n */\n ...originalEntry.values,\n /**\n * Add new values.\n */\n ...input\n };\n\n const values = await referenceFieldsMapping({\n context,\n model,\n input: initialValues,\n validateEntries: false\n });\n\n /**\n * If users wants to remove a key from meta values, they need to send meta key with the null value.\n */\n const meta = createEntryMeta(metaInput, originalEntry.meta);\n\n const currentIdentity = getSecurityIdentity();\n const currentDateTime = new Date();\n\n /**\n * We always send the full entry to the hooks and storage operations update.\n */\n const entry: CmsEntry = {\n ...originalEntry,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, originalEntry.revisionCreatedOn),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, currentDateTime),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionFirstPublishedOn: getDate(\n rawInput.revisionFirstPublishedOn,\n originalEntry.revisionFirstPublishedOn\n ),\n revisionLastPublishedOn: getDate(\n rawInput.revisionLastPublishedOn,\n originalEntry.revisionLastPublishedOn\n ),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, originalEntry.revisionCreatedBy),\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, currentIdentity),\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n originalEntry.revisionFirstPublishedBy\n ),\n revisionLastPublishedBy: getIdentity(\n rawInput.revisionLastPublishedBy,\n originalEntry.revisionLastPublishedBy\n ),\n\n /**\n * Entry-level meta fields. 👇\n * If required, within storage operations, these entry-level updates\n * will be propagated to the latest revision too.\n */\n createdOn: getDate(rawInput.createdOn, originalEntry.createdOn),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, currentDateTime),\n firstPublishedOn: getDate(rawInput.firstPublishedOn, originalEntry.firstPublishedOn),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, originalEntry.lastPublishedOn),\n createdBy: getIdentity(rawInput.createdBy, originalEntry.createdBy),\n savedBy: getIdentity(rawInput.savedBy, currentIdentity),\n modifiedBy: getIdentity(rawInput.modifiedBy, currentIdentity),\n firstPublishedBy: getIdentity(rawInput.firstPublishedBy, originalEntry.firstPublishedBy),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, originalEntry.lastPublishedBy),\n\n values,\n meta,\n status: transformEntryStatus(originalEntry.status)\n };\n\n const folderId = rawInput.wbyAco_location?.folderId;\n if (folderId) {\n entry.location = {\n folderId\n };\n }\n\n return { entry, input };\n};\n\n/**\n * This method takes original entry meta and new input.\n * When new meta is merged onto the existing one, everything that has undefined or null value is removed.\n */\nconst createEntryMeta = (input?: Record<string, any>, original?: Record<string, any>) => {\n const meta = lodashMerge(original || {}, input || {});\n return removeUndefinedValues(removeNullValues(meta));\n};\n\nconst allowedEntryStatus: string[] = [\"draft\", \"published\", \"unpublished\"];\n\nconst transformEntryStatus = (status: CmsEntryStatus | string): CmsEntryStatus => {\n return allowedEntryStatus.includes(status) ? (status as CmsEntryStatus) : \"draft\";\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./createEntryData";
|
|
2
|
+
export * from "./createEntryRevisionFromData";
|
|
3
|
+
export * from "./createPublishEntryData";
|
|
4
|
+
export * from "./createRepublishEntryData";
|
|
5
|
+
export * from "./createUnpublishEntryData";
|
|
6
|
+
export * from "./createUpdateEntryData";
|
|
7
|
+
export * from "./statuses";
|
|
8
|
+
export * from "./mapAndCleanUpdatedInputData";
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _createEntryData = require("./createEntryData");
|
|
7
|
+
Object.keys(_createEntryData).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _createEntryData[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _createEntryData[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _createEntryRevisionFromData = require("./createEntryRevisionFromData");
|
|
18
|
+
Object.keys(_createEntryRevisionFromData).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _createEntryRevisionFromData[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _createEntryRevisionFromData[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
var _createPublishEntryData = require("./createPublishEntryData");
|
|
29
|
+
Object.keys(_createPublishEntryData).forEach(function (key) {
|
|
30
|
+
if (key === "default" || key === "__esModule") return;
|
|
31
|
+
if (key in exports && exports[key] === _createPublishEntryData[key]) return;
|
|
32
|
+
Object.defineProperty(exports, key, {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () {
|
|
35
|
+
return _createPublishEntryData[key];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
var _createRepublishEntryData = require("./createRepublishEntryData");
|
|
40
|
+
Object.keys(_createRepublishEntryData).forEach(function (key) {
|
|
41
|
+
if (key === "default" || key === "__esModule") return;
|
|
42
|
+
if (key in exports && exports[key] === _createRepublishEntryData[key]) return;
|
|
43
|
+
Object.defineProperty(exports, key, {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () {
|
|
46
|
+
return _createRepublishEntryData[key];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
var _createUnpublishEntryData = require("./createUnpublishEntryData");
|
|
51
|
+
Object.keys(_createUnpublishEntryData).forEach(function (key) {
|
|
52
|
+
if (key === "default" || key === "__esModule") return;
|
|
53
|
+
if (key in exports && exports[key] === _createUnpublishEntryData[key]) return;
|
|
54
|
+
Object.defineProperty(exports, key, {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _createUnpublishEntryData[key];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
var _createUpdateEntryData = require("./createUpdateEntryData");
|
|
62
|
+
Object.keys(_createUpdateEntryData).forEach(function (key) {
|
|
63
|
+
if (key === "default" || key === "__esModule") return;
|
|
64
|
+
if (key in exports && exports[key] === _createUpdateEntryData[key]) return;
|
|
65
|
+
Object.defineProperty(exports, key, {
|
|
66
|
+
enumerable: true,
|
|
67
|
+
get: function () {
|
|
68
|
+
return _createUpdateEntryData[key];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
var _statuses = require("./statuses");
|
|
73
|
+
Object.keys(_statuses).forEach(function (key) {
|
|
74
|
+
if (key === "default" || key === "__esModule") return;
|
|
75
|
+
if (key in exports && exports[key] === _statuses[key]) return;
|
|
76
|
+
Object.defineProperty(exports, key, {
|
|
77
|
+
enumerable: true,
|
|
78
|
+
get: function () {
|
|
79
|
+
return _statuses[key];
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
var _mapAndCleanUpdatedInputData = require("./mapAndCleanUpdatedInputData");
|
|
84
|
+
Object.keys(_mapAndCleanUpdatedInputData).forEach(function (key) {
|
|
85
|
+
if (key === "default" || key === "__esModule") return;
|
|
86
|
+
if (key in exports && exports[key] === _mapAndCleanUpdatedInputData[key]) return;
|
|
87
|
+
Object.defineProperty(exports, key, {
|
|
88
|
+
enumerable: true,
|
|
89
|
+
get: function () {
|
|
90
|
+
return _mapAndCleanUpdatedInputData[key];
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_createEntryData","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_createEntryRevisionFromData","_createPublishEntryData","_createRepublishEntryData","_createUnpublishEntryData","_createUpdateEntryData","_statuses","_mapAndCleanUpdatedInputData"],"sources":["index.ts"],"sourcesContent":["export * from \"./createEntryData\";\nexport * from \"./createEntryRevisionFromData\";\nexport * from \"./createPublishEntryData\";\nexport * from \"./createRepublishEntryData\";\nexport * from \"./createUnpublishEntryData\";\nexport * from \"./createUpdateEntryData\";\nexport * from \"./statuses\";\nexport * from \"./mapAndCleanUpdatedInputData\";\n"],"mappings":"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"}
|