UNPKG

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

Version:

DynamoDB and Elasticsearch storage operations plugin for Headless CMS API.

107 lines (105 loc) 3.23 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.createRichTextStorageTransformPlugin = void 0; var _jsonpack = _interopRequireDefault(require("jsonpack")); var _error = _interopRequireDefault(require("@webiny/error")); var _apiHeadlessCms = require("@webiny/api-headless-cms"); /** * Remove when jsonpack gets PR with a fix merged * https://github.com/rgcl/jsonpack/pull/25/files * NOTE 2021-07-28: it seems PR is not going to be merged so keep this. */ // TODO @ts-refactor figure better type const transformArray = value => { if (!value) { return value; } let isArray = Array.isArray(value); const shouldBeArray = value instanceof Array === false && isArray; if (shouldBeArray) { value = Array.from(value); isArray = true; } if (typeof value === "object" || isArray) { for (const k in value) { value[k] = transformArray(value[k]); } } return value; }; const createRichTextStorageTransformPlugin = () => { const plugin = new _apiHeadlessCms.StorageTransformPlugin({ name: "headless-cms.storage-transform.rich-text.default", fieldType: "rich-text", fromStorage: async ({ field, value: storageValue }) => { if (!storageValue) { return storageValue; } else if (typeof storageValue !== "object") { throw new _error.default(`RichText value received in "fromStorage" function is not an object in field "${field.storageId}".`); } /** * This is to circumvent a bug introduced with 5.8.0 storage operations. * Do not remove. */ if (!storageValue["compression"]) { return storageValue; } const { compression, value } = storageValue; if (compression !== "jsonpack") { throw new _error.default(`This plugin cannot transform something not packed with "jsonpack".`, "WRONG_COMPRESSION", { compression }); } /** * No point in going further if no value. */ if (!value) { return null; } try { return _jsonpack.default.unpack(value); } catch (ex) { return null; } }, toStorage: async ({ value }) => { /** * There is a possibility that we are trying to compress already compressed value. * Introduced a bug with 5.8.0 storage operations, so just return the value to correct it. */ if (!!value?.compression) { return value; } value = transformArray(value); let jsonValue = null; try { jsonValue = _jsonpack.default.pack(value); } catch (ex) { if (process.env.DEBUG !== "true") { return null; } console.log("Error while compressing rich-text."); console.log(ex.message); } return { compression: "jsonpack", value: jsonValue }; } }); plugin.name = `headless-cms.dynamodb.storageTransform.rich-text`; return plugin; }; exports.createRichTextStorageTransformPlugin = createRichTextStorageTransformPlugin; //# sourceMappingURL=richText.js.map