UNPKG

datocms-structured-text-to-html-string

Version:
141 lines 9.83 kB
"use strict"; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.renderRule = exports.render = exports.defaultAdapter = exports.RenderError = exports.renderMarkRule = exports.renderNodeRule = void 0; var datocms_structured_text_generic_html_renderer_1 = require("datocms-structured-text-generic-html-renderer"); Object.defineProperty(exports, "renderMarkRule", { enumerable: true, get: function () { return datocms_structured_text_generic_html_renderer_1.renderMarkRule; } }); Object.defineProperty(exports, "renderNodeRule", { enumerable: true, get: function () { return datocms_structured_text_generic_html_renderer_1.renderNodeRule; } }); Object.defineProperty(exports, "renderRule", { enumerable: true, get: function () { return datocms_structured_text_generic_html_renderer_1.renderNodeRule; } }); var datocms_structured_text_utils_1 = require("datocms-structured-text-utils"); Object.defineProperty(exports, "RenderError", { enumerable: true, get: function () { return datocms_structured_text_utils_1.RenderError; } }); var vhtml_1 = __importDefault(require("vhtml")); var vhtmlAdapter = function (tagName, attrs) { // eslint-disable-next-line @typescript-eslint/no-explicit-any var children = []; for ( // eslint-disable-next-line @typescript-eslint/no-explicit-any var _i = 2; // eslint-disable-next-line @typescript-eslint/no-explicit-any _i < arguments.length; // eslint-disable-next-line @typescript-eslint/no-explicit-any _i++) { // eslint-disable-next-line @typescript-eslint/no-explicit-any children[_i - 2] = arguments[_i]; } if (attrs) { delete attrs.key; } return vhtml_1.default.apply(void 0, __spreadArrays([tagName, attrs], children)); }; exports.defaultAdapter = { renderNode: vhtmlAdapter, renderFragment: function (children) { return vhtmlAdapter(null, null, children); }, renderText: function (text) { return text; }, }; function render( /** The actual field value you get from DatoCMS **/ structuredTextOrNode, /** Additional render settings **/ settings) { var renderInlineRecord = settings === null || settings === void 0 ? void 0 : settings.renderInlineRecord; var renderLinkToRecord = settings === null || settings === void 0 ? void 0 : settings.renderLinkToRecord; var renderBlock = settings === null || settings === void 0 ? void 0 : settings.renderBlock; var renderInlineBlock = settings === null || settings === void 0 ? void 0 : settings.renderInlineBlock; var customRules = (settings === null || settings === void 0 ? void 0 : settings.customNodeRules) || (settings === null || settings === void 0 ? void 0 : settings.customRules) || []; var result = datocms_structured_text_generic_html_renderer_1.render(structuredTextOrNode, { adapter: { renderText: (settings === null || settings === void 0 ? void 0 : settings.renderText) || exports.defaultAdapter.renderText, renderNode: (settings === null || settings === void 0 ? void 0 : settings.renderNode) || exports.defaultAdapter.renderNode, renderFragment: (settings === null || settings === void 0 ? void 0 : settings.renderFragment) || exports.defaultAdapter.renderFragment, }, customMarkRules: settings === null || settings === void 0 ? void 0 : settings.customMarkRules, metaTransformer: settings === null || settings === void 0 ? void 0 : settings.metaTransformer, customNodeRules: __spreadArrays(customRules, [ datocms_structured_text_generic_html_renderer_1.renderNodeRule(datocms_structured_text_utils_1.isInlineItem, function (_a) { var node = _a.node, adapter = _a.adapter; if (!renderInlineRecord) { throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains an 'inlineItem' node, but no 'renderInlineRecord' option is specified!", node); } if (!datocms_structured_text_utils_1.isStructuredText(structuredTextOrNode) || !structuredTextOrNode.links) { throw new datocms_structured_text_utils_1.RenderError("The document contains an 'inlineItem' node, but the passed value is not a Structured Text GraphQL response, or .links is not present!", node); } var item = structuredTextOrNode.links.find(function (item) { return item.id === node.item; }); if (!item) { throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains an 'inlineItem' node, but cannot find a record with ID " + node.item + " inside .links!", node); } return renderInlineRecord({ record: item, adapter: adapter }); }), datocms_structured_text_generic_html_renderer_1.renderNodeRule(datocms_structured_text_utils_1.isItemLink, function (_a) { var node = _a.node, children = _a.children, adapter = _a.adapter; if (!renderLinkToRecord) { throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains an 'itemLink' node, but no 'renderLinkToRecord' option is specified!", node); } if (!datocms_structured_text_utils_1.isStructuredText(structuredTextOrNode) || !structuredTextOrNode.links) { throw new datocms_structured_text_utils_1.RenderError("The document contains an 'itemLink' node, but the passed value is not a Structured Text GraphQL response, or .links is not present!", node); } var item = structuredTextOrNode.links.find(function (item) { return item.id === node.item; }); if (!item) { throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains an 'itemLink' node, but cannot find a record with ID " + node.item + " inside .links!", node); } return renderLinkToRecord({ record: item, adapter: adapter, // eslint-disable-next-line @typescript-eslint/no-explicit-any children: children, transformedMeta: node.meta ? ((settings === null || settings === void 0 ? void 0 : settings.metaTransformer) || datocms_structured_text_generic_html_renderer_1.defaultMetaTransformer)({ node: node, meta: node.meta, }) : null, }); }), datocms_structured_text_generic_html_renderer_1.renderNodeRule(datocms_structured_text_utils_1.isBlock, function (_a) { var node = _a.node, adapter = _a.adapter; if (!renderBlock) { throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains a 'block' node, but no 'renderBlock' option is specified!", node); } if (!datocms_structured_text_utils_1.isStructuredText(structuredTextOrNode) || !structuredTextOrNode.blocks) { throw new datocms_structured_text_utils_1.RenderError("The document contains a 'block' node, but the passed value is not a Structured Text GraphQL response, or .blocks is not present!", node); } var item = structuredTextOrNode.blocks.find(function (item) { return item.id === node.item; }); if (!item) { throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains a 'block' node, but cannot find a record with ID " + node.item + " inside .blocks!", node); } return renderBlock({ record: item, adapter: adapter }); }), datocms_structured_text_generic_html_renderer_1.renderNodeRule(datocms_structured_text_utils_1.isInlineBlock, function (_a) { var node = _a.node, adapter = _a.adapter; if (!renderInlineBlock) { throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains an 'inlineBlock' node, but no 'renderInlineBlock' option is specified!", node); } if (!datocms_structured_text_utils_1.isStructuredText(structuredTextOrNode) || !structuredTextOrNode.inlineBlocks) { throw new datocms_structured_text_utils_1.RenderError("The document contains an 'inlineBlock' node, but the passed value is not a Structured Text GraphQL response, or .inlineBlocks is not present!", node); } var item = structuredTextOrNode.inlineBlocks.find(function (item) { return item.id === node.item; }); if (!item) { throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains an 'inlineBlock' node, but cannot find a record with ID " + node.item + " inside .inlineBlocks!", node); } return renderInlineBlock({ record: item, adapter: adapter }); }), ]), }); return result || null; } exports.render = render; //# sourceMappingURL=index.js.map