@wizzlethorpe/vaults 0.7.0 → 0.8.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 +8 -7
- package/dist/build.js +357 -114
- package/dist/build.js.map +1 -1
- package/dist/commands/build.js +2 -1
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/password.js +1 -1
- package/dist/commands/password.js.map +1 -1
- package/dist/commands/patreon.js +24 -20
- package/dist/commands/patreon.js.map +1 -1
- package/dist/commands/preview.js +5 -4
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/push.js +7 -8
- package/dist/commands/push.js.map +1 -1
- package/dist/config.js +21 -10
- package/dist/config.js.map +1 -1
- package/dist/escape.js +29 -0
- package/dist/escape.js.map +1 -0
- package/dist/favicon.js +3 -36
- package/dist/favicon.js.map +1 -1
- package/dist/foundry-importer.js +61 -0
- package/dist/foundry-importer.js.map +1 -0
- package/dist/images.js +0 -30
- package/dist/images.js.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/migrate/0.6-legacy-auth-settings.js +3 -5
- package/dist/migrate/0.6-legacy-auth-settings.js.map +1 -1
- package/dist/migrate/registry.js +1 -7
- package/dist/migrate/registry.js.map +1 -1
- package/dist/paths.js +21 -6
- package/dist/paths.js.map +1 -1
- package/dist/render/auth-template.js +21 -142
- package/dist/render/auth-template.js.map +1 -1
- package/dist/render/bases.js +56 -44
- package/dist/render/bases.js.map +1 -1
- package/dist/render/callouts.js +29 -10
- package/dist/render/callouts.js.map +1 -1
- package/dist/render/embed.js +124 -26
- package/dist/render/embed.js.map +1 -1
- package/dist/render/extensions.js +68 -0
- package/dist/render/extensions.js.map +1 -0
- package/dist/render/external-links.js +32 -0
- package/dist/render/external-links.js.map +1 -0
- package/dist/render/frontmatter.js +17 -0
- package/dist/render/frontmatter.js.map +1 -0
- package/dist/render/handlers/assets.js +48 -15
- package/dist/render/handlers/assets.js.map +1 -1
- package/dist/render/handlers/builtin/dice.js +1 -1
- package/dist/render/handlers/builtin/dice.js.map +1 -1
- package/dist/render/handlers/builtin/fm-code.js +50 -0
- package/dist/render/handlers/builtin/fm-code.js.map +1 -0
- package/dist/render/handlers/builtin/fm.js +6 -12
- package/dist/render/handlers/builtin/fm.js.map +1 -1
- package/dist/render/handlers/builtin/index.js +2 -1
- package/dist/render/handlers/builtin/index.js.map +1 -1
- package/dist/render/handlers/builtin/inline-format.js +26 -0
- package/dist/render/handlers/builtin/inline-format.js.map +1 -0
- package/dist/render/handlers/builtin/statblock.js +158 -18
- package/dist/render/handlers/builtin/statblock.js.map +1 -1
- package/dist/render/handlers/dispatch.js +15 -20
- package/dist/render/handlers/dispatch.js.map +1 -1
- package/dist/render/handlers/types.js +41 -21
- package/dist/render/handlers/types.js.map +1 -1
- package/dist/render/image-srcs.js +42 -0
- package/dist/render/image-srcs.js.map +1 -0
- package/dist/render/layout.js +60 -9
- package/dist/render/layout.js.map +1 -1
- package/dist/render/pipeline.js +22 -9
- package/dist/render/pipeline.js.map +1 -1
- package/dist/render/preview.js +10 -5
- package/dist/render/preview.js.map +1 -1
- package/dist/render/slug.js +5 -0
- package/dist/render/slug.js.map +1 -1
- package/dist/render/styles.js +88 -10
- package/dist/render/styles.js.map +1 -1
- package/dist/render/wikilink.js +15 -4
- package/dist/render/wikilink.js.map +1 -1
- package/dist/scan.js +1 -1
- package/dist/scan.js.map +1 -1
- package/dist/settings.js +16 -1
- package/dist/settings.js.map +1 -1
- package/dist/version.js +36 -0
- package/dist/version.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Built-in code-block `fm` handler — renders a frontmatter value as a fenced
|
|
2
|
+
// code block, with an optional language hint via the fence meta string.
|
|
3
|
+
//
|
|
4
|
+
// Usage:
|
|
5
|
+
//
|
|
6
|
+
// ```fm javascript
|
|
7
|
+
// foundry.data.command
|
|
8
|
+
// ```
|
|
9
|
+
//
|
|
10
|
+
// Renders as:
|
|
11
|
+
//
|
|
12
|
+
// <pre><code class="language-javascript">…value of frontmatter.foundry.data.command…</code></pre>
|
|
13
|
+
//
|
|
14
|
+
// Companion to the inline `fm:` handler. Inline form is used in prose to
|
|
15
|
+
// pull a frontmatter value into a sentence; this code-block form is used
|
|
16
|
+
// when the value IS code (or otherwise wants a `<pre>` wrapper) and you
|
|
17
|
+
// want a single source of truth for that code rather than duplicating it
|
|
18
|
+
// between the frontmatter and the page body.
|
|
19
|
+
//
|
|
20
|
+
// The body of the fence is the dot-path (single token, leading/trailing
|
|
21
|
+
// whitespace tolerated). Anything beyond the lang on the fence is the
|
|
22
|
+
// optional language hint — `lang className="language-…"` so client-side
|
|
23
|
+
// highlighters can pick it up. Missing path or non-string value renders
|
|
24
|
+
// as a visible warning marker rather than failing the build, same policy
|
|
25
|
+
// as the inline handler.
|
|
26
|
+
import { htmlEscape } from "../../../escape.js";
|
|
27
|
+
import { lookup } from "./fm.js";
|
|
28
|
+
export const fmCodeHandler = {
|
|
29
|
+
codeBlock: "fm",
|
|
30
|
+
render(content, ctx) {
|
|
31
|
+
const path = content.trim();
|
|
32
|
+
if (!path)
|
|
33
|
+
return missing("(empty)");
|
|
34
|
+
const value = lookup(ctx.frontmatter, path);
|
|
35
|
+
if (typeof value !== "string")
|
|
36
|
+
return missing(`${path}: not a string`);
|
|
37
|
+
const langClass = ctx.codeBlockMeta
|
|
38
|
+
? ` class="language-${htmlEscape(ctx.codeBlockMeta)}"`
|
|
39
|
+
: "";
|
|
40
|
+
return {
|
|
41
|
+
html: `<pre><code${langClass}>${htmlEscape(value)}</code></pre>`,
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
function missing(key) {
|
|
46
|
+
return {
|
|
47
|
+
html: `<pre><code class="fm-missing" title="frontmatter key not found">{{${htmlEscape(key)}}}</code></pre>`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=fm-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fm-code.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/fm-code.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,wEAAwE;AACxE,EAAE;AACF,SAAS;AACT,EAAE;AACF,qBAAqB;AACrB,yBAAyB;AACzB,QAAQ;AACR,EAAE;AACF,cAAc;AACd,EAAE;AACF,oGAAoG;AACpG,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,wEAAwE;AACxE,yEAAyE;AACzE,6CAA6C;AAC7C,EAAE;AACF,wEAAwE;AACxE,sEAAsE;AACtE,wEAAwE;AACxE,wEAAwE;AACxE,yEAAyE;AACzE,yBAAyB;AAGzB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,SAAS,EAAE,IAAI;IACf,MAAM,CAAC,OAAO,EAAE,GAAG;QACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,GAAG,IAAI,gBAAgB,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa;YACjC,CAAC,CAAC,oBAAoB,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG;YACtD,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACL,IAAI,EAAE,aAAa,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,eAAe;SACjE,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,OAAO,CAAC,GAAW;IAC1B,OAAO;QACL,IAAI,EAAE,qEAAqE,UAAU,CAAC,GAAG,CAAC,iBAAiB;KAC5G,CAAC;AACJ,CAAC"}
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
// Arrays are joined with ", ". Missing keys and unsupported value shapes
|
|
27
27
|
// (plain objects, null) render a visible warning marker so the page
|
|
28
28
|
// surfaces the problem instead of silently emitting "undefined".
|
|
29
|
-
import { htmlEscape } from "
|
|
29
|
+
import { htmlEscape } from "../../../escape.js";
|
|
30
|
+
import { formatInline } from "./inline-format.js";
|
|
30
31
|
export const fmHandler = {
|
|
31
32
|
inline: "fm",
|
|
32
33
|
render(content, ctx) {
|
|
@@ -48,7 +49,10 @@ export const fmHandler = {
|
|
|
48
49
|
// wrapping in a <span> keeps the value visible. The span is invisible in
|
|
49
50
|
// the final layout so it doesn't change typography.
|
|
50
51
|
function wrap(inner) { return `<span class="fm-value">${inner}</span>`; }
|
|
51
|
-
|
|
52
|
+
/** Walk a dot-path into the page's frontmatter; numeric segments index
|
|
53
|
+
* arrays. Exported so the sibling fm code-block handler reuses the same
|
|
54
|
+
* resolution semantics. */
|
|
55
|
+
export function lookup(root, path) {
|
|
52
56
|
const segments = path.split(".");
|
|
53
57
|
let cursor = root;
|
|
54
58
|
for (const seg of segments) {
|
|
@@ -60,16 +64,6 @@ function lookup(root, path) {
|
|
|
60
64
|
}
|
|
61
65
|
return cursor;
|
|
62
66
|
}
|
|
63
|
-
// HTML-escape, then a tiny inline-markdown pass: bold (** **) before italic
|
|
64
|
-
// (* *) so bold doesn't get eaten, then code spans. Matches the same subset
|
|
65
|
-
// the statblock handler's formatInline supports — keep these in sync.
|
|
66
|
-
function formatInline(s) {
|
|
67
|
-
let out = htmlEscape(s);
|
|
68
|
-
out = out.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>");
|
|
69
|
-
out = out.replace(/(^|[^*])\*([^*\n]+)\*(?!\*)/g, "$1<em>$2</em>");
|
|
70
|
-
out = out.replace(/`([^`]+)`/g, "<code>$1</code>");
|
|
71
|
-
return out;
|
|
72
|
-
}
|
|
73
67
|
function formatScalar(v) {
|
|
74
68
|
if (v === null || v === undefined)
|
|
75
69
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fm.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/fm.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,QAAQ;AACR,kBAAkB;AAClB,aAAa;AACb,WAAW;AACX,aAAa;AACb,QAAQ;AACR,iEAAiE;AACjE,EAAE;AACF,kDAAkD;AAClD,EAAE;AACF,wEAAwE;AACxE,yEAAyE;AACzE,6CAA6C;AAC7C,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,0EAA0E;AAC1E,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,8BAA8B;AAC9B,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,oEAAoE;AACpE,iEAAiE;AAGjE,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"fm.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/fm.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// of the same name; see buildRegistry() in handlers/types.ts.
|
|
5
5
|
import { diceHandler } from "./dice.js";
|
|
6
6
|
import { fmHandler } from "./fm.js";
|
|
7
|
+
import { fmCodeHandler } from "./fm-code.js";
|
|
7
8
|
import { statblockHandler } from "./statblock.js";
|
|
8
|
-
export const BUILTIN_HANDLERS = [diceHandler, fmHandler, statblockHandler];
|
|
9
|
+
export const BUILTIN_HANDLERS = [diceHandler, fmHandler, fmCodeHandler, statblockHandler];
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,2EAA2E;AAC3E,8DAA8D;AAG9D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAc,CAAC,WAAW,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,2EAA2E;AAC3E,8DAA8D;AAG9D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAc,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Tiny inline-markdown formatter shared by the built-in `fm` and `statblock`
|
|
2
|
+
// handlers. Both render frontmatter scalars or bespoke content directly to
|
|
3
|
+
// HTML rather than re-feeding it through the full markdown pipeline, but
|
|
4
|
+
// authors still expect basic ** ** / * * / `` markup to survive. This is
|
|
5
|
+
// the smallest formatter that supports that.
|
|
6
|
+
//
|
|
7
|
+
// Bold runs first (** **) so the italic regex can't gobble its asterisks.
|
|
8
|
+
// Italic uses a leading non-`*` guard so `**bold**` doesn't match. Code
|
|
9
|
+
// spans run last; their delimiter (`) is HTML-safe after htmlEscape.
|
|
10
|
+
//
|
|
11
|
+
// Wikilinks are intentionally NOT processed here — wikilink resolution
|
|
12
|
+
// requires the full RenderContext and lives in render/wikilink.ts. Authors
|
|
13
|
+
// who need wikilinks should put them in regular prose.
|
|
14
|
+
import { htmlEscape } from "../../../escape.js";
|
|
15
|
+
/**
|
|
16
|
+
* HTML-escape `s`, then apply a small inline-markdown subset
|
|
17
|
+
* (bold, italic, code spans). Returns ready-to-insert HTML.
|
|
18
|
+
*/
|
|
19
|
+
export function formatInline(s) {
|
|
20
|
+
let out = htmlEscape(s);
|
|
21
|
+
out = out.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>");
|
|
22
|
+
out = out.replace(/(^|[^*])\*([^*\n]+)\*(?!\*)/g, "$1<em>$2</em>");
|
|
23
|
+
out = out.replace(/`([^`]+)`/g, "<code>$1</code>");
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=inline-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-format.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/inline-format.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,6CAA6C;AAC7C,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,qEAAqE;AACrE,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,uDAAuD;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACxB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;IAC7D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,8BAA8B,EAAE,eAAe,CAAC,CAAC;IACnE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -30,13 +30,13 @@
|
|
|
30
30
|
//
|
|
31
31
|
// Coverage: name/size/type/subtype/alignment, ac (+ ac_class), hp (+ hit_dice),
|
|
32
32
|
// speed, six abilities (stats), saves, skillsaves, damage_*, condition_immunities,
|
|
33
|
-
// senses, languages, cr, traits,
|
|
34
|
-
// (+ legendary_description). Inline markdown in
|
|
35
|
-
// *italic*, and `code`. Other Fantasy Statblocks
|
|
36
|
-
//
|
|
37
|
-
// fields) are not supported in v1.
|
|
33
|
+
// senses, languages, cr, traits, spells (basic spellcasting list), actions,
|
|
34
|
+
// reactions, legendary_actions (+ legendary_description). Inline markdown in
|
|
35
|
+
// `desc` fields supports **bold**, *italic*, and `code`. Other Fantasy Statblocks
|
|
36
|
+
// features (innate spellcasting, PF2e/13th-age custom layouts, dice-roller
|
|
37
|
+
// integration, JS callbacks, image fields) are not supported in v1.
|
|
38
38
|
import yaml from "js-yaml";
|
|
39
|
-
import { htmlEscape } from "
|
|
39
|
+
import { htmlEscape } from "../../../escape.js";
|
|
40
40
|
import { registerBuiltinAssets } from "../assets.js";
|
|
41
41
|
const ABILITY_NAMES = ["STR", "DEX", "CON", "INT", "WIS", "CHA"];
|
|
42
42
|
const ABILITY_SHORT = {
|
|
@@ -109,10 +109,24 @@ async function preprocessHandlers(m, ctx) {
|
|
|
109
109
|
if (typeof mAny[k] === "string")
|
|
110
110
|
mAny[k] = await tokenize(mAny[k]);
|
|
111
111
|
}
|
|
112
|
-
// Per-entry name and desc inside trait/action lists.
|
|
112
|
+
// Per-entry name and desc inside trait/action lists. Nested traits are
|
|
113
|
+
// hoisted to the top level prefixed with the parent's name (v1: flat).
|
|
113
114
|
const list = async (xs) => {
|
|
114
115
|
if (!xs)
|
|
115
116
|
return;
|
|
117
|
+
// Inline-flatten one level of nested .traits[].traits before tokenizing.
|
|
118
|
+
for (let i = 0; i < xs.length; i++) {
|
|
119
|
+
const x = xs[i];
|
|
120
|
+
if (Array.isArray(x.traits) && x.traits.length) {
|
|
121
|
+
const parentName = x.name ?? "";
|
|
122
|
+
const flattened = x.traits.map((nested) => ({
|
|
123
|
+
...nested,
|
|
124
|
+
name: parentName ? `${parentName}: ${nested.name ?? ""}`.trim() : (nested.name ?? ""),
|
|
125
|
+
}));
|
|
126
|
+
delete x.traits;
|
|
127
|
+
xs.splice(i + 1, 0, ...flattened);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
116
130
|
for (const x of xs) {
|
|
117
131
|
if (typeof x.name === "string")
|
|
118
132
|
x.name = await tokenize(x.name);
|
|
@@ -122,8 +136,30 @@ async function preprocessHandlers(m, ctx) {
|
|
|
122
136
|
};
|
|
123
137
|
await list(m.traits);
|
|
124
138
|
await list(m.actions);
|
|
139
|
+
await list(m.bonus_actions);
|
|
125
140
|
await list(m.reactions);
|
|
126
141
|
await list(m.legendary_actions);
|
|
142
|
+
await list(m.mythic_actions);
|
|
143
|
+
await list(m.lair_actions);
|
|
144
|
+
await list(m.triggered_actions);
|
|
145
|
+
// spells: each entry is a string OR object. Tokenize string values
|
|
146
|
+
// (top-level entries and per-key values inside object entries) so
|
|
147
|
+
// dice:/fm: work inside.
|
|
148
|
+
if (m.spells) {
|
|
149
|
+
for (let i = 0; i < m.spells.length; i++) {
|
|
150
|
+
const s = m.spells[i];
|
|
151
|
+
if (typeof s === "string") {
|
|
152
|
+
m.spells[i] = (await tokenize(s)) ?? s;
|
|
153
|
+
}
|
|
154
|
+
else if (s && typeof s === "object") {
|
|
155
|
+
for (const k of Object.keys(s)) {
|
|
156
|
+
const v = s[k];
|
|
157
|
+
if (typeof v === "string")
|
|
158
|
+
s[k] = (await tokenize(v)) ?? v;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
127
163
|
return spliceback;
|
|
128
164
|
}
|
|
129
165
|
function property(label, value, spliceback) {
|
|
@@ -135,10 +171,17 @@ function header(m, spliceback) {
|
|
|
135
171
|
const name = m.name ?? "Unnamed";
|
|
136
172
|
const sub = [m.size, m.type, m.subtype && `(${m.subtype})`, m.alignment]
|
|
137
173
|
.filter(Boolean).join(" ");
|
|
174
|
+
// The image path is treated as a vault-relative reference; we emit it
|
|
175
|
+
// verbatim. Authors typically use a path their wiki's image cache serves
|
|
176
|
+
// (e.g. "portraits/foo.webp"). The sanitizer allows src/alt/class on img.
|
|
177
|
+
const img = m.image
|
|
178
|
+
? `<img class="statblock-image" src="${htmlEscape(m.image)}" alt="${htmlEscape(name)}">`
|
|
179
|
+
: "";
|
|
138
180
|
// Rendered as a div, not an h2: the page sanitizer restricts <h2> to
|
|
139
181
|
// class="sr-only" only (GFM footnotes use it). The name is also not part
|
|
140
182
|
// of the page's article outline — pages can have multiple statblocks.
|
|
141
183
|
return (`<div class="statblock-header">` +
|
|
184
|
+
img +
|
|
142
185
|
`<div class="statblock-name">${formatInline(name, spliceback)}</div>` +
|
|
143
186
|
(sub ? `<p class="statblock-subheading">${formatInline(sub, spliceback)}</p>` : "") +
|
|
144
187
|
`</div>`);
|
|
@@ -164,19 +207,32 @@ function stats(m) {
|
|
|
164
207
|
`</div>`).join("");
|
|
165
208
|
return `<div class="statblock-stats">${cells}</div>`;
|
|
166
209
|
}
|
|
210
|
+
// FS accepts saves/skillsaves either as an array of single-key objects OR a
|
|
211
|
+
// single multi-key object. Normalize to a flat list of [key, val] pairs.
|
|
167
212
|
function bonusList(entries, labelFor) {
|
|
168
|
-
if (!entries
|
|
213
|
+
if (!entries)
|
|
169
214
|
return "";
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
215
|
+
const pairs = [];
|
|
216
|
+
if (Array.isArray(entries)) {
|
|
217
|
+
for (const entry of entries) {
|
|
218
|
+
for (const [k, v] of Object.entries(entry)) {
|
|
219
|
+
if (typeof v === "number")
|
|
220
|
+
pairs.push([k, v]);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else if (typeof entries === "object") {
|
|
225
|
+
for (const [k, v] of Object.entries(entries)) {
|
|
226
|
+
if (typeof v === "number")
|
|
227
|
+
pairs.push([k, v]);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (!pairs.length)
|
|
231
|
+
return "";
|
|
232
|
+
return pairs.map(([key, val]) => {
|
|
177
233
|
const sign = val >= 0 ? "+" : "";
|
|
178
234
|
return `${labelFor(key)} ${sign}${val}`;
|
|
179
|
-
}).
|
|
235
|
+
}).join(", ");
|
|
180
236
|
}
|
|
181
237
|
function midProperties(m, spliceback) {
|
|
182
238
|
const saves = bonusList(m.saves, k => ABILITY_SHORT[k.toLowerCase()] ?? k);
|
|
@@ -199,6 +255,52 @@ function trait(t, spliceback) {
|
|
|
199
255
|
formatInline(t.desc ?? "", spliceback) +
|
|
200
256
|
`</p>`;
|
|
201
257
|
}
|
|
258
|
+
// Render a single per-level line: bold label + comma-separated, auto-italicized
|
|
259
|
+
// spell list. Used for both string entries (split on first `:`) and object
|
|
260
|
+
// entries (key = label, value = spell list string).
|
|
261
|
+
function spellLevelLine(label, list, spliceback) {
|
|
262
|
+
const spellList = list.split(",")
|
|
263
|
+
.map(s => s.trim()).filter(Boolean)
|
|
264
|
+
.map(s => `<em>${formatInline(s, spliceback)}</em>`)
|
|
265
|
+
.join(", ");
|
|
266
|
+
return `<p class="statblock-spell-level">` +
|
|
267
|
+
`<strong>${formatInline(label, spliceback)}</strong>: ${spellList}` +
|
|
268
|
+
`</p>`;
|
|
269
|
+
}
|
|
270
|
+
// Render Fantasy Statblocks `spells:` — first entry is intro prose shown as
|
|
271
|
+
// a Spellcasting trait header; remaining entries are per-level lines.
|
|
272
|
+
//
|
|
273
|
+
// Each entry can be a string (split on `:`) OR an object whose keys are
|
|
274
|
+
// level labels and values are the spell list strings (FS Spell type).
|
|
275
|
+
// Entries without a `:` fall through as plain paragraphs.
|
|
276
|
+
function spellcasting(spells, spliceback) {
|
|
277
|
+
if (!spells?.length)
|
|
278
|
+
return "";
|
|
279
|
+
const [first, ...rest] = spells;
|
|
280
|
+
// Object as the first entry has no obvious "intro prose" interpretation;
|
|
281
|
+
// treat all entries as levels in that case (no Spellcasting header).
|
|
282
|
+
const introIsString = typeof first === "string";
|
|
283
|
+
const head = introIsString
|
|
284
|
+
? `<p class="statblock-trait">` +
|
|
285
|
+
`<strong><em>Spellcasting.</em></strong> ` +
|
|
286
|
+
formatInline(first, spliceback) +
|
|
287
|
+
`</p>`
|
|
288
|
+
: "";
|
|
289
|
+
const levels = introIsString ? rest : spells;
|
|
290
|
+
const lines = levels.map(entry => {
|
|
291
|
+
if (typeof entry === "string") {
|
|
292
|
+
const colon = entry.indexOf(":");
|
|
293
|
+
if (colon < 0)
|
|
294
|
+
return `<p class="statblock-spell-level">${formatInline(entry, spliceback)}</p>`;
|
|
295
|
+
return spellLevelLine(entry.slice(0, colon), entry.slice(colon + 1), spliceback);
|
|
296
|
+
}
|
|
297
|
+
// Object form: render each key/value pair as its own level line.
|
|
298
|
+
return Object.entries(entry)
|
|
299
|
+
.map(([label, list]) => spellLevelLine(label, String(list ?? ""), spliceback))
|
|
300
|
+
.join("");
|
|
301
|
+
}).join("");
|
|
302
|
+
return head + lines;
|
|
303
|
+
}
|
|
202
304
|
function section(label, items, spliceback, intro) {
|
|
203
305
|
if (!items?.length)
|
|
204
306
|
return "";
|
|
@@ -229,8 +331,16 @@ export const statblockHandler = {
|
|
|
229
331
|
// fields with sentinel tokens; spliceback holds the resulting HTML and
|
|
230
332
|
// formatInline weaves it back in after escaping.
|
|
231
333
|
const spliceback = await preprocessHandlers(m, ctx);
|
|
232
|
-
const
|
|
233
|
-
|
|
334
|
+
const spellsHtml = spellcasting(m.spells, spliceback);
|
|
335
|
+
const traitsHtml = m.traits?.length || spellsHtml
|
|
336
|
+
? `<div class="statblock-section">${(m.traits ?? []).map(t => trait(t, spliceback)).join("")}${spellsHtml}</div>`
|
|
337
|
+
: "";
|
|
338
|
+
const sourceText = Array.isArray(m.source) ? m.source.join(", ") : m.source;
|
|
339
|
+
const sourceHtml = sourceText
|
|
340
|
+
? `<p class="statblock-source"><em>${formatInline(sourceText, spliceback)}</em></p>`
|
|
341
|
+
: "";
|
|
342
|
+
const noteHtml = m.note
|
|
343
|
+
? `<p class="statblock-note"><em>${formatInline(m.note, spliceback)}</em></p>`
|
|
234
344
|
: "";
|
|
235
345
|
const body = [
|
|
236
346
|
header(m, spliceback),
|
|
@@ -243,8 +353,14 @@ export const statblockHandler = {
|
|
|
243
353
|
`<div class="statblock-rule statblock-rule-tapered"></div>`,
|
|
244
354
|
traitsHtml,
|
|
245
355
|
section("Actions", m.actions, spliceback),
|
|
356
|
+
section("Bonus Actions", m.bonus_actions, spliceback),
|
|
246
357
|
section("Reactions", m.reactions, spliceback),
|
|
247
358
|
section("Legendary Actions", m.legendary_actions, spliceback, m.legendary_description),
|
|
359
|
+
section("Mythic Actions", m.mythic_actions, spliceback, m.mythic_description),
|
|
360
|
+
section("Lair Actions", m.lair_actions, spliceback),
|
|
361
|
+
section("Triggered Actions", m.triggered_actions, spliceback),
|
|
362
|
+
sourceHtml,
|
|
363
|
+
noteHtml,
|
|
248
364
|
].join("");
|
|
249
365
|
return { html: `<div class="statblock">${body}</div>` };
|
|
250
366
|
},
|
|
@@ -335,6 +451,11 @@ const STATBLOCK_CSS = `
|
|
|
335
451
|
font-weight: bold;
|
|
336
452
|
font-style: italic;
|
|
337
453
|
}
|
|
454
|
+
.statblock-spell-level {
|
|
455
|
+
margin: 0.15rem 0 0.15rem 1rem;
|
|
456
|
+
text-indent: -1rem;
|
|
457
|
+
padding-left: 1rem;
|
|
458
|
+
}
|
|
338
459
|
.statblock-section-intro {
|
|
339
460
|
font-style: italic;
|
|
340
461
|
margin: 0.3rem 0;
|
|
@@ -344,8 +465,27 @@ const STATBLOCK_CSS = `
|
|
|
344
465
|
color: #7a200d;
|
|
345
466
|
border-color: #7a200d;
|
|
346
467
|
}
|
|
468
|
+
.statblock-image {
|
|
469
|
+
float: right;
|
|
470
|
+
width: 75px;
|
|
471
|
+
height: 75px;
|
|
472
|
+
object-fit: cover;
|
|
473
|
+
margin: 0 0 0.4rem 0.5rem;
|
|
474
|
+
border: 2px solid var(--statblock-rule-color);
|
|
475
|
+
border-radius: 2px;
|
|
476
|
+
}
|
|
477
|
+
.statblock-source,
|
|
478
|
+
.statblock-note {
|
|
479
|
+
font-size: 0.85rem;
|
|
480
|
+
margin-top: 0.4rem;
|
|
481
|
+
color: #555;
|
|
482
|
+
}
|
|
347
483
|
`;
|
|
348
484
|
registerBuiltinAssets(statblockHandler, {
|
|
349
485
|
styles: [{ source: "builtin/statblock.css", content: STATBLOCK_CSS }],
|
|
486
|
+
// Styles ride into the Foundry-import bundle so synced statblocks
|
|
487
|
+
// render identically. Scripts intentionally omitted: dice runtime is
|
|
488
|
+
// replaced by Foundry's [[/r]] enricher in links.mjs.
|
|
489
|
+
foundry: { styles: true },
|
|
350
490
|
});
|
|
351
491
|
//# sourceMappingURL=statblock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statblock.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/statblock.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"statblock.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/statblock.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,2BAA2B;AAC3B,EAAE;AACF,iBAAiB;AACjB,iBAAiB;AACjB,gBAAgB;AAChB,mBAAmB;AACnB,WAAW;AACX,UAAU;AACV,kBAAkB;AAClB,kBAAkB;AAClB,iCAAiC;AACjC,WAAW;AACX,qBAAqB;AACrB,gBAAgB;AAChB,mBAAmB;AACnB,oDAAoD;AACpD,8BAA8B;AAC9B,cAAc;AACd,YAAY;AACZ,4BAA4B;AAC5B,kFAAkF;AAClF,aAAa;AACb,uBAAuB;AACvB,sFAAsF;AACtF,QAAQ;AACR,EAAE;AACF,gFAAgF;AAChF,mFAAmF;AACnF,4EAA4E;AAC5E,6EAA6E;AAC7E,kFAAkF;AAClF,2EAA2E;AAC3E,oEAAoE;AAEpE,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAkDrD,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAC1E,MAAM,aAAa,GAA2B;IAC5C,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK;IACtD,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK;CACpD,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,0EAA0E;AAC1E,uEAAuE;AACvE,sEAAsE;AACtE,qEAAqE;AACrE,mEAAmE;AACnE,uEAAuE;AACvE,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,uEAAuE;AACvE,4BAA4B;AAC5B,MAAM,QAAQ,GAAG,mCAAmC,CAAC;AACrD,SAAS,SAAS,CAAC,CAAS,IAAY,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;AAEnF,SAAS,YAAY,CAAC,CAAS,EAAE,UAAoB;IACnD,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACxB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;IAC7D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,8BAA8B,EAAE,eAAe,CAAC,CAAC;IACnE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACnD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,kBAAkB,CAC/B,CAAU,EACV,GAAmB;IAEnB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAqB,EAA+B,EAAE;QAC5E,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QACrC,wEAAwE;QACxE,MAAM,EAAE,GAAG,6BAA6B,CAAC;QACzC,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,IAAI,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC;gBAAE,SAAS,CAAC,mCAAmC;YACxE,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvC,CAAC;QACD,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB;QAC5C,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,uEAAuE;IACvE,MAAM,IAAI,GAAG,CAA4B,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,CAAC;IAC/E,CAAC;IACD,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,IAAI,GAAG,KAAK,EAAE,EAA2B,EAAiB,EAAE;QAChE,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,yEAAyE;QACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC;YACjB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC/C,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC1C,GAAG,MAAM;oBACT,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;iBACtF,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,CAAC,MAAM,CAAC;gBAChB,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAAE,CAAC,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAAE,CAAC,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrB,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAC5B,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxB,MAAM,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAChC,MAAM,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC7B,MAAM,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3B,MAAM,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAChC,mEAAmE;IACnE,kEAAkE;IAClE,yBAAyB;IACzB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACtC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACf,IAAI,OAAO,CAAC,KAAK,QAAQ;wBAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAyB,EAAE,UAAoB;IAC9E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACnD,OAAO,yCAAyC,KAAK,aAAa,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;AAC1G,CAAC;AAED,SAAS,MAAM,CAAC,CAAU,EAAE,UAAoB;IAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;IACjC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC;SACrE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,sEAAsE;IACtE,yEAAyE;IACzE,0EAA0E;IAC1E,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK;QACjB,CAAC,CAAC,qCAAqC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,UAAU,CAAC,IAAI,CAAC,IAAI;QACxF,CAAC,CAAC,EAAE,CAAC;IACP,qEAAqE;IACrE,yEAAyE;IACzE,sEAAsE;IACtE,OAAO,CACL,gCAAgC;QAChC,GAAG;QACH,+BAA+B,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ;QACrE,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAmC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,CAAU,EAAE,UAAoB;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACtF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,KAAK,CAAC,CAAU;IACvB,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CACrC,8BAA8B;QAC9B,oCAAoC,aAAa,CAAC,CAAC,CAAC,QAAQ;QAC5D,qCAAqC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,SAAS;QACvE,QAAQ,CACT,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,OAAO,gCAAgC,KAAK,QAAQ,CAAC;AACvD,CAAC;AAED,4EAA4E;AAC5E,yEAAyE;AACzE,SAAS,SAAS,CAChB,OAAiC,EACjC,QAAiC;IAEjC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC7B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,CAAU,EAAE,UAAoB;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,OAAO;QACL,QAAQ,CAAC,eAAe,EAAE,KAAK,IAAI,SAAS,EAAE,UAAU,CAAC;QACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,EAAE,UAAU,CAAC;QACnD,QAAQ,CAAC,wBAAwB,EAAE,CAAC,CAAC,sBAAsB,EAAE,UAAU,CAAC;QACxE,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC,kBAAkB,EAAE,UAAU,CAAC;QAChE,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,iBAAiB,EAAE,UAAU,CAAC;QAC9D,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,oBAAoB,EAAE,UAAU,CAAC;QACpE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC;QACxC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC;QAC9C,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC;KACjF,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,SAAS,KAAK,CAAC,CAAY,EAAE,UAAoB;IAC/C,OAAO,6BAA6B;QAClC,eAAe,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,UAAU,CAAC,kBAAkB;QACvE,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,UAAU,CAAC;QACtC,MAAM,CAAC;AACX,CAAC;AAED,gFAAgF;AAChF,2EAA2E;AAC3E,oDAAoD;AACpD,SAAS,cAAc,CAAC,KAAa,EAAE,IAAY,EAAE,UAAoB;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC;SACnD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,mCAAmC;QACxC,WAAW,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,SAAS,EAAE;QACnE,MAAM,CAAC;AACX,CAAC;AAED,4EAA4E;AAC5E,sEAAsE;AACtE,EAAE;AACF,wEAAwE;AACxE,sEAAsE;AACtE,0DAA0D;AAC1D,SAAS,YAAY,CAAC,MAAgC,EAAE,UAAoB;IAC1E,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,OAAO,EAAE,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;IAChC,yEAAyE;IACzE,qEAAqE;IACrE,MAAM,aAAa,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC;IAChD,MAAM,IAAI,GAAG,aAAa;QACxB,CAAC,CAAC,6BAA6B;YAC7B,0CAA0C;YAC1C,YAAY,CAAC,KAAe,EAAE,UAAU,CAAC;YACzC,MAAM;QACR,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO,oCAAoC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;YAChG,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACnF,CAAC;QACD,iEAAiE;QACjE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;aAC7E,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,IAAI,GAAG,KAAK,CAAC;AACtB,CAAC;AAED,SAAS,OAAO,CACd,KAAa,EACb,KAA8B,EAC9B,UAAoB,EACpB,KAAc;IAEd,IAAI,CAAC,KAAK,EAAE,MAAM;QAAE,OAAO,EAAE,CAAC;IAC9B,sEAAsE;IACtE,0EAA0E;IAC1E,OAAO,iCAAiC;QACtC,yCAAyC,UAAU,CAAC,KAAK,CAAC,OAAO;QACjE,CAAC,KAAK,CAAC,CAAC,CAAC,sCAAsC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,QAAQ,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,SAAS,EAAE,WAAW;IACtB,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG;QACvB,IAAI,CAAU,CAAC;QACf,IAAI,CAAC;YACH,CAAC,GAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB,IAAI,EAAE,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,IAAI,EAAE,yCAAyC;oBAC7C,0CAA0C;oBAC1C,UAAU,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC5D,QAAQ;aACX,CAAC;QACJ,CAAC;QACD,oEAAoE;QACpE,uEAAuE;QACvE,iDAAiD;QACjD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU;YAC/C,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,QAAQ;YACjH,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5E,MAAM,UAAU,GAAG,UAAU;YAC3B,CAAC,CAAC,mCAAmC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,WAAW;YACpF,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI;YACrB,CAAC,CAAC,iCAAiC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW;YAC9E,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,GAAG;YACX,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC;YACrB,oCAAoC;YACpC,gCAAgC,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ;YACpE,oCAAoC;YACpC,KAAK,CAAC,CAAC,CAAC;YACR,oCAAoC;YACpC,gCAAgC,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ;YACpE,2DAA2D;YAC3D,UAAU;YACV,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC;YACzC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC;YACrD,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC;YAC7C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC,qBAAqB,CAAC;YACtF,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,kBAAkB,CAAC;YAC7E,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC;YACnD,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,iBAAiB,EAAE,UAAU,CAAC;YAC7D,UAAU;YACV,QAAQ;SACT,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,0BAA0B,IAAI,QAAQ,EAAE,CAAC;IAC1D,CAAC;CACF,CAAC;AAEF,yEAAyE;AACzE,2EAA2E;AAC3E,yEAAyE;AACzE,qEAAqE;AACrE,sEAAsE;AACtE,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8GrB,CAAC;AAEF,qBAAqB,CAAC,gBAAgB,EAAE;IACtC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IACrE,kEAAkE;IAClE,qEAAqE;IACrE,sDAAsD;IACtD,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;CAC1B,CAAC,CAAC"}
|
|
@@ -1,22 +1,9 @@
|
|
|
1
1
|
// Unified plugin that runs registered handlers over the markdown AST.
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// keyed on `lang`; if found, replace the node with the handler's output.
|
|
8
|
-
//
|
|
9
|
-
// Output is parsed back into mdast (when markdown) or wrapped as a raw HTML
|
|
10
|
-
// node (when html). Either way, the rest of the pipeline (wikilinks,
|
|
11
|
-
// embeds, sanitization) sees the substituted content normally.
|
|
12
|
-
//
|
|
13
|
-
// Recursion: the walker descends into handler-emitted markdown and runs
|
|
14
|
-
// the registry against it again, so a handler that returns text
|
|
15
|
-
// containing `dice: 1d20` produces a real dice button. Bounded by
|
|
16
|
-
// MAX_DEPTH so a self-referential handler can't loop forever.
|
|
17
|
-
//
|
|
18
|
-
// Runs early in the pipeline so handler-emitted markdown still picks up
|
|
19
|
-
// wikilink / embed processing downstream.
|
|
2
|
+
// Inline-code `prefix: …` and fenced code ```lang … ``` blocks are
|
|
3
|
+
// dispatched to the matching InlineHandler / CodeBlockHandler. Handler
|
|
4
|
+
// output is re-parsed (or wrapped as raw HTML) so downstream wikilink /
|
|
5
|
+
// embed passes still see it. Handler-emitted markdown is recursively
|
|
6
|
+
// dispatched, bounded by MAX_DEPTH.
|
|
20
7
|
import { unified } from "unified";
|
|
21
8
|
import remarkParse from "remark-parse";
|
|
22
9
|
import remarkGfm from "remark-gfm";
|
|
@@ -158,7 +145,10 @@ async function dispatchOne(node, registry, context) {
|
|
|
158
145
|
if (!handler)
|
|
159
146
|
return null;
|
|
160
147
|
const content = value.slice(colon + 1).trim();
|
|
161
|
-
|
|
148
|
+
// Inline handlers never see a code-block meta string. Spread to a fresh
|
|
149
|
+
// context so a handler that mutates ctx (it shouldn't, but) can't leak
|
|
150
|
+
// state across dispatches.
|
|
151
|
+
return outputToInline(await handler.render(content, { ...context, codeBlockMeta: "" }));
|
|
162
152
|
}
|
|
163
153
|
if (node?.type === "code") {
|
|
164
154
|
const lang = (node.lang ?? "").trim();
|
|
@@ -167,7 +157,11 @@ async function dispatchOne(node, registry, context) {
|
|
|
167
157
|
const handler = registry.codeBlock.get(lang);
|
|
168
158
|
if (!handler)
|
|
169
159
|
return null;
|
|
170
|
-
|
|
160
|
+
// node.meta is whatever follows the lang on the fence — `lang foo bar`.
|
|
161
|
+
// Pass it through so handlers like `fm` can use it as a language hint
|
|
162
|
+
// for the rendered <pre><code class="language-…">.
|
|
163
|
+
const meta = (node.meta ?? "").trim();
|
|
164
|
+
return outputToBlock(await handler.render(node.value, { ...context, codeBlockMeta: meta }));
|
|
171
165
|
}
|
|
172
166
|
return null;
|
|
173
167
|
}
|
|
@@ -179,6 +173,7 @@ export function handlersPlugin(opts) {
|
|
|
179
173
|
const context = {
|
|
180
174
|
...baseContext,
|
|
181
175
|
applyInlineHandlers: (text) => applyInlineHandlersImpl(text, registry, context, 0),
|
|
176
|
+
codeBlockMeta: "",
|
|
182
177
|
};
|
|
183
178
|
return () => async (tree) => {
|
|
184
179
|
await walkAndSubstitute(tree, registry, context, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/render/handlers/dispatch.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/render/handlers/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,32 +9,52 @@
|
|
|
9
9
|
// InlineHandler keyed on `prefix`. For each fenced ``` ```lang ``` block it
|
|
10
10
|
// looks up a CodeBlockHandler keyed on `lang`. The handler's `render()` is
|
|
11
11
|
// called with the content and a HandlerContext, and the returned markdown
|
|
12
|
-
// or HTML replaces the matched node in the AST.
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
// or HTML replaces the matched node in the AST. Handlers may also ship
|
|
13
|
+
// `assets.{styles,scripts}` to opt their generated markup into runtime
|
|
14
|
+
// CSS / JS bundles.
|
|
15
|
+
/**
|
|
16
|
+
* Build the dispatch registry from built-in + user handlers. User handlers
|
|
17
|
+
* register after built-ins so they win on prefix/lang collision (documented
|
|
18
|
+
* "user override" semantics) — but a *silent* override is a footgun: the
|
|
19
|
+
* built-in's contract may change between CLI versions and the user's
|
|
20
|
+
* shadowing handler keeps an old shape, breaking quietly. Surface every
|
|
21
|
+
* shadow at registration time with a console.warn so the override is at
|
|
22
|
+
* least visible in build logs.
|
|
23
|
+
*
|
|
24
|
+
* Pass user handlers as `[]` if there are none — callers shouldn't need to
|
|
25
|
+
* gate on emptiness.
|
|
26
|
+
*/
|
|
27
|
+
export function buildRegistry(builtin, user = []) {
|
|
18
28
|
const inline = new Map();
|
|
19
29
|
const codeBlock = new Map();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if ("inline" in h)
|
|
30
|
+
const builtinInlineIds = new Set();
|
|
31
|
+
const builtinCodeBlockIds = new Set();
|
|
32
|
+
for (const h of builtin) {
|
|
33
|
+
if ("inline" in h) {
|
|
24
34
|
inline.set(h.inline, h);
|
|
25
|
-
|
|
35
|
+
builtinInlineIds.add(h.inline);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
26
38
|
codeBlock.set(h.codeBlock, h);
|
|
39
|
+
builtinCodeBlockIds.add(h.codeBlock);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
for (const h of user) {
|
|
43
|
+
if ("inline" in h) {
|
|
44
|
+
if (builtinInlineIds.has(h.inline)) {
|
|
45
|
+
console.warn(`handlers: user inline handler 'inline: "${h.inline}"' shadows the built-in `
|
|
46
|
+
+ `with the same prefix. Override is intentional? OK; otherwise rename the user handler.`);
|
|
47
|
+
}
|
|
48
|
+
inline.set(h.inline, h);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
if (builtinCodeBlockIds.has(h.codeBlock)) {
|
|
52
|
+
console.warn(`handlers: user code-block handler 'codeBlock: "${h.codeBlock}"' shadows the built-in `
|
|
53
|
+
+ `with the same lang tag. Override is intentional? OK; otherwise rename the user handler.`);
|
|
54
|
+
}
|
|
55
|
+
codeBlock.set(h.codeBlock, h);
|
|
56
|
+
}
|
|
27
57
|
}
|
|
28
58
|
return { inline, codeBlock };
|
|
29
59
|
}
|
|
30
|
-
const HTML_ESCAPE = {
|
|
31
|
-
"&": "&",
|
|
32
|
-
"<": "<",
|
|
33
|
-
">": ">",
|
|
34
|
-
'"': """,
|
|
35
|
-
"'": "'",
|
|
36
|
-
};
|
|
37
|
-
export function htmlEscape(s) {
|
|
38
|
-
return s.replace(/[&<>"']/g, (c) => HTML_ESCAPE[c]);
|
|
39
|
-
}
|
|
40
60
|
//# sourceMappingURL=types.js.map
|