UNPKG

@becklyn/contentful-adapter

Version:

[![CI](https://github.com/Becklyn-Studios/contentful-adapter/actions/workflows/ci.yml/badge.svg)](https://github.com/Becklyn-Studios/contentful-adapter/actions/workflows/ci.yml)

113 lines (112 loc) 4.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRteData = exports.addAssetToReferenceList = void 0; const rich_text_html_renderer_1 = require("@contentful/rich-text-html-renderer"); const rich_text_types_1 = require("@contentful/rich-text-types"); const reference_1 = require("./reference"); const asset_1 = require("./asset"); const safe_json_stringify_1 = __importDefault(require("safe-json-stringify")); const normalizer_1 = require("./normalizer"); const addAssetToReferenceList = async (references, data, service) => { if (!data || !data.target || !data.target.sys || !data.target.sys.id) { return references; } const id = data.target.sys.id; if (references[id]) { return references; } const asset = await (0, asset_1.normalizeAssetData)(data.target, service); if (null === asset) { return references; } references[id] = asset; return references; }; exports.addAssetToReferenceList = addAssetToReferenceList; const addReferenceToReferenceList = async (references, data, service) => { if (!data || !data.target || !data.target.sys) { return references; } const id = data.target.sys.id; if (references[id]) { return references; } const reference = await (0, reference_1.normalizeReference)(data.target, service); if (null === reference) { return references; } references[id] = reference; return references; }; const addEntryToEntryList = async (entries, data, service) => { if (!data || !data.target || !data.target.sys) { return entries; } const id = data.target.sys.id; if (entries[id]) { return entries; } const entry = await (0, normalizer_1.normalizeData)(data.target, service); if (null === entry) { return entries; } entries[id] = entry; return entries; }; const getRteData = async (data, service) => { if (!data) { return null; } let assetReferences = []; let linkReferences = []; let entryReferences = []; (0, rich_text_html_renderer_1.documentToHtmlString)(data, { renderNode: { [rich_text_types_1.INLINES.ASSET_HYPERLINK]: node => { assetReferences = [...assetReferences, node.data]; return ""; }, [rich_text_types_1.INLINES.ENTRY_HYPERLINK]: node => { var _a, _b, _c, _d, _e; // @todo: maybe remove again after absolute slug optimization if ("internalReference" === ((_e = (_d = (_c = (_b = (_a = node.data) === null || _a === void 0 ? void 0 : _a.target) === null || _b === void 0 ? void 0 : _b.sys) === null || _c === void 0 ? void 0 : _c.contentType) === null || _d === void 0 ? void 0 : _d.sys) === null || _e === void 0 ? void 0 : _e.id)) { delete node.data.target.fields; } linkReferences = [...linkReferences, node.data]; return ""; }, [rich_text_types_1.INLINES.EMBEDDED_ENTRY]: node => { entryReferences = [...entryReferences, node.data]; return ""; }, [rich_text_types_1.BLOCKS.EMBEDDED_ENTRY]: node => { entryReferences = [...entryReferences, node.data]; return ""; }, [rich_text_types_1.BLOCKS.EMBEDDED_ASSET]: node => { assetReferences = [...assetReferences, node.data]; return ""; }, }, }); let references = {}; let entries = {}; for (let i = 0; i < assetReferences.length; i++) { references = await (0, exports.addAssetToReferenceList)(references, assetReferences[i], service); } for (let i = 0; i < linkReferences.length; i++) { references = await addReferenceToReferenceList(references, linkReferences[i], service); } for (let i = 0; i < entryReferences.length; i++) { entries = await addEntryToEntryList(entries, entryReferences[i], service); } return { json: JSON.parse((0, safe_json_stringify_1.default)(data)), references, entries, }; }; exports.getRteData = getRteData;