@becklyn/contentful-adapter
Version:
[](https://github.com/Becklyn-Studios/contentful-adapter/actions/workflows/ci.yml)
113 lines (112 loc) • 4.38 kB
JavaScript
;
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;