datocms-structured-text-to-plain-text
Version:
Convert DatoCMS Structured Text field to plain text
137 lines • 8.34 kB
JavaScript
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;
};
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 renderFragment = function (children) {
if (!children) {
return '';
}
var sanitizedChildren = children
.reduce(function (acc, child) {
return Array.isArray(child) ? __spreadArrays(acc, child) : __spreadArrays(acc, [child]);
}, [])
.filter(function (x) { return !!x; });
if (!sanitizedChildren || sanitizedChildren.length === 0) {
return '';
}
return sanitizedChildren.join('');
};
exports.defaultAdapter = {
renderNode: function (tagName, attrs) {
var children = [];
for (var _i = 2; _i < arguments.length; _i++) {
children[_i - 2] = arguments[_i];
}
// inline nodes
if (['a', 'em', 'u', 'del', 'mark', 'code', 'strong'].includes(tagName)) {
return renderFragment(children);
}
// block nodes
return renderFragment(children) + "\n";
},
renderFragment: renderFragment,
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 renderFragment = (settings === null || settings === void 0 ? void 0 : settings.renderFragment) || exports.defaultAdapter.renderFragment;
var renderText = (settings === null || settings === void 0 ? void 0 : settings.renderText) || exports.defaultAdapter.renderText;
var renderNode = (settings === null || settings === void 0 ? void 0 : settings.renderNode) || exports.defaultAdapter.renderNode;
var result = datocms_structured_text_generic_html_renderer_1.render(structuredTextOrNode, {
adapter: {
renderText: renderText,
renderNode: renderNode,
renderFragment: renderFragment,
},
metaTransformer: settings === null || settings === void 0 ? void 0 : settings.metaTransformer,
customMarkRules: settings === null || settings === void 0 ? void 0 : settings.customMarkRules,
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 ||
!datocms_structured_text_utils_1.isStructuredText(structuredTextOrNode) ||
!structuredTextOrNode.links) {
return null;
}
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, adapter = _a.adapter, children = _a.children;
if (!renderLinkToRecord ||
!datocms_structured_text_utils_1.isStructuredText(structuredTextOrNode) ||
!structuredTextOrNode.links) {
return renderFragment(children);
}
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 ||
!datocms_structured_text_utils_1.isStructuredText(structuredTextOrNode) ||
!structuredTextOrNode.blocks) {
return null;
}
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 ||
!datocms_structured_text_utils_1.isStructuredText(structuredTextOrNode) ||
!structuredTextOrNode.inlineBlocks) {
return null;
}
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 ? result.trim() : null;
}
exports.render = render;
//# sourceMappingURL=index.js.map
;