@cudoment/cudoc 0.1.0 → 0.2.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 (101) hide show
  1. package/README.md +20 -47
  2. package/dist/dataset.d.ts +10 -0
  3. package/dist/dataset.d.ts.map +1 -0
  4. package/dist/dataset.js +44 -0
  5. package/dist/dataset.js.map +1 -0
  6. package/dist/document.d.ts +74 -0
  7. package/dist/document.d.ts.map +1 -0
  8. package/dist/document.js +435 -0
  9. package/dist/document.js.map +1 -0
  10. package/dist/internal/core/ast/validate.d.ts.map +1 -1
  11. package/dist/internal/core/ast/validate.js +9 -2
  12. package/dist/internal/core/ast/validate.js.map +1 -1
  13. package/dist/internal/core/query/nodes.d.ts.map +1 -1
  14. package/dist/internal/core/query/nodes.js +3 -1
  15. package/dist/internal/core/query/nodes.js.map +1 -1
  16. package/dist/internal/core/query/sections.d.ts.map +1 -1
  17. package/dist/internal/core/query/sections.js +2 -1
  18. package/dist/internal/core/query/sections.js.map +1 -1
  19. package/dist/internal/core/syntax/heading-metadata.js +1 -1
  20. package/dist/internal/core/syntax/heading-metadata.js.map +1 -1
  21. package/dist/internal/transforms/table-cell-list/build-table-cell-children.d.ts +5 -0
  22. package/dist/internal/transforms/table-cell-list/build-table-cell-children.d.ts.map +1 -0
  23. package/dist/internal/transforms/table-cell-list/build-table-cell-children.js +169 -0
  24. package/dist/internal/transforms/table-cell-list/build-table-cell-children.js.map +1 -0
  25. package/dist/internal/transforms/table-cell-list/elements.d.ts +15 -0
  26. package/dist/internal/transforms/table-cell-list/elements.d.ts.map +1 -0
  27. package/dist/internal/transforms/table-cell-list/elements.js +16 -0
  28. package/dist/internal/transforms/table-cell-list/elements.js.map +1 -0
  29. package/dist/internal/transforms/table-cell-list/index.d.ts +18 -0
  30. package/dist/internal/transforms/table-cell-list/index.d.ts.map +1 -0
  31. package/dist/internal/transforms/table-cell-list/index.js +45 -0
  32. package/dist/internal/transforms/table-cell-list/index.js.map +1 -0
  33. package/dist/internal/transforms/table-cell-list/nodes.d.ts +9 -0
  34. package/dist/internal/transforms/table-cell-list/nodes.d.ts.map +1 -0
  35. package/dist/internal/transforms/table-cell-list/nodes.js +24 -0
  36. package/dist/internal/transforms/table-cell-list/nodes.js.map +1 -0
  37. package/dist/internal/transforms/table-cell-list/parse-inline-markdown.d.ts +6 -0
  38. package/dist/internal/transforms/table-cell-list/parse-inline-markdown.d.ts.map +1 -0
  39. package/dist/internal/transforms/table-cell-list/parse-inline-markdown.js +101 -0
  40. package/dist/internal/transforms/table-cell-list/parse-inline-markdown.js.map +1 -0
  41. package/dist/internal/transforms/table-cell-list/parse-table-cell-list.d.ts +22 -0
  42. package/dist/internal/transforms/table-cell-list/parse-table-cell-list.d.ts.map +1 -0
  43. package/dist/internal/transforms/table-cell-list/parse-table-cell-list.js +315 -0
  44. package/dist/internal/transforms/table-cell-list/parse-table-cell-list.js.map +1 -0
  45. package/dist/internal/transforms/table-column-layout/create-table.d.ts +45 -0
  46. package/dist/internal/transforms/table-column-layout/create-table.d.ts.map +1 -0
  47. package/dist/internal/transforms/table-column-layout/create-table.js +121 -0
  48. package/dist/internal/transforms/table-column-layout/create-table.js.map +1 -0
  49. package/dist/internal/transforms/table-column-layout/index.d.ts +51 -0
  50. package/dist/internal/transforms/table-column-layout/index.d.ts.map +1 -0
  51. package/dist/internal/transforms/table-column-layout/index.js +96 -0
  52. package/dist/internal/transforms/table-column-layout/index.js.map +1 -0
  53. package/dist/internal/transforms/table-column-layout/split-cell.d.ts +24 -0
  54. package/dist/internal/transforms/table-column-layout/split-cell.d.ts.map +1 -0
  55. package/dist/internal/transforms/table-column-layout/split-cell.js +219 -0
  56. package/dist/internal/transforms/table-column-layout/split-cell.js.map +1 -0
  57. package/dist/markdown.d.ts +10 -0
  58. package/dist/markdown.d.ts.map +1 -0
  59. package/dist/markdown.js +47 -0
  60. package/dist/markdown.js.map +1 -0
  61. package/dist/node/cli.d.ts +3 -0
  62. package/dist/node/cli.d.ts.map +1 -0
  63. package/dist/node/cli.js +37 -0
  64. package/dist/node/cli.js.map +1 -0
  65. package/dist/node/dataset.d.ts +19 -0
  66. package/dist/node/dataset.d.ts.map +1 -0
  67. package/dist/node/dataset.js +51 -0
  68. package/dist/node/dataset.js.map +1 -0
  69. package/dist/node/library.d.ts +56 -0
  70. package/dist/node/library.d.ts.map +1 -0
  71. package/dist/node/library.js +163 -0
  72. package/dist/node/library.js.map +1 -0
  73. package/dist/node/paths.d.ts.map +1 -1
  74. package/dist/node/paths.js +1 -1
  75. package/dist/node/paths.js.map +1 -1
  76. package/dist/node/prepare-embeds.d.ts +13 -0
  77. package/dist/node/prepare-embeds.d.ts.map +1 -0
  78. package/dist/node/prepare-embeds.js +54 -0
  79. package/dist/node/prepare-embeds.js.map +1 -0
  80. package/dist/node/resolve-embed.d.ts +33 -0
  81. package/dist/node/resolve-embed.d.ts.map +1 -0
  82. package/dist/node/resolve-embed.js +386 -0
  83. package/dist/node/resolve-embed.js.map +1 -0
  84. package/dist/node/storage.d.ts +10 -0
  85. package/dist/node/storage.d.ts.map +1 -0
  86. package/dist/node/storage.js +85 -0
  87. package/dist/node/storage.js.map +1 -0
  88. package/dist/query.d.ts +1 -0
  89. package/dist/query.d.ts.map +1 -1
  90. package/dist/query.js +1 -0
  91. package/dist/query.js.map +1 -1
  92. package/dist/render.d.ts +11 -0
  93. package/dist/render.d.ts.map +1 -0
  94. package/dist/render.js +63 -0
  95. package/dist/render.js.map +1 -0
  96. package/dist/sections.d.ts +15 -0
  97. package/dist/sections.d.ts.map +1 -0
  98. package/dist/sections.js +40 -0
  99. package/dist/sections.js.map +1 -0
  100. package/package.json +66 -5
  101. package/styles.css +34 -0
@@ -0,0 +1,386 @@
1
+ import path from "node:path";
2
+ import { fromHtml } from "hast-util-from-html";
3
+ import { parse as parseYaml } from "yaml";
4
+ import { collectSections } from "../sections.js";
5
+ import { nodeText, visibleHeadingText } from "../document.js";
6
+ import { compileDocument } from "../markdown.js";
7
+ export function parseEmbedSpec(value) {
8
+ const spec = parseYaml(value, { maxAliasCount: 100 });
9
+ if (!spec || typeof spec !== "object" || Array.isArray(spec))
10
+ throw new Error("cudoc: embed must be a YAML mapping");
11
+ for (const key of Object.keys(spec))
12
+ if (!["sources", "select", "render", "replace"].includes(key))
13
+ throw new Error(`cudoc: unknown embed option ${key}`);
14
+ if (!Array.isArray(spec.sources) ||
15
+ !spec.sources.length ||
16
+ spec.sources.some((s) => typeof s !== "string" || !s))
17
+ throw new Error("cudoc: embed sources must be a non-empty string array");
18
+ if (spec.render &&
19
+ spec.render !== "section" &&
20
+ (spec.render.type !== "table" ||
21
+ (spec.render.columns !== undefined &&
22
+ (!Array.isArray(spec.render.columns) ||
23
+ !spec.render.columns.length ||
24
+ spec.render.columns.some((c) => !["title", "link", "summary"].includes(c))))))
25
+ throw new Error("cudoc: invalid embed render configuration");
26
+ if (spec.select) {
27
+ if (typeof spec.select !== "object" || Array.isArray(spec.select))
28
+ throw new Error("cudoc: select must be a mapping");
29
+ for (const key of Object.keys(spec.select))
30
+ if (!["anchors", "titles", "depth", "includeChildren"].includes(key))
31
+ throw new Error(`cudoc: unknown selection ${key}`);
32
+ if (spec.select.includeChildren !== undefined &&
33
+ typeof spec.select.includeChildren !== "boolean")
34
+ throw new Error("cudoc: includeChildren must be boolean");
35
+ for (const key of ["anchors", "titles"])
36
+ if (spec.select[key] !== undefined &&
37
+ (!Array.isArray(spec.select[key]) ||
38
+ spec.select[key].some((v) => typeof v !== "string")))
39
+ throw new Error(`cudoc: select.${key} must be strings`);
40
+ }
41
+ if (spec.replace !== undefined &&
42
+ (!Array.isArray(spec.replace) ||
43
+ spec.replace.some((r) => !r ||
44
+ typeof r.find !== "string" ||
45
+ !r.find ||
46
+ typeof r.replace !== "string" ||
47
+ (r.flags !== undefined && typeof r.flags !== "string") ||
48
+ (r.regex !== undefined && typeof r.regex !== "boolean"))))
49
+ throw new Error("cudoc: invalid replacement rules");
50
+ return spec;
51
+ }
52
+ export function resolveDocumentReference(library, reference, from) {
53
+ const hash = reference.indexOf("#");
54
+ const pathname = hash < 0 ? reference : reference.slice(0, hash);
55
+ const anchor = hash < 0 ? undefined : decodeURIComponent(reference.slice(hash + 1));
56
+ if (/^[a-z][\w+.-]*:/i.test(pathname) || pathname.includes("\\"))
57
+ throw new Error(`cudoc: embed source must be a local document: ${reference}`);
58
+ const id = (pathname
59
+ ? pathname.startsWith("/")
60
+ ? pathname.slice(1)
61
+ : path.posix.join(path.posix.dirname(from), pathname)
62
+ : from).replace(/\.mdx?$/i, "");
63
+ if (id === ".." || id.startsWith("../"))
64
+ throw new Error(`cudoc: embed source escapes root: ${reference}`);
65
+ const document = library.documents.find((d) => d.id === id);
66
+ if (!document)
67
+ throw new Error(`cudoc: missing document ${reference} referenced from ${from}`);
68
+ return { document, anchor };
69
+ }
70
+ function replaceSource(source, rules, documentId) {
71
+ return rules.reduce((value, rule, index) => {
72
+ try {
73
+ return rule.regex
74
+ ? value.replace(new RegExp(rule.find, rule.flags ?? "g"), rule.replace)
75
+ : value.split(rule.find).join(rule.replace);
76
+ }
77
+ catch (cause) {
78
+ throw new Error(`cudoc: invalid replacement ${index + 1} in ${documentId}`, { cause });
79
+ }
80
+ }, source);
81
+ }
82
+ function transformedSection(document, anchor, tree, rules, library, includeChildren = true) {
83
+ if (!rules.length)
84
+ return structuredClone(tree);
85
+ if (!document.source)
86
+ throw new Error(`cudoc: rebuild ${document.id} with source snapshots before replacing Markdown`);
87
+ const range = anchor ? document.source.sections[anchor] : undefined;
88
+ if (anchor && !range)
89
+ throw new Error(`cudoc: missing source range for ${document.id}#${anchor}; rebuild documents`);
90
+ const end = range
91
+ ? includeChildren
92
+ ? range.end
93
+ : (range.ownEnd ?? range.end)
94
+ : undefined;
95
+ const original = range
96
+ ? document.source.text.slice(range.start, end)
97
+ : document.source.text;
98
+ const dependencies = range?.dependencies
99
+ .filter(([start, stop]) => start < range.start || stop > end)
100
+ .map(([start, end]) => document.source.text.slice(start, end))
101
+ .join("\n\n");
102
+ const source = replaceSource(original, rules, document.id) +
103
+ (dependencies ? `\n\n${dependencies}` : "");
104
+ const options = { ...library.options, format: document.source.format };
105
+ if (!library.compiler &&
106
+ options.host &&
107
+ !["markdown", "next", "html"].includes(options.host))
108
+ throw new Error(`cudoc: replacing ${options.host} Markdown requires the original host compiler`);
109
+ try {
110
+ return library.compiler
111
+ ? library.compiler(source, {
112
+ id: document.id,
113
+ filePath: library.sourceRoot
114
+ ? path.resolve(library.sourceRoot, document.sourcePath)
115
+ : document.sourcePath,
116
+ options,
117
+ }).tree
118
+ : compileDocument(source, options).tree;
119
+ }
120
+ catch (cause) {
121
+ throw new Error(`cudoc: replaced Markdown could not compile in ${document.id} at source offset ${range?.start ?? 0}`, { cause });
122
+ }
123
+ }
124
+ const visitNodes = (node, fn) => {
125
+ fn(node);
126
+ node.children?.forEach((n) => visitNodes(n, fn));
127
+ };
128
+ const htmlAttribute = (value, quote) => {
129
+ const tree = fromHtml(`<span data-value=${quote}${value}${quote}></span>`, {
130
+ fragment: true,
131
+ });
132
+ const element = tree.children[0];
133
+ return element?.type === "element"
134
+ ? String(element.properties.dataValue ?? value)
135
+ : value;
136
+ };
137
+ const idsInNode = (node) => {
138
+ const ids = [];
139
+ const id = node.data?.hProperties?.id;
140
+ if (typeof id === "string")
141
+ ids.push(id);
142
+ if (node.type === "html" && node.value) {
143
+ const tree = fromHtml(node.value, { fragment: true });
144
+ const walk = (value) => {
145
+ if (value.type === "element" && typeof value.properties.id === "string")
146
+ ids.push(value.properties.id);
147
+ if ("children" in value)
148
+ value.children.forEach(walk);
149
+ };
150
+ walk(tree);
151
+ }
152
+ return ids;
153
+ };
154
+ function rebase(tree, document, library, prefix) {
155
+ const ids = new Set();
156
+ visitNodes(tree, (node) => {
157
+ idsInNode(node).forEach((id) => ids.add(id));
158
+ });
159
+ const sourceUrl = (url) => {
160
+ if (/^(?:[a-z][\w+.-]*:|\/\/)/i.test(url))
161
+ return url;
162
+ if (url.startsWith("#")) {
163
+ let id = url.slice(1);
164
+ try {
165
+ id = decodeURIComponent(id);
166
+ }
167
+ catch {
168
+ /* Preserve malformed URL. */
169
+ }
170
+ return ids.has(id) ? `#${prefix}${id}` : `${document.route}${url}`;
171
+ }
172
+ const match = url.match(/^([^?#]*)(.*)$/);
173
+ const absolute = path.posix.normalize(match[1].startsWith("/")
174
+ ? match[1]
175
+ : `/${path.posix.join(path.posix.dirname(document.sourcePath), match[1])}`);
176
+ const target = library.documents.find((d) => `/${d.sourcePath}` === absolute ||
177
+ `/${d.id}` === absolute ||
178
+ `/${d.id}/` === absolute);
179
+ return `${target?.route ?? absolute}${match[2]}`;
180
+ };
181
+ visitNodes(tree, (node) => {
182
+ const id = node.data?.hProperties?.id;
183
+ if (typeof id === "string")
184
+ node.data.hProperties.id = `${prefix}${id}`;
185
+ if (typeof node.url === "string")
186
+ node.url = sourceUrl(node.url);
187
+ if ([
188
+ "linkReference",
189
+ "imageReference",
190
+ "footnoteReference",
191
+ "definition",
192
+ "footnoteDefinition",
193
+ ].includes(node.type) &&
194
+ node.identifier)
195
+ node.identifier = `${prefix}${node.identifier}`;
196
+ if (node.type === "html" && node.value)
197
+ node.value = node.value.replace(/<!--[\s\S]*?-->|<(?:[^"'<>]|"[^"]*"|'[^']*')*>/g, (tag) => tag.startsWith("<!--")
198
+ ? tag
199
+ : tag.replace(/(\s(href|src|id)\s*=\s*)(?:(["'])(.*?)\3|([^\s>]+))/gi, (_match, before, attribute, quote, quoted, unquoted) => {
200
+ const delimiter = quote ?? '"';
201
+ const value = htmlAttribute(quoted ?? unquoted, delimiter);
202
+ const replacement = attribute.toLowerCase() === "id"
203
+ ? `${prefix}${value}`
204
+ : sourceUrl(value);
205
+ return `${before}${delimiter}${replacement.replace(/&/g, "&amp;").replace(new RegExp(delimiter, "g"), delimiter === '"' ? "&quot;" : "&#39;")}${delimiter}`;
206
+ }));
207
+ const attrs = node.data?.hProperties;
208
+ for (const key of ["href", "src"])
209
+ if (typeof attrs?.[key] === "string")
210
+ attrs[key] = sourceUrl(attrs[key]);
211
+ });
212
+ }
213
+ /** Resolve a configured embed from immutable persisted documents. */
214
+ export function resolveEmbed(library, input, context) {
215
+ const spec = parseEmbedSpec(JSON.stringify(input));
216
+ let occurrence = 0;
217
+ const reserved = new Set();
218
+ const destination = library.documents.find((d) => d.id === context.documentId);
219
+ if (destination)
220
+ visitNodes(destination.tree, (node) => {
221
+ idsInNode(node).forEach((id) => reserved.add(id));
222
+ });
223
+ const active = [];
224
+ const expand = (spec, from) => {
225
+ const children = [];
226
+ const rows = [];
227
+ for (const source of spec.sources) {
228
+ const { document, anchor } = resolveDocumentReference(library, source, from);
229
+ const key = `${document.id}#${anchor ?? "*"}`;
230
+ if (active.includes(key) || active.length >= 64)
231
+ throw new Error(`cudoc: cyclic embed: ${[...active, key].join(" -> ")}`);
232
+ active.push(key);
233
+ try {
234
+ const selected = anchor || spec.select
235
+ ? collectSections(document.tree, {
236
+ ...spec.select,
237
+ ...(anchor ? { anchors: [anchor] } : {}),
238
+ }).map((section) => ({ ...section, title: section.title }))
239
+ : [
240
+ {
241
+ anchorId: undefined,
242
+ title: String(document.frontmatter.title ?? document.id),
243
+ tree: document.tree,
244
+ },
245
+ ];
246
+ if (!selected.length)
247
+ throw new Error(`cudoc: no sections matched in ${document.id}`);
248
+ for (const selectedSection of selected) {
249
+ const section = transformedSection(document, selectedSection.anchorId, selectedSection.tree, spec.replace ?? [], library, spec.select?.includeChildren);
250
+ const expandNodes = (node) => {
251
+ if (!node.children)
252
+ return;
253
+ node.children = node.children.flatMap((child) => {
254
+ if (child.type === "code" && child.lang === "cudoc-embed")
255
+ return expand(parseEmbedSpec(child.value), document.id)
256
+ .children;
257
+ expandNodes(child);
258
+ return [child];
259
+ });
260
+ };
261
+ expandNodes(section);
262
+ const paragraph = section.children.find((n) => n.type === "paragraph");
263
+ const heading = section.children.find((n) => n.type === "heading");
264
+ rows.push({
265
+ title: heading
266
+ ? visibleHeadingText(heading)
267
+ : selectedSection.title,
268
+ link: `${document.route}${selectedSection.anchorId ? `#${selectedSection.anchorId}` : ""}`,
269
+ summary: paragraph ? nodeText(paragraph) : "",
270
+ });
271
+ let prefix;
272
+ const sectionIds = [];
273
+ visitNodes(section, (node) => {
274
+ sectionIds.push(...idsInNode(node));
275
+ });
276
+ do {
277
+ prefix = `${context.prefix ?? "embed"}-${++occurrence}-`;
278
+ } while (sectionIds.some((id) => reserved.has(`${prefix}${id}`)));
279
+ rebase(section, document, library, prefix);
280
+ sectionIds.forEach((id) => reserved.add(`${prefix}${id}`));
281
+ children.push(...section.children);
282
+ }
283
+ }
284
+ finally {
285
+ active.pop();
286
+ }
287
+ }
288
+ if (spec.render && spec.render !== "section") {
289
+ const columns = spec.render.columns ?? ["title", "link", "summary"];
290
+ const cell = (value, url) => ({
291
+ type: "tableCell",
292
+ children: url
293
+ ? [{ type: "link", url, children: [{ type: "text", value }] }]
294
+ : [{ type: "text", value }],
295
+ });
296
+ return {
297
+ type: "root",
298
+ children: [
299
+ {
300
+ type: "table",
301
+ align: columns.map(() => null),
302
+ children: [
303
+ { type: "tableRow", children: columns.map((c) => cell(c)) },
304
+ ...rows.map((row) => ({
305
+ type: "tableRow",
306
+ children: columns.map((c) => cell(c === "link" ? row.title : row[c], c === "link" ? row.link : undefined)),
307
+ })),
308
+ ],
309
+ },
310
+ ],
311
+ };
312
+ }
313
+ return { type: "root", children };
314
+ };
315
+ const result = expand(spec, context.documentId);
316
+ result.data = {
317
+ ...result.data,
318
+ cudocEmbedPrefix: `cudoc-${encodeURIComponent(context.documentId)}-${context.prefix ?? "embed"}-`,
319
+ };
320
+ return result;
321
+ }
322
+ export function resolveDocumentEmbeds(library, documentId) {
323
+ const document = library.documents.find((d) => d.id === documentId);
324
+ if (!document)
325
+ throw new Error(`cudoc: missing document ${documentId}`);
326
+ const tree = structuredClone(document.tree);
327
+ let index = 0;
328
+ const expand = (node) => {
329
+ if (!node.children)
330
+ return;
331
+ node.children = node.children.flatMap((child) => {
332
+ if (child.type === "code" && child.lang === "cudoc-embed")
333
+ return resolveEmbed(library, parseEmbedSpec(child.value), {
334
+ documentId,
335
+ prefix: `embed-${++index}`,
336
+ }).children;
337
+ expand(child);
338
+ return [child];
339
+ });
340
+ };
341
+ expand(tree);
342
+ return tree;
343
+ }
344
+ /** Demand-driven compilation cache keeps the sync AST resolver reusable with async hosts. */
345
+ async function withAsyncCompiler(library, resolve) {
346
+ if (!library.asyncCompiler)
347
+ return resolve(library);
348
+ class CompileRequest extends Error {
349
+ source;
350
+ context;
351
+ constructor(source, context) {
352
+ super("compile requested");
353
+ this.source = source;
354
+ this.context = context;
355
+ }
356
+ }
357
+ const cache = new Map();
358
+ const key = (source, context) => JSON.stringify([context.id, context.options, source]);
359
+ const prepared = {
360
+ ...library,
361
+ compiler(source, context) {
362
+ const result = cache.get(key(source, context));
363
+ if (result)
364
+ return structuredClone(result);
365
+ throw new CompileRequest(source, context);
366
+ },
367
+ };
368
+ for (;;) {
369
+ try {
370
+ return resolve(prepared);
371
+ }
372
+ catch (error) {
373
+ let cause = error;
374
+ while (cause instanceof Error &&
375
+ !(cause instanceof CompileRequest) &&
376
+ cause.cause)
377
+ cause = cause.cause;
378
+ if (!(cause instanceof CompileRequest))
379
+ throw error;
380
+ cache.set(key(cause.source, cause.context), await library.asyncCompiler(cause.source, cause.context));
381
+ }
382
+ }
383
+ }
384
+ export const resolveEmbedAsync = (library, spec, context) => withAsyncCompiler(library, (prepared) => resolveEmbed(prepared, spec, context));
385
+ export const resolveDocumentEmbedsAsync = (library, documentId) => withAsyncCompiler(library, (prepared) => resolveDocumentEmbeds(prepared, documentId));
386
+ //# sourceMappingURL=resolve-embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-embed.js","sourceRoot":"","sources":["../../src/node/resolve-embed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const hash: (value: string) => string;
2
+ export declare const posix: (value: string) => string;
3
+ export declare function contained(root: string, target: string): boolean;
4
+ export declare function realPath(target: string): string;
5
+ export declare function safePath(root: string, relative: string): string;
6
+ export declare function sourceFiles(root: string, extensions?: string[]): string[];
7
+ export declare function writeJson(file: string, value: unknown): void;
8
+ /** Only replace directories bearing our ownership marker. Never delete arbitrary output. */
9
+ export declare function publishDirectory(inputRoot: string, outputRoot: string, build: (staging: string) => void): void;
10
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/node/storage.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,WACuB,CAAA;AACzD,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,WAAoC,CAAA;AACvE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQ/D;AACD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI/C;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ/D;AACD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,UAAU,WAAkB,GAC3B,MAAM,EAAE,CAiBV;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,QAGrD;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC/B,IAAI,CAkCN"}
@@ -0,0 +1,85 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import crypto from "node:crypto";
4
+ export const hash = (value) => crypto.createHash("sha256").update(value).digest("hex");
5
+ export const posix = (value) => value.split(path.sep).join("/");
6
+ export function contained(root, target) {
7
+ const relative = path.relative(root, target);
8
+ return (relative === "" ||
9
+ (relative !== ".." &&
10
+ !relative.startsWith(`..${path.sep}`) &&
11
+ !path.isAbsolute(relative)));
12
+ }
13
+ export function realPath(target) {
14
+ const absolute = path.resolve(target);
15
+ if (fs.existsSync(absolute))
16
+ return fs.realpathSync(absolute);
17
+ return path.join(realPath(path.dirname(absolute)), path.basename(absolute));
18
+ }
19
+ export function safePath(root, relative) {
20
+ const target = path.resolve(root, relative);
21
+ if (!contained(realPath(root), realPath(target)) ||
22
+ target === path.resolve(root))
23
+ throw new Error(`cudoc: path escapes document root: ${relative}`);
24
+ return target;
25
+ }
26
+ export function sourceFiles(root, extensions = [".md", ".mdx"]) {
27
+ const walk = (dir) => fs
28
+ .readdirSync(dir, { withFileTypes: true })
29
+ .sort((a, b) => a.name.localeCompare(b.name, "en"))
30
+ .flatMap((entry) => {
31
+ if (entry.name.startsWith(".") || entry.name === "node_modules")
32
+ return [];
33
+ const file = path.join(dir, entry.name);
34
+ if (entry.isSymbolicLink())
35
+ throw new Error(`cudoc: symlink in source tree: ${file}`);
36
+ if (entry.isDirectory())
37
+ return walk(file);
38
+ return extensions.includes(path.extname(file).toLowerCase())
39
+ ? [file]
40
+ : [];
41
+ });
42
+ return walk(path.resolve(root));
43
+ }
44
+ export function writeJson(file, value) {
45
+ fs.mkdirSync(path.dirname(file), { recursive: true });
46
+ fs.writeFileSync(file, JSON.stringify(value));
47
+ }
48
+ /** Only replace directories bearing our ownership marker. Never delete arbitrary output. */
49
+ export function publishDirectory(inputRoot, outputRoot, build) {
50
+ if (fs.existsSync(outputRoot) && fs.lstatSync(outputRoot).isSymbolicLink())
51
+ throw new Error("cudoc: output directory must not be a symlink");
52
+ const input = realPath(inputRoot), output = realPath(outputRoot);
53
+ if (contained(input, output) || contained(output, input))
54
+ throw new Error("cudoc: input and output directories overlap");
55
+ fs.mkdirSync(path.dirname(output), { recursive: true });
56
+ const owner = path.join(output, ".cudoc-output");
57
+ if (fs.existsSync(output) &&
58
+ (!fs.existsSync(owner) || fs.readFileSync(owner, "utf8") !== "cudoc\n"))
59
+ throw new Error(`cudoc: refusing to replace unowned directory: ${output}`);
60
+ const lock = `${output}.lock`;
61
+ const fd = fs.openSync(lock, "wx");
62
+ const staging = fs.mkdtempSync(`${output}.tmp-`);
63
+ const backup = `${output}.previous-${crypto.randomUUID()}`;
64
+ try {
65
+ fs.writeFileSync(path.join(staging, ".cudoc-output"), "cudoc\n");
66
+ build(staging);
67
+ if (fs.existsSync(output))
68
+ fs.renameSync(output, backup);
69
+ try {
70
+ fs.renameSync(staging, output);
71
+ }
72
+ catch (error) {
73
+ if (fs.existsSync(backup))
74
+ fs.renameSync(backup, output);
75
+ throw error;
76
+ }
77
+ fs.rmSync(backup, { recursive: true, force: true });
78
+ }
79
+ finally {
80
+ fs.rmSync(staging, { recursive: true, force: true });
81
+ fs.closeSync(fd);
82
+ fs.unlinkSync(lock);
83
+ }
84
+ }
85
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/node/storage.ts"],"names":[],"mappings":"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"}
package/dist/query.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from "./internal/core/query/index.js";
2
+ export * from "./sections.js";
2
3
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,cAAc,eAAe,CAAA"}
package/dist/query.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from "./internal/core/query/index.js";
2
+ export * from "./sections.js";
2
3
  //# sourceMappingURL=query.js.map
package/dist/query.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,cAAc,eAAe,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { Root } from "mdast";
2
+ import type { Root as HastRoot } from "hast";
3
+ import type { DocumentNode } from "./document.js";
4
+ export type RenderOptions = {
5
+ highlight?: (code: string, language?: string) => string;
6
+ /** Explicit renderer for authored custom components. The callback returns HTML. */
7
+ components?: Record<string, (node: DocumentNode) => string>;
8
+ };
9
+ export declare function documentToHast(tree: Root, options?: RenderOptions): HastRoot;
10
+ export declare const renderDocument: (tree: Root, options?: RenderOptions) => string;
11
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAkB,MAAM,MAAM,CAAA;AAI5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IACvD,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,CAAC,CAAA;CAC5D,CAAA;AACD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,aAAkB,GAC1B,QAAQ,CA8DV;AACD,eAAO,MAAM,cAAc,GACzB,MAAM,IAAI,EACV,UAAS,aAAkB,KAC1B,MAA6E,CAAA"}
package/dist/render.js ADDED
@@ -0,0 +1,63 @@
1
+ import { toHast } from "mdast-util-to-hast";
2
+ import { toHtml } from "hast-util-to-html";
3
+ import { fromHtml } from "hast-util-from-html";
4
+ export function documentToHast(tree, options = {}) {
5
+ const result = toHast(tree, {
6
+ allowDangerousHtml: true,
7
+ ...(options.highlight
8
+ ? {
9
+ handlers: {
10
+ code(_state, node) {
11
+ const html = options.highlight(node.value, node.lang ?? undefined);
12
+ if (html)
13
+ return { type: "raw", value: html };
14
+ return {
15
+ type: "element",
16
+ tagName: "pre",
17
+ properties: {},
18
+ children: [
19
+ {
20
+ type: "element",
21
+ tagName: "code",
22
+ properties: {},
23
+ children: [{ type: "text", value: node.value }],
24
+ },
25
+ ],
26
+ };
27
+ },
28
+ },
29
+ }
30
+ : {}),
31
+ unknownHandler(state, value) {
32
+ const node = value;
33
+ if (node.type === "mdxjsEsm" || node.type === "yaml")
34
+ return { type: "text", value: "" };
35
+ const renderer = node.name && options.components?.[node.name];
36
+ if (renderer)
37
+ return fromHtml(renderer(node), { fragment: true })
38
+ .children;
39
+ if (node.type.startsWith("mdx") || node.type.endsWith("Directive"))
40
+ throw new Error(`cudoc: no portable renderer for ${node.name ?? node.type} at line ${node.position?.start.line ?? "?"}`);
41
+ throw new Error(`cudoc: unsupported node ${node.type}`);
42
+ },
43
+ });
44
+ const prefix = tree.data?.cudocEmbedPrefix;
45
+ if (typeof prefix === "string") {
46
+ const renameLabel = (node) => {
47
+ if (node.type === "element") {
48
+ if (node.properties.id === "footnote-label")
49
+ node.properties.id = `${prefix}footnote-label`;
50
+ if (Array.isArray(node.properties.ariaDescribedBy))
51
+ node.properties.ariaDescribedBy = node.properties.ariaDescribedBy.map((id) => (id === "footnote-label" ? `${prefix}footnote-label` : id));
52
+ else if (node.properties.ariaDescribedBy === "footnote-label")
53
+ node.properties.ariaDescribedBy = [`${prefix}footnote-label`];
54
+ }
55
+ if ("children" in node)
56
+ node.children.forEach(renameLabel);
57
+ };
58
+ renameLabel(result);
59
+ }
60
+ return result;
61
+ }
62
+ export const renderDocument = (tree, options = {}) => toHtml(documentToHast(tree, options), { allowDangerousHtml: true });
63
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}