@cudoment/cudoc 0.5.0 → 0.7.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 (84) hide show
  1. package/README.md +3 -2
  2. package/dist/document.d.ts +25 -0
  3. package/dist/document.d.ts.map +1 -1
  4. package/dist/document.js +21 -1
  5. package/dist/document.js.map +1 -1
  6. package/dist/internal/core/query/sections.d.ts +6 -0
  7. package/dist/internal/core/query/sections.d.ts.map +1 -1
  8. package/dist/internal/core/query/sections.js +8 -2
  9. package/dist/internal/core/query/sections.js.map +1 -1
  10. package/dist/node/check.d.ts +8 -4
  11. package/dist/node/check.d.ts.map +1 -1
  12. package/dist/node/check.js +475 -65
  13. package/dist/node/check.js.map +1 -1
  14. package/dist/node/cli.js +2 -81
  15. package/dist/node/cli.js.map +1 -1
  16. package/dist/node/collect.d.ts +41 -0
  17. package/dist/node/collect.d.ts.map +1 -0
  18. package/dist/node/collect.js +351 -0
  19. package/dist/node/collect.js.map +1 -0
  20. package/dist/node/command.d.ts +23 -0
  21. package/dist/node/command.d.ts.map +1 -0
  22. package/dist/node/command.js +116 -0
  23. package/dist/node/command.js.map +1 -0
  24. package/dist/node/dataset.d.ts.map +1 -1
  25. package/dist/node/dataset.js +4 -1
  26. package/dist/node/dataset.js.map +1 -1
  27. package/dist/node/library.d.ts +9 -5
  28. package/dist/node/library.d.ts.map +1 -1
  29. package/dist/node/library.js +15 -253
  30. package/dist/node/library.js.map +1 -1
  31. package/dist/node/load-ast.d.ts.map +1 -1
  32. package/dist/node/load-ast.js +4 -1
  33. package/dist/node/load-ast.js.map +1 -1
  34. package/dist/node/local-target.d.ts +11 -0
  35. package/dist/node/local-target.d.ts.map +1 -1
  36. package/dist/node/local-target.js +54 -2
  37. package/dist/node/local-target.js.map +1 -1
  38. package/dist/node/prepare-embeds.d.ts +36 -1
  39. package/dist/node/prepare-embeds.d.ts.map +1 -1
  40. package/dist/node/prepare-embeds.js +94 -4
  41. package/dist/node/prepare-embeds.js.map +1 -1
  42. package/dist/node/references.d.ts +39 -0
  43. package/dist/node/references.d.ts.map +1 -0
  44. package/dist/node/references.js +101 -0
  45. package/dist/node/references.js.map +1 -0
  46. package/dist/node/replace.d.ts +65 -0
  47. package/dist/node/replace.d.ts.map +1 -0
  48. package/dist/node/replace.js +285 -0
  49. package/dist/node/replace.js.map +1 -0
  50. package/dist/node/report.d.ts.map +1 -1
  51. package/dist/node/report.js +5 -1
  52. package/dist/node/report.js.map +1 -1
  53. package/dist/node/resolve-embed.d.ts +99 -2
  54. package/dist/node/resolve-embed.d.ts.map +1 -1
  55. package/dist/node/resolve-embed.js +654 -116
  56. package/dist/node/resolve-embed.js.map +1 -1
  57. package/dist/node/roots.d.ts +12 -1
  58. package/dist/node/roots.d.ts.map +1 -1
  59. package/dist/node/roots.js +47 -11
  60. package/dist/node/roots.js.map +1 -1
  61. package/dist/node/storage.d.ts.map +1 -1
  62. package/dist/node/storage.js +202 -9
  63. package/dist/node/storage.js.map +1 -1
  64. package/dist/node/tree.d.ts +58 -0
  65. package/dist/node/tree.d.ts.map +1 -0
  66. package/dist/node/tree.js +151 -0
  67. package/dist/node/tree.js.map +1 -0
  68. package/dist/node/watch.d.ts +9 -4
  69. package/dist/node/watch.d.ts.map +1 -1
  70. package/dist/node/watch.js +51 -17
  71. package/dist/node/watch.js.map +1 -1
  72. package/dist/paged.d.ts +18 -0
  73. package/dist/paged.d.ts.map +1 -1
  74. package/dist/paged.js +21 -0
  75. package/dist/paged.js.map +1 -1
  76. package/dist/render.d.ts +1 -1
  77. package/dist/render.d.ts.map +1 -1
  78. package/dist/render.js +14 -0
  79. package/dist/render.js.map +1 -1
  80. package/dist/sections.d.ts.map +1 -1
  81. package/dist/sections.js +7 -3
  82. package/dist/sections.js.map +1 -1
  83. package/package.json +15 -15
  84. package/styles.css +49 -0
@@ -9,6 +9,7 @@ import fs from "node:fs";
9
9
  import path from "node:path";
10
10
  import { safePath } from "./storage.js";
11
11
  import { candidateFiles } from "./roots.js";
12
+ import { EXTERNAL_URL, decodeComponent } from "./references.js";
12
13
  /** `safePath`, but a path escaping its root is a non-match rather than a throw. */
13
14
  const containedPath = (root, relative) => {
14
15
  try {
@@ -19,7 +20,7 @@ const containedPath = (root, relative) => {
19
20
  }
20
21
  };
21
22
  /** A fragment, a scheme or a protocol-relative URL: nothing on this disk. */
22
- export const externalUrl = (url) => /^(?:#|[a-z][\w+.-]*:|\/\/)/i.test(url);
23
+ export const externalUrl = (url) => url.startsWith("#") || EXTERNAL_URL.test(url);
23
24
  /**
24
25
  * Whether a root-relative URL falls under one of the configured external
25
26
  * prefixes. `/sdk` covers `/sdk` and `/sdk/…`, not `/sdk-tools`.
@@ -49,7 +50,7 @@ export function resolveLocalTarget(url, documentSourcePath, roots) {
49
50
  if (externalUrl(url) || isExternalPath(url, roots.externalPaths))
50
51
  return { kind: "external", url };
51
52
  const [, pathname, suffix] = url.match(/^([^?#]*)(.*)$/);
52
- const decoded = decodeURIComponent(pathname);
53
+ const decoded = decodeComponent(pathname);
53
54
  const relative = path.posix.normalize(decoded.startsWith("/")
54
55
  ? decoded.slice(1)
55
56
  : path.posix.join(path.posix.dirname(documentSourcePath), decoded));
@@ -78,4 +79,55 @@ export function resolveLocalTarget(url, documentSourcePath, roots) {
78
79
  }
79
80
  return { kind: "missing", relative, suffix };
80
81
  }
82
+ /**
83
+ * The candidates of a `srcset`, read as the HTML standard reads them: a URL
84
+ * runs to the next white space, so a comma inside it, as in a data URL,
85
+ * belongs to it, and commas the URL ends with are separators; the descriptors
86
+ * run to the next comma outside parentheses. Empty candidates, left by a
87
+ * stray comma, are skipped as browsers skip them.
88
+ */
89
+ export const parseSrcSet = (value) => {
90
+ const candidates = [];
91
+ // ASCII white space only: a no-break or ideographic space is part of a URL.
92
+ const space = (character) => character === " " ||
93
+ character === "\t" ||
94
+ character === "\n" ||
95
+ character === "\f" ||
96
+ character === "\r";
97
+ let index = 0;
98
+ while (index < value.length) {
99
+ while (index < value.length &&
100
+ (space(value[index]) || value[index] === ","))
101
+ index++;
102
+ const start = index;
103
+ while (index < value.length && !space(value[index]))
104
+ index++;
105
+ let url = value.slice(start, index);
106
+ let descriptor = "";
107
+ if (url.endsWith(","))
108
+ url = url.replace(/,+$/, "");
109
+ else {
110
+ const from = index;
111
+ let inParens = false;
112
+ while (index < value.length) {
113
+ const character = value[index];
114
+ if (character === "(")
115
+ inParens = true;
116
+ else if (character === ")")
117
+ inParens = false;
118
+ else if (character === "," && !inParens)
119
+ break;
120
+ index++;
121
+ }
122
+ descriptor = value
123
+ .slice(from, index)
124
+ .split(/[\t\n\f\r ]+/)
125
+ .filter(Boolean)
126
+ .join(" ");
127
+ }
128
+ if (url)
129
+ candidates.push({ url, descriptor });
130
+ }
131
+ return candidates;
132
+ };
81
133
  //# sourceMappingURL=local-target.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-target.js","sourceRoot":"","sources":["../../src/node/local-target.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-target.js","sourceRoot":"","sources":["../../src/node/local-target.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,42 @@ export type PrepareEmbedsOptions = {
21
21
  */
22
22
  previous?: PreparedEmbeds;
23
23
  };
24
- /** Run after collection and before the host build. No asynchronous compiler is needed at render time. */
24
+ /**
25
+ * Run after collection and before the host build. No asynchronous compiler is
26
+ * needed at render time.
27
+ *
28
+ * Every block is resolved before anything is written, so one pass names every
29
+ * embed that cannot be prepared, each with its document and block number: a
30
+ * single failure as an error whose `cause` is the resolver's, and several as
31
+ * one `AggregateError` whose message lists them. Nothing is written when any
32
+ * block fails.
33
+ */
25
34
  export declare function prepareEmbeds(library: Library, outDir?: string, options?: PrepareEmbedsOptions): Promise<PreparedEmbeds>;
35
+ /**
36
+ * Reads the prepared embeds a host compiles a page with, checked against the
37
+ * page's own source and against the library they were prepared from.
38
+ *
39
+ * A host asks once per page, or once per block, so the two files are parsed
40
+ * once and kept while neither changes on disk; publishing replaces both, so a
41
+ * new collection is read on the next call. The result is shared between
42
+ * calls: a caller copies a block before putting it in its own tree.
43
+ */
26
44
  export declare function readPreparedEmbeds(outDir: string, documentId: string, source: string): PreparedEmbeds;
45
+ /** The embedding document a host is compiling, as `expandPreparedEmbeds` needs it. */
46
+ export type PreparedTarget = {
47
+ /** Where the library and its `embeds.json` were published. */
48
+ outDir: string;
49
+ documentId: string;
50
+ /** The document's source as collected, which the preparation must match. */
51
+ source: string;
52
+ };
53
+ /**
54
+ * Replaces every `cudoc-embed` fence in `tree` with its prepared block, in
55
+ * document order, the way a host build does. The tree is modified in place
56
+ * and returned. `target` is read when the first fence is met, so a document
57
+ * with no embeds needs no library at all; a function defers the work of
58
+ * finding it until then. `onBlock` sees each block's copy before it is
59
+ * spliced in.
60
+ */
61
+ export declare function expandPreparedEmbeds(tree: Root, target: PreparedTarget | (() => PreparedTarget), onBlock?: (block: Root, documentId: string) => void): Root;
27
62
  //# sourceMappingURL=prepare-embeds.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-embeds.d.ts","sourceRoot":"","sources":["../../src/node/prepare-embeds.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,CAAC,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC5B;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACvC,CAAA;AACD,eAAO,MAAM,QAAQ,GAAI,YAAY,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,WAChC,CAAA;AAEzC,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B,CAAA;AAyBD,yGAAyG;AACzG,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,MAAM,SAAqB,EAC3B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC,CA4DzB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,cAAc,CAuBhB"}
1
+ {"version":3,"file":"prepare-embeds.d.ts","sourceRoot":"","sources":["../../src/node/prepare-embeds.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,CAAC,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC5B;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACvC,CAAA;AACD,eAAO,MAAM,QAAQ,GAAI,YAAY,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,WAChC,CAAA;AAEzC,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B,CAAA;AAyBD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,MAAM,SAAqB,EAC3B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC,CAwFzB;AAeD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,cAAc,CA6BhB;AAED,sFAAsF;AACtF,MAAM,MAAM,cAAc,GAAG;IAC3B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,GAAG,CAAC,MAAM,cAAc,CAAC,EAC/C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAClD,IAAI,CA8BN"}
@@ -19,7 +19,16 @@ const reusableBlocks = (library, previous) => {
19
19
  return undefined;
20
20
  return previous;
21
21
  };
22
- /** Run after collection and before the host build. No asynchronous compiler is needed at render time. */
22
+ /**
23
+ * Run after collection and before the host build. No asynchronous compiler is
24
+ * needed at render time.
25
+ *
26
+ * Every block is resolved before anything is written, so one pass names every
27
+ * embed that cannot be prepared, each with its document and block number: a
28
+ * single failure as an error whose `cause` is the resolver's, and several as
29
+ * one `AggregateError` whose message lists them. Nothing is written when any
30
+ * block fails.
31
+ */
23
32
  export async function prepareEmbeds(library, outDir = ".cudoc/documents", options = {}) {
24
33
  const { resolveEmbedAsync, parseEmbedBlock } = await import("./resolve-embed.js");
25
34
  const prepared = {
@@ -32,6 +41,7 @@ export async function prepareEmbeds(library, outDir = ".cudoc/documents", option
32
41
  const previous = reusableBlocks(library, options.previous);
33
42
  const hashes = new Map(library.documents.map((document) => [document.id, document.source.hash]));
34
43
  const unchanged = (id) => previous !== undefined && previous.sourceHashes[id] === hashes.get(id);
44
+ const failures = [];
35
45
  for (const document of library.documents) {
36
46
  prepared.sourceHashes[document.id] = document.source.hash;
37
47
  let index = 0;
@@ -50,7 +60,17 @@ export async function prepareEmbeds(library, outDir = ".cudoc/documents", option
50
60
  prepared.dependencies[key] = dependencies;
51
61
  return;
52
62
  }
53
- const result = await resolveEmbedAsync(library, parseEmbedBlock(node.value, document.id, number), { documentId: document.id, prefix: `embed-${number}` });
63
+ let result;
64
+ try {
65
+ result = await resolveEmbedAsync(library, parseEmbedBlock(node.value, document.id, number), { documentId: document.id, prefix: `embed-${number}` });
66
+ }
67
+ catch (error) {
68
+ failures.push({
69
+ block: `${document.sourcePath}, embed ${number}`,
70
+ error,
71
+ });
72
+ return;
73
+ }
54
74
  prepared.blocks[key] = result;
55
75
  prepared.dependencies[key] = Array.isArray(result.data?.cudocDependencies)
56
76
  ? result.data.cudocDependencies
@@ -61,6 +81,17 @@ export async function prepareEmbeds(library, outDir = ".cudoc/documents", option
61
81
  };
62
82
  await collect(document.tree);
63
83
  }
84
+ // The resolver names what is missing; the block that asked for it is named
85
+ // here, where the document and the block number are known.
86
+ const reason = (error) => (error instanceof Error ? error.message : String(error)).replace(/^cudoc: /, "");
87
+ if (failures.length === 1) {
88
+ const [{ block, error }] = failures;
89
+ throw new Error(`cudoc: ${block}: ${reason(error)}`, { cause: error });
90
+ }
91
+ if (failures.length > 1)
92
+ throw new AggregateError(failures.map((failure) => failure.error), `cudoc: ${failures.length} embeds could not be prepared:\n${failures
93
+ .map(({ block, error }) => ` ${block}: ${reason(error)}`)
94
+ .join("\n")}`);
64
95
  const temporary = path.join(outDir, `embeds.${process.pid}.tmp`);
65
96
  try {
66
97
  fs.writeFileSync(temporary, JSON.stringify(prepared));
@@ -71,12 +102,38 @@ export async function prepareEmbeds(library, outDir = ".cudoc/documents", option
71
102
  }
72
103
  return prepared;
73
104
  }
105
+ const readFiles = new Map();
106
+ /** What identifies a file's content without reading it: its inode, size and time. */
107
+ const stampOf = (file) => {
108
+ const stat = fs.statSync(file);
109
+ return `${stat.ino}:${stat.size}:${stat.mtimeMs}`;
110
+ };
111
+ /**
112
+ * Reads the prepared embeds a host compiles a page with, checked against the
113
+ * page's own source and against the library they were prepared from.
114
+ *
115
+ * A host asks once per page, or once per block, so the two files are parsed
116
+ * once and kept while neither changes on disk; publishing replaces both, so a
117
+ * new collection is read on the next call. The result is shared between
118
+ * calls: a caller copies a block before putting it in its own tree.
119
+ */
74
120
  export function readPreparedEmbeds(outDir, documentId, source) {
75
121
  const file = path.join(outDir, "embeds.json");
76
122
  if (!fs.existsSync(file))
77
123
  throw new Error("cudoc: prepared embeds not found; collect documents and run prepareEmbeds before building the host");
78
- const result = JSON.parse(fs.readFileSync(file, "utf8"));
79
- const manifest = JSON.parse(fs.readFileSync(path.join(outDir, "manifest.json"), "utf8"));
124
+ const manifestFile = path.join(outDir, "manifest.json");
125
+ const key = path.resolve(outDir);
126
+ const stamp = `${stampOf(file)}|${stampOf(manifestFile)}`;
127
+ let files = readFiles.get(key);
128
+ if (!files || files.stamp !== stamp) {
129
+ files = {
130
+ stamp,
131
+ prepared: JSON.parse(fs.readFileSync(file, "utf8")),
132
+ manifest: JSON.parse(fs.readFileSync(manifestFile, "utf8")),
133
+ };
134
+ readFiles.set(key, files);
135
+ }
136
+ const { prepared: result, manifest } = files;
80
137
  if (result.schemaVersion !== 2 ||
81
138
  result.configuration !== manifest.configuration ||
82
139
  result.sourceHashes[documentId] !== hash(source) ||
@@ -84,4 +141,37 @@ export function readPreparedEmbeds(outDir, documentId, source) {
84
141
  throw new Error(`cudoc: stale prepared embeds for ${documentId}; recollect documents`);
85
142
  return result;
86
143
  }
144
+ /**
145
+ * Replaces every `cudoc-embed` fence in `tree` with its prepared block, in
146
+ * document order, the way a host build does. The tree is modified in place
147
+ * and returned. `target` is read when the first fence is met, so a document
148
+ * with no embeds needs no library at all; a function defers the work of
149
+ * finding it until then. `onBlock` sees each block's copy before it is
150
+ * spliced in.
151
+ */
152
+ export function expandPreparedEmbeds(tree, target, onBlock) {
153
+ let resolved;
154
+ let prepared;
155
+ let index = 0;
156
+ const expand = (node) => {
157
+ if (!node.children)
158
+ return;
159
+ node.children = node.children.flatMap((child) => {
160
+ if (child.type !== "code" || child.lang !== "cudoc-embed") {
161
+ expand(child);
162
+ return [child];
163
+ }
164
+ resolved ??= typeof target === "function" ? target() : target;
165
+ prepared ??= readPreparedEmbeds(resolved.outDir, resolved.documentId, resolved.source);
166
+ const block = prepared.blocks[embedKey(resolved.documentId, child.value, ++index)];
167
+ if (!block)
168
+ throw new Error(`cudoc: prepared embed missing in ${resolved.documentId}; recollect documents`);
169
+ const copy = structuredClone(block);
170
+ onBlock?.(copy, resolved.documentId);
171
+ return copy.children;
172
+ });
173
+ };
174
+ expand(tree);
175
+ return tree;
176
+ }
87
177
  //# sourceMappingURL=prepare-embeds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-embeds.js","sourceRoot":"","sources":["../../src/node/prepare-embeds.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepare-embeds.js","sourceRoot":"","sources":["../../src/node/prepare-embeds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * How a reference is read, shared by the embed resolver, the reference checker
3
+ * and local link resolution, so that the checker's verdict and the build's
4
+ * never disagree about the same text. Not a package entry point.
5
+ */
6
+ import type { DocumentNode } from "../document.js";
7
+ import type { Library, StoredDocument } from "./library.js";
8
+ /** A URL with a scheme, or protocol-relative: nothing in the library. */
9
+ export declare const EXTERNAL_URL: RegExp;
10
+ /**
11
+ * A URL component with its percent-escapes decoded, or as written when it
12
+ * holds a `%` that is not an escape. A link like `100%.md` is then looked up
13
+ * as it stands and reported as missing, with its document, instead of ending
14
+ * the whole run with a bare `URIError`.
15
+ */
16
+ export declare const decodeComponent: (value: string) => string;
17
+ /** Every id a node declares: its own, and each element's in raw HTML. */
18
+ export declare const idsInNode: (node: DocumentNode) => string[];
19
+ type DocumentIndex = {
20
+ size: number;
21
+ byId: Map<string, StoredDocument>;
22
+ /**
23
+ * By `/sourcePath`, `/id` and `/id/`, the forms a rebased link can take,
24
+ * and an index document also by its directory: always as `/` or `/guide/`,
25
+ * and as `/guide` where no other document claims that path.
26
+ */
27
+ byPath: Map<string, StoredDocument>;
28
+ };
29
+ /**
30
+ * The library's documents by id and by path, built once per document list.
31
+ * A stored library is never modified after collection, so resolving every
32
+ * block of a large library looks each document up in constant time instead
33
+ * of scanning the list at every reference.
34
+ */
35
+ export declare const documentIndex: (library: Library) => DocumentIndex;
36
+ /** Every id a stored tree declares, read once per tree. */
37
+ export declare const declaredIds: (tree: object) => readonly string[];
38
+ export {};
39
+ //# sourceMappingURL=references.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../src/node/references.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE3D,yEAAyE;AACzE,eAAO,MAAM,YAAY,QAA8B,CAAA;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAM/C,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,SAAS,GAAI,MAAM,YAAY,KAAG,MAAM,EAcpD,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACjC;;;;OAIG;IACH,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CACpC,CAAA;AAGD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,OAAO,KAAG,aAiChD,CAAA;AAID,2DAA2D;AAC3D,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,SAAS,MAAM,EAWzD,CAAA"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * How a reference is read, shared by the embed resolver, the reference checker
3
+ * and local link resolution, so that the checker's verdict and the build's
4
+ * never disagree about the same text. Not a package entry point.
5
+ */
6
+ import { fromHtml } from "hast-util-from-html";
7
+ /** A URL with a scheme, or protocol-relative: nothing in the library. */
8
+ export const EXTERNAL_URL = /^(?:[a-z][\w+.-]*:|\/\/)/i;
9
+ /**
10
+ * A URL component with its percent-escapes decoded, or as written when it
11
+ * holds a `%` that is not an escape. A link like `100%.md` is then looked up
12
+ * as it stands and reported as missing, with its document, instead of ending
13
+ * the whole run with a bare `URIError`.
14
+ */
15
+ export const decodeComponent = (value) => {
16
+ try {
17
+ return decodeURIComponent(value);
18
+ }
19
+ catch {
20
+ return value;
21
+ }
22
+ };
23
+ /** Every id a node declares: its own, and each element's in raw HTML. */
24
+ export const idsInNode = (node) => {
25
+ const ids = [];
26
+ const id = node.data?.hProperties?.id;
27
+ if (typeof id === "string")
28
+ ids.push(id);
29
+ if (node.type === "html" && node.value) {
30
+ const tree = fromHtml(node.value, { fragment: true });
31
+ const walk = (value) => {
32
+ if (value.type === "element" && typeof value.properties.id === "string")
33
+ ids.push(value.properties.id);
34
+ if ("children" in value)
35
+ value.children.forEach(walk);
36
+ };
37
+ walk(tree);
38
+ }
39
+ return ids;
40
+ };
41
+ const indexes = new WeakMap();
42
+ /**
43
+ * The library's documents by id and by path, built once per document list.
44
+ * A stored library is never modified after collection, so resolving every
45
+ * block of a large library looks each document up in constant time instead
46
+ * of scanning the list at every reference.
47
+ */
48
+ export const documentIndex = (library) => {
49
+ const cached = indexes.get(library.documents);
50
+ if (cached && cached.size === library.documents.length)
51
+ return cached;
52
+ const index = {
53
+ size: library.documents.length,
54
+ byId: new Map(),
55
+ byPath: new Map(),
56
+ };
57
+ for (const document of library.documents) {
58
+ if (!index.byId.has(document.id))
59
+ index.byId.set(document.id, document);
60
+ for (const key of [
61
+ `/${document.sourcePath}`,
62
+ `/${document.id}`,
63
+ `/${document.id}/`,
64
+ ])
65
+ if (!index.byPath.has(key))
66
+ index.byPath.set(key, document);
67
+ }
68
+ // A directory names its index document: spelled with the trailing slash
69
+ // always, even beside a document of the directory's own name, which keeps
70
+ // the spelling without one.
71
+ for (const document of library.documents) {
72
+ const directory = document.id.match(/^(?:(.*)\/)?index$/);
73
+ if (!directory)
74
+ continue;
75
+ if (!directory[1]) {
76
+ index.byPath.set("/", document);
77
+ continue;
78
+ }
79
+ index.byPath.set(`/${directory[1]}/`, document);
80
+ if (!index.byPath.has(`/${directory[1]}`))
81
+ index.byPath.set(`/${directory[1]}`, document);
82
+ }
83
+ indexes.set(library.documents, index);
84
+ return index;
85
+ };
86
+ const declared = new WeakMap();
87
+ /** Every id a stored tree declares, read once per tree. */
88
+ export const declaredIds = (tree) => {
89
+ const cached = declared.get(tree);
90
+ if (cached)
91
+ return cached;
92
+ const ids = [];
93
+ const walk = (node) => {
94
+ ids.push(...idsInNode(node));
95
+ node.children?.forEach(walk);
96
+ };
97
+ walk(tree);
98
+ declared.set(tree, ids);
99
+ return ids;
100
+ };
101
+ //# sourceMappingURL=references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/node/references.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Replacement rules applied to an embedded section, shared by the resolver,
3
+ * which copies the result, and the checker, which inspects it.
4
+ *
5
+ * A rule list rewrites the section's original Markdown, not its tree, and the
6
+ * rewritten text is compiled again with the document's own options, so the
7
+ * copy is what the source would have been had it been written that way.
8
+ */
9
+ import type { Root } from "mdast";
10
+ import type { Library, StoredDocument } from "./library.js";
11
+ import type { Replacement } from "./resolve-embed.js";
12
+ /**
13
+ * One section's Markdown as it reads on its own, or the whole document's
14
+ * without an anchor. A heading in a list item starts its range at or after
15
+ * the item's marks, and the lines after it carry the indentation the parser
16
+ * took off them as the item's content; both are taken off here too, so the
17
+ * text compiles to the section that was collected.
18
+ */
19
+ export declare function sectionText(document: StoredDocument, anchor: string | undefined, includeChildren?: boolean): string;
20
+ /**
21
+ * Why a section's Markdown cannot be rewritten, or `undefined`.
22
+ *
23
+ * A rule rewrites the section's text as it reads on its own, which is
24
+ * compiled again. A heading inside another block leaves some of that block
25
+ * in the text where nothing takes it off: a quote's `>` stays on the lines
26
+ * after the heading, a footnote's indentation stays on its lines, and the
27
+ * last section of a component or a `:::` container runs into the line that
28
+ * closes it. Any of those is refused, since compiled again it would be
29
+ * another structure; a list item's marks and indentation are taken off by
30
+ * `sectionText`. Decided from the collected tree and the source alone, so
31
+ * the build and `cudoc check` agree whichever compiler each has.
32
+ */
33
+ export declare function unreplaceableSection(document: StoredDocument, anchor: string | undefined, includeChildren?: boolean): string | undefined;
34
+ export declare function replaceSource(source: string, rules: Replacement[], documentId: string): string;
35
+ /**
36
+ * One section's Markdown with the rules applied, followed by the definitions
37
+ * it depends on from outside its range, unchanged. `offset` is where the
38
+ * section starts in the source, for an error that has to point there.
39
+ */
40
+ export declare function replacedSectionSource(document: StoredDocument, anchor: string | undefined, rules: Replacement[], includeChildren?: boolean): {
41
+ source: string;
42
+ offset: number;
43
+ };
44
+ /**
45
+ * Compiles a section's rewritten Markdown with the library's compiler and
46
+ * options, as the build does. A library of a host the standalone compiler
47
+ * cannot stand in for needs that host's compiler, and without it this throws,
48
+ * because a copy compiled otherwise would lose the host's own syntax.
49
+ *
50
+ * `standalone` is for a caller that inspects the copy rather than ships it:
51
+ * without the host compiler it compiles with the standalone one and the same
52
+ * options, which reads embed fences, components and tables as the host does.
53
+ * Syntax only the host's own parser knows is lost or refused there: a
54
+ * VitePress `::: tip` container stays text, and MDX with Docusaurus's
55
+ * `{#id}` or an HTML comment does not compile, which the caller has to allow.
56
+ */
57
+ export declare function compileReplacedSection(library: Library, document: StoredDocument, replaced: {
58
+ source: string;
59
+ offset: number;
60
+ }, { standalone }?: {
61
+ standalone?: boolean;
62
+ }): Root;
63
+ /** The tree an embed copies from one section: rewritten when there are rules. */
64
+ export declare function transformedSection(document: StoredDocument, anchor: string | undefined, tree: Root, rules: Replacement[], library: Library, includeChildren?: boolean): Root;
65
+ //# sourceMappingURL=replace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace.d.ts","sourceRoot":"","sources":["../../src/node/replace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAIjC,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AA8GrD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,eAAe,UAAO,GACrB,MAAM,CAmBR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,eAAe,UAAO,GACrB,MAAM,GAAG,SAAS,CAiCpB;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,EAAE,EACpB,UAAU,EAAE,MAAM,GACjB,MAAM,CAaR;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,WAAW,EAAE,EACpB,eAAe,UAAO,GACrB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAiDpC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC5C,EAAE,UAAkB,EAAE,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACpD,IAAI,CA4BN;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,EAAE,OAAO,EAChB,eAAe,UAAO,GACrB,IAAI,CAON"}