@refrakt-md/runes 0.14.3 → 0.15.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.
Files changed (64) hide show
  1. package/dist/config.d.ts +40 -4
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +154 -88
  4. package/dist/config.js.map +1 -1
  5. package/dist/drawer-pipeline.d.ts +33 -0
  6. package/dist/drawer-pipeline.d.ts.map +1 -0
  7. package/dist/drawer-pipeline.js +206 -0
  8. package/dist/drawer-pipeline.js.map +1 -0
  9. package/dist/expand-pipeline.d.ts +51 -0
  10. package/dist/expand-pipeline.d.ts.map +1 -0
  11. package/dist/expand-pipeline.js +305 -0
  12. package/dist/expand-pipeline.js.map +1 -0
  13. package/dist/index.d.ts +9 -3
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +32 -3
  16. package/dist/index.js.map +1 -1
  17. package/dist/lang-map.d.ts +32 -0
  18. package/dist/lang-map.d.ts.map +1 -0
  19. package/dist/lang-map.js +76 -0
  20. package/dist/lang-map.js.map +1 -0
  21. package/dist/lib/read-file.d.ts +78 -0
  22. package/dist/lib/read-file.d.ts.map +1 -0
  23. package/dist/lib/read-file.js +166 -0
  24. package/dist/lib/read-file.js.map +1 -0
  25. package/dist/nodes.d.ts.map +1 -1
  26. package/dist/nodes.js +12 -1
  27. package/dist/nodes.js.map +1 -1
  28. package/dist/outline-scope.d.ts +29 -0
  29. package/dist/outline-scope.d.ts.map +1 -0
  30. package/dist/outline-scope.js +149 -0
  31. package/dist/outline-scope.js.map +1 -0
  32. package/dist/plugins.d.ts +13 -0
  33. package/dist/plugins.d.ts.map +1 -1
  34. package/dist/plugins.js +65 -1
  35. package/dist/plugins.js.map +1 -1
  36. package/dist/snippet-pipeline.d.ts +42 -0
  37. package/dist/snippet-pipeline.d.ts.map +1 -0
  38. package/dist/snippet-pipeline.js +219 -0
  39. package/dist/snippet-pipeline.js.map +1 -0
  40. package/dist/tags/drawer.d.ts +26 -0
  41. package/dist/tags/drawer.d.ts.map +1 -0
  42. package/dist/tags/drawer.js +134 -0
  43. package/dist/tags/drawer.js.map +1 -0
  44. package/dist/tags/expand.d.ts +22 -0
  45. package/dist/tags/expand.d.ts.map +1 -0
  46. package/dist/tags/expand.js +76 -0
  47. package/dist/tags/expand.js.map +1 -0
  48. package/dist/tags/snippet.d.ts +19 -0
  49. package/dist/tags/snippet.d.ts.map +1 -0
  50. package/dist/tags/snippet.js +49 -0
  51. package/dist/tags/snippet.js.map +1 -0
  52. package/dist/util.d.ts +11 -0
  53. package/dist/util.d.ts.map +1 -1
  54. package/dist/util.js +35 -0
  55. package/dist/util.js.map +1 -1
  56. package/dist/xref-patterns.d.ts +57 -0
  57. package/dist/xref-patterns.d.ts.map +1 -0
  58. package/dist/xref-patterns.js +140 -0
  59. package/dist/xref-patterns.js.map +1 -0
  60. package/dist/xref-resolve.d.ts +22 -5
  61. package/dist/xref-resolve.d.ts.map +1 -1
  62. package/dist/xref-resolve.js +203 -79
  63. package/dist/xref-resolve.js.map +1 -1
  64. package/package.json +3 -3
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Outline-scope walkers (SPEC-066, WORK-259).
3
+ *
4
+ * Two generic walkers that consume the `data-outline-scope` attribute on
5
+ * any rendered element as a neutral "this subtree is a sub-outline
6
+ * boundary" marker. Any rune can set the attribute and get TOC
7
+ * isolation + heading-ID namespacing for free — the walkers themselves
8
+ * know nothing about expand, drawer, or any specific rune.
9
+ *
10
+ * Two cooperating passes over the page's renderable tree:
11
+ *
12
+ * 1. **Heading-ID walker** — for each `h1`..`h6` descended from an
13
+ * element with `data-outline-scope` set, prefix its `id` attribute
14
+ * with `${scopeValue}--`. Innermost scope wins for nested scopes.
15
+ * Headings outside any scoped subtree are untouched.
16
+ *
17
+ * 2. **TOC walker** — for each `<nav data-rune="table-of-contents">`,
18
+ * remove `<li>` items whose `<a href="#id">` points at a heading
19
+ * that's now inside an outline scope (the host TOC reflects only the
20
+ * host's structure; embedded / scoped heading entries don't belong).
21
+ *
22
+ * The TOC walker reads the set of "scoped original IDs" produced as a
23
+ * side-effect of the heading-ID walker — one tree walk seeds both.
24
+ */
25
+ /** Apply the outline-scope walkers to a page's renderable tree. Mutates
26
+ * in place (we're operating on Tag instances that we already constructed
27
+ * upstream) and returns the same root for caller chaining. */
28
+ export declare function applyOutlineScopeWalkers(renderable: unknown): unknown;
29
+ //# sourceMappingURL=outline-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline-scope.d.ts","sourceRoot":"","sources":["../src/outline-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH;;+DAE+D;AAC/D,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAOrE"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Outline-scope walkers (SPEC-066, WORK-259).
3
+ *
4
+ * Two generic walkers that consume the `data-outline-scope` attribute on
5
+ * any rendered element as a neutral "this subtree is a sub-outline
6
+ * boundary" marker. Any rune can set the attribute and get TOC
7
+ * isolation + heading-ID namespacing for free — the walkers themselves
8
+ * know nothing about expand, drawer, or any specific rune.
9
+ *
10
+ * Two cooperating passes over the page's renderable tree:
11
+ *
12
+ * 1. **Heading-ID walker** — for each `h1`..`h6` descended from an
13
+ * element with `data-outline-scope` set, prefix its `id` attribute
14
+ * with `${scopeValue}--`. Innermost scope wins for nested scopes.
15
+ * Headings outside any scoped subtree are untouched.
16
+ *
17
+ * 2. **TOC walker** — for each `<nav data-rune="table-of-contents">`,
18
+ * remove `<li>` items whose `<a href="#id">` points at a heading
19
+ * that's now inside an outline scope (the host TOC reflects only the
20
+ * host's structure; embedded / scoped heading entries don't belong).
21
+ *
22
+ * The TOC walker reads the set of "scoped original IDs" produced as a
23
+ * side-effect of the heading-ID walker — one tree walk seeds both.
24
+ */
25
+ import Markdoc from '@markdoc/markdoc';
26
+ const { Tag } = Markdoc;
27
+ const HEADING_TAG_RE = /^h[1-6]$/;
28
+ const OUTLINE_SCOPE_ATTR = 'data-outline-scope';
29
+ /** Apply the outline-scope walkers to a page's renderable tree. Mutates
30
+ * in place (we're operating on Tag instances that we already constructed
31
+ * upstream) and returns the same root for caller chaining. */
32
+ export function applyOutlineScopeWalkers(renderable) {
33
+ const scopedOriginalIds = new Set();
34
+ walkAndScopeHeadings(renderable, [], scopedOriginalIds);
35
+ if (scopedOriginalIds.size > 0) {
36
+ filterTocItems(renderable, scopedOriginalIds);
37
+ }
38
+ return renderable;
39
+ }
40
+ /** First pass — walk the tree, track an `outline-scope` stack (innermost
41
+ * wins), prefix each heading's `id` when scoped. Headings whose original
42
+ * IDs got prefixed are recorded in `scopedOriginalIds` so the TOC walker
43
+ * can drop the corresponding entries. */
44
+ function walkAndScopeHeadings(node, scopeStack, scopedOriginalIds) {
45
+ if (Array.isArray(node)) {
46
+ for (const c of node)
47
+ walkAndScopeHeadings(c, scopeStack, scopedOriginalIds);
48
+ return;
49
+ }
50
+ if (!Tag.isTag(node))
51
+ return;
52
+ const tag = node;
53
+ const attrs = tag.attributes;
54
+ const ownScope = attrs && typeof attrs[OUTLINE_SCOPE_ATTR] === 'string'
55
+ ? attrs[OUTLINE_SCOPE_ATTR]
56
+ : undefined;
57
+ if (HEADING_TAG_RE.test(tag.name) && scopeStack.length > 0) {
58
+ const scope = scopeStack[scopeStack.length - 1];
59
+ const id = typeof attrs?.id === 'string' ? attrs.id : undefined;
60
+ if (id && !id.startsWith(`${scope}--`)) {
61
+ scopedOriginalIds.add(id);
62
+ tag.attributes.id = `${scope}--${id}`;
63
+ }
64
+ // Don't descend into headings (their children are inline text /
65
+ // formatting, no further headings or scopes possible).
66
+ return;
67
+ }
68
+ const childScopeStack = ownScope !== undefined
69
+ ? [...scopeStack, ownScope]
70
+ : scopeStack;
71
+ if (!tag.children || tag.children.length === 0)
72
+ return;
73
+ for (const c of tag.children) {
74
+ walkAndScopeHeadings(c, childScopeStack, scopedOriginalIds);
75
+ }
76
+ }
77
+ /** Second pass — walk for `<nav data-rune="table-of-contents">` elements
78
+ * and drop `<li>` items whose `<a>` points at a heading whose original
79
+ * id is in `scopedIds`. Operates in-place on each TOC's children array. */
80
+ function filterTocItems(node, scopedIds) {
81
+ if (Array.isArray(node)) {
82
+ for (const c of node)
83
+ filterTocItems(c, scopedIds);
84
+ return;
85
+ }
86
+ if (!Tag.isTag(node))
87
+ return;
88
+ const tag = node;
89
+ const attrs = tag.attributes;
90
+ if (attrs?.['data-rune'] === 'table-of-contents') {
91
+ filterTocList(tag, scopedIds);
92
+ // A TOC nav doesn't contain further TOC navs, but a heading-id
93
+ // rewrite shouldn't traverse into it either — its children are
94
+ // the rendered list, not page content.
95
+ return;
96
+ }
97
+ if (!tag.children)
98
+ return;
99
+ for (const c of tag.children)
100
+ filterTocItems(c, scopedIds);
101
+ }
102
+ /** Drop list items whose anchor href points to a scoped heading. Walks
103
+ * `<ul>`/`<ol>` containers anywhere inside the TOC tag, removing matching
104
+ * `<li>`s. Recurses to handle nested lists (depth-based TOC trees). */
105
+ function filterTocList(tocTag, scopedIds) {
106
+ for (const child of tocTag.children ?? []) {
107
+ filterTocItems_recurse(child, scopedIds);
108
+ }
109
+ }
110
+ function filterTocItems_recurse(node, scopedIds) {
111
+ if (Array.isArray(node)) {
112
+ for (const c of node)
113
+ filterTocItems_recurse(c, scopedIds);
114
+ return;
115
+ }
116
+ if (!Tag.isTag(node))
117
+ return;
118
+ const tag = node;
119
+ if (tag.name === 'ul' || tag.name === 'ol') {
120
+ tag.children = (tag.children ?? []).filter((child) => {
121
+ if (!Tag.isTag(child))
122
+ return true;
123
+ const li = child;
124
+ if (li.name !== 'li')
125
+ return true;
126
+ // Drop the li when any anchor inside it points to a scoped id.
127
+ return !liReferencesScopedHeading(li, scopedIds);
128
+ });
129
+ }
130
+ for (const c of tag.children ?? [])
131
+ filterTocItems_recurse(c, scopedIds);
132
+ }
133
+ function liReferencesScopedHeading(li, scopedIds) {
134
+ for (const c of li.children ?? []) {
135
+ if (!Tag.isTag(c))
136
+ continue;
137
+ const tag = c;
138
+ if (tag.name === 'a') {
139
+ const href = tag.attributes?.href;
140
+ if (typeof href === 'string' && href.startsWith('#') && scopedIds.has(href.slice(1))) {
141
+ return true;
142
+ }
143
+ }
144
+ if (liReferencesScopedHeading(tag, scopedIds))
145
+ return true;
146
+ }
147
+ return false;
148
+ }
149
+ //# sourceMappingURL=outline-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline-scope.js","sourceRoot":"","sources":["../src/outline-scope.ts"],"names":[],"mappings":"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"}
package/dist/plugins.d.ts CHANGED
@@ -12,6 +12,11 @@ export interface LoadedPlugin {
12
12
  runes: Record<string, Rune>;
13
13
  /** Fixture strings for the inspect command (keyed by rune name) */
14
14
  fixtures: Record<string, string>;
15
+ /** Plugin-declared file roots, resolved to absolute directory paths.
16
+ * Keys are namespace names (the `<ns>` in `<ns>:filename` references);
17
+ * values are absolute paths on disk. Empty when the plugin doesn't
18
+ * declare any. */
19
+ fileRoots: Record<string, string>;
15
20
  }
16
21
  /** Result of merging multiple plugins */
17
22
  export interface MergedPluginResult {
@@ -33,7 +38,15 @@ export interface MergedPluginResult {
33
38
  provenance: Record<string, RuneProvenance>;
34
39
  /** Fixture strings from plugins for the inspect command */
35
40
  fixtures: Record<string, string>;
41
+ /** Merged plugin file roots — namespace → absolute directory path.
42
+ * Plugin-vs-plugin collisions throw at merge time; user-config-vs-plugin
43
+ * collisions are handled by the caller (user config wins). */
44
+ fileRoots: Record<string, string>;
36
45
  }
46
+ /** Validate that a file-root namespace name is allowed. Throws on reserved
47
+ * values or invalid syntax (empty name). Used both at plugin merge time
48
+ * and at user-config-resolution time. */
49
+ export declare function assertFileRootNamespaceAllowed(namespace: string, source: string): void;
37
50
  /**
38
51
  * Load a plugin by npm package name.
39
52
  *
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,IAAI,EAA0B,MAAM,WAAW,CAAC;AAEzD,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC5B,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IAClC,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,uDAAuD;IACvD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,6BAA6B;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAuC9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,YAAY,EAAE,EACtB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,kBAAkB,CAqKpB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACxC;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CAAE,CA4B9E;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CA2CvB;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA+BpG"}
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
package/dist/plugins.js CHANGED
@@ -1,4 +1,18 @@
1
1
  import { defineRune, runeTagMap } from './rune.js';
2
+ /** Reserved namespace names that cannot be used by user config or plugins. */
3
+ const RESERVED_FILE_ROOT_NAMESPACES = new Set(['site']);
4
+ /** Validate that a file-root namespace name is allowed. Throws on reserved
5
+ * values or invalid syntax (empty name). Used both at plugin merge time
6
+ * and at user-config-resolution time. */
7
+ export function assertFileRootNamespaceAllowed(namespace, source) {
8
+ if (namespace.length === 0) {
9
+ throw new Error(`File-root namespace from ${source} is empty — namespaces must be non-empty strings.`);
10
+ }
11
+ if (RESERVED_FILE_ROOT_NAMESPACES.has(namespace)) {
12
+ throw new Error(`File-root namespace "${namespace}" from ${source} is reserved. ` +
13
+ `Pick a different namespace name.`);
14
+ }
15
+ }
2
16
  /**
3
17
  * Load a plugin by npm package name.
4
18
  *
@@ -37,7 +51,39 @@ export async function loadPlugin(npmPackageName) {
37
51
  fixtures[runeName] = content;
38
52
  }
39
53
  }
40
- return { pkg, npmName: npmPackageName, runes, fixtures };
54
+ const fileRoots = await resolvePluginFileRoots(pkg, npmPackageName);
55
+ return { pkg, npmName: npmPackageName, runes, fixtures, fileRoots };
56
+ }
57
+ /** Resolve a plugin's declared `fileRoots` to absolute on-disk paths.
58
+ *
59
+ * Paths are interpreted relative to the plugin package's own directory
60
+ * (the dir containing the plugin's `package.json`). Throws if the package
61
+ * can't be located on disk (workspace-link cases where `require.resolve`
62
+ * fails) — fileRoots that can't be reached is a misconfig worth surfacing,
63
+ * not silently dropping like file fixtures. */
64
+ async function resolvePluginFileRoots(pkg, npmPackageName) {
65
+ const declared = pkg.fileRoots;
66
+ if (!declared || Object.keys(declared).length === 0)
67
+ return {};
68
+ const { createRequire } = await import('node:module');
69
+ const { dirname, resolve } = await import('node:path');
70
+ let pkgDir;
71
+ try {
72
+ const require = createRequire(import.meta.url);
73
+ pkgDir = dirname(require.resolve(`${npmPackageName}/package.json`));
74
+ }
75
+ catch (err) {
76
+ throw new Error(`Plugin "${npmPackageName}" declares fileRoots but its package directory could not be located: ${err.message}`);
77
+ }
78
+ const resolved = {};
79
+ for (const [namespace, relativePath] of Object.entries(declared)) {
80
+ assertFileRootNamespaceAllowed(namespace, `plugin "${npmPackageName}"`);
81
+ if (typeof relativePath !== 'string' || relativePath.length === 0) {
82
+ throw new Error(`Plugin "${npmPackageName}" fileRoots entry "${namespace}" has an invalid path. Expected a non-empty string relative to the plugin package directory.`);
83
+ }
84
+ resolved[namespace] = resolve(pkgDir, relativePath);
85
+ }
86
+ return resolved;
41
87
  }
42
88
  /**
43
89
  * Merge multiple loaded plugins into a single result.
@@ -184,6 +230,22 @@ export function mergePlugins(loaded, coreRuneNames, prefer) {
184
230
  }
185
231
  }
186
232
  }
233
+ // Merge file roots across plugins. Plugin-vs-plugin collisions throw —
234
+ // plugins should pick distinct namespace names. User-config wins over
235
+ // plugin collisions, but that's handled outside this function.
236
+ const fileRoots = {};
237
+ const fileRootProvenance = new Map();
238
+ for (const loadedPkg of loaded) {
239
+ for (const [namespace, absPath] of Object.entries(loadedPkg.fileRoots)) {
240
+ if (fileRoots[namespace]) {
241
+ const previous = fileRootProvenance.get(namespace);
242
+ throw new Error(`Plugin file-root namespace "${namespace}" is registered by both "${previous}" and "${loadedPkg.npmName}". ` +
243
+ `Plugins must pick distinct namespace names; resolve by renaming one of them.`);
244
+ }
245
+ fileRoots[namespace] = absPath;
246
+ fileRootProvenance.set(namespace, loadedPkg.npmName);
247
+ }
248
+ }
187
249
  return {
188
250
  runes,
189
251
  tags,
@@ -194,6 +256,7 @@ export function mergePlugins(loaded, coreRuneNames, prefer) {
194
256
  plugins: loaded.map(l => l.pkg),
195
257
  provenance,
196
258
  fixtures,
259
+ fileRoots,
197
260
  };
198
261
  }
199
262
  /**
@@ -263,6 +326,7 @@ export async function loadLocalRunes(localConfig, projectRoot) {
263
326
  npmName: '__local__',
264
327
  runes,
265
328
  fixtures: {},
329
+ fileRoots: {},
266
330
  };
267
331
  }
268
332
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Snippet pipeline hooks (SPEC-062).
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` and `language` (so
7
+ * the existing code-block transform syntax-highlights it identically to
8
+ * a triple-backtick fence) plus `data-snippet-source` / `data-snippet-lines`
9
+ * attributes for downstream tooling and the wrap step.
10
+ *
11
+ * - **PostProcess** walks the rendered renderable tree, finds every `<pre>`
12
+ * element carrying `data-snippet-source`, and — when not nested under a
13
+ * fence-consuming container (`data-rune="code-group"`, `data-rune="diff"`)
14
+ * — wraps it in `<figure class="rf-snippet">` so themes can style snippet
15
+ * blocks distinctly from regular code blocks (and tooling can find
16
+ * `data-source-path` on the figure).
17
+ *
18
+ * This separation is the SPEC-062 composition story: container runes see
19
+ * snippet output as a regular fence (because preprocess made it one) and
20
+ * consume it transparently; standalone snippets get the figure chrome via
21
+ * the wrap step. Captions / titles are intentionally not provided — wrap
22
+ * a snippet in `{% codegroup title="..." %}` if you want a labelled chrome.
23
+ */
24
+ import type { Node } from '@markdoc/markdoc';
25
+ import type { PreprocessContext, PreprocessPage, PipelineContext, TransformedPage, AggregatedData } from '@refrakt-md/types';
26
+ /**
27
+ * Preprocess: replace every `{% snippet %}` tag in the AST with a `fence`
28
+ * node carrying the resolved file content. After this runs, no snippet
29
+ * tags remain in the AST — only fences (some "snippet-derived" identified
30
+ * by their `data-snippet-source` attribute).
31
+ */
32
+ export declare function preprocessSnippets(ast: Node, page: PreprocessPage, ctx: PreprocessContext): Node | void;
33
+ /**
34
+ * PostProcess: wrap standalone snippet-derived `<pre>` elements in the
35
+ * snippet figure chrome. Run as part of `corePipelineHooks.postProcess`.
36
+ *
37
+ * Container-nested snippets (inside `<div data-rune="code-group">` or
38
+ * `<div data-rune="diff">` outputs) are left alone — the container's chrome
39
+ * is already there and the figure would be duplicate.
40
+ */
41
+ export declare function wrapStandaloneSnippets(page: TransformedPage, _aggregated: AggregatedData, _ctx: PipelineContext): TransformedPage;
42
+ //# sourceMappingURL=snippet-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-pipeline.d.ts","sourceRoot":"","sources":["../src/snippet-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAiC7H;;;;;GAKG;AACH,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,iBAAiB,GACpB,IAAI,GAAG,IAAI,CAYb;AAsGD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,cAAc,EAC3B,IAAI,EAAE,eAAe,GACnB,eAAe,CAIjB"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Snippet pipeline hooks (SPEC-062).
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` and `language` (so
7
+ * the existing code-block transform syntax-highlights it identically to
8
+ * a triple-backtick fence) plus `data-snippet-source` / `data-snippet-lines`
9
+ * attributes for downstream tooling and the wrap step.
10
+ *
11
+ * - **PostProcess** walks the rendered renderable tree, finds every `<pre>`
12
+ * element carrying `data-snippet-source`, and — when not nested under a
13
+ * fence-consuming container (`data-rune="code-group"`, `data-rune="diff"`)
14
+ * — wraps it in `<figure class="rf-snippet">` so themes can style snippet
15
+ * blocks distinctly from regular code blocks (and tooling can find
16
+ * `data-source-path` on the figure).
17
+ *
18
+ * This separation is the SPEC-062 composition story: container runes see
19
+ * snippet output as a regular fence (because preprocess made it one) and
20
+ * consume it transparently; standalone snippets get the figure chrome via
21
+ * the wrap step. Captions / titles are intentionally not provided — wrap
22
+ * a snippet in `{% codegroup title="..." %}` if you want a labelled chrome.
23
+ */
24
+ import Markdoc from '@markdoc/markdoc';
25
+ import { readSnippetFile, SnippetSandboxError } from './lib/read-file.js';
26
+ import { inferLanguage } from './lang-map.js';
27
+ const { Ast, Tag } = Markdoc;
28
+ /** Resolve a Markdoc attribute value to a string. Handles literal strings
29
+ * and Markdoc `Variable` AST nodes (e.g. `path=$file.path` parses as a
30
+ * Variable, not a string). Unresolvable references (variable missing from
31
+ * the context, or attribute is some other AST shape) return an empty
32
+ * string — matching transform-time variable-evaluation behaviour. */
33
+ function resolveAttributeValue(value, variables) {
34
+ if (value === undefined || value === null)
35
+ return '';
36
+ if (typeof value === 'string')
37
+ return value;
38
+ if (typeof value === 'number' || typeof value === 'boolean')
39
+ return String(value);
40
+ if (typeof value === 'object' && '$$mdtype' in value) {
41
+ const node = value;
42
+ if (node.$$mdtype === 'Variable' && Array.isArray(node.path)) {
43
+ let current = variables;
44
+ for (const segment of node.path) {
45
+ if (current === null || current === undefined)
46
+ return '';
47
+ current = current[segment];
48
+ }
49
+ return current === null || current === undefined ? '' : String(current);
50
+ }
51
+ }
52
+ return '';
53
+ }
54
+ /** Containers whose output consumes their fence children — wrapping a
55
+ * snippet-derived `<pre>` inside them would be duplicate chrome. */
56
+ const FENCE_CONSUMING_CONTAINERS = new Set(['code-group', 'diff']);
57
+ /**
58
+ * Preprocess: replace every `{% snippet %}` tag in the AST with a `fence`
59
+ * node carrying the resolved file content. After this runs, no snippet
60
+ * tags remain in the AST — only fences (some "snippet-derived" identified
61
+ * by their `data-snippet-source` attribute).
62
+ */
63
+ export function preprocessSnippets(ast, page, ctx) {
64
+ if (!ctx.projectRoot) {
65
+ // No project root configured — silently no-op. Snippet refs will fall
66
+ // through to the schema's transform, which throws a clear error.
67
+ return;
68
+ }
69
+ let mutated = false;
70
+ walkAndReplaceSnippets(ast, page, ctx, ctx.projectRoot, (didReplace) => {
71
+ if (didReplace)
72
+ mutated = true;
73
+ });
74
+ return mutated ? ast : undefined;
75
+ }
76
+ function walkAndReplaceSnippets(node, page, ctx, projectRoot, onReplaced) {
77
+ if (!node.children)
78
+ return;
79
+ for (let i = 0; i < node.children.length; i++) {
80
+ const child = node.children[i];
81
+ if (child.type === 'tag' && child.tag === 'snippet') {
82
+ // Always produce a fence — successful resolution returns the
83
+ // real fence; sandbox / missing-file / variable-resolution errors
84
+ // produce an error fence so the snippet tag never reaches the
85
+ // schema's transform (which throws). The build keeps going and
86
+ // the failure is visible on the rendered page.
87
+ node.children[i] = resolveSnippetToFence(child, page, ctx, projectRoot);
88
+ onReplaced(true);
89
+ // Don't recurse — replaced.
90
+ continue;
91
+ }
92
+ walkAndReplaceSnippets(child, page, ctx, projectRoot, onReplaced);
93
+ }
94
+ }
95
+ /** Build a `fence` AST node that renders a clear error message in place of
96
+ * the snippet. Used when resolution fails (sandbox, missing file, malformed
97
+ * lines, unresolvable variable reference). The fence carries the original
98
+ * attempted path in `data-snippet-source` so tooling can still detect
99
+ * snippet provenance. */
100
+ function makeErrorFence(pathAttr, message) {
101
+ return new Ast.Node('fence', {
102
+ content: `snippet error: ${message}\n`,
103
+ language: 'text',
104
+ 'data-snippet-source': pathAttr || '(unresolved)',
105
+ 'data-snippet-error': message,
106
+ });
107
+ }
108
+ function resolveSnippetToFence(tag, page, ctx, projectRoot) {
109
+ const pathAttr = resolveAttributeValue(tag.attributes.path, ctx.variables);
110
+ const lines = tag.attributes.lines !== undefined
111
+ ? resolveAttributeValue(tag.attributes.lines, ctx.variables)
112
+ : undefined;
113
+ const langAttr = tag.attributes.lang !== undefined
114
+ ? resolveAttributeValue(tag.attributes.lang, ctx.variables)
115
+ : undefined;
116
+ if (!pathAttr) {
117
+ const msg = 'snippet `path` attribute is required (and an unresolvable variable reference resolves to empty)';
118
+ ctx.error(msg, page.url);
119
+ return makeErrorFence('', msg);
120
+ }
121
+ let result;
122
+ try {
123
+ result = readSnippetFile({
124
+ pathAttr,
125
+ projectRoot,
126
+ lines: lines || undefined,
127
+ referencingPage: page.relativePath,
128
+ });
129
+ }
130
+ catch (err) {
131
+ if (err instanceof SnippetSandboxError) {
132
+ ctx.error(err.message, page.url);
133
+ return makeErrorFence(pathAttr, err.message);
134
+ }
135
+ // Unexpected error type — still produce an error fence so the build
136
+ // doesn't crash on a single page.
137
+ const msg = err.message ?? String(err);
138
+ ctx.error(`snippet "${pathAttr}" failed unexpectedly: ${msg}`, page.url);
139
+ return makeErrorFence(pathAttr, msg);
140
+ }
141
+ for (const warning of result.warnings) {
142
+ ctx.warn(warning, page.url);
143
+ }
144
+ const language = (langAttr && langAttr.length > 0) ? langAttr : inferLanguage(result.relativePath);
145
+ const fenceAttrs = {
146
+ content: result.content,
147
+ language,
148
+ 'data-snippet-source': result.relativePath,
149
+ };
150
+ if (lines)
151
+ fenceAttrs['data-snippet-lines'] = lines;
152
+ // Construct a fence Ast.Node. Markdoc parses ``` blocks as
153
+ // new Ast.Node('fence', { content, language }) — same shape here.
154
+ return new Ast.Node('fence', fenceAttrs);
155
+ }
156
+ /**
157
+ * PostProcess: wrap standalone snippet-derived `<pre>` elements in the
158
+ * snippet figure chrome. Run as part of `corePipelineHooks.postProcess`.
159
+ *
160
+ * Container-nested snippets (inside `<div data-rune="code-group">` or
161
+ * `<div data-rune="diff">` outputs) are left alone — the container's chrome
162
+ * is already there and the figure would be duplicate.
163
+ */
164
+ export function wrapStandaloneSnippets(page, _aggregated, _ctx) {
165
+ const wrapped = walkAndWrap(page.renderable, /* containerAncestors */ false);
166
+ if (wrapped === page.renderable)
167
+ return page;
168
+ return { ...page, renderable: wrapped };
169
+ }
170
+ function walkAndWrap(node, insideFenceContainer) {
171
+ if (Array.isArray(node)) {
172
+ let mutated = false;
173
+ const next = node.map((c) => {
174
+ const w = walkAndWrap(c, insideFenceContainer);
175
+ if (w !== c)
176
+ mutated = true;
177
+ return w;
178
+ });
179
+ return mutated ? next : node;
180
+ }
181
+ if (!Tag.isTag(node))
182
+ return node;
183
+ const tag = node;
184
+ const dataRune = tag.attributes?.['data-rune'];
185
+ const enteredFenceContainer = typeof dataRune === 'string' && FENCE_CONSUMING_CONTAINERS.has(dataRune);
186
+ const childAncestor = insideFenceContainer || enteredFenceContainer;
187
+ // Wrap matching <pre> elements that aren't inside a fence-consuming container.
188
+ if (tag.name === 'pre' &&
189
+ tag.attributes?.['data-snippet-source'] !== undefined &&
190
+ !insideFenceContainer) {
191
+ return wrapPreInFigure(tag);
192
+ }
193
+ if (!tag.children || tag.children.length === 0)
194
+ return tag;
195
+ let mutated = false;
196
+ const newChildren = tag.children.map((c) => {
197
+ const w = walkAndWrap(c, childAncestor);
198
+ if (w !== c)
199
+ mutated = true;
200
+ return w;
201
+ });
202
+ if (!mutated)
203
+ return tag;
204
+ return new Tag(tag.name, tag.attributes, newChildren);
205
+ }
206
+ function wrapPreInFigure(preTag) {
207
+ const attrs = preTag.attributes;
208
+ const source = String(attrs['data-snippet-source'] ?? '');
209
+ const linesAttr = attrs['data-snippet-lines'] !== undefined ? String(attrs['data-snippet-lines']) : undefined;
210
+ const figureAttrs = {
211
+ class: 'rf-snippet',
212
+ 'data-rune': 'snippet',
213
+ 'data-source-path': source,
214
+ };
215
+ if (linesAttr)
216
+ figureAttrs['data-lines'] = linesAttr;
217
+ return new Tag('figure', figureAttrs, [preTag]);
218
+ }
219
+ //# sourceMappingURL=snippet-pipeline.js.map