@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.
- package/README.md +3 -2
- package/dist/document.d.ts +25 -0
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +21 -1
- package/dist/document.js.map +1 -1
- package/dist/internal/core/query/sections.d.ts +6 -0
- package/dist/internal/core/query/sections.d.ts.map +1 -1
- package/dist/internal/core/query/sections.js +8 -2
- package/dist/internal/core/query/sections.js.map +1 -1
- package/dist/node/check.d.ts +8 -4
- package/dist/node/check.d.ts.map +1 -1
- package/dist/node/check.js +475 -65
- package/dist/node/check.js.map +1 -1
- package/dist/node/cli.js +2 -81
- package/dist/node/cli.js.map +1 -1
- package/dist/node/collect.d.ts +41 -0
- package/dist/node/collect.d.ts.map +1 -0
- package/dist/node/collect.js +351 -0
- package/dist/node/collect.js.map +1 -0
- package/dist/node/command.d.ts +23 -0
- package/dist/node/command.d.ts.map +1 -0
- package/dist/node/command.js +116 -0
- package/dist/node/command.js.map +1 -0
- package/dist/node/dataset.d.ts.map +1 -1
- package/dist/node/dataset.js +4 -1
- package/dist/node/dataset.js.map +1 -1
- package/dist/node/library.d.ts +9 -5
- package/dist/node/library.d.ts.map +1 -1
- package/dist/node/library.js +15 -253
- package/dist/node/library.js.map +1 -1
- package/dist/node/load-ast.d.ts.map +1 -1
- package/dist/node/load-ast.js +4 -1
- package/dist/node/load-ast.js.map +1 -1
- package/dist/node/local-target.d.ts +11 -0
- package/dist/node/local-target.d.ts.map +1 -1
- package/dist/node/local-target.js +54 -2
- package/dist/node/local-target.js.map +1 -1
- package/dist/node/prepare-embeds.d.ts +36 -1
- package/dist/node/prepare-embeds.d.ts.map +1 -1
- package/dist/node/prepare-embeds.js +94 -4
- package/dist/node/prepare-embeds.js.map +1 -1
- package/dist/node/references.d.ts +39 -0
- package/dist/node/references.d.ts.map +1 -0
- package/dist/node/references.js +101 -0
- package/dist/node/references.js.map +1 -0
- package/dist/node/replace.d.ts +65 -0
- package/dist/node/replace.d.ts.map +1 -0
- package/dist/node/replace.js +285 -0
- package/dist/node/replace.js.map +1 -0
- package/dist/node/report.d.ts.map +1 -1
- package/dist/node/report.js +5 -1
- package/dist/node/report.js.map +1 -1
- package/dist/node/resolve-embed.d.ts +99 -2
- package/dist/node/resolve-embed.d.ts.map +1 -1
- package/dist/node/resolve-embed.js +654 -116
- package/dist/node/resolve-embed.js.map +1 -1
- package/dist/node/roots.d.ts +12 -1
- package/dist/node/roots.d.ts.map +1 -1
- package/dist/node/roots.js +47 -11
- package/dist/node/roots.js.map +1 -1
- package/dist/node/storage.d.ts.map +1 -1
- package/dist/node/storage.js +202 -9
- package/dist/node/storage.js.map +1 -1
- package/dist/node/tree.d.ts +58 -0
- package/dist/node/tree.d.ts.map +1 -0
- package/dist/node/tree.js +151 -0
- package/dist/node/tree.js.map +1 -0
- package/dist/node/watch.d.ts +9 -4
- package/dist/node/watch.d.ts.map +1 -1
- package/dist/node/watch.js +51 -17
- package/dist/node/watch.js.map +1 -1
- package/dist/paged.d.ts +18 -0
- package/dist/paged.d.ts.map +1 -1
- package/dist/paged.js +21 -0
- package/dist/paged.js.map +1 -1
- package/dist/render.d.ts +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +14 -0
- package/dist/render.js.map +1 -1
- package/dist/sections.d.ts.map +1 -1
- package/dist/sections.js +7 -3
- package/dist/sections.js.map +1 -1
- package/package.json +15 -15
- 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) =>
|
|
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 =
|
|
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":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAqB,MAAM,YAAY,CAAA;
|
|
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
|
-
/**
|
|
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
|
|
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
|
-
/**
|
|
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
|
-
|
|
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
|
|
79
|
-
const
|
|
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":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAI5B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAcnC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,UAAkB,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE,CAC3E,GAAG,UAAU,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;AAWzC;;;;GAIG;AACH,MAAM,cAAc,GAAG,CACrB,OAAgB,EAChB,QAAoC,EACR,EAAE;IAC9B,IACE,CAAC,QAAQ;QACT,QAAQ,CAAC,aAAa,KAAK,CAAC;QAC5B,QAAQ,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa;QAChD,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ;QAEzC,OAAO,SAAS,CAAA;IAClB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACnE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAA;IACvD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,SAAS,CAAA;IAClB,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED
|
|
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"}
|