@refrakt-md/runes 0.37.0 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collection-helpers.d.ts +21 -2
- package/dist/collection-helpers.d.ts.map +1 -1
- package/dist/collection-helpers.js +72 -15
- package/dist/collection-helpers.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +79 -46
- package/dist/config.js.map +1 -1
- package/dist/data-pipeline.d.ts +24 -10
- package/dist/data-pipeline.d.ts.map +1 -1
- package/dist/data-pipeline.js +34 -56
- package/dist/data-pipeline.js.map +1 -1
- package/dist/file-ref-resolve.js +9 -13
- package/dist/file-ref-resolve.js.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/component.d.ts +8 -11
- package/dist/lib/component.d.ts.map +1 -1
- package/dist/lib/component.js +17 -52
- package/dist/lib/component.js.map +1 -1
- package/dist/lib/field-metas.d.ts +34 -0
- package/dist/lib/field-metas.d.ts.map +1 -0
- package/dist/lib/field-metas.js +45 -0
- package/dist/lib/field-metas.js.map +1 -0
- package/dist/lib/index.d.ts +64 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +134 -5
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/node.d.ts +22 -0
- package/dist/lib/node.d.ts.map +1 -1
- package/dist/lib/node.js +32 -0
- package/dist/lib/node.js.map +1 -1
- package/dist/lib/preprocess.d.ts +63 -0
- package/dist/lib/preprocess.d.ts.map +1 -0
- package/dist/lib/preprocess.js +71 -0
- package/dist/lib/preprocess.js.map +1 -0
- package/dist/lib/registers.d.ts +132 -0
- package/dist/lib/registers.d.ts.map +1 -0
- package/dist/lib/registers.js +328 -0
- package/dist/lib/registers.js.map +1 -0
- package/dist/lib/resolver.d.ts +9 -1
- package/dist/lib/resolver.d.ts.map +1 -1
- package/dist/lib/resolver.js +24 -1
- package/dist/lib/resolver.js.map +1 -1
- package/dist/lib/schema-table.d.ts +46 -9
- package/dist/lib/schema-table.d.ts.map +1 -1
- package/dist/lib/schema-table.js +111 -22
- package/dist/lib/schema-table.js.map +1 -1
- package/dist/lib/slots.d.ts +99 -0
- package/dist/lib/slots.d.ts.map +1 -0
- package/dist/lib/slots.js +448 -0
- package/dist/lib/slots.js.map +1 -0
- package/dist/props.d.ts +0 -2
- package/dist/props.d.ts.map +1 -1
- package/dist/reference.d.ts +37 -0
- package/dist/reference.d.ts.map +1 -1
- package/dist/reference.js +116 -2
- package/dist/reference.js.map +1 -1
- package/dist/registers-pipeline.d.ts +50 -0
- package/dist/registers-pipeline.d.ts.map +1 -0
- package/dist/registers-pipeline.js +218 -0
- package/dist/registers-pipeline.js.map +1 -0
- package/dist/schema-row.d.ts +5 -0
- package/dist/schema-row.d.ts.map +1 -1
- package/dist/schema-row.js +1 -0
- package/dist/schema-row.js.map +1 -1
- package/dist/tags/accordion.d.ts.map +1 -1
- package/dist/tags/accordion.js +4 -7
- package/dist/tags/accordion.js.map +1 -1
- package/dist/tags/annotate.d.ts.map +1 -1
- package/dist/tags/annotate.js +6 -13
- package/dist/tags/annotate.js.map +1 -1
- package/dist/tags/bar.d.ts.map +1 -1
- package/dist/tags/bar.js +2 -5
- package/dist/tags/bar.js.map +1 -1
- package/dist/tags/blog.d.ts.map +1 -1
- package/dist/tags/blog.js +1 -9
- package/dist/tags/blog.js.map +1 -1
- package/dist/tags/breadcrumb.d.ts.map +1 -1
- package/dist/tags/breadcrumb.js +4 -5
- package/dist/tags/breadcrumb.js.map +1 -1
- package/dist/tags/budget.d.ts.map +1 -1
- package/dist/tags/budget.js +2 -10
- package/dist/tags/budget.js.map +1 -1
- package/dist/tags/card.d.ts.map +1 -1
- package/dist/tags/card.js +7 -14
- package/dist/tags/card.js.map +1 -1
- package/dist/tags/chart.d.ts.map +1 -1
- package/dist/tags/chart.js +5 -8
- package/dist/tags/chart.js.map +1 -1
- package/dist/tags/codegroup.d.ts.map +1 -1
- package/dist/tags/codegroup.js +0 -2
- package/dist/tags/codegroup.js.map +1 -1
- package/dist/tags/common.d.ts.map +1 -1
- package/dist/tags/common.js +2 -5
- package/dist/tags/common.js.map +1 -1
- package/dist/tags/compare.d.ts.map +1 -1
- package/dist/tags/compare.js +4 -8
- package/dist/tags/compare.js.map +1 -1
- package/dist/tags/conversation.d.ts.map +1 -1
- package/dist/tags/conversation.js +4 -7
- package/dist/tags/conversation.js.map +1 -1
- package/dist/tags/data.d.ts +2 -2
- package/dist/tags/data.d.ts.map +1 -1
- package/dist/tags/data.js +6 -4
- package/dist/tags/data.js.map +1 -1
- package/dist/tags/datatable.d.ts.map +1 -1
- package/dist/tags/datatable.js +4 -8
- package/dist/tags/datatable.js.map +1 -1
- package/dist/tags/details.d.ts.map +1 -1
- package/dist/tags/details.js +3 -7
- package/dist/tags/details.js.map +1 -1
- package/dist/tags/diagram.js +2 -2
- package/dist/tags/diagram.js.map +1 -1
- package/dist/tags/diff.js +1 -1
- package/dist/tags/diff.js.map +1 -1
- package/dist/tags/drawer.d.ts.map +1 -1
- package/dist/tags/drawer.js +4 -12
- package/dist/tags/drawer.js.map +1 -1
- package/dist/tags/embed.d.ts.map +1 -1
- package/dist/tags/embed.js +4 -5
- package/dist/tags/embed.js.map +1 -1
- package/dist/tags/figure.d.ts +10 -4
- package/dist/tags/figure.d.ts.map +1 -1
- package/dist/tags/figure.js +70 -33
- package/dist/tags/figure.js.map +1 -1
- package/dist/tags/form.d.ts.map +1 -1
- package/dist/tags/form.js +3 -18
- package/dist/tags/form.js.map +1 -1
- package/dist/tags/gallery.d.ts.map +1 -1
- package/dist/tags/gallery.js +6 -11
- package/dist/tags/gallery.js.map +1 -1
- package/dist/tags/grid.d.ts.map +1 -1
- package/dist/tags/grid.js +7 -17
- package/dist/tags/grid.js.map +1 -1
- package/dist/tags/hint.d.ts.map +1 -1
- package/dist/tags/hint.js +4 -8
- package/dist/tags/hint.js.map +1 -1
- package/dist/tags/include.d.ts +51 -7
- package/dist/tags/include.d.ts.map +1 -1
- package/dist/tags/include.js +216 -7
- package/dist/tags/include.js.map +1 -1
- package/dist/tags/juxtapose.js +2 -2
- package/dist/tags/juxtapose.js.map +1 -1
- package/dist/tags/layout.d.ts.map +1 -1
- package/dist/tags/layout.js +2 -5
- package/dist/tags/layout.js.map +1 -1
- package/dist/tags/mediatext.d.ts.map +1 -1
- package/dist/tags/mediatext.js +5 -13
- package/dist/tags/mediatext.js.map +1 -1
- package/dist/tags/nav.d.ts.map +1 -1
- package/dist/tags/nav.js +2 -5
- package/dist/tags/nav.js.map +1 -1
- package/dist/tags/progress.d.ts.map +1 -1
- package/dist/tags/progress.js +4 -8
- package/dist/tags/progress.js.map +1 -1
- package/dist/tags/pullquote.d.ts.map +1 -1
- package/dist/tags/pullquote.js +8 -15
- package/dist/tags/pullquote.js.map +1 -1
- package/dist/tags/region.d.ts.map +1 -1
- package/dist/tags/region.js +2 -5
- package/dist/tags/region.js.map +1 -1
- package/dist/tags/reveal.d.ts.map +1 -1
- package/dist/tags/reveal.js +4 -7
- package/dist/tags/reveal.js.map +1 -1
- package/dist/tags/section.d.ts.map +1 -1
- package/dist/tags/section.js +3 -3
- package/dist/tags/section.js.map +1 -1
- package/dist/tags/showcase.d.ts.map +1 -1
- package/dist/tags/showcase.js +4 -11
- package/dist/tags/showcase.js.map +1 -1
- package/dist/tags/sidenote.d.ts.map +1 -1
- package/dist/tags/sidenote.js +7 -12
- package/dist/tags/sidenote.js.map +1 -1
- package/dist/tags/snippet.d.ts +9 -10
- package/dist/tags/snippet.d.ts.map +1 -1
- package/dist/tags/snippet.js +213 -10
- package/dist/tags/snippet.js.map +1 -1
- package/dist/tags/tabs.d.ts.map +1 -1
- package/dist/tags/tabs.js +3 -6
- package/dist/tags/tabs.js.map +1 -1
- package/dist/tags/textblock.d.ts.map +1 -1
- package/dist/tags/textblock.js +7 -19
- package/dist/tags/textblock.js.map +1 -1
- package/dist/tags/tint.d.ts.map +1 -1
- package/dist/tags/tint.js +17 -29
- package/dist/tags/tint.js.map +1 -1
- package/dist/tags/toc.js +1 -1
- package/dist/tags/toc.js.map +1 -1
- package/dist/universal-attributes.d.ts +1 -1
- package/package.json +3 -3
- package/dist/include-pipeline.d.ts +0 -52
- package/dist/include-pipeline.d.ts.map +0 -1
- package/dist/include-pipeline.js +0 -206
- package/dist/include-pipeline.js.map +0 -1
- package/dist/snippet-pipeline.d.ts +0 -44
- package/dist/snippet-pipeline.d.ts.map +0 -1
- package/dist/snippet-pipeline.js +0 -307
- package/dist/snippet-pipeline.js.map +0 -1
package/dist/snippet-pipeline.js
DELETED
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Snippet pipeline hooks (SPEC-062, WORK-304).
|
|
3
|
-
*
|
|
4
|
-
* - **Preprocess** walks the parsed Markdoc AST, finds every `{% snippet %}`
|
|
5
|
-
* tag, resolves + slices its source file, and replaces the tag with a
|
|
6
|
-
* Markdoc `fence` node. The fence carries `content` + `language` (so
|
|
7
|
-
* the existing code-block transform syntax-highlights it identically to
|
|
8
|
-
* a triple-backtick fence) plus `source` / `lines` + author-set
|
|
9
|
-
* `linenumbers` / `highlight` annotations (WORK-304). The fence schema
|
|
10
|
-
* renders them as `data-source` / `data-lines` / `data-linenumbers` /
|
|
11
|
-
* `data-highlight-lines` on the output `<pre>` + `<code>`.
|
|
12
|
-
*
|
|
13
|
-
* - **PostProcess** walks the rendered renderable tree, finds every `<pre>`
|
|
14
|
-
* element carrying `data-source`, and — when not nested under a
|
|
15
|
-
* fence-consuming container (`data-rune="code-group"`, `data-rune="diff"`)
|
|
16
|
-
* — wraps it in `<figure class="rf-snippet">` so themes can style snippet
|
|
17
|
-
* blocks distinctly from regular code blocks (and tooling can find
|
|
18
|
-
* `data-source-path` on the figure).
|
|
19
|
-
*
|
|
20
|
-
* This separation is the SPEC-062 composition story: container runes see
|
|
21
|
-
* snippet output as a regular fence (because preprocess made it one) and
|
|
22
|
-
* consume it transparently; standalone snippets get the figure chrome via
|
|
23
|
-
* the wrap step. Captions / titles are intentionally not provided — wrap
|
|
24
|
-
* a snippet in `{% codegroup title="..." %}` if you want a labelled chrome.
|
|
25
|
-
*/
|
|
26
|
-
import Markdoc from '@markdoc/markdoc';
|
|
27
|
-
import { formatHighlight, highlightMatchLines, parseHighlightMatch, reindent, shouldReindent, } from './lib/present.js';
|
|
28
|
-
import { readSnippetFile, SnippetSandboxError } from './lib/read-file.js';
|
|
29
|
-
import { compareMarker, parseMarker } from './lib/review-marker.js';
|
|
30
|
-
import { inferLanguage } from './lang-map.js';
|
|
31
|
-
const { Ast, Tag } = Markdoc;
|
|
32
|
-
/** Resolve a Markdoc attribute value to a string. Handles literal strings
|
|
33
|
-
* and Markdoc `Variable` AST nodes (e.g. `path=$file.path` parses as a
|
|
34
|
-
* Variable, not a string). Unresolvable references (variable missing from
|
|
35
|
-
* the context, or attribute is some other AST shape) return an empty
|
|
36
|
-
* string — matching transform-time variable-evaluation behaviour. */
|
|
37
|
-
function resolveAttributeValue(value, variables) {
|
|
38
|
-
if (value === undefined || value === null)
|
|
39
|
-
return '';
|
|
40
|
-
if (typeof value === 'string')
|
|
41
|
-
return value;
|
|
42
|
-
if (typeof value === 'number' || typeof value === 'boolean')
|
|
43
|
-
return String(value);
|
|
44
|
-
if (typeof value === 'object' && '$$mdtype' in value) {
|
|
45
|
-
const node = value;
|
|
46
|
-
if (node.$$mdtype === 'Variable' && Array.isArray(node.path)) {
|
|
47
|
-
let current = variables;
|
|
48
|
-
for (const segment of node.path) {
|
|
49
|
-
if (current === null || current === undefined)
|
|
50
|
-
return '';
|
|
51
|
-
current = current[segment];
|
|
52
|
-
}
|
|
53
|
-
return current === null || current === undefined ? '' : String(current);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return '';
|
|
57
|
-
}
|
|
58
|
-
/** Containers whose output consumes their fence children — wrapping a
|
|
59
|
-
* snippet-derived `<pre>` inside them would be duplicate chrome. */
|
|
60
|
-
const FENCE_CONSUMING_CONTAINERS = new Set(['code-group', 'diff']);
|
|
61
|
-
/**
|
|
62
|
-
* Preprocess: replace every `{% snippet %}` tag in the AST with a `fence`
|
|
63
|
-
* node carrying the resolved file content. After this runs, no snippet
|
|
64
|
-
* tags remain in the AST — only fences (some "snippet-derived" identified
|
|
65
|
-
* by their `data-snippet-source` attribute).
|
|
66
|
-
*/
|
|
67
|
-
export function preprocessSnippets(ast, page, ctx) {
|
|
68
|
-
if (!ctx.sandbox) {
|
|
69
|
-
// No file provider available (e.g. a tree-mode build that hasn't wired
|
|
70
|
-
// one yet) — silently no-op. Snippet refs fall through to the schema's
|
|
71
|
-
// transform, which throws a clear error.
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
let mutated = false;
|
|
75
|
-
walkAndReplaceSnippets(ast, page, ctx, ctx.sandbox, (didReplace) => {
|
|
76
|
-
if (didReplace)
|
|
77
|
-
mutated = true;
|
|
78
|
-
});
|
|
79
|
-
return mutated ? ast : undefined;
|
|
80
|
-
}
|
|
81
|
-
function walkAndReplaceSnippets(node, page, ctx, files, onReplaced) {
|
|
82
|
-
if (!node.children)
|
|
83
|
-
return;
|
|
84
|
-
for (let i = 0; i < node.children.length; i++) {
|
|
85
|
-
const child = node.children[i];
|
|
86
|
-
if (child.type === 'tag' && child.tag === 'snippet') {
|
|
87
|
-
// Always produce a fence — successful resolution returns the
|
|
88
|
-
// real fence; sandbox / missing-file / variable-resolution errors
|
|
89
|
-
// produce an error fence so the snippet tag never reaches the
|
|
90
|
-
// schema's transform (which throws). The build keeps going and
|
|
91
|
-
// the failure is visible on the rendered page.
|
|
92
|
-
node.children[i] = resolveSnippetToFence(child, page, ctx, files);
|
|
93
|
-
onReplaced(true);
|
|
94
|
-
// Don't recurse — replaced.
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
walkAndReplaceSnippets(child, page, ctx, files, onReplaced);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/** Build a `fence` AST node that renders a clear error message in place of
|
|
101
|
-
* the snippet. Used when resolution fails (sandbox, missing file, malformed
|
|
102
|
-
* lines, unresolvable variable reference). The fence carries the original
|
|
103
|
-
* attempted path in `source` so tooling can still detect snippet
|
|
104
|
-
* provenance, plus a `data-snippet-error` raw data-attr that's
|
|
105
|
-
* forwarded through the fence transform for the error styling hook. */
|
|
106
|
-
function makeErrorFence(pathAttr, message) {
|
|
107
|
-
return new Ast.Node('fence', {
|
|
108
|
-
content: `snippet error: ${message}\n`,
|
|
109
|
-
language: 'text',
|
|
110
|
-
source: pathAttr || '(unresolved)',
|
|
111
|
-
'data-snippet-error': message,
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
function resolveSnippetToFence(tag, page, ctx, files) {
|
|
115
|
-
const pathAttr = resolveAttributeValue(tag.attributes.path, ctx.variables);
|
|
116
|
-
const lines = tag.attributes.lines !== undefined
|
|
117
|
-
? resolveAttributeValue(tag.attributes.lines, ctx.variables)
|
|
118
|
-
: undefined;
|
|
119
|
-
const langAttr = tag.attributes.lang !== undefined
|
|
120
|
-
? resolveAttributeValue(tag.attributes.lang, ctx.variables)
|
|
121
|
-
: undefined;
|
|
122
|
-
// WORK-304 — propagate author-set fence-level annotations from the
|
|
123
|
-
// snippet rune through to the fence node. The fence schema renders
|
|
124
|
-
// them as `data-linenumbers` / `data-highlight-lines`. `linenumbers`
|
|
125
|
-
// arrives as a Boolean from the rune schema; `highlight` as a String.
|
|
126
|
-
const linenumbers = tag.attributes.linenumbers === true;
|
|
127
|
-
const highlight = tag.attributes.highlight !== undefined
|
|
128
|
-
? resolveAttributeValue(tag.attributes.highlight, ctx.variables)
|
|
129
|
-
: undefined;
|
|
130
|
-
// SPEC-131 — anchor attributes. Resolution lands in the shared reader, so
|
|
131
|
-
// `file-ref` gains the same capability from the same change.
|
|
132
|
-
const str = (name) => tag.attributes[name] !== undefined
|
|
133
|
-
? resolveAttributeValue(tag.attributes[name], ctx.variables)
|
|
134
|
-
: undefined;
|
|
135
|
-
const anchor = {
|
|
136
|
-
symbol: str('symbol'),
|
|
137
|
-
match: str('match'),
|
|
138
|
-
occurrence: tag.attributes.occurrence !== undefined ? Number(tag.attributes.occurrence) : undefined,
|
|
139
|
-
extent: str('extent'),
|
|
140
|
-
until: str('until'),
|
|
141
|
-
through: str('through'),
|
|
142
|
-
doc: tag.attributes.doc === undefined ? undefined : tag.attributes.doc === true,
|
|
143
|
-
};
|
|
144
|
-
const reindentAttr = tag.attributes.reindent === undefined ? undefined : tag.attributes.reindent === true;
|
|
145
|
-
const highlightMatch = str('highlight-match');
|
|
146
|
-
const reviewedAttr = str('reviewed');
|
|
147
|
-
if (!pathAttr) {
|
|
148
|
-
const msg = 'snippet `path` attribute is required (and an unresolvable variable reference resolves to empty)';
|
|
149
|
-
ctx.error(msg, page.url);
|
|
150
|
-
return makeErrorFence('', msg);
|
|
151
|
-
}
|
|
152
|
-
let result;
|
|
153
|
-
try {
|
|
154
|
-
result = readSnippetFile({
|
|
155
|
-
files,
|
|
156
|
-
pathAttr,
|
|
157
|
-
lines: lines || undefined,
|
|
158
|
-
anchor,
|
|
159
|
-
lang: langAttr || undefined,
|
|
160
|
-
referencingPage: page.relativePath,
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
catch (err) {
|
|
164
|
-
if (err instanceof SnippetSandboxError) {
|
|
165
|
-
ctx.error(err.message, page.url);
|
|
166
|
-
return makeErrorFence(pathAttr, err.message);
|
|
167
|
-
}
|
|
168
|
-
// Unexpected error type — still produce an error fence so the build
|
|
169
|
-
// doesn't crash on a single page.
|
|
170
|
-
const msg = err.message ?? String(err);
|
|
171
|
-
ctx.error(`snippet "${pathAttr}" failed unexpectedly: ${msg}`, page.url);
|
|
172
|
-
return makeErrorFence(pathAttr, msg);
|
|
173
|
-
}
|
|
174
|
-
for (const warning of result.warnings) {
|
|
175
|
-
ctx.warn(warning, page.url);
|
|
176
|
-
}
|
|
177
|
-
// SPEC-134 — the review marker. Evaluated only after the anchor resolved,
|
|
178
|
-
// because D9 layers the two features: SPEC-131 answers *can I find the
|
|
179
|
-
// region* and refuses if not, so a refusal never reaches here at all.
|
|
180
|
-
//
|
|
181
|
-
// A finding is a `PipelineWarning` beside the page and **nothing is
|
|
182
|
-
// rendered into it** (D6). This is deliberately different from SPEC-131's
|
|
183
|
-
// error fence, and the difference is principled: there, the content could
|
|
184
|
-
// not be produced, so the fence takes its place. Here the content was
|
|
185
|
-
// produced perfectly — real, current, correctly located. What is uncertain
|
|
186
|
-
// is the prose beside it, which the resolver cannot see. Replacing a
|
|
187
|
-
// correct code block with an error because a paragraph *might* be stale is
|
|
188
|
-
// a straightforward regression for every reader.
|
|
189
|
-
if (reviewedAttr && reviewedAttr.length > 0) {
|
|
190
|
-
const stored = parseMarker(reviewedAttr);
|
|
191
|
-
const comparison = compareMarker(stored.strict, result.content, stored.loose);
|
|
192
|
-
if (comparison.verdict === 'stale') {
|
|
193
|
-
// Deliberately no diff here: at transform time the only record of
|
|
194
|
-
// the reviewed version is its hash, and a hash cannot be turned
|
|
195
|
-
// back into content. `refrakt snippet review --update` recovers the
|
|
196
|
-
// old slice from git and shows the diff — which is why D5's "show
|
|
197
|
-
// content, never hashes" is the CLI's job rather than this one's.
|
|
198
|
-
ctx.warn(`snippet \`${pathAttr}\` has changed since it was last reviewed. Re-read the prose ` +
|
|
199
|
-
'around it, then run `refrakt snippet review --update` to see the diff and re-stamp.', page.url);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
const language = langAttr && langAttr.length > 0 ? langAttr : inferLanguage(result.relativePath);
|
|
203
|
-
// WORK-589 — presentation runs strictly **after** the resolved range is
|
|
204
|
-
// fixed, so `reindent` can never shift the coordinates `linenumbers` and a
|
|
205
|
-
// numeric `highlight` read (D13). `highlight-match` is computed against the
|
|
206
|
-
// pre-reindent text because reindent changes columns, not lines.
|
|
207
|
-
const highlightMatchLinesFound = highlightMatch
|
|
208
|
-
? highlightMatchLines(result.content, parseHighlightMatch(highlightMatch))
|
|
209
|
-
: [];
|
|
210
|
-
const content = shouldReindent(result.anchored, reindentAttr)
|
|
211
|
-
? reindent(result.content)
|
|
212
|
-
: result.content;
|
|
213
|
-
// WORK-304 — write unprefixed `source` / `lines` directly. The fence
|
|
214
|
-
// schema renders them as `data-source` / `data-lines`. `linenumbers` /
|
|
215
|
-
// `highlight` are propagated from the rune attributes (file-coordinate
|
|
216
|
-
// semantics — see WORK-304 acceptance criteria).
|
|
217
|
-
const fenceAttrs = {
|
|
218
|
-
content,
|
|
219
|
-
language,
|
|
220
|
-
source: result.relativePath,
|
|
221
|
-
};
|
|
222
|
-
// The coordinate frame survives anchoring (D13): an anchored slice reports
|
|
223
|
-
// the range it actually resolved to, so `linenumbers` still starts at the
|
|
224
|
-
// real file line and the displayed numbers stay a pointer back into it.
|
|
225
|
-
if (lines)
|
|
226
|
-
fenceAttrs.lines = lines;
|
|
227
|
-
else if (result.anchored && result.start !== undefined && result.end !== undefined) {
|
|
228
|
-
fenceAttrs.lines = `${result.start}-${result.end}`;
|
|
229
|
-
}
|
|
230
|
-
if (linenumbers)
|
|
231
|
-
fenceAttrs.linenumbers = true;
|
|
232
|
-
if (highlightMatchLinesFound.length > 0) {
|
|
233
|
-
// Slice offsets converted into the file frame the fence expects.
|
|
234
|
-
const base = result.start ?? 1;
|
|
235
|
-
fenceAttrs.highlight = formatHighlight(highlightMatchLinesFound.map((n) => n + base - 1));
|
|
236
|
-
}
|
|
237
|
-
else if (highlight && highlight.length > 0) {
|
|
238
|
-
fenceAttrs.highlight = highlight;
|
|
239
|
-
}
|
|
240
|
-
// Construct a fence Ast.Node. Markdoc parses ``` blocks as
|
|
241
|
-
// new Ast.Node('fence', { content, language }) — same shape here.
|
|
242
|
-
return new Ast.Node('fence', fenceAttrs);
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* PostProcess: wrap standalone snippet-derived `<pre>` elements in the
|
|
246
|
-
* snippet figure chrome. Run as part of `corePipelineHooks.postProcess`.
|
|
247
|
-
*
|
|
248
|
-
* Container-nested snippets (inside `<div data-rune="code-group">` or
|
|
249
|
-
* `<div data-rune="diff">` outputs) are left alone — the container's chrome
|
|
250
|
-
* is already there and the figure would be duplicate.
|
|
251
|
-
*/
|
|
252
|
-
export function wrapStandaloneSnippets(page, _aggregated, _ctx) {
|
|
253
|
-
const wrapped = walkAndWrap(page.renderable, /* containerAncestors */ false);
|
|
254
|
-
if (wrapped === page.renderable)
|
|
255
|
-
return page;
|
|
256
|
-
return { ...page, renderable: wrapped };
|
|
257
|
-
}
|
|
258
|
-
function walkAndWrap(node, insideFenceContainer) {
|
|
259
|
-
if (Array.isArray(node)) {
|
|
260
|
-
let mutated = false;
|
|
261
|
-
const next = node.map((c) => {
|
|
262
|
-
const w = walkAndWrap(c, insideFenceContainer);
|
|
263
|
-
if (w !== c)
|
|
264
|
-
mutated = true;
|
|
265
|
-
return w;
|
|
266
|
-
});
|
|
267
|
-
return mutated ? next : node;
|
|
268
|
-
}
|
|
269
|
-
if (!Tag.isTag(node))
|
|
270
|
-
return node;
|
|
271
|
-
const tag = node;
|
|
272
|
-
const dataRune = tag.attributes?.['data-rune'];
|
|
273
|
-
const enteredFenceContainer = typeof dataRune === 'string' && FENCE_CONSUMING_CONTAINERS.has(dataRune);
|
|
274
|
-
const childAncestor = insideFenceContainer || enteredFenceContainer;
|
|
275
|
-
// Wrap matching <pre> elements that aren't inside a fence-consuming container.
|
|
276
|
-
if (tag.name === 'pre' &&
|
|
277
|
-
tag.attributes?.['data-source'] !== undefined &&
|
|
278
|
-
!insideFenceContainer) {
|
|
279
|
-
return wrapPreInFigure(tag);
|
|
280
|
-
}
|
|
281
|
-
if (!tag.children || tag.children.length === 0)
|
|
282
|
-
return tag;
|
|
283
|
-
let mutated = false;
|
|
284
|
-
const newChildren = tag.children.map((c) => {
|
|
285
|
-
const w = walkAndWrap(c, childAncestor);
|
|
286
|
-
if (w !== c)
|
|
287
|
-
mutated = true;
|
|
288
|
-
return w;
|
|
289
|
-
});
|
|
290
|
-
if (!mutated)
|
|
291
|
-
return tag;
|
|
292
|
-
return new Tag(tag.name, tag.attributes, newChildren);
|
|
293
|
-
}
|
|
294
|
-
function wrapPreInFigure(preTag) {
|
|
295
|
-
const attrs = preTag.attributes;
|
|
296
|
-
const source = String(attrs['data-source'] ?? '');
|
|
297
|
-
const linesAttr = attrs['data-lines'] !== undefined ? String(attrs['data-lines']) : undefined;
|
|
298
|
-
const figureAttrs = {
|
|
299
|
-
class: 'rf-snippet',
|
|
300
|
-
'data-rune': 'snippet',
|
|
301
|
-
'data-source-path': source,
|
|
302
|
-
};
|
|
303
|
-
if (linesAttr)
|
|
304
|
-
figureAttrs['data-lines'] = linesAttr;
|
|
305
|
-
return new Tag('figure', figureAttrs, [preTag]);
|
|
306
|
-
}
|
|
307
|
-
//# sourceMappingURL=snippet-pipeline.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snippet-pipeline.js","sourceRoot":"","sources":["../src/snippet-pipeline.ts"],"names":[],"mappings":"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"}
|