UNPKG

@webiny/api-headless-cms-ddb-es

Version:

DynamoDB and Elasticsearch storage operations plugin for Headless CMS API.

127 lines (125 loc) 4.49 kB
"use strict"; 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