@webiny/api-headless-cms-ddb-es
Version:
DynamoDB and Elasticsearch storage operations plugin for Headless CMS API.
127 lines (125 loc) • 4.49 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createTransformer = void 0;
var _transformEntryKeys = require("./transformEntryKeys");
var _transformEntryToIndex = require("./transformEntryToIndex");
var _plugins = require("../../../plugins");
var _modifyEntryValues = require("./modifyEntryValues");
var _apiElasticsearch = require("@webiny/api-elasticsearch");
var _recordType = require("../recordType");
var _error = _interopRequireDefault(require("@webiny/error"));
const createTransformer = params => {
const {
plugins,
model,
entry: baseEntry,
storageEntry: baseStorageEntry,
transformedToIndex: initialTransformedEntryToIndex = undefined
} = params;
let transformedEntryKeys = undefined;
let transformedEntryToIndex = initialTransformedEntryToIndex;
let modifiedEntryValues = undefined;
let elasticsearchLatestEntry = undefined;
let elasticsearchPublishedEntry = undefined;
const modifierPlugins = plugins.byType(_plugins.CmsEntryElasticsearchValuesModifier.type).filter(pl => pl.canModify(model.modelId));
const modifyEntryValues = () => {
if (initialTransformedEntryToIndex || !baseEntry) {
throw new _error.default(`Should not call the "modifyEntryValues" when "transformedToIndex" is provided.`, "METHOD_NOT_ALLOWED", {
entry: initialTransformedEntryToIndex
});
}
if (modifiedEntryValues) {
return modifiedEntryValues;
}
const modifiedEntry = (0, _modifyEntryValues.modifyEntryValues)({
plugins: modifierPlugins,
model,
entry: baseEntry
});
const modifiedStorageEntry = (0, _modifyEntryValues.modifyEntryValues)({
plugins: modifierPlugins,
model,
entry: baseStorageEntry
});
return modifiedEntryValues = (0, _transformEntryKeys.transformEntryKeys)({
model,
entry: modifiedEntry,
storageEntry: modifiedStorageEntry
});
};
return {
transformEntryKeys: function () {
if (initialTransformedEntryToIndex || !baseEntry) {
throw new _error.default(`Should not call the "modifyEntryValues" when "transformedToIndex" is provided.`, "METHOD_NOT_ALLOWED", {
entry: initialTransformedEntryToIndex
});
}
if (transformedEntryKeys) {
return transformedEntryKeys;
}
return transformedEntryKeys = (0, _transformEntryKeys.transformEntryKeys)({
model,
entry: baseEntry,
storageEntry: baseStorageEntry
});
},
transformToIndex: function () {
if (transformedEntryToIndex) {
return transformedEntryToIndex;
}
let entry;
let storageEntry;
/**
* In case there are value modifier plugins, we need to
* - run modifiers
* - transform keys
*/
if (modifierPlugins.length > 0) {
const result = modifyEntryValues();
entry = result.entry;
storageEntry = result.storageEntry;
}
// In case there are no modifier plugins, just transform the keys - or used already transformed.
else {
const result = this.transformEntryKeys();
entry = result.entry;
storageEntry = result.storageEntry;
}
return transformedEntryToIndex = (0, _transformEntryToIndex.transformEntryToIndex)({
plugins,
model,
entry,
storageEntry
});
},
getElasticsearchLatestEntryData: async function () {
if (elasticsearchLatestEntry) {
return elasticsearchLatestEntry;
}
const entry = this.transformToIndex();
return elasticsearchLatestEntry = await (0, _apiElasticsearch.compress)(plugins, {
...entry,
latest: true,
TYPE: (0, _recordType.createLatestRecordType)(),
__type: (0, _recordType.createLatestRecordType)()
});
},
getElasticsearchPublishedEntryData: async function () {
if (elasticsearchPublishedEntry) {
return elasticsearchPublishedEntry;
}
const entry = this.transformToIndex();
return elasticsearchPublishedEntry = await (0, _apiElasticsearch.compress)(plugins, {
...entry,
published: true,
TYPE: (0, _recordType.createPublishedRecordType)(),
__type: (0, _recordType.createPublishedRecordType)()
});
}
};
};
exports.createTransformer = createTransformer;
//# sourceMappingURL=index.js.map