@refrakt-md/runes 0.15.0 → 0.16.1

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 (108) hide show
  1. package/dist/aggregate-resolve.d.ts +4 -0
  2. package/dist/aggregate-resolve.d.ts.map +1 -0
  3. package/dist/aggregate-resolve.js +209 -0
  4. package/dist/aggregate-resolve.js.map +1 -0
  5. package/dist/collection-helpers.d.ts +101 -0
  6. package/dist/collection-helpers.d.ts.map +1 -0
  7. package/dist/collection-helpers.js +206 -0
  8. package/dist/collection-helpers.js.map +1 -0
  9. package/dist/collection-resolve.d.ts +5 -0
  10. package/dist/collection-resolve.d.ts.map +1 -0
  11. package/dist/collection-resolve.js +209 -0
  12. package/dist/collection-resolve.js.map +1 -0
  13. package/dist/config.d.ts +13 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +87 -5
  16. package/dist/config.js.map +1 -1
  17. package/dist/deferred-body.d.ts +19 -0
  18. package/dist/deferred-body.d.ts.map +1 -0
  19. package/dist/deferred-body.js +70 -0
  20. package/dist/deferred-body.js.map +1 -0
  21. package/dist/drawer-pipeline.d.ts +72 -1
  22. package/dist/drawer-pipeline.d.ts.map +1 -1
  23. package/dist/drawer-pipeline.js +242 -1
  24. package/dist/drawer-pipeline.js.map +1 -1
  25. package/dist/expand-pipeline.js +25 -16
  26. package/dist/expand-pipeline.js.map +1 -1
  27. package/dist/field-match.d.ts +43 -0
  28. package/dist/field-match.d.ts.map +1 -0
  29. package/dist/field-match.js +121 -0
  30. package/dist/field-match.js.map +1 -0
  31. package/dist/file-ref-resolve.d.ts +22 -0
  32. package/dist/file-ref-resolve.d.ts.map +1 -0
  33. package/dist/file-ref-resolve.js +233 -0
  34. package/dist/file-ref-resolve.js.map +1 -0
  35. package/dist/functions.d.ts +36 -0
  36. package/dist/functions.d.ts.map +1 -0
  37. package/dist/functions.js +74 -0
  38. package/dist/functions.js.map +1 -0
  39. package/dist/index.d.ts +33 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +80 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/lib/index.d.ts +6 -0
  44. package/dist/lib/index.d.ts.map +1 -1
  45. package/dist/lib/index.js +9 -0
  46. package/dist/lib/index.js.map +1 -1
  47. package/dist/nodes.d.ts.map +1 -1
  48. package/dist/nodes.js +68 -9
  49. package/dist/nodes.js.map +1 -1
  50. package/dist/outline-scope.d.ts +17 -0
  51. package/dist/outline-scope.d.ts.map +1 -1
  52. package/dist/outline-scope.js +59 -0
  53. package/dist/outline-scope.js.map +1 -1
  54. package/dist/relationships-resolve.d.ts +4 -0
  55. package/dist/relationships-resolve.d.ts.map +1 -0
  56. package/dist/relationships-resolve.js +180 -0
  57. package/dist/relationships-resolve.js.map +1 -0
  58. package/dist/snippet-pipeline.d.ts +7 -5
  59. package/dist/snippet-pipeline.d.ts.map +1 -1
  60. package/dist/snippet-pipeline.js +32 -13
  61. package/dist/snippet-pipeline.js.map +1 -1
  62. package/dist/tags/aggregate.d.ts +19 -0
  63. package/dist/tags/aggregate.d.ts.map +1 -0
  64. package/dist/tags/aggregate.js +59 -0
  65. package/dist/tags/aggregate.js.map +1 -0
  66. package/dist/tags/card.d.ts +25 -0
  67. package/dist/tags/card.d.ts.map +1 -0
  68. package/dist/tags/card.js +138 -0
  69. package/dist/tags/card.js.map +1 -0
  70. package/dist/tags/codegroup.d.ts.map +1 -1
  71. package/dist/tags/codegroup.js +37 -1
  72. package/dist/tags/codegroup.js.map +1 -1
  73. package/dist/tags/collection.d.ts +10 -0
  74. package/dist/tags/collection.d.ts.map +1 -0
  75. package/dist/tags/collection.js +54 -0
  76. package/dist/tags/collection.js.map +1 -0
  77. package/dist/tags/conversation.d.ts.map +1 -1
  78. package/dist/tags/conversation.js +26 -6
  79. package/dist/tags/conversation.js.map +1 -1
  80. package/dist/tags/diff.d.ts.map +1 -1
  81. package/dist/tags/diff.js +85 -18
  82. package/dist/tags/diff.js.map +1 -1
  83. package/dist/tags/drawer.d.ts.map +1 -1
  84. package/dist/tags/drawer.js +32 -2
  85. package/dist/tags/drawer.js.map +1 -1
  86. package/dist/tags/file-ref.d.ts +21 -0
  87. package/dist/tags/file-ref.d.ts.map +1 -0
  88. package/dist/tags/file-ref.js +88 -0
  89. package/dist/tags/file-ref.js.map +1 -0
  90. package/dist/tags/progress.d.ts +9 -0
  91. package/dist/tags/progress.d.ts.map +1 -0
  92. package/dist/tags/progress.js +96 -0
  93. package/dist/tags/progress.js.map +1 -0
  94. package/dist/tags/relationships.d.ts +12 -0
  95. package/dist/tags/relationships.d.ts.map +1 -0
  96. package/dist/tags/relationships.js +62 -0
  97. package/dist/tags/relationships.js.map +1 -0
  98. package/dist/tags/snippet.d.ts.map +1 -1
  99. package/dist/tags/snippet.js +10 -0
  100. package/dist/tags/snippet.js.map +1 -1
  101. package/dist/tags/xref.d.ts.map +1 -1
  102. package/dist/tags/xref.js +9 -0
  103. package/dist/tags/xref.js.map +1 -1
  104. package/dist/xref-preview-resolve.d.ts +35 -0
  105. package/dist/xref-preview-resolve.d.ts.map +1 -0
  106. package/dist/xref-preview-resolve.js +188 -0
  107. package/dist/xref-preview-resolve.js.map +1 -0
  108. package/package.json +3 -3
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Drawer pipeline hooks (SPEC-060, WORK-257).
2
+ * Drawer pipeline hooks (SPEC-060, WORK-257; preview hoist SPEC-078, WORK-300).
3
3
  *
4
4
  * - **Register** walks each page's renderable for drawer tags
5
5
  * (`data-rune="drawer"`), and adds each as a page-scoped entity
@@ -13,8 +13,23 @@
13
13
  * tracks document outline depth (the most recent `<h{n}>` seen) and
14
14
  * rewrites the marked tag to `h{n+1}` (clamped 1..6, default h2 when
15
15
  * no preceding heading exists).
16
+ *
17
+ * - **postProcess (hoist)** turns inline `preview="drawer"` references
18
+ * into hoisted drawer sections at the page root. Reference runes
19
+ * (file-ref, xref) emit a `<meta data-field="hoist-drawer">` sentinel
20
+ * next to their inline `<a>` link; the hoist pass collects these,
21
+ * dedups by target id, detects collisions with author-declared
22
+ * drawers (author wins, hoist defers), and appends a `<section
23
+ * class="rf-drawer">` per unique reference to the end of the page
24
+ * renderable. The drawer's body and footer content is built by a
25
+ * source-specific builder that the consuming rune registers via
26
+ * `registerHoistBuilder` at module load time, so this file knows
27
+ * nothing about file paths, entity ids, or rune-specific rendering.
16
28
  */
29
+ import Markdoc from '@markdoc/markdoc';
17
30
  import type { EntityRegistry, PipelineContext, TransformedPage } from '@refrakt-md/types';
31
+ declare const Tag: typeof Markdoc.Tag;
32
+ type TagNode = InstanceType<typeof Tag>;
18
33
  /**
19
34
  * Walk the renderable tree of every page and register each drawer rune
20
35
  * as a page-scoped entity. Each drawer surfaces in the registry as
@@ -30,4 +45,60 @@ export declare function registerDrawers(pages: readonly TransformedPage[], regis
30
45
  * rewriting, so downstream postProcess steps can skip a no-op pass.
31
46
  */
32
47
  export declare function resolveAutoDrawerTitleLevels(renderable: unknown): unknown;
48
+ /** Sentinel `data-field` value emitted by reference runes on the meta tag
49
+ * that carries the drawer payload. The hoist pass collects these and
50
+ * removes them from the rendered tree. */
51
+ export declare const HOIST_DRAWER_SENTINEL = "hoist-drawer";
52
+ /** Per-page context handed to source-specific hoist builders so they can
53
+ * read the entity registry (for xref), resolve file paths against the
54
+ * project root (for file-ref), or emit pipeline messages. */
55
+ export interface HoistBuildContext {
56
+ pageUrl: string;
57
+ registry: Readonly<EntityRegistry> | undefined;
58
+ projectRoot: string | undefined;
59
+ ctx: PipelineContext;
60
+ }
61
+ /** Builder for a single hoist source (`file-ref`, `xref`, …). Reads
62
+ * the sentinel's `data-*` attributes (payload) and returns a complete
63
+ * hoisted drawer subtree — a `<section class="rf-drawer">` ready to be
64
+ * appended to the page root. Returning `null` skips the hoist (used
65
+ * when the source can't render anything meaningful, e.g. xref with an
66
+ * unresolvable entity id). */
67
+ export type HoistBuilder = (payload: Record<string, string>, context: HoistBuildContext) => TagNode | null;
68
+ /** Register a hoist builder for a given `source` value. Called by
69
+ * reference runes at module load (e.g. `file-ref.ts` calls
70
+ * `registerHoistBuilder('file-ref', …)`). Re-registration overwrites,
71
+ * which lets tests stub out a builder per case. */
72
+ export declare function registerHoistBuilder(source: string, builder: HoistBuilder): void;
73
+ /** Get the registered builder for a `source`, or undefined when none is
74
+ * registered. Exposed for diagnostics / tests. */
75
+ export declare function getHoistBuilder(source: string): HoistBuilder | undefined;
76
+ /**
77
+ * Walk a page's renderable, collect every `<meta data-field="hoist-drawer">`
78
+ * sentinel, dedup by `data-target-id`, build a hoisted `<section>` per
79
+ * unique target via the registered source builder, and return a new
80
+ * renderable with the sentinels stripped and the hoisted drawers
81
+ * appended at the page root.
82
+ *
83
+ * Rules:
84
+ * - **Dedup**: N mentions of the same target id collapse to one drawer.
85
+ * - **Collision with author-declared drawer**: if the page already
86
+ * declares `{% drawer id="X" %}` block-level and a hoist would emit
87
+ * the same id, the author drawer wins — the hoist defers, no new
88
+ * `<section>` is emitted, and an info-level pipeline message names
89
+ * both sources.
90
+ * - **Nested preview**: a hoist sentinel inside another drawer's body
91
+ * still hoists (we don't block it), but emits an info-level note so
92
+ * authors can spot it in CI output.
93
+ */
94
+ export declare function hoistPreviewDrawers(renderable: unknown, pageUrl: string, registry: Readonly<EntityRegistry> | undefined, projectRoot: string | undefined, ctx: PipelineContext): unknown;
95
+ /** Derive a drawer slug for a `file-ref` target. Encodes both path and
96
+ * lines so different ranges of the same path produce distinct ids.
97
+ *
98
+ * Examples:
99
+ * - `pathToSlug('packages/types/src/token-contract.ts')` → `'packages-types-src-token-contract-ts'`
100
+ * - `pathToSlug('packages/types/src/token-contract.ts', '42-58')` → `'packages-types-src-token-contract-ts-L42-L58'`
101
+ * - `pathToSlug('docs/My File.md', '12')` → `'docs-my-file-md-L12'` */
102
+ export declare function pathToSlug(path: string, lines?: string): string;
103
+ export {};
33
104
  //# sourceMappingURL=drawer-pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"drawer-pipeline.d.ts","sourceRoot":"","sources":["../src/drawer-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA8B1F;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,SAAS,eAAe,EAAE,EACjC,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,eAAe,GAClB,IAAI,CAqDN;AA+DD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAIzE"}
1
+ {"version":3,"file":"drawer-pipeline.d.ts","sourceRoot":"","sources":["../src/drawer-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG1F,QAAA,MAAQ,GAAG,oBAAY,CAAC;AACxB,KAAK,OAAO,GAAG,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC;AA2BxC;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,SAAS,eAAe,EAAE,EACjC,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,eAAe,GAClB,IAAI,CAqDN;AA+DD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAIzE;AAsDD;;2CAE2C;AAC3C,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AAEpD;;8DAE8D;AAC9D,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAC/C,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,GAAG,EAAE,eAAe,CAAC;CACrB;AAED;;;;;+BAK+B;AAC/B,MAAM,MAAM,YAAY,GAAG,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,EAAE,iBAAiB,KACtB,OAAO,GAAG,IAAI,CAAC;AAIpB;;;oDAGoD;AACpD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAEhF;AAED;mDACmD;AACnD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAExE;AAgBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,SAAS,EAC9C,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,EAAE,eAAe,GAClB,OAAO,CAuDT;AAkHD;;;;;;wEAMwE;AACxE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAe/D"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Drawer pipeline hooks (SPEC-060, WORK-257).
2
+ * Drawer pipeline hooks (SPEC-060, WORK-257; preview hoist SPEC-078, WORK-300).
3
3
  *
4
4
  * - **Register** walks each page's renderable for drawer tags
5
5
  * (`data-rune="drawer"`), and adds each as a page-scoped entity
@@ -13,6 +13,18 @@
13
13
  * tracks document outline depth (the most recent `<h{n}>` seen) and
14
14
  * rewrites the marked tag to `h{n+1}` (clamped 1..6, default h2 when
15
15
  * no preceding heading exists).
16
+ *
17
+ * - **postProcess (hoist)** turns inline `preview="drawer"` references
18
+ * into hoisted drawer sections at the page root. Reference runes
19
+ * (file-ref, xref) emit a `<meta data-field="hoist-drawer">` sentinel
20
+ * next to their inline `<a>` link; the hoist pass collects these,
21
+ * dedups by target id, detects collisions with author-declared
22
+ * drawers (author wins, hoist defers), and appends a `<section
23
+ * class="rf-drawer">` per unique reference to the end of the page
24
+ * renderable. The drawer's body and footer content is built by a
25
+ * source-specific builder that the consuming rune registers via
26
+ * `registerHoistBuilder` at module load time, so this file knows
27
+ * nothing about file paths, entity ids, or rune-specific rendering.
16
28
  */
17
29
  import Markdoc from '@markdoc/markdoc';
18
30
  import { DRAWER_TITLE_AUTO_MARKER } from './tags/drawer.js';
@@ -203,4 +215,233 @@ function walkAndRewriteTitles(node, state) {
203
215
  return tag;
204
216
  return new Tag(tag.name, tag.attributes, newChildren);
205
217
  }
218
+ // ─────────────────────────────────────────────────────────────────────
219
+ // Hoist preview drawers (SPEC-078, WORK-300)
220
+ // ─────────────────────────────────────────────────────────────────────
221
+ /** Sentinel `data-field` value emitted by reference runes on the meta tag
222
+ * that carries the drawer payload. The hoist pass collects these and
223
+ * removes them from the rendered tree. */
224
+ export const HOIST_DRAWER_SENTINEL = 'hoist-drawer';
225
+ const hoistBuilders = new Map();
226
+ /** Register a hoist builder for a given `source` value. Called by
227
+ * reference runes at module load (e.g. `file-ref.ts` calls
228
+ * `registerHoistBuilder('file-ref', …)`). Re-registration overwrites,
229
+ * which lets tests stub out a builder per case. */
230
+ export function registerHoistBuilder(source, builder) {
231
+ hoistBuilders.set(source, builder);
232
+ }
233
+ /** Get the registered builder for a `source`, or undefined when none is
234
+ * registered. Exposed for diagnostics / tests. */
235
+ export function getHoistBuilder(source) {
236
+ return hoistBuilders.get(source);
237
+ }
238
+ /** Internal: read every `data-*` attribute off a sentinel meta tag into
239
+ * a plain string-string record. Non-string attribute values are
240
+ * ignored. */
241
+ function readPayload(meta) {
242
+ const out = {};
243
+ const attrs = meta.attributes;
244
+ if (!attrs)
245
+ return out;
246
+ for (const [k, v] of Object.entries(attrs)) {
247
+ if (!k.startsWith('data-'))
248
+ continue;
249
+ if (typeof v === 'string')
250
+ out[k.slice('data-'.length)] = v;
251
+ }
252
+ return out;
253
+ }
254
+ /**
255
+ * Walk a page's renderable, collect every `<meta data-field="hoist-drawer">`
256
+ * sentinel, dedup by `data-target-id`, build a hoisted `<section>` per
257
+ * unique target via the registered source builder, and return a new
258
+ * renderable with the sentinels stripped and the hoisted drawers
259
+ * appended at the page root.
260
+ *
261
+ * Rules:
262
+ * - **Dedup**: N mentions of the same target id collapse to one drawer.
263
+ * - **Collision with author-declared drawer**: if the page already
264
+ * declares `{% drawer id="X" %}` block-level and a hoist would emit
265
+ * the same id, the author drawer wins — the hoist defers, no new
266
+ * `<section>` is emitted, and an info-level pipeline message names
267
+ * both sources.
268
+ * - **Nested preview**: a hoist sentinel inside another drawer's body
269
+ * still hoists (we don't block it), but emits an info-level note so
270
+ * authors can spot it in CI output.
271
+ */
272
+ export function hoistPreviewDrawers(renderable, pageUrl, registry, projectRoot, ctx) {
273
+ // First pass: collect author-declared drawer ids so collisions can
274
+ // be detected before any hoist work runs.
275
+ const authorIds = collectAuthorDrawerIds(renderable);
276
+ // Second pass: walk the tree, strip hoist sentinels, collect their
277
+ // payloads (deduped, collision-checked, nesting-checked).
278
+ const payloads = new Map();
279
+ const seenIds = new Set();
280
+ const state = {
281
+ payloads,
282
+ seenIds,
283
+ authorIds,
284
+ drawerDepth: 0,
285
+ pageUrl,
286
+ ctx,
287
+ mutated: false,
288
+ };
289
+ const stripped = walkStripSentinels(renderable, state);
290
+ if (payloads.size === 0)
291
+ return state.mutated ? stripped : renderable;
292
+ // Third pass: build hoisted drawer sections via source-specific
293
+ // builders and append to the page renderable root.
294
+ const buildContext = { pageUrl, registry, projectRoot, ctx };
295
+ const drawers = [];
296
+ for (const payload of payloads.values()) {
297
+ const source = payload.source;
298
+ if (!source) {
299
+ ctx.warn(`hoist drawer payload is missing required \`source\` attribute (target-id=${payload['target-id'] ?? '?'})`, pageUrl);
300
+ continue;
301
+ }
302
+ const builder = hoistBuilders.get(source);
303
+ if (!builder) {
304
+ ctx.warn(`hoist drawer source "${source}" has no registered builder — skipping target-id=${payload['target-id'] ?? '?'}`, pageUrl);
305
+ continue;
306
+ }
307
+ const node = builder(payload, buildContext);
308
+ if (node)
309
+ drawers.push(node);
310
+ }
311
+ if (drawers.length === 0)
312
+ return stripped;
313
+ if (Array.isArray(stripped))
314
+ return [...stripped, ...drawers];
315
+ if (Tag.isTag(stripped)) {
316
+ const t = stripped;
317
+ return new Tag(t.name, t.attributes, [...(t.children ?? []), ...drawers]);
318
+ }
319
+ return [stripped, ...drawers];
320
+ }
321
+ function collectAuthorDrawerIds(renderable) {
322
+ const ids = new Set();
323
+ const walk = (node) => {
324
+ if (Array.isArray(node)) {
325
+ for (const c of node)
326
+ walk(c);
327
+ return;
328
+ }
329
+ if (!Tag.isTag(node))
330
+ return;
331
+ const tag = node;
332
+ if (tag.attributes?.['data-rune'] === 'drawer') {
333
+ const id = tag.attributes?.['data-drawer-id'];
334
+ if (typeof id === 'string')
335
+ ids.add(id);
336
+ return; // don't recurse into a drawer's body — drawer-in-drawer is its own concern
337
+ }
338
+ for (const c of tag.children ?? [])
339
+ walk(c);
340
+ };
341
+ walk(renderable);
342
+ return ids;
343
+ }
344
+ function walkStripSentinels(node, state) {
345
+ if (Array.isArray(node)) {
346
+ let mutated = false;
347
+ const out = [];
348
+ for (const c of node) {
349
+ const w = walkStripSentinels(c, state);
350
+ if (w !== c)
351
+ mutated = true;
352
+ if (w !== STRIP)
353
+ out.push(w);
354
+ }
355
+ if (!mutated)
356
+ return node;
357
+ state.mutated = true;
358
+ return out;
359
+ }
360
+ if (!Tag.isTag(node))
361
+ return node;
362
+ const tag = node;
363
+ // Strip the sentinel meta itself.
364
+ if (tag.name === 'meta'
365
+ && tag.attributes?.['data-field'] === HOIST_DRAWER_SENTINEL) {
366
+ const payload = readPayload(tag);
367
+ const targetId = payload['target-id'];
368
+ if (!targetId) {
369
+ state.ctx.warn(`hoist drawer sentinel is missing required \`data-target-id\` attribute`, state.pageUrl);
370
+ return STRIP;
371
+ }
372
+ // Collision with author-declared drawer? Author wins; hoist defers.
373
+ if (state.authorIds.has(targetId)) {
374
+ state.ctx.info(`Hoist preview "${targetId}" (source=${payload.source ?? '?'}) collides with an author-declared {% drawer id="${targetId}" %} on this page — author drawer wins, hoist defers.`, state.pageUrl);
375
+ return STRIP;
376
+ }
377
+ // Nested preview inside another drawer's body? Still hoist, but
378
+ // flag it — dialog stacking handles it but the shape is awkward.
379
+ if (state.drawerDepth > 0) {
380
+ state.ctx.info(`Hoist preview "${targetId}" (source=${payload.source ?? '?'}) appears inside another drawer's body — nested previews stack on modern browsers, consider not nesting.`, state.pageUrl);
381
+ }
382
+ // Dedup: keep the first occurrence's payload.
383
+ if (!state.seenIds.has(targetId)) {
384
+ state.payloads.set(targetId, payload);
385
+ state.seenIds.add(targetId);
386
+ }
387
+ return STRIP;
388
+ }
389
+ const isDrawer = tag.attributes?.['data-rune'] === 'drawer';
390
+ if (isDrawer)
391
+ state.drawerDepth++;
392
+ if (!tag.children || tag.children.length === 0) {
393
+ if (isDrawer)
394
+ state.drawerDepth--;
395
+ return tag;
396
+ }
397
+ let mutated = false;
398
+ const newChildren = [];
399
+ for (const c of tag.children) {
400
+ const w = walkStripSentinels(c, state);
401
+ if (w !== c)
402
+ mutated = true;
403
+ if (w !== STRIP)
404
+ newChildren.push(w);
405
+ }
406
+ if (isDrawer)
407
+ state.drawerDepth--;
408
+ if (!mutated)
409
+ return tag;
410
+ state.mutated = true;
411
+ return new Tag(tag.name, tag.attributes, newChildren);
412
+ }
413
+ /** Sentinel value returned by `walkStripSentinels` for elements that
414
+ * should be removed from their position in the tree. Using a symbol
415
+ * lets the array-walk path tell "removed" apart from "replaced with
416
+ * another node". */
417
+ const STRIP = Symbol('hoist-strip');
418
+ // ─────────────────────────────────────────────────────────────────────
419
+ // Slug derivation helpers — used by reference runes when emitting
420
+ // sentinels and re-derived here so tests can lock the shape.
421
+ // ─────────────────────────────────────────────────────────────────────
422
+ /** Derive a drawer slug for a `file-ref` target. Encodes both path and
423
+ * lines so different ranges of the same path produce distinct ids.
424
+ *
425
+ * Examples:
426
+ * - `pathToSlug('packages/types/src/token-contract.ts')` → `'packages-types-src-token-contract-ts'`
427
+ * - `pathToSlug('packages/types/src/token-contract.ts', '42-58')` → `'packages-types-src-token-contract-ts-L42-L58'`
428
+ * - `pathToSlug('docs/My File.md', '12')` → `'docs-my-file-md-L12'` */
429
+ export function pathToSlug(path, lines) {
430
+ const base = path
431
+ .toLowerCase()
432
+ // keep [a-z0-9._-]; turn everything else (including `/`, ` `, parens) into `-`.
433
+ .replace(/[^a-z0-9.]+/g, '-')
434
+ // collapse repeated dashes and trim ends.
435
+ .replace(/-+/g, '-')
436
+ .replace(/^-|-$/g, '');
437
+ if (!lines)
438
+ return base;
439
+ const trimmed = lines.trim();
440
+ const dash = trimmed.indexOf('-');
441
+ if (dash < 0)
442
+ return `${base}-L${trimmed}`;
443
+ const start = trimmed.slice(0, dash).trim();
444
+ const end = trimmed.slice(dash + 1).trim();
445
+ return end ? `${base}-L${start}-L${end}` : `${base}-L${start}`;
446
+ }
206
447
  //# sourceMappingURL=drawer-pipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"drawer-pipeline.js","sourceRoot":"","sources":["../src/drawer-pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"drawer-pipeline.js","sourceRoot":"","sources":["../src/drawer-pipeline.ts"],"names":[],"mappings":"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"}
@@ -99,8 +99,9 @@ function resolveOnePlaceholder(tag, rc, stack) {
99
99
  rc.ctx.error(`expand "${id}" on ${rc.pageUrl} — entity not found`, rc.pageUrl);
100
100
  return errorNode(id, 'entity not found');
101
101
  }
102
- if (!entity.sourceFile || !entity.extract) {
103
- rc.ctx.error(`expand "${id}" on ${rc.pageUrl} entity type "${entity.type}" does not support embedding (no sourceFile/extract)`, rc.pageUrl);
102
+ // Embeddable via embed() OR (sourceFile + extract) — SPEC-069.
103
+ if (!entity.embed && !(entity.sourceFile && entity.extract)) {
104
+ rc.ctx.error(`expand "${id}" on ${rc.pageUrl} — entity type "${entity.type}" does not support embedding (no embed() or sourceFile/extract)`, rc.pageUrl);
104
105
  return errorNode(id, `entity type "${entity.type}" does not support embedding`);
105
106
  }
106
107
  // Cycle detection. The stack is per-page-render — embedding the same
@@ -113,23 +114,31 @@ function resolveOnePlaceholder(tag, rc, stack) {
113
114
  rc.ctx.error(`expand cycle detected on ${rc.pageUrl}. Cycle: ${cyclePath}`, rc.pageUrl);
114
115
  return errorNode(id, 'cycle detected');
115
116
  }
116
- const projectRoot = rc.embedConfig?.projectRoot;
117
- if (!projectRoot) {
118
- rc.ctx.error(`expand "${id}" — no project root configured (embedConfig.projectRoot is unset)`, rc.pageUrl);
119
- return errorNode(id, 'no project root configured');
117
+ // Resolve the entity's content: embed() (in-memory) takes precedence; else
118
+ // read + extract from the source file (requires a project root).
119
+ let extracted;
120
+ if (entity.embed) {
121
+ extracted = entity.embed();
120
122
  }
121
- let parsed;
122
- try {
123
- parsed = parseSourceFile(entity.sourceFile, projectRoot, rc.parseCache);
124
- }
125
- catch (err) {
126
- const msg = err instanceof SnippetSandboxError ? err.message : err.message;
127
- rc.ctx.error(`expand "${id}" — failed to read source file "${entity.sourceFile}": ${msg}`, rc.pageUrl);
128
- return errorNode(id, msg);
123
+ else {
124
+ const projectRoot = rc.embedConfig?.projectRoot;
125
+ if (!projectRoot) {
126
+ rc.ctx.error(`expand "${id}" — no project root configured (embedConfig.projectRoot is unset)`, rc.pageUrl);
127
+ return errorNode(id, 'no project root configured');
128
+ }
129
+ let parsed;
130
+ try {
131
+ parsed = parseSourceFile(entity.sourceFile, projectRoot, rc.parseCache);
132
+ }
133
+ catch (err) {
134
+ const msg = err instanceof SnippetSandboxError ? err.message : err.message;
135
+ rc.ctx.error(`expand "${id}" — failed to read source file "${entity.sourceFile}": ${msg}`, rc.pageUrl);
136
+ return errorNode(id, msg);
137
+ }
138
+ extracted = entity.extract(parsed);
129
139
  }
130
- const extracted = entity.extract(parsed);
131
140
  if (!extracted) {
132
- rc.ctx.error(`expand "${id}" — extractor returned no content; "${entity.sourceFile}" may have been edited out-of-sync with the registry`, rc.pageUrl);
141
+ rc.ctx.error(`expand "${id}" — extractor returned no content; the entity may be out-of-sync with the registry`, rc.pageUrl);
133
142
  return errorNode(id, 'extractor returned no content');
134
143
  }
135
144
  // Heading processing — `level=N` shifts headings by `N - 1`. Without
@@ -1 +1 @@
1
- {"version":3,"file":"expand-pipeline.js","sourceRoot":"","sources":["../src/expand-pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expand-pipeline.js","sourceRoot":"","sources":["../src/expand-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Shared field-match grammar (SPEC-070 canonical).
3
+ *
4
+ * One parser + matcher for the `field:value` selector used by `collection`'s
5
+ * `filter`, `entityRoutes`' `filter` (SPEC-069), and `backlog`.
6
+ *
7
+ * filter := clause (WS clause)*
8
+ * clause := field ":" value // split on the FIRST colon
9
+ * value := bareword | '"' .* '"' // double-quotes carry spaces
10
+ *
11
+ * Operator is selected by the value's shape:
12
+ * - exact (default): status:ready
13
+ * - glob: url:/blog/* ( * → any run of chars, anchored full-match )
14
+ * - regex: id:/^SPEC-\d+$/ ( wrapped in slashes + optional flags )
15
+ *
16
+ * Same field repeated → OR; different fields → AND. Matching is case-sensitive.
17
+ */
18
+ /** Minimal entity shape the matcher resolves fields from. */
19
+ export interface MatchableEntity {
20
+ id: string;
21
+ type: string;
22
+ sourceUrl?: string;
23
+ sourceFile?: string;
24
+ data: Record<string, unknown>;
25
+ }
26
+ export interface FieldMatchClause {
27
+ field: string;
28
+ /** Values OR'd together for this field. */
29
+ values: string[];
30
+ }
31
+ export interface ParsedFieldMatch {
32
+ clauses: FieldMatchClause[];
33
+ warnings: string[];
34
+ }
35
+ /** Parse a filter expression into clauses, collecting warnings for malformed input. */
36
+ export declare function parseFieldMatch(expr: string | undefined | null): ParsedFieldMatch;
37
+ /** Resolve a field name against an entity: top-level first, then `data`; `url` is an alias. */
38
+ export declare function resolveEntityField(entity: MatchableEntity, field: string): unknown;
39
+ /** Test whether an entity matches all clauses (AND across fields, OR within a field). */
40
+ export declare function matchesFieldMatch(entity: MatchableEntity, parsed: ParsedFieldMatch): boolean;
41
+ /** Convenience: parse + match in one call. */
42
+ export declare function matchesFilterExpr(entity: MatchableEntity, expr: string | undefined | null): boolean;
43
+ //# sourceMappingURL=field-match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-match.d.ts","sourceRoot":"","sources":["../src/field-match.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AA2BD,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,gBAAgB,CA0BjF;AAED,+FAA+F;AAC/F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAIlF;AA+BD,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAO5F;AAED,8CAA8C;AAC9C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAEnG"}