@wizzlethorpe/vaults 0.6.1 → 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 +135 -17
- package/dist/build.js +433 -181
- package/dist/build.js.map +1 -1
- package/dist/commands/build.js +4 -4
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/init.js +13 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/password.js +3 -1
- package/dist/commands/password.js.map +1 -1
- package/dist/commands/patreon.js +30 -20
- package/dist/commands/patreon.js.map +1 -1
- package/dist/commands/preview.js +10 -8
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/push.js +11 -9
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/role.js +5 -0
- package/dist/commands/role.js.map +1 -1
- package/dist/config.js +30 -15
- 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 +37 -4
- package/dist/index.js.map +1 -1
- package/dist/migrate/0.6-legacy-auth-settings.js +96 -0
- package/dist/migrate/0.6-legacy-auth-settings.js.map +1 -0
- package/dist/migrate/0.7-vaults-dir.js +70 -0
- package/dist/migrate/0.7-vaults-dir.js.map +1 -0
- package/dist/migrate/registry.js +6 -0
- package/dist/migrate/registry.js.map +1 -0
- package/dist/migrate/run.js +38 -0
- package/dist/migrate/run.js.map +1 -0
- package/dist/migrate/types.js +8 -0
- package/dist/migrate/types.js.map +1 -0
- package/dist/paths.js +66 -0
- package/dist/paths.js.map +1 -0
- package/dist/render/auth-template.js +23 -141
- 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/footer.js +37 -0
- package/dist/render/footer.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 +123 -0
- package/dist/render/handlers/assets.js.map +1 -0
- package/dist/render/handlers/builtin/dice.js +78 -0
- package/dist/render/handlers/builtin/dice.js.map +1 -0
- 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 +83 -0
- package/dist/render/handlers/builtin/fm.js.map +1 -0
- package/dist/render/handlers/builtin/index.js +10 -0
- package/dist/render/handlers/builtin/index.js.map +1 -0
- 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 +491 -0
- package/dist/render/handlers/builtin/statblock.js.map +1 -0
- package/dist/render/handlers/dispatch.js +182 -0
- package/dist/render/handlers/dispatch.js.map +1 -0
- package/dist/render/handlers/loader.js +90 -0
- package/dist/render/handlers/loader.js.map +1 -0
- package/dist/render/handlers/types.js +60 -0
- package/dist/render/handlers/types.js.map +1 -0
- package/dist/render/image-srcs.js +42 -0
- package/dist/render/image-srcs.js.map +1 -0
- package/dist/render/layout.js +62 -9
- package/dist/render/layout.js.map +1 -1
- package/dist/render/pipeline.js +37 -8
- 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 +118 -11
- 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 +25 -4
- package/dist/settings.js.map +1 -1
- package/dist/version.js +36 -0
- package/dist/version.js.map +1 -0
- package/package.json +12 -12
- package/dist/api.js +0 -42
- package/dist/api.js.map +0 -1
- package/dist/render/mcp-template.js +0 -239
- package/dist/render/mcp-template.js.map +0 -1
package/dist/render/embed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/render/embed.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/render/embed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// File-extension constants + helpers shared across the build pipeline.
|
|
2
|
+
//
|
|
3
|
+
// Three independent vocabularies live here:
|
|
4
|
+
//
|
|
5
|
+
// IMAGE_EXT_RE — anything that can be referenced as ![[name.ext]].
|
|
6
|
+
// Superset of COMPRESSIBLE_EXT_RE; covers SVGs and
|
|
7
|
+
// similar formats that ship as-is rather than being
|
|
8
|
+
// recoded to webp.
|
|
9
|
+
//
|
|
10
|
+
// COMPRESSIBLE_EXT_RE — image formats that the build re-encodes to webp
|
|
11
|
+
// via sharp. Re-exported from images.ts so the
|
|
12
|
+
// historical import path keeps working.
|
|
13
|
+
//
|
|
14
|
+
// PASSTHROUGH_EXT_RE — non-image media that ride alongside the wiki
|
|
15
|
+
// (audio, video, PDF, epub, JSON). Shipped
|
|
16
|
+
// per-variant so e.g. DM-only audio doesn't leak
|
|
17
|
+
// to the public deploy. JSON support is here
|
|
18
|
+
// specifically so a page can reference a
|
|
19
|
+
// foundry.data_json file in its frontmatter.
|
|
20
|
+
// Anything outside this list is "unknown" and
|
|
21
|
+
// skipped unless include_unknown_files is on.
|
|
22
|
+
//
|
|
23
|
+
// contentTypeForExt() — best-effort MIME lookup keyed off the extension.
|
|
24
|
+
// Used by manifests so the deploy and Foundry sync
|
|
25
|
+
// agree on each file's content-type.
|
|
26
|
+
export { COMPRESSIBLE_EXT_RE } from "../images.js";
|
|
27
|
+
export const IMAGE_EXT_RE = /\.(png|jpe?g|webp|gif|svg|avif|tiff?|bmp|heic|apng)$/i;
|
|
28
|
+
export const PASSTHROUGH_EXT_RE = /\.(ogg|mp3|m4a|wav|flac|opus|aac|mp4|webm|mov|ogv|pdf|epub|json)$/i;
|
|
29
|
+
// Audio / video subsets used by the renderer's `![[file.ogg]]` /
|
|
30
|
+
// `![[clip.mp4]]` embed handling. Both are subsets of PASSTHROUGH_EXT_RE,
|
|
31
|
+
// kept separate so the embed plugin can emit the right HTML tag without
|
|
32
|
+
// also accepting PDFs or JSON as media embeds.
|
|
33
|
+
export const AUDIO_EXT_RE = /\.(ogg|mp3|m4a|wav|flac|opus|aac)$/i;
|
|
34
|
+
export const VIDEO_EXT_RE = /\.(mp4|webm|mov|ogv)$/i;
|
|
35
|
+
const CONTENT_TYPES = {
|
|
36
|
+
// Text / markup
|
|
37
|
+
html: "text/html; charset=utf-8",
|
|
38
|
+
md: "text/markdown; charset=utf-8",
|
|
39
|
+
markdown: "text/markdown; charset=utf-8",
|
|
40
|
+
txt: "text/plain; charset=utf-8",
|
|
41
|
+
json: "application/json",
|
|
42
|
+
yaml: "application/yaml",
|
|
43
|
+
yml: "application/yaml",
|
|
44
|
+
css: "text/css; charset=utf-8",
|
|
45
|
+
js: "application/javascript; charset=utf-8",
|
|
46
|
+
// Images
|
|
47
|
+
png: "image/png",
|
|
48
|
+
jpg: "image/jpeg",
|
|
49
|
+
jpeg: "image/jpeg",
|
|
50
|
+
webp: "image/webp",
|
|
51
|
+
gif: "image/gif",
|
|
52
|
+
svg: "image/svg+xml",
|
|
53
|
+
avif: "image/avif",
|
|
54
|
+
// Audio / video
|
|
55
|
+
mp3: "audio/mpeg",
|
|
56
|
+
wav: "audio/wav",
|
|
57
|
+
ogg: "audio/ogg",
|
|
58
|
+
m4a: "audio/mp4",
|
|
59
|
+
mp4: "video/mp4",
|
|
60
|
+
// Documents
|
|
61
|
+
pdf: "application/pdf",
|
|
62
|
+
};
|
|
63
|
+
/** Best-effort content-type lookup by extension. Falls back to octet-stream. */
|
|
64
|
+
export function contentTypeForExt(filename) {
|
|
65
|
+
const ext = filename.split(".").pop()?.toLowerCase() ?? "";
|
|
66
|
+
return CONTENT_TYPES[ext] ?? "application/octet-stream";
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=extensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../src/render/extensions.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE;AACF,4CAA4C;AAC5C,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,6CAA6C;AAC7C,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,kEAAkE;AAClE,EAAE;AACF,yEAAyE;AACzE,qEAAqE;AACrE,2EAA2E;AAC3E,uEAAuE;AACvE,mEAAmE;AACnE,uEAAuE;AACvE,wEAAwE;AACxE,wEAAwE;AACxE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,+DAA+D;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,MAAM,YAAY,GAAG,uDAAuD,CAAC;AAEpF,MAAM,CAAC,MAAM,kBAAkB,GAAG,oEAAoE,CAAC;AAEvG,iEAAiE;AACjE,0EAA0E;AAC1E,wEAAwE;AACxE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,qCAAqC,CAAC;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAErD,MAAM,aAAa,GAA2B;IAC5C,gBAAgB;IAChB,IAAI,EAAE,0BAA0B;IAChC,EAAE,EAAE,8BAA8B;IAClC,QAAQ,EAAE,8BAA8B;IACxC,GAAG,EAAE,2BAA2B;IAChC,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,kBAAkB;IACxB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,yBAAyB;IAC9B,EAAE,EAAE,uCAAuC;IAC3C,SAAS;IACT,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,eAAe;IACpB,IAAI,EAAE,YAAY;IAClB,gBAAgB;IAChB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,YAAY;IACZ,GAAG,EAAE,iBAAiB;CACvB,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC3D,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Tag every external `[label](https://…)` markdown link with
|
|
2
|
+
// `target="_blank"` + `rel="noopener noreferrer"` so a click opens in a
|
|
3
|
+
// new tab instead of dropping the reader off the wiki. Internal wikilinks
|
|
4
|
+
// (handled by wikilinkPlugin) and relative URLs stay in-tab.
|
|
5
|
+
//
|
|
6
|
+
// Convention: ANY absolute http(s) URL counts as external — even if it
|
|
7
|
+
// points at the same hostname. Authors who want an in-tab cross-link
|
|
8
|
+
// should use a vault-relative path / wikilink, not the absolute URL.
|
|
9
|
+
import { visit } from "unist-util-visit";
|
|
10
|
+
const EXTERNAL_RE = /^https?:\/\//i;
|
|
11
|
+
export function externalLinksPlugin() {
|
|
12
|
+
return () => (tree) => {
|
|
13
|
+
visit(tree, "link", (node) => {
|
|
14
|
+
const url = node.url;
|
|
15
|
+
if (!url || !EXTERNAL_RE.test(url))
|
|
16
|
+
return;
|
|
17
|
+
// remark/mdast preserves arbitrary HAST props via `data.hProperties`,
|
|
18
|
+
// which remark-rehype copies onto the resulting <a>. Merge so we
|
|
19
|
+
// don't clobber anything an upstream pass might have set.
|
|
20
|
+
const existing = node.data?.hProperties ?? {};
|
|
21
|
+
node.data = {
|
|
22
|
+
...node.data,
|
|
23
|
+
hProperties: {
|
|
24
|
+
...existing,
|
|
25
|
+
target: "_blank",
|
|
26
|
+
rel: "noopener noreferrer",
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=external-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-links.js","sourceRoot":"","sources":["../../src/render/external-links.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,wEAAwE;AACxE,0EAA0E;AAC1E,6DAA6D;AAC7D,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,qEAAqE;AAIrE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,WAAW,GAAG,eAAe,CAAC;AAEpC,MAAM,UAAU,mBAAmB;IACjC,OAAO,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;QACpB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAU,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACrB,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,OAAO;YAC3C,sEAAsE;YACtE,iEAAiE;YACjE,0DAA0D;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,GAAG;gBACV,GAAG,IAAI,CAAC,IAAI;gBACZ,WAAW,EAAE;oBACX,GAAG,QAAQ;oBACX,MAAM,EAAE,QAAQ;oBAChB,GAAG,EAAE,qBAAqB;iBAC3B;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// One-shot markdown renderer for the page footer.
|
|
2
|
+
//
|
|
3
|
+
// The footer setting is rendered ONCE per build (not per page) into a
|
|
4
|
+
// short HTML string, which is then embedded verbatim in every page's
|
|
5
|
+
// layout. Supports inline markdown (links, bold, italic) via the same
|
|
6
|
+
// remark/rehype stack the page renderer uses, so the output looks like
|
|
7
|
+
// any other rendered markdown.
|
|
8
|
+
import { unified } from "unified";
|
|
9
|
+
import remarkParse from "remark-parse";
|
|
10
|
+
import remarkGfm from "remark-gfm";
|
|
11
|
+
import remarkRehype from "remark-rehype";
|
|
12
|
+
import rehypeSanitize from "rehype-sanitize";
|
|
13
|
+
import rehypeStringify from "rehype-stringify";
|
|
14
|
+
/**
|
|
15
|
+
* Render a one-line markdown string to inline HTML. The remark pipeline
|
|
16
|
+
* always wraps single-paragraph input in `<p>…</p>`; we strip that wrapper
|
|
17
|
+
* so the result drops cleanly into a `<footer>` element.
|
|
18
|
+
*
|
|
19
|
+
* Returns an empty string for empty input so callers can branch on truthy.
|
|
20
|
+
*/
|
|
21
|
+
export async function renderFooterHtml(markdown) {
|
|
22
|
+
const trimmed = markdown.trim();
|
|
23
|
+
if (!trimmed)
|
|
24
|
+
return "";
|
|
25
|
+
const file = await unified()
|
|
26
|
+
.use(remarkParse)
|
|
27
|
+
.use(remarkGfm)
|
|
28
|
+
.use(remarkRehype)
|
|
29
|
+
.use(rehypeSanitize)
|
|
30
|
+
.use(rehypeStringify)
|
|
31
|
+
.process(trimmed);
|
|
32
|
+
const html = String(file).trim();
|
|
33
|
+
return html.startsWith("<p>") && html.endsWith("</p>")
|
|
34
|
+
? html.slice(3, -4)
|
|
35
|
+
: html;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footer.js","sourceRoot":"","sources":["../../src/render/footer.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,sEAAsE;AACtE,uEAAuE;AACvE,+BAA+B;AAE/B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE;SACzB,GAAG,CAAC,WAAW,CAAC;SAChB,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,YAAY,CAAC;SACjB,GAAG,CAAC,cAAc,CAAC;SACnB,GAAG,CAAC,eAAe,CAAC;SACpB,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Small markdown helpers shared across the rendering pipeline. Anything
|
|
2
|
+
// richer (parsing, validation) belongs in build.ts where the gray-matter
|
|
3
|
+
// pipeline already lives.
|
|
4
|
+
const FRONTMATTER_RE = /^---\r?\n[\s\S]*?\r?\n---\r?\n?/;
|
|
5
|
+
/**
|
|
6
|
+
* Remove a leading `---\n…\n---\n` block from the given markdown source.
|
|
7
|
+
* Returns the input unchanged if the source has no frontmatter block.
|
|
8
|
+
*/
|
|
9
|
+
export function stripFrontmatter(source) {
|
|
10
|
+
return source.replace(FRONTMATTER_RE, "");
|
|
11
|
+
}
|
|
12
|
+
/** Pull the text of the first level-1 heading out of a markdown source. */
|
|
13
|
+
export function extractH1(source) {
|
|
14
|
+
const m = /^#\s+(.+)$/m.exec(source);
|
|
15
|
+
return m?.[1] ? m[1].trim() : null;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=frontmatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/render/frontmatter.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,yEAAyE;AACzE,0BAA0B;AAE1B,MAAM,cAAc,GAAG,iCAAiC,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// Read and concatenate browser-side assets declared by handlers.
|
|
2
|
+
//
|
|
3
|
+
// Built-in handler assets are delivered as { source, content } pairs (so
|
|
4
|
+
// vaults-cli's own bundle ships the runtime without filesystem lookups).
|
|
5
|
+
// User handler assets are file paths relative to the handler's module file
|
|
6
|
+
// — those get read here, validated to live under the vault's
|
|
7
|
+
// .vaults/handlers/ tree (no `../../etc/passwd`), and included verbatim.
|
|
8
|
+
//
|
|
9
|
+
// Output:
|
|
10
|
+
// - js, css `_handlers.{js,css}` for the wiki
|
|
11
|
+
// - foundry: { js, css } | null subset bundle for the Foundry-VTT module
|
|
12
|
+
// containing only assets whose handler
|
|
13
|
+
// opted in via `assets.foundry`.
|
|
14
|
+
// Each unique source is included exactly once across both bundles.
|
|
15
|
+
import { readFile } from "node:fs/promises";
|
|
16
|
+
import { dirname, resolve, sep } from "node:path";
|
|
17
|
+
/**
|
|
18
|
+
* Built-in handlers attach their static assets to a side-table keyed on
|
|
19
|
+
* the handler reference. The bundler looks them up here.
|
|
20
|
+
*/
|
|
21
|
+
const BUILTIN_ASSETS = new WeakMap();
|
|
22
|
+
export function registerBuiltinAssets(handler, assets) {
|
|
23
|
+
BUILTIN_ASSETS.set(handler, assets);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build the concatenated `_handlers.{js,css}` for a deploy, plus a parallel
|
|
27
|
+
* Foundry-import subset of assets whose handler opted in via
|
|
28
|
+
* `assets.foundry.{scripts,styles} = true`.
|
|
29
|
+
*
|
|
30
|
+
* @param userHandlers handlers loaded from `.vaults/handlers/`
|
|
31
|
+
* @param builtinHandlers handlers shipped by vaults-cli core
|
|
32
|
+
* @param vaultPath absolute path to the vault root, used for path-validation
|
|
33
|
+
*/
|
|
34
|
+
export async function bundleHandlerAssets(userHandlers, builtinHandlers, vaultPath) {
|
|
35
|
+
const seenJs = new Set();
|
|
36
|
+
const seenCss = new Set();
|
|
37
|
+
const jsParts = [];
|
|
38
|
+
const cssParts = [];
|
|
39
|
+
const foundryJsParts = [];
|
|
40
|
+
const foundryCssParts = [];
|
|
41
|
+
const foundryJsSeen = new Set();
|
|
42
|
+
const foundryCssSeen = new Set();
|
|
43
|
+
const handlersRoot = resolve(vaultPath, ".vaults/handlers");
|
|
44
|
+
const addToFoundry = (foundry, kind, source, body) => {
|
|
45
|
+
if (!foundry?.[kind])
|
|
46
|
+
return;
|
|
47
|
+
const seen = kind === "scripts" ? foundryJsSeen : foundryCssSeen;
|
|
48
|
+
if (seen.has(source))
|
|
49
|
+
return;
|
|
50
|
+
seen.add(source);
|
|
51
|
+
(kind === "scripts" ? foundryJsParts : foundryCssParts).push(`/* ${source} */\n${body}`);
|
|
52
|
+
};
|
|
53
|
+
for (const h of builtinHandlers) {
|
|
54
|
+
const inline = BUILTIN_ASSETS.get(h);
|
|
55
|
+
if (!inline)
|
|
56
|
+
continue;
|
|
57
|
+
for (const a of inline.scripts ?? []) {
|
|
58
|
+
if (!seenJs.has(a.source)) {
|
|
59
|
+
seenJs.add(a.source);
|
|
60
|
+
jsParts.push(`/* ${a.source} */\n${a.content}`);
|
|
61
|
+
}
|
|
62
|
+
addToFoundry(inline.foundry, "scripts", a.source, a.content);
|
|
63
|
+
}
|
|
64
|
+
for (const a of inline.styles ?? []) {
|
|
65
|
+
if (!seenCss.has(a.source)) {
|
|
66
|
+
seenCss.add(a.source);
|
|
67
|
+
cssParts.push(`/* ${a.source} */\n${a.content}`);
|
|
68
|
+
}
|
|
69
|
+
addToFoundry(inline.foundry, "styles", a.source, a.content);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
for (const { handler, sourcePath } of userHandlers) {
|
|
73
|
+
const baseDir = dirname(sourcePath);
|
|
74
|
+
for (const rel of handler.assets?.scripts ?? []) {
|
|
75
|
+
const abs = resolveAssetPath(handlersRoot, baseDir, rel);
|
|
76
|
+
if (seenJs.has(abs))
|
|
77
|
+
continue;
|
|
78
|
+
seenJs.add(abs);
|
|
79
|
+
const body = await readFile(abs, "utf8");
|
|
80
|
+
const labeled = `/* ${rel} (${abs}) */\n${body}`;
|
|
81
|
+
jsParts.push(labeled);
|
|
82
|
+
addToFoundry(handler.assets?.foundry, "scripts", abs, labeled);
|
|
83
|
+
}
|
|
84
|
+
for (const rel of handler.assets?.styles ?? []) {
|
|
85
|
+
const abs = resolveAssetPath(handlersRoot, baseDir, rel);
|
|
86
|
+
if (seenCss.has(abs))
|
|
87
|
+
continue;
|
|
88
|
+
seenCss.add(abs);
|
|
89
|
+
const body = await readFile(abs, "utf8");
|
|
90
|
+
const labeled = `/* ${rel} (${abs}) */\n${body}`;
|
|
91
|
+
cssParts.push(labeled);
|
|
92
|
+
addToFoundry(handler.assets?.foundry, "styles", abs, labeled);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const hasFoundry = foundryJsParts.length > 0 || foundryCssParts.length > 0;
|
|
96
|
+
return {
|
|
97
|
+
js: jsParts.join("\n\n"),
|
|
98
|
+
css: cssParts.join("\n\n"),
|
|
99
|
+
foundry: hasFoundry
|
|
100
|
+
? { js: foundryJsParts.join("\n\n"), css: foundryCssParts.join("\n\n") }
|
|
101
|
+
: null,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Resolve a handler asset path and require it lives under .vaults/handlers/.
|
|
106
|
+
* Throws on escape attempts so a typo or malicious manifest fails the build
|
|
107
|
+
* instead of silently shipping nothing.
|
|
108
|
+
*/
|
|
109
|
+
function resolveAssetPath(handlersRoot, baseDir, rel) {
|
|
110
|
+
const abs = resolve(baseDir, rel);
|
|
111
|
+
if (!isWithin(handlersRoot, abs)) {
|
|
112
|
+
throw new Error(`handler asset path escapes .vaults/handlers/: ${rel} (resolved to ${abs}). ` +
|
|
113
|
+
`Move the asset under .vaults/handlers/ and reference it relatively.`);
|
|
114
|
+
}
|
|
115
|
+
return abs;
|
|
116
|
+
}
|
|
117
|
+
function isWithin(root, candidate) {
|
|
118
|
+
// resolve() normalises both, so a prefix check is sound. Append the
|
|
119
|
+
// platform separator to avoid `/foo/bar-evil` matching `/foo/bar`.
|
|
120
|
+
const rootWithSep = root.endsWith(sep) ? root : root + sep;
|
|
121
|
+
return candidate === root || candidate.startsWith(rootWithSep);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/render/handlers/assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Built-in inline `dice:` handler.
|
|
2
|
+
//
|
|
3
|
+
// Mirrors the syntax popularized by Obsidian's Dice Roller plugin:
|
|
4
|
+
//
|
|
5
|
+
// The goblin attacks: `dice: 1d20+5` to hit, `dice: 1d6+3` damage.
|
|
6
|
+
//
|
|
7
|
+
// At build time, the handler renders each formula as a clickable <button>
|
|
8
|
+
// with the formula stored in data-formula. The browser-side runtime
|
|
9
|
+
// (DICE_RUNTIME_SCRIPT below) ships as a built-in asset, gets concatenated
|
|
10
|
+
// into _handlers.js, and parses + rolls on click.
|
|
11
|
+
//
|
|
12
|
+
// Subset of Dice Roller's syntax: basic XdY +/- Z arithmetic, optional X.
|
|
13
|
+
// More complex modifiers (kh, kl, explode, etc.) are not supported.
|
|
14
|
+
import { htmlEscape } from "../../../escape.js";
|
|
15
|
+
import { registerBuiltinAssets } from "../assets.js";
|
|
16
|
+
// Formula validation: optional X, then 'd', then Y, then optional ± integer.
|
|
17
|
+
// Only used at build time to decide whether render() emits a clickable
|
|
18
|
+
// button or a strikethrough <code> fallback. The browser-side parser is
|
|
19
|
+
// the source of truth at runtime — see DICE_RUNTIME_SCRIPT.
|
|
20
|
+
const FORMULA_RE = /^(\d*)d(\d+)\s*([+-]\s*\d+)?$/i;
|
|
21
|
+
export const diceHandler = {
|
|
22
|
+
inline: "dice",
|
|
23
|
+
render(content) {
|
|
24
|
+
const formula = content.trim();
|
|
25
|
+
const escaped = htmlEscape(formula);
|
|
26
|
+
if (!FORMULA_RE.test(formula)) {
|
|
27
|
+
// Not a formula we recognize: fall back to monospace text so the
|
|
28
|
+
// user sees what they wrote and can fix the syntax.
|
|
29
|
+
return {
|
|
30
|
+
html: `<code class="dice-roll dice-roll-invalid" title="unrecognized dice formula">${escaped}</code>`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
html: `<button type="button" class="dice-roll" data-formula="${escaped}" title="Click to roll">${escaped}</button>`,
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
// ── Browser runtime ───────────────────────────────────────────────────────
|
|
39
|
+
// Click-to-reroll for buttons emitted by render(). Event-delegated so a
|
|
40
|
+
// single listener handles every dice button on the page; pages without
|
|
41
|
+
// any dice pay only the cost of the listener attachment.
|
|
42
|
+
const DICE_RUNTIME_SCRIPT = `
|
|
43
|
+
(function () {
|
|
44
|
+
var FORMULA_RE = /^(\\d*)d(\\d+)\\s*([+-]\\s*\\d+)?$/i;
|
|
45
|
+
function roll(formula) {
|
|
46
|
+
var m = FORMULA_RE.exec(formula.trim());
|
|
47
|
+
if (!m) return null;
|
|
48
|
+
var count = m[1] ? parseInt(m[1], 10) : 1;
|
|
49
|
+
var faces = parseInt(m[2], 10);
|
|
50
|
+
var mod = m[3] ? parseInt(m[3].replace(/\\s+/g, ''), 10) : 0;
|
|
51
|
+
if (count < 1 || faces < 1) return null;
|
|
52
|
+
var total = 0;
|
|
53
|
+
var rolls = [];
|
|
54
|
+
for (var i = 0; i < count; i++) {
|
|
55
|
+
var r = 1 + Math.floor(Math.random() * faces);
|
|
56
|
+
rolls.push(r);
|
|
57
|
+
total += r;
|
|
58
|
+
}
|
|
59
|
+
return { total: total + mod, rolls: rolls, mod: mod };
|
|
60
|
+
}
|
|
61
|
+
document.addEventListener('click', function (e) {
|
|
62
|
+
var btn = e.target;
|
|
63
|
+
if (!(btn instanceof HTMLButtonElement)) return;
|
|
64
|
+
if (!btn.classList.contains('dice-roll')) return;
|
|
65
|
+
var formula = btn.dataset.formula;
|
|
66
|
+
if (!formula) return;
|
|
67
|
+
var r = roll(formula);
|
|
68
|
+
if (!r) return;
|
|
69
|
+
var sign = r.mod === 0 ? '' : (r.mod > 0 ? ' + ' + r.mod : ' - ' + Math.abs(r.mod));
|
|
70
|
+
btn.textContent = r.total + ' (' + formula + ')';
|
|
71
|
+
btn.title = '[' + r.rolls.join(', ') + ']' + sign + ' = ' + r.total + ' — click to re-roll';
|
|
72
|
+
});
|
|
73
|
+
})();
|
|
74
|
+
`;
|
|
75
|
+
registerBuiltinAssets(diceHandler, {
|
|
76
|
+
scripts: [{ source: "builtin/dice.runtime.js", content: DICE_RUNTIME_SCRIPT }],
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=dice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dice.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/dice.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,EAAE;AACF,mEAAmE;AACnE,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,0EAA0E;AAC1E,oEAAoE;AACpE,2EAA2E;AAC3E,kDAAkD;AAClD,EAAE;AACF,0EAA0E;AAC1E,oEAAoE;AAGpE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,6EAA6E;AAC7E,uEAAuE;AACvE,wEAAwE;AACxE,4DAA4D;AAC5D,MAAM,UAAU,GAAG,gCAAgC,CAAC;AAEpD,MAAM,CAAC,MAAM,WAAW,GAAkB;IACxC,MAAM,EAAE,MAAM;IACd,MAAM,CAAC,OAAe;QACpB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,iEAAiE;YACjE,oDAAoD;YACpD,OAAO;gBACL,IAAI,EAAE,+EAA+E,OAAO,SAAS;aACtG,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,EAAE,yDAAyD,OAAO,2BAA2B,OAAO,WAAW;SACpH,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,6EAA6E;AAC7E,wEAAwE;AACxE,uEAAuE;AACvE,yDAAyD;AAEzD,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC3B,CAAC;AAEF,qBAAqB,CAAC,WAAW,EAAE;IACjC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,yBAAyB,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAC/E,CAAC,CAAC"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Built-in inline `fm:` handler — inserts a frontmatter value into prose.
|
|
2
|
+
//
|
|
3
|
+
// ---
|
|
4
|
+
// class: Wizard
|
|
5
|
+
// level: 7
|
|
6
|
+
// stats:
|
|
7
|
+
// hp: 22
|
|
8
|
+
// ---
|
|
9
|
+
// The `fm: class` is level `fm: level` with `fm: stats.hp` HP.
|
|
10
|
+
//
|
|
11
|
+
// Renders as: "The Wizard is level 7 with 22 HP."
|
|
12
|
+
//
|
|
13
|
+
// Dot-path lookups (`fm: a.b.c`) walk nested objects. Keys with literal
|
|
14
|
+
// dots in their names are unreachable, which we accept because such keys
|
|
15
|
+
// are vanishingly rare in vault frontmatter.
|
|
16
|
+
//
|
|
17
|
+
// String/number/boolean values render as HTML with a small inline-markup
|
|
18
|
+
// pass (**bold**, *italic*, `code`) so authors can put light formatting
|
|
19
|
+
// in frontmatter and have it survive. Returning HTML rather than markdown
|
|
20
|
+
// lets fm work when invoked recursively from another handler (e.g. inside
|
|
21
|
+
// a `statblock` field), since the dispatcher only re-pipelines top-level
|
|
22
|
+
// markdown returns. Wikilinks in frontmatter are NOT processed; cross-page
|
|
23
|
+
// reference belongs in prose.
|
|
24
|
+
//
|
|
25
|
+
// Dates (YAML auto-parses ISO 8601 strings to Date) format as YYYY-MM-DD.
|
|
26
|
+
// Arrays are joined with ", ". Missing keys and unsupported value shapes
|
|
27
|
+
// (plain objects, null) render a visible warning marker so the page
|
|
28
|
+
// surfaces the problem instead of silently emitting "undefined".
|
|
29
|
+
import { htmlEscape } from "../../../escape.js";
|
|
30
|
+
import { formatInline } from "./inline-format.js";
|
|
31
|
+
export const fmHandler = {
|
|
32
|
+
inline: "fm",
|
|
33
|
+
render(content, ctx) {
|
|
34
|
+
const path = content.trim();
|
|
35
|
+
if (!path)
|
|
36
|
+
return missing("(empty)");
|
|
37
|
+
const value = lookup(ctx.frontmatter, path);
|
|
38
|
+
const formatted = formatScalar(value);
|
|
39
|
+
if (formatted !== null)
|
|
40
|
+
return { html: wrap(formatInline(formatted)) };
|
|
41
|
+
if (Array.isArray(value)) {
|
|
42
|
+
return { html: wrap(formatInline(value.map((v) => formatScalar(v) ?? "").join(", "))) };
|
|
43
|
+
}
|
|
44
|
+
return missing(path);
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
// Bare-text HTML AST nodes get dropped by the markdown → HTML stage
|
|
48
|
+
// (rehype-raw needs an actual element to anchor onto in inline contexts);
|
|
49
|
+
// wrapping in a <span> keeps the value visible. The span is invisible in
|
|
50
|
+
// the final layout so it doesn't change typography.
|
|
51
|
+
function wrap(inner) { return `<span class="fm-value">${inner}</span>`; }
|
|
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) {
|
|
56
|
+
const segments = path.split(".");
|
|
57
|
+
let cursor = root;
|
|
58
|
+
for (const seg of segments) {
|
|
59
|
+
if (cursor === null || cursor === undefined)
|
|
60
|
+
return undefined;
|
|
61
|
+
if (typeof cursor !== "object")
|
|
62
|
+
return undefined;
|
|
63
|
+
cursor = cursor[seg];
|
|
64
|
+
}
|
|
65
|
+
return cursor;
|
|
66
|
+
}
|
|
67
|
+
function formatScalar(v) {
|
|
68
|
+
if (v === null || v === undefined)
|
|
69
|
+
return null;
|
|
70
|
+
if (typeof v === "string")
|
|
71
|
+
return v;
|
|
72
|
+
if (typeof v === "number" || typeof v === "boolean")
|
|
73
|
+
return String(v);
|
|
74
|
+
if (v instanceof Date && !isNaN(v.getTime()))
|
|
75
|
+
return v.toISOString().slice(0, 10);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
function missing(key) {
|
|
79
|
+
return {
|
|
80
|
+
html: `<code class="fm-missing" title="frontmatter key not found">{{${htmlEscape(key)}}}</code>`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=fm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fm.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/fm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Registry of built-in handlers shipped with vaults-cli.
|
|
2
|
+
//
|
|
3
|
+
// User-defined handlers (loaded from .vaults/handlers/) override built-ins
|
|
4
|
+
// of the same name; see buildRegistry() in handlers/types.ts.
|
|
5
|
+
import { diceHandler } from "./dice.js";
|
|
6
|
+
import { fmHandler } from "./fm.js";
|
|
7
|
+
import { fmCodeHandler } from "./fm-code.js";
|
|
8
|
+
import { statblockHandler } from "./statblock.js";
|
|
9
|
+
export const BUILTIN_HANDLERS = [diceHandler, fmHandler, fmCodeHandler, statblockHandler];
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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,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"}
|