@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
@@ -0,0 +1,121 @@
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
+ const TOP_LEVEL_FIELDS = new Set(['id', 'type', 'sourceFile', 'sourceUrl']);
19
+ /** Split an expression into tokens, honoring double-quoted spans. */
20
+ function tokenize(expr) {
21
+ const tokens = [];
22
+ let cur = '';
23
+ let inQuotes = false;
24
+ for (const ch of expr) {
25
+ if (ch === '"') {
26
+ inQuotes = !inQuotes;
27
+ continue;
28
+ }
29
+ if (!inQuotes && /\s/.test(ch)) {
30
+ if (cur) {
31
+ tokens.push(cur);
32
+ cur = '';
33
+ }
34
+ continue;
35
+ }
36
+ cur += ch;
37
+ }
38
+ if (cur)
39
+ tokens.push(cur);
40
+ return tokens;
41
+ }
42
+ /** Parse a filter expression into clauses, collecting warnings for malformed input. */
43
+ export function parseFieldMatch(expr) {
44
+ const warnings = [];
45
+ const byField = new Map();
46
+ if (!expr || !expr.trim())
47
+ return { clauses: [], warnings };
48
+ for (const token of tokenize(expr)) {
49
+ const colon = token.indexOf(':');
50
+ if (colon === -1) {
51
+ warnings.push(`Ignored filter clause "${token}": expected field:value`);
52
+ continue;
53
+ }
54
+ const field = token.slice(0, colon);
55
+ if (!field) {
56
+ warnings.push(`Ignored filter clause "${token}": empty field name`);
57
+ continue;
58
+ }
59
+ const value = token.slice(colon + 1);
60
+ const existing = byField.get(field);
61
+ if (existing)
62
+ existing.push(value);
63
+ else
64
+ byField.set(field, [value]);
65
+ }
66
+ return {
67
+ clauses: [...byField.entries()].map(([field, values]) => ({ field, values })),
68
+ warnings,
69
+ };
70
+ }
71
+ /** Resolve a field name against an entity: top-level first, then `data`; `url` is an alias. */
72
+ export function resolveEntityField(entity, field) {
73
+ if (field === 'url')
74
+ return entity.sourceUrl ?? entity.data.url ?? '';
75
+ if (TOP_LEVEL_FIELDS.has(field))
76
+ return entity[field];
77
+ return entity.data[field];
78
+ }
79
+ function globToRegExp(value) {
80
+ const parts = value.split('*').map((p) => p.replace(/[.+?^${}()|[\]\\]/g, '\\$&'));
81
+ return new RegExp('^' + parts.join('.*') + '$');
82
+ }
83
+ const REGEX_LITERAL = /^\/(.+)\/([gimsuy]*)$/;
84
+ const REGEX_METACHAR = /[\\^$.+?()[\]{}|]/;
85
+ /** Does a single candidate string satisfy a clause value (operator chosen by value shape)? */
86
+ function matchValue(candidate, value) {
87
+ const m = value.match(REGEX_LITERAL);
88
+ if (m && (m[2].length > 0 || REGEX_METACHAR.test(m[1]))) {
89
+ try {
90
+ return new RegExp(m[1], m[2]).test(candidate);
91
+ }
92
+ catch {
93
+ return candidate === value; // malformed regex → treat literally
94
+ }
95
+ }
96
+ if (value.includes('*'))
97
+ return globToRegExp(value).test(candidate);
98
+ return candidate === value;
99
+ }
100
+ /** Normalize a resolved field value to candidate strings (arrays / comma-joined → members). */
101
+ function candidates(resolved) {
102
+ if (Array.isArray(resolved))
103
+ return resolved.map((v) => String(v ?? ''));
104
+ const s = String(resolved ?? '');
105
+ return s.includes(',') ? s.split(',').map((p) => p.trim()) : [s];
106
+ }
107
+ /** Test whether an entity matches all clauses (AND across fields, OR within a field). */
108
+ export function matchesFieldMatch(entity, parsed) {
109
+ for (const clause of parsed.clauses) {
110
+ const cands = candidates(resolveEntityField(entity, clause.field));
111
+ const fieldMatches = clause.values.some((value) => cands.some((c) => matchValue(c, value)));
112
+ if (!fieldMatches)
113
+ return false;
114
+ }
115
+ return true;
116
+ }
117
+ /** Convenience: parse + match in one call. */
118
+ export function matchesFilterExpr(entity, expr) {
119
+ return matchesFieldMatch(entity, parseFieldMatch(expr));
120
+ }
121
+ //# sourceMappingURL=field-match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-match.js","sourceRoot":"","sources":["../src/field-match.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * file-ref postProcess resolver (SPEC-078, WORK-301).
3
+ *
4
+ * Walks the rendered page, finds `file-ref` sentinels, binds each inline
5
+ * `<a>` to the canonical GitHub URL built from the site's `repoUrl` /
6
+ * `repoBranch`, and (when `preview="drawer"` is set) emits a
7
+ * `hoist-drawer` sentinel that the drawer pipeline picks up to render a
8
+ * preview drawer containing the file's snippet + a "View source on
9
+ * GitHub →" footer link.
10
+ */
11
+ import type { PipelineContext } from '@refrakt-md/types';
12
+ /**
13
+ * Resolve every `file-ref` sentinel on the page: bind the inline `<a>` to
14
+ * the GitHub URL (or in-page anchor when `preview="drawer"`), emit a
15
+ * sibling hoist sentinel for the drawer pipeline when previewing, and
16
+ * strip the file-ref metas from the rendered tree.
17
+ *
18
+ * Re-entrant per page — the "missing repoUrl" build warning fires at most
19
+ * once per page even when many file-refs share the gap.
20
+ */
21
+ export declare function resolveFileRefs(renderable: unknown, pageUrl: string, repoUrl: string | undefined, repoBranch: string | undefined, ctx: PipelineContext): unknown;
22
+ //# sourceMappingURL=file-ref-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-ref-resolve.d.ts","sourceRoot":"","sources":["../src/file-ref-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAyDzD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,GAAG,EAAE,eAAe,GAClB,OAAO,CA6BT"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * file-ref postProcess resolver (SPEC-078, WORK-301).
3
+ *
4
+ * Walks the rendered page, finds `file-ref` sentinels, binds each inline
5
+ * `<a>` to the canonical GitHub URL built from the site's `repoUrl` /
6
+ * `repoBranch`, and (when `preview="drawer"` is set) emits a
7
+ * `hoist-drawer` sentinel that the drawer pipeline picks up to render a
8
+ * preview drawer containing the file's snippet + a "View source on
9
+ * GitHub →" footer link.
10
+ */
11
+ import Markdoc from '@markdoc/markdoc';
12
+ import { buildGithubBlobUrl } from '@refrakt-md/transform';
13
+ import { HOIST_DRAWER_SENTINEL, pathToSlug, registerHoistBuilder, } from './drawer-pipeline.js';
14
+ import { FILE_REF_SENTINEL } from './tags/file-ref.js';
15
+ import { readSnippetFile, SnippetSandboxError } from './lib/read-file.js';
16
+ import { inferLanguage } from './lang-map.js';
17
+ const { Tag } = Markdoc;
18
+ function isTag(node) {
19
+ return Tag.isTag(node);
20
+ }
21
+ function metaContent(tag, field) {
22
+ for (const child of tag.children ?? []) {
23
+ if (isTag(child) && child.name === 'meta' && child.attributes['data-field'] === field) {
24
+ return String(child.attributes.content ?? '');
25
+ }
26
+ }
27
+ return '';
28
+ }
29
+ function hasSentinel(tag) {
30
+ return (tag.children ?? []).some(c => isTag(c) && c.name === 'meta' && c.attributes['data-field'] === FILE_REF_SENTINEL);
31
+ }
32
+ function readQuery(tag) {
33
+ return {
34
+ path: metaContent(tag, 'file-ref-path'),
35
+ lines: metaContent(tag, 'file-ref-lines'),
36
+ label: metaContent(tag, 'file-ref-label'),
37
+ preview: metaContent(tag, 'file-ref-preview'),
38
+ };
39
+ }
40
+ function defaultLabel(path) {
41
+ if (!path)
42
+ return '';
43
+ const trimmed = path.endsWith('/') ? path.slice(0, -1) : path;
44
+ const slash = trimmed.lastIndexOf('/');
45
+ return slash >= 0 ? trimmed.slice(slash + 1) : trimmed;
46
+ }
47
+ /**
48
+ * Resolve every `file-ref` sentinel on the page: bind the inline `<a>` to
49
+ * the GitHub URL (or in-page anchor when `preview="drawer"`), emit a
50
+ * sibling hoist sentinel for the drawer pipeline when previewing, and
51
+ * strip the file-ref metas from the rendered tree.
52
+ *
53
+ * Re-entrant per page — the "missing repoUrl" build warning fires at most
54
+ * once per page even when many file-refs share the gap.
55
+ */
56
+ export function resolveFileRefs(renderable, pageUrl, repoUrl, repoBranch, ctx) {
57
+ // Reset the per-page "missing repoUrl" warning gate.
58
+ const localWarned = { value: false };
59
+ const walk = (node) => {
60
+ if (Array.isArray(node)) {
61
+ let mutated = false;
62
+ const out = node.map(c => {
63
+ const w = walk(c);
64
+ if (w !== c)
65
+ mutated = true;
66
+ return w;
67
+ });
68
+ return mutated ? out : node;
69
+ }
70
+ if (!isTag(node))
71
+ return node;
72
+ const tag = node;
73
+ if (tag.attributes?.['data-rune'] === 'file-ref' && hasSentinel(tag)) {
74
+ return resolveOne(tag, pageUrl, repoUrl, repoBranch, ctx, localWarned);
75
+ }
76
+ if (!tag.children || tag.children.length === 0)
77
+ return tag;
78
+ let mutated = false;
79
+ const next = tag.children.map(c => {
80
+ const w = walk(c);
81
+ if (w !== c)
82
+ mutated = true;
83
+ return w;
84
+ });
85
+ if (!mutated)
86
+ return tag;
87
+ return new Tag(tag.name, tag.attributes, next);
88
+ };
89
+ return walk(renderable);
90
+ }
91
+ function resolveOne(tag, pageUrl, repoUrl, repoBranch, ctx, localWarned) {
92
+ const q = readQuery(tag);
93
+ const label = q.label || defaultLabel(q.path) || q.path;
94
+ const slug = pathToSlug(q.path, q.lines);
95
+ const previewDrawer = q.preview === 'drawer';
96
+ const githubUrl = buildGithubBlobUrl(repoUrl, repoBranch, q.path, q.lines);
97
+ if (!githubUrl && !localWarned.value) {
98
+ ctx.warn(`file-ref on this page has no GitHub URL — site config is missing \`repoUrl\` (path="${q.path}"). Configure \`SiteConfig.repoUrl\` to render canonical "View source" links.`, pageUrl);
99
+ localWarned.value = true;
100
+ }
101
+ // Build the inline anchor. With preview, it points at the hoist anchor;
102
+ // without preview, it points at the GitHub URL (or has no href when
103
+ // repoUrl is absent).
104
+ const anchorAttrs = {};
105
+ if (previewDrawer) {
106
+ anchorAttrs.href = `#drawer-${slug}`;
107
+ anchorAttrs['aria-controls'] = `drawer-${slug}`;
108
+ anchorAttrs['aria-expanded'] = 'false';
109
+ anchorAttrs['data-target-type'] = 'drawer';
110
+ }
111
+ else if (githubUrl) {
112
+ anchorAttrs.href = githubUrl;
113
+ }
114
+ const anchor = new Tag('a', anchorAttrs, [label]);
115
+ const children = [anchor];
116
+ if (previewDrawer) {
117
+ // Emit the hoist sentinel as a sibling of the inline link. The
118
+ // drawer pipeline (WORK-300) picks this up, builds the drawer via
119
+ // the registered builder, and strips this meta from the tree.
120
+ const sentinel = new Tag('meta', {
121
+ 'data-field': HOIST_DRAWER_SENTINEL,
122
+ 'data-source': 'file-ref',
123
+ 'data-target-id': slug,
124
+ 'data-title': label,
125
+ 'data-path': q.path,
126
+ 'data-lines': q.lines,
127
+ 'data-github-url': githubUrl ?? '',
128
+ });
129
+ children.push(sentinel);
130
+ }
131
+ // Preserve the outer span (carrying `data-rune="file-ref"`) so the
132
+ // engine's BEM class on it survives; replace the children with the
133
+ // resolved anchor + (when previewing) hoist sentinel.
134
+ return new Tag(tag.name, tag.attributes, children);
135
+ }
136
+ // ─────────────────────────────────────────────────────────────────────
137
+ // Hoist builder — registered with the drawer pipeline so it can build
138
+ // preview drawers for `file-ref preview="drawer"` references.
139
+ // ─────────────────────────────────────────────────────────────────────
140
+ function buildFileRefHoist(payload, context) {
141
+ const filePath = payload.path;
142
+ const lines = payload.lines;
143
+ const title = payload.title || defaultLabel(filePath);
144
+ const targetId = payload['target-id'];
145
+ const githubUrl = payload['github-url'];
146
+ if (!filePath || !targetId) {
147
+ context.ctx.warn(`file-ref hoist payload missing required path or target-id`, context.pageUrl);
148
+ return null;
149
+ }
150
+ if (!context.projectRoot) {
151
+ context.ctx.error(`file-ref hoist for "${filePath}" requires a project root in the pipeline; none was threaded through. Drawer body will be empty.`, context.pageUrl);
152
+ return null;
153
+ }
154
+ // Read the file (same sandbox as snippet). Errors surface as build
155
+ // errors naming the resolved path and the referencing page.
156
+ let fileContent = '';
157
+ let lang = 'text';
158
+ try {
159
+ const result = readSnippetFile({
160
+ pathAttr: filePath,
161
+ projectRoot: context.projectRoot,
162
+ lines: lines || undefined,
163
+ referencingPage: context.pageUrl,
164
+ });
165
+ fileContent = result.content;
166
+ lang = inferLanguage(result.relativePath);
167
+ for (const w of result.warnings)
168
+ context.ctx.warn(`file-ref ${filePath}: ${w}`, context.pageUrl);
169
+ }
170
+ catch (err) {
171
+ const msg = err instanceof SnippetSandboxError
172
+ ? err.message
173
+ : `file-ref ${filePath}: ${err instanceof Error ? err.message : String(err)}`;
174
+ context.ctx.error(msg, context.pageUrl);
175
+ return null;
176
+ }
177
+ // Drawer body — a figure.rf-snippet wrapping a `<pre data-language>`
178
+ // so the existing snippet CSS + highlight transform pick it up.
179
+ // `data-language` lives on BOTH the <pre> (for snippet CSS hooks +
180
+ // the highlight transform's color-scheme stamping pass) AND on the
181
+ // <code> with text children — the highlight walker only highlights
182
+ // nodes whose children are text, so the <code> is the actual hit.
183
+ const codeBlock = new Tag('pre', {
184
+ 'data-language': lang,
185
+ 'data-codeblock': 'true',
186
+ }, [new Tag('code', { 'data-language': lang, 'data-codeblock': 'true' }, [fileContent])]);
187
+ const snippetFigure = new Tag('figure', {
188
+ class: 'rf-snippet',
189
+ 'data-rune': 'snippet',
190
+ 'data-source-path': filePath,
191
+ ...(lines ? { 'data-lines': lines } : {}),
192
+ }, [codeBlock]);
193
+ const body = new Tag('div', { 'data-name': 'body', class: 'rf-drawer__body' }, [snippetFigure]);
194
+ // Header — title + close button (close hidden until the behavior
195
+ // layer reveals it, same as authored drawers).
196
+ const titleHeading = new Tag('h3', { 'data-name': 'title', class: 'rf-drawer__title' }, [title]);
197
+ const closeButton = new Tag('button', {
198
+ type: 'button',
199
+ 'aria-label': 'Close',
200
+ hidden: true,
201
+ 'data-name': 'close',
202
+ class: 'rf-drawer__close',
203
+ }, ['×']);
204
+ const header = new Tag('header', {
205
+ 'data-name': 'header',
206
+ class: 'rf-drawer__header',
207
+ }, [titleHeading, closeButton]);
208
+ // Footer — "View source on GitHub →" link. Hides when no
209
+ // repoUrl is configured (githubUrl will be empty in the payload).
210
+ const footerChildren = [];
211
+ if (githubUrl) {
212
+ const arrow = ' →';
213
+ footerChildren.push(new Tag('a', { href: githubUrl, rel: 'external noopener', target: '_blank' }, [`View source on GitHub${arrow}`]));
214
+ }
215
+ const footer = footerChildren.length > 0
216
+ ? new Tag('footer', { 'data-name': 'footer', class: 'rf-drawer__footer' }, footerChildren)
217
+ : null;
218
+ const drawerChildren = [header, body];
219
+ if (footer)
220
+ drawerChildren.push(footer);
221
+ const section = new Tag('section', {
222
+ id: `drawer-${targetId}`,
223
+ class: 'rf-drawer',
224
+ 'data-rune': 'drawer',
225
+ 'data-drawer-id': targetId,
226
+ 'data-side': 'right',
227
+ 'data-size': 'md',
228
+ }, drawerChildren);
229
+ return section;
230
+ }
231
+ // Register the builder when this module is imported.
232
+ registerHoistBuilder('file-ref', buildFileRefHoist);
233
+ //# sourceMappingURL=file-ref-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-ref-resolve.js","sourceRoot":"","sources":["../src/file-ref-resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Shared markdoc formatter functions (SPEC-070 / WORK-265).
3
+ *
4
+ * Author-facing value formatters usable anywhere markdoc transforms run:
5
+ * collection cells/templates, `entityRoutes` render strings, ordinary content.
6
+ * Keeps value formatting out of `fields` projection and out of any bespoke DSL.
7
+ *
8
+ * {% currency($item.data.price, "EUR") %} → €1,234.00
9
+ * {% date($item.data.published) %} → Jan 15, 2024
10
+ * {% number($item.data.views) %} → 1,234,567
11
+ * {% join($item.data.tags, " · ") %} → a · b · c
12
+ * concat("milestone:", $item.id) → "milestone:v0.16.0"
13
+ */
14
+ import type { ConfigFunction } from '@markdoc/markdoc';
15
+ export declare const currency: ConfigFunction;
16
+ export declare const date: ConfigFunction;
17
+ export declare const number: ConfigFunction;
18
+ export declare const join: ConfigFunction;
19
+ /**
20
+ * String concatenation of all positional arguments. Each is stringified
21
+ * (null/undefined → empty string) and concatenated without a separator.
22
+ * Fills the gap Markdoc's string-literal grammar leaves — `"foo:$bar"`
23
+ * doesn't interpolate, so use `concat("foo:", $bar)` to compose dynamic
24
+ * attribute values like `filter` / `url` from variables at transform time.
25
+ */
26
+ export declare const concat: ConfigFunction;
27
+ /**
28
+ * Title-case a slug/enum-ish token: split camelCase, turn `-`/`_` into spaces,
29
+ * capitalize each word. `blocked-by` → "Blocked By", `prepTime` → "Prep Time".
30
+ * Shared by collection's `fields` headers and the relationships rune's kind
31
+ * labels, and exposed as the `humanize` markdoc function.
32
+ */
33
+ export declare function humanize(value: string): string;
34
+ /** The shared formatter-function set, keyed by their markdoc name. */
35
+ export declare const functions: Record<string, ConfigFunction>;
36
+ //# sourceMappingURL=functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,eAAO,MAAM,QAAQ,EAAE,cAWtB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,cAOlB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,cAMpB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,cAOlB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,EAAE,cAIpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM9C;AAQD,sEAAsE;AACtE,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAkE,CAAC"}
@@ -0,0 +1,74 @@
1
+ const LOCALE = 'en-US';
2
+ export const currency = {
3
+ transform(parameters) {
4
+ const amount = Number(parameters[0]);
5
+ const code = String(parameters[1] ?? 'USD');
6
+ if (!Number.isFinite(amount))
7
+ return String(parameters[0] ?? '');
8
+ try {
9
+ return new Intl.NumberFormat(LOCALE, { style: 'currency', currency: code }).format(amount);
10
+ }
11
+ catch {
12
+ return `${code} ${amount}`;
13
+ }
14
+ },
15
+ };
16
+ export const date = {
17
+ transform(parameters) {
18
+ const raw = parameters[0];
19
+ const d = new Date(String(raw));
20
+ if (Number.isNaN(d.getTime()))
21
+ return String(raw ?? '');
22
+ return new Intl.DateTimeFormat(LOCALE, { year: 'numeric', month: 'short', day: 'numeric' }).format(d);
23
+ },
24
+ };
25
+ export const number = {
26
+ transform(parameters) {
27
+ const n = Number(parameters[0]);
28
+ if (!Number.isFinite(n))
29
+ return String(parameters[0] ?? '');
30
+ return new Intl.NumberFormat(LOCALE).format(n);
31
+ },
32
+ };
33
+ export const join = {
34
+ transform(parameters) {
35
+ const value = parameters[0];
36
+ const sep = parameters[1] != null ? String(parameters[1]) : ', ';
37
+ if (Array.isArray(value))
38
+ return value.map((v) => String(v ?? '')).join(sep);
39
+ return String(value ?? '');
40
+ },
41
+ };
42
+ /**
43
+ * String concatenation of all positional arguments. Each is stringified
44
+ * (null/undefined → empty string) and concatenated without a separator.
45
+ * Fills the gap Markdoc's string-literal grammar leaves — `"foo:$bar"`
46
+ * doesn't interpolate, so use `concat("foo:", $bar)` to compose dynamic
47
+ * attribute values like `filter` / `url` from variables at transform time.
48
+ */
49
+ export const concat = {
50
+ transform(parameters) {
51
+ return Object.values(parameters).map((v) => (v == null ? '' : String(v))).join('');
52
+ },
53
+ };
54
+ /**
55
+ * Title-case a slug/enum-ish token: split camelCase, turn `-`/`_` into spaces,
56
+ * capitalize each word. `blocked-by` → "Blocked By", `prepTime` → "Prep Time".
57
+ * Shared by collection's `fields` headers and the relationships rune's kind
58
+ * labels, and exposed as the `humanize` markdoc function.
59
+ */
60
+ export function humanize(value) {
61
+ return String(value ?? '')
62
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
63
+ .replace(/[-_]+/g, ' ')
64
+ .replace(/\b\w/g, (c) => c.toUpperCase())
65
+ .trim();
66
+ }
67
+ const humanizeFn = {
68
+ transform(parameters) {
69
+ return humanize(String(parameters[0] ?? ''));
70
+ },
71
+ };
72
+ /** The shared formatter-function set, keyed by their markdoc name. */
73
+ export const functions = { currency, date, number, join, concat, humanize: humanizeFn };
74
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { Page } from './documents/page.js';
2
2
  import { DocPage } from './documents/doc.js';
3
+ import './file-ref-resolve.js';
4
+ import './xref-preview-resolve.js';
3
5
  import Markdoc from '@markdoc/markdoc';
4
6
  export * from './interfaces.js';
5
7
  export { Rune, defineRune, runeTagMap } from './rune.js';
@@ -7,6 +9,23 @@ export { RenderableNodeCursor } from './lib/renderable.js';
7
9
  export { createContentModelSchema, createComponentRenderable, asNodes, schemaContentModels, sanitizeSandboxContent } from './lib/index.js';
8
10
  export type { DeprecationRule, ContentModelSchemaOptions } from './lib/index.js';
9
11
  export { resolve, resolveSequence, resolveDelimited, resolveContentModel, resolveListItems, evaluateCondition, matchesType } from './lib/resolver.js';
12
+ export { parseFieldMatch, matchesFieldMatch, matchesFilterExpr, resolveEntityField } from './field-match.js';
13
+ export type { MatchableEntity, FieldMatchClause, ParsedFieldMatch } from './field-match.js';
14
+ export { DEFERRED_BODY_ATTR, captureDeferredBodies, readDeferredBody, transformDeferredTemplate } from './deferred-body.js';
15
+ export { resolveCollections } from './collection-resolve.js';
16
+ export { resolveRelationships } from './relationships-resolve.js';
17
+ export { resolveAggregates } from './aggregate-resolve.js';
18
+ export { resolveFileRefs } from './file-ref-resolve.js';
19
+ export { FILE_REF_SENTINEL } from './tags/file-ref.js';
20
+ export { resolveXrefPreviews } from './xref-preview-resolve.js';
21
+ export { RELATIONSHIPS_SENTINEL } from './tags/relationships.js';
22
+ export { AGGREGATE_SENTINEL } from './tags/aggregate.js';
23
+ export { hoistPreviewDrawers, registerHoistBuilder, getHoistBuilder, pathToSlug, HOIST_DRAWER_SENTINEL, } from './drawer-pipeline.js';
24
+ export type { HoistBuilder, HoistBuildContext } from './drawer-pipeline.js';
25
+ export { Ordering, buildOrdering, sortEntities, groupEntities, groupBy, entityUrl, entityTitle, fieldValue, titleLink, projectItem, renderItemTemplate, } from './collection-helpers.js';
26
+ export type { CollectionEmbedConfig } from './collection-helpers.js';
27
+ export { COLLECTION_SENTINEL } from './tags/collection.js';
28
+ export { functions, currency, date, number, join, concat, humanize } from './functions.js';
10
29
  export { linkItem, pageSectionProperties, buildLayoutMetas, extractMediaImage, unwrapParagraphImages, name as nameHelper, description as descriptionHelper, SplitablePageSectionModel, SplitLayoutModel, splitLayoutAttributes } from './tags/common.js';
11
30
  export type { LayoutMetas } from './tags/common.js';
12
31
  export { extractHeadings, firstH1, headingsToList } from './util.js';
@@ -88,8 +107,20 @@ export declare const runes: {
88
107
  xref: import("./rune.js").Rune;
89
108
  expand: import("./rune.js").Rune;
90
109
  badge: import("./rune.js").Rune;
110
+ collection: import("./rune.js").Rune;
111
+ relationships: import("./rune.js").Rune;
112
+ aggregate: import("./rune.js").Rune;
113
+ 'file-ref': import("./rune.js").Rune;
114
+ progress: import("./rune.js").Rune;
115
+ card: import("./rune.js").Rune;
91
116
  };
92
- /** Markdoc-compatible tags map derived from runes + Markdoc built-in tags */
117
+ /** Markdoc-compatible tags map derived from runes + Markdoc built-in tags.
118
+ *
119
+ * `link` is exposed as a tag in addition to its node registration (which
120
+ * handles `[text](url)` markdown syntax). Markdown link URLs are literal at
121
+ * parse-time, so they can't reference variables — `{% link href=$item.url %}`
122
+ * gives template authors a way to build dynamic links inside collection
123
+ * cells, partials, etc. */
93
124
  export declare const tags: {
94
125
  else: import("@markdoc/markdoc/dist/src/types.js").Schema<Readonly<Partial<{
95
126
  nodes: Partial<Record<import("@markdoc/markdoc/dist/src/types.js").NodeType, import("@markdoc/markdoc/dist/src/types.js").Schema<Readonly<Partial<any>>, string>>>;
@@ -151,6 +182,7 @@ export declare const tags: {
151
182
  environment?: string | undefined;
152
183
  } | undefined;
153
184
  }>>, string>;
185
+ link: Markdoc.Schema;
154
186
  };
155
187
  export declare const nodes: {
156
188
  heading: Markdoc.Schema;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}