datocms-structured-text-generic-html-renderer
Advanced tools
Comparing version 1.2.3-alpha.3 to 1.3.0
@@ -21,5 +21,5 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.render = exports.defaultMetaTransformer = exports.markToTagName = exports.RenderError = exports.renderRule = void 0; | ||
exports.render = exports.defaultMetaTransformer = exports.spanNodeRenderRule = exports.renderMarkRule = exports.renderSpanValue = exports.markToTagName = exports.RenderError = exports.renderNodeRule = void 0; | ||
var datocms_structured_text_utils_1 = require("datocms-structured-text-utils"); | ||
Object.defineProperty(exports, "renderRule", { enumerable: true, get: function () { return datocms_structured_text_utils_1.renderRule; } }); | ||
Object.defineProperty(exports, "renderNodeRule", { enumerable: true, get: function () { return datocms_structured_text_utils_1.renderRule; } }); | ||
Object.defineProperty(exports, "RenderError", { enumerable: true, get: function () { return datocms_structured_text_utils_1.RenderError; } }); | ||
@@ -41,2 +41,42 @@ function markToTagName(mark) { | ||
exports.markToTagName = markToTagName; | ||
function renderSpanValue(_a) { | ||
var node = _a.node, key = _a.key, _b = _a.adapter, renderNode = _b.renderNode, renderText = _b.renderText, renderFragment = _b.renderFragment; | ||
var lines = node.value.split(/\n/); | ||
if (lines.length === 0) { | ||
return renderText(node.value, key); | ||
} | ||
return renderFragment(lines.slice(1).reduce(function (acc, line, index) { | ||
return acc.concat([ | ||
renderNode('br', { key: key + "-br-" + index }), | ||
renderText(line, key + "-line-" + index), | ||
]); | ||
}, [renderText(lines[0], key + "-line-first")]), key); | ||
} | ||
exports.renderSpanValue = renderSpanValue; | ||
function renderMarkRule(guard, transform) { | ||
return { | ||
appliable: typeof guard === 'string' ? function (mark) { return mark === guard; } : guard, | ||
apply: transform, | ||
}; | ||
} | ||
exports.renderMarkRule = renderMarkRule; | ||
function spanNodeRenderRule(_a) { | ||
var customMarkRules = _a.customMarkRules; | ||
return datocms_structured_text_utils_1.renderRule(datocms_structured_text_utils_1.isSpan, function (context) { | ||
var adapter = context.adapter, key = context.key, node = context.node; | ||
return (node.marks || []).reduce(function (children, mark) { | ||
if (!children) { | ||
return undefined; | ||
} | ||
var matchingCustomRule = customMarkRules.find(function (rule) { | ||
return rule.appliable(mark); | ||
}); | ||
if (matchingCustomRule) { | ||
return matchingCustomRule.apply({ adapter: adapter, key: key, mark: mark, children: children }); | ||
} | ||
return adapter.renderNode(markToTagName(mark), { key: key }, children); | ||
}, renderSpanValue(context)); | ||
}); | ||
} | ||
exports.spanNodeRenderRule = spanNodeRenderRule; | ||
var defaultMetaTransformer = function (_a) { | ||
@@ -53,5 +93,5 @@ var meta = _a.meta; | ||
exports.defaultMetaTransformer = defaultMetaTransformer; | ||
function render(adapter, structuredTextOrNode, customRules, metaTransformer) { | ||
if (metaTransformer === void 0) { metaTransformer = exports.defaultMetaTransformer; } | ||
return datocms_structured_text_utils_1.render(adapter, structuredTextOrNode, __spreadArrays(customRules, [ | ||
function render(structuredTextOrNode, options) { | ||
var metaTransformer = options.metaTransformer || exports.defaultMetaTransformer; | ||
return datocms_structured_text_utils_1.render(options.adapter, structuredTextOrNode, __spreadArrays((options.customNodeRules || []), [ | ||
datocms_structured_text_utils_1.renderRule(datocms_structured_text_utils_1.isRoot, function (_a) { | ||
@@ -98,18 +138,3 @@ var renderFragment = _a.adapter.renderFragment, key = _a.key, children = _a.children; | ||
}), | ||
datocms_structured_text_utils_1.renderRule(datocms_structured_text_utils_1.isSpan, function (_a) { | ||
var _b = _a.adapter, renderNode = _b.renderNode, renderText = _b.renderText, key = _a.key, node = _a.node; | ||
var marks = node.marks || []; | ||
var lines = node.value.split(/\n/); | ||
var textWithNewlinesConvertedToBr = lines.length > 0 | ||
? lines.slice(1).reduce(function (acc, line, index) { | ||
return acc.concat([ | ||
renderNode('br', { key: key + "-br-" + index }), | ||
renderText(line, key + "-line-" + index), | ||
]); | ||
}, [renderText(lines[0], key + "-line-first")]) | ||
: renderText(node.value, key); | ||
return marks.reduce(function (children, mark) { | ||
return renderNode(markToTagName(mark), { key: key }, children); | ||
}, textWithNewlinesConvertedToBr); | ||
}), | ||
spanNodeRenderRule({ customMarkRules: options.customMarkRules || [] }), | ||
])); | ||
@@ -116,0 +141,0 @@ } |
@@ -1,4 +0,19 @@ | ||
import { Adapter, Mark, Record, RenderResult, RenderRule, renderRule, StructuredText, TrasformFn, RenderError, Node, Document, NodeWithMeta, MetaEntry } from 'datocms-structured-text-utils'; | ||
export { renderRule, RenderError }; | ||
import { Adapter, Mark, Record, RenderResult, RenderRule, renderRule, StructuredText, TrasformFn, RenderError, Node, Document, NodeWithMeta, MetaEntry, RenderContext, Span } from 'datocms-structured-text-utils'; | ||
export { renderRule as renderNodeRule, RenderError }; | ||
export declare function markToTagName(mark: Mark): string; | ||
export declare function renderSpanValue<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn>({ node, key, adapter: { renderNode, renderText, renderFragment }, }: RenderContext<H, T, F, Span>): RenderResult<H, T, F>; | ||
declare type RenderMarkContext<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn> = { | ||
mark: string; | ||
adapter: Adapter<H, T, F>; | ||
key: string; | ||
children: Exclude<RenderResult<H, T, F>, null | undefined>[] | undefined; | ||
}; | ||
export declare type RenderMarkRule<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn> = { | ||
appliable: (mark: string) => boolean; | ||
apply: (ctx: RenderMarkContext<H, T, F>) => RenderResult<H, T, F>; | ||
}; | ||
export declare function renderMarkRule<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn>(guard: string | ((mark: string) => boolean), transform: (ctx: RenderMarkContext<H, T, F>) => RenderResult<H, T, F>): RenderMarkRule<H, T, F>; | ||
export declare function spanNodeRenderRule<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn>({ customMarkRules, }: { | ||
customMarkRules: RenderMarkRule<H, T, F>[]; | ||
}): RenderRule<H, T, F>; | ||
export declare type TransformMetaContext = { | ||
@@ -13,2 +28,8 @@ node: NodeWithMeta; | ||
export declare const defaultMetaTransformer: TransformMetaFn; | ||
export declare function render<R extends Record, H extends TrasformFn, T extends TrasformFn, F extends TrasformFn>(adapter: Adapter<H, T, F>, structuredTextOrNode: StructuredText<R> | Document | Node | null | undefined, customRules: RenderRule<H, T, F>[], metaTransformer?: TransformMetaFn): RenderResult<H, T, F>; | ||
export declare type RenderOptions<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn> = { | ||
adapter: Adapter<H, T, F>; | ||
customNodeRules?: RenderRule<H, T, F>[]; | ||
metaTransformer?: TransformMetaFn; | ||
customMarkRules?: RenderMarkRule<H, T, F>[]; | ||
}; | ||
export declare function render<R extends Record, H extends TrasformFn, T extends TrasformFn, F extends TrasformFn>(structuredTextOrNode: StructuredText<R> | Document | Node | null | undefined, options: RenderOptions<H, T, F>): RenderResult<H, T, F>; |
@@ -20,3 +20,3 @@ var __assign = (this && this.__assign) || function () { | ||
import { isBlockquote, isCode, isHeading, isLink, isList, isListItem, isParagraph, isRoot, isSpan, render as genericRender, renderRule, RenderError, isThematicBreak, } from 'datocms-structured-text-utils'; | ||
export { renderRule, RenderError }; | ||
export { renderRule as renderNodeRule, RenderError }; | ||
export function markToTagName(mark) { | ||
@@ -36,2 +36,39 @@ switch (mark) { | ||
} | ||
export function renderSpanValue(_a) { | ||
var node = _a.node, key = _a.key, _b = _a.adapter, renderNode = _b.renderNode, renderText = _b.renderText, renderFragment = _b.renderFragment; | ||
var lines = node.value.split(/\n/); | ||
if (lines.length === 0) { | ||
return renderText(node.value, key); | ||
} | ||
return renderFragment(lines.slice(1).reduce(function (acc, line, index) { | ||
return acc.concat([ | ||
renderNode('br', { key: key + "-br-" + index }), | ||
renderText(line, key + "-line-" + index), | ||
]); | ||
}, [renderText(lines[0], key + "-line-first")]), key); | ||
} | ||
export function renderMarkRule(guard, transform) { | ||
return { | ||
appliable: typeof guard === 'string' ? function (mark) { return mark === guard; } : guard, | ||
apply: transform, | ||
}; | ||
} | ||
export function spanNodeRenderRule(_a) { | ||
var customMarkRules = _a.customMarkRules; | ||
return renderRule(isSpan, function (context) { | ||
var adapter = context.adapter, key = context.key, node = context.node; | ||
return (node.marks || []).reduce(function (children, mark) { | ||
if (!children) { | ||
return undefined; | ||
} | ||
var matchingCustomRule = customMarkRules.find(function (rule) { | ||
return rule.appliable(mark); | ||
}); | ||
if (matchingCustomRule) { | ||
return matchingCustomRule.apply({ adapter: adapter, key: key, mark: mark, children: children }); | ||
} | ||
return adapter.renderNode(markToTagName(mark), { key: key }, children); | ||
}, renderSpanValue(context)); | ||
}); | ||
} | ||
export var defaultMetaTransformer = function (_a) { | ||
@@ -47,5 +84,5 @@ var meta = _a.meta; | ||
}; | ||
export function render(adapter, structuredTextOrNode, customRules, metaTransformer) { | ||
if (metaTransformer === void 0) { metaTransformer = defaultMetaTransformer; } | ||
return genericRender(adapter, structuredTextOrNode, __spreadArrays(customRules, [ | ||
export function render(structuredTextOrNode, options) { | ||
var metaTransformer = options.metaTransformer || defaultMetaTransformer; | ||
return genericRender(options.adapter, structuredTextOrNode, __spreadArrays((options.customNodeRules || []), [ | ||
renderRule(isRoot, function (_a) { | ||
@@ -92,20 +129,5 @@ var renderFragment = _a.adapter.renderFragment, key = _a.key, children = _a.children; | ||
}), | ||
renderRule(isSpan, function (_a) { | ||
var _b = _a.adapter, renderNode = _b.renderNode, renderText = _b.renderText, key = _a.key, node = _a.node; | ||
var marks = node.marks || []; | ||
var lines = node.value.split(/\n/); | ||
var textWithNewlinesConvertedToBr = lines.length > 0 | ||
? lines.slice(1).reduce(function (acc, line, index) { | ||
return acc.concat([ | ||
renderNode('br', { key: key + "-br-" + index }), | ||
renderText(line, key + "-line-" + index), | ||
]); | ||
}, [renderText(lines[0], key + "-line-first")]) | ||
: renderText(node.value, key); | ||
return marks.reduce(function (children, mark) { | ||
return renderNode(markToTagName(mark), { key: key }, children); | ||
}, textWithNewlinesConvertedToBr); | ||
}), | ||
spanNodeRenderRule({ customMarkRules: options.customMarkRules || [] }), | ||
])); | ||
} | ||
//# sourceMappingURL=index.js.map |
@@ -1,4 +0,19 @@ | ||
import { Adapter, Mark, Record, RenderResult, RenderRule, renderRule, StructuredText, TrasformFn, RenderError, Node, Document, NodeWithMeta, MetaEntry } from 'datocms-structured-text-utils'; | ||
export { renderRule, RenderError }; | ||
import { Adapter, Mark, Record, RenderResult, RenderRule, renderRule, StructuredText, TrasformFn, RenderError, Node, Document, NodeWithMeta, MetaEntry, RenderContext, Span } from 'datocms-structured-text-utils'; | ||
export { renderRule as renderNodeRule, RenderError }; | ||
export declare function markToTagName(mark: Mark): string; | ||
export declare function renderSpanValue<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn>({ node, key, adapter: { renderNode, renderText, renderFragment }, }: RenderContext<H, T, F, Span>): RenderResult<H, T, F>; | ||
declare type RenderMarkContext<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn> = { | ||
mark: string; | ||
adapter: Adapter<H, T, F>; | ||
key: string; | ||
children: Exclude<RenderResult<H, T, F>, null | undefined>[] | undefined; | ||
}; | ||
export declare type RenderMarkRule<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn> = { | ||
appliable: (mark: string) => boolean; | ||
apply: (ctx: RenderMarkContext<H, T, F>) => RenderResult<H, T, F>; | ||
}; | ||
export declare function renderMarkRule<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn>(guard: string | ((mark: string) => boolean), transform: (ctx: RenderMarkContext<H, T, F>) => RenderResult<H, T, F>): RenderMarkRule<H, T, F>; | ||
export declare function spanNodeRenderRule<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn>({ customMarkRules, }: { | ||
customMarkRules: RenderMarkRule<H, T, F>[]; | ||
}): RenderRule<H, T, F>; | ||
export declare type TransformMetaContext = { | ||
@@ -13,2 +28,8 @@ node: NodeWithMeta; | ||
export declare const defaultMetaTransformer: TransformMetaFn; | ||
export declare function render<R extends Record, H extends TrasformFn, T extends TrasformFn, F extends TrasformFn>(adapter: Adapter<H, T, F>, structuredTextOrNode: StructuredText<R> | Document | Node | null | undefined, customRules: RenderRule<H, T, F>[], metaTransformer?: TransformMetaFn): RenderResult<H, T, F>; | ||
export declare type RenderOptions<H extends TrasformFn, T extends TrasformFn, F extends TrasformFn> = { | ||
adapter: Adapter<H, T, F>; | ||
customNodeRules?: RenderRule<H, T, F>[]; | ||
metaTransformer?: TransformMetaFn; | ||
customMarkRules?: RenderMarkRule<H, T, F>[]; | ||
}; | ||
export declare function render<R extends Record, H extends TrasformFn, T extends TrasformFn, F extends TrasformFn>(structuredTextOrNode: StructuredText<R> | Document | Node | null | undefined, options: RenderOptions<H, T, F>): RenderResult<H, T, F>; |
{ | ||
"name": "datocms-structured-text-generic-html-renderer", | ||
"version": "1.2.3-alpha.3", | ||
"version": "1.3.0", | ||
"description": "A set of Typescript types and helpers to work with DatoCMS Structured Text fields", | ||
@@ -35,5 +35,5 @@ "keywords": [ | ||
"dependencies": { | ||
"datocms-structured-text-utils": "^1.2.3-alpha.3" | ||
"datocms-structured-text-utils": "^1.2.0" | ||
}, | ||
"gitHead": "283340766136a58a5bf2046bc75fc34999c838db" | ||
"gitHead": "c12c0a8f63562fc2bd11aa79cd51eb7f31eabbd4" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
29837
334
0
8
1
0
+ Addeddatocms-structured-text-utils@1.2.0(transitive)
- Removeddatocms-structured-text-utils@1.2.3-alpha.3(transitive)