@wizzlethorpe/vaults 0.7.0 → 0.7.2
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 +450 -123
- 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/0.7-vaults-dir.js +4 -0
- package/dist/migrate/0.7-vaults-dir.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/battlemap.js +199 -0
- package/dist/render/handlers/builtin/battlemap.js.map +1 -0
- 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/gallery.js +103 -0
- package/dist/render/handlers/builtin/gallery.js.map +1 -0
- package/dist/render/handlers/builtin/index.js +6 -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 +23 -10
- package/dist/render/pipeline.js.map +1 -1
- package/dist/render/preview.js +53 -18
- 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 +92 -14
- 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
package/dist/render/callouts.js
CHANGED
|
@@ -13,7 +13,11 @@ import { visit, SKIP } from "unist-util-visit";
|
|
|
13
13
|
// `[ \t]*` (not `\s*`) for the gap between the closing bracket and the
|
|
14
14
|
// title — `\s` includes `\n`, which would let an empty-title callout slurp
|
|
15
15
|
// the next line into the title and leave the body empty.
|
|
16
|
-
|
|
16
|
+
//
|
|
17
|
+
// The fold marker `+` (default-open) or `-` (default-collapsed) is captured
|
|
18
|
+
// so we can emit a fold-aware <details>; absence means a non-foldable <div>.
|
|
19
|
+
// Type allows hyphens (`[!my-note]`) — Obsidian permits them.
|
|
20
|
+
const CALLOUT_RE = /^\[!([\w-]+)\]([+-]?)[ \t]*(.*?)(?:\n|$)/;
|
|
17
21
|
export function calloutPlugin(opts = {}) {
|
|
18
22
|
const redact = opts.redactRoles;
|
|
19
23
|
return () => (tree) => {
|
|
@@ -27,7 +31,7 @@ export function calloutPlugin(opts = {}) {
|
|
|
27
31
|
const match = CALLOUT_RE.exec(firstChild.value);
|
|
28
32
|
if (!match)
|
|
29
33
|
return;
|
|
30
|
-
const [fullMatch, type, rawTitle] = match;
|
|
34
|
+
const [fullMatch, type, foldMarker, rawTitle] = match;
|
|
31
35
|
const lowerType = type.toLowerCase();
|
|
32
36
|
// Role-gated callout; drop entirely from this tree.
|
|
33
37
|
if (redact?.has(lowerType) && parent && index != null) {
|
|
@@ -46,17 +50,32 @@ export function calloutPlugin(opts = {}) {
|
|
|
46
50
|
}
|
|
47
51
|
// Both className and data-callout are emitted: our default CSS keys off
|
|
48
52
|
// the class, while Obsidian-style snippets target [data-callout="…"].
|
|
53
|
+
// Fold marker (+/-) switches the wrapper to <details> so the user gets
|
|
54
|
+
// native disclosure behaviour without extra JS; bare callouts stay as
|
|
55
|
+
// <div> so non-foldable callouts render exactly as they did before.
|
|
49
56
|
const lower = type.toLowerCase();
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
const fold = foldMarker;
|
|
58
|
+
const useDetails = fold === "+" || fold === "-";
|
|
59
|
+
const titleHName = useDetails ? "summary" : "div";
|
|
60
|
+
node.data = useDetails
|
|
61
|
+
? {
|
|
62
|
+
hName: "details",
|
|
63
|
+
hProperties: {
|
|
64
|
+
className: ["callout", `callout-${lower}`],
|
|
65
|
+
dataCallout: lower,
|
|
66
|
+
...(fold === "+" ? { open: true } : {}),
|
|
67
|
+
},
|
|
68
|
+
}
|
|
69
|
+
: {
|
|
70
|
+
hName: "div",
|
|
71
|
+
hProperties: {
|
|
72
|
+
className: ["callout", `callout-${lower}`],
|
|
73
|
+
dataCallout: lower,
|
|
74
|
+
},
|
|
75
|
+
};
|
|
57
76
|
node.children.unshift({
|
|
58
77
|
type: "paragraph",
|
|
59
|
-
data: { hName:
|
|
78
|
+
data: { hName: titleHName, hProperties: { className: ["callout-title"] } },
|
|
60
79
|
children: [{ type: "text", value: title }],
|
|
61
80
|
});
|
|
62
81
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callouts.js","sourceRoot":"","sources":["../../src/render/callouts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oFAAoF;AACpF,EAAE;AACF,6BAA6B;AAC7B,mBAAmB;AACnB,EAAE;AACF,YAAY;AACZ,oBAAoB;AACpB,EAAE;AACF,mEAAmE;AACnE,kFAAkF;AAClF,qFAAqF;AAErF,uEAAuE;AACvE,2EAA2E;AAC3E,yDAAyD;AACzD,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"callouts.js","sourceRoot":"","sources":["../../src/render/callouts.ts"],"names":[],"mappings":"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"}
|
package/dist/render/embed.js
CHANGED
|
@@ -3,8 +3,20 @@ import { unified } from "unified";
|
|
|
3
3
|
import remarkParse from "remark-parse";
|
|
4
4
|
import remarkGfm from "remark-gfm";
|
|
5
5
|
import { slugify } from "./slug.js";
|
|
6
|
+
import { stripFrontmatter } from "./frontmatter.js";
|
|
7
|
+
import { escapeRegex } from "../escape.js";
|
|
6
8
|
import { renderBase } from "./bases.js";
|
|
7
|
-
|
|
9
|
+
import { AUDIO_EXT_RE, IMAGE_EXT_RE, PASSTHROUGH_EXT_RE, VIDEO_EXT_RE } from "./extensions.js";
|
|
10
|
+
// Anything we know how to render inline from a `![[file.ext]]` embed: images
|
|
11
|
+
// become <img>, audio <audio controls>, video <video controls>, and any other
|
|
12
|
+
// passthrough (PDF, epub, JSON, …) collapses to a plain link to the file.
|
|
13
|
+
// Used to short-circuit the page-transclusion path for media so a stray
|
|
14
|
+
// audio embed doesn't get treated as a missing-page transclusion. Union of
|
|
15
|
+
// IMAGE_EXT_RE + PASSTHROUGH_EXT_RE — both classes are handled by the inline
|
|
16
|
+
// pass downstream, regardless of which sub-branch they take.
|
|
17
|
+
function isMediaEmbed(name) {
|
|
18
|
+
return IMAGE_EXT_RE.test(name) || PASSTHROUGH_EXT_RE.test(name);
|
|
19
|
+
}
|
|
8
20
|
const EMBED_INLINE_RE = /!\[\[([^\[\]|#\n]+?)(?:#([^\[\]|#\n]+?))?(?:\|([^\[\]#\n]*))?\]\]/g;
|
|
9
21
|
// A line that is *only* an embed; used for page transclusion.
|
|
10
22
|
const EMBED_PARAGRAPH_RE = /^!\[\[([^\[\]|#\n]+?)(?:#([^\[\]|#\n]+?))?(?:\|([^\[\]#\n]*))?\]\]$/;
|
|
@@ -29,7 +41,11 @@ export function embedPlugin(opts) {
|
|
|
29
41
|
continue;
|
|
30
42
|
const [, rawName, rawAnchor] = m;
|
|
31
43
|
const name = rawName.trim();
|
|
32
|
-
|
|
44
|
+
// Media embeds (image / audio / video / other passthroughs) are handled
|
|
45
|
+
// by the inline pass below as `<img>` / `<audio>` / `<video>` / `<a>`.
|
|
46
|
+
// Skipping them here prevents the page-transclusion branch from
|
|
47
|
+
// treating a stray `![[file.ogg]]` paragraph as a missing page.
|
|
48
|
+
if (isMediaEmbed(name))
|
|
33
49
|
continue;
|
|
34
50
|
// ![[Foo]] or ![[Foo#ViewName]] — if Foo.base exists, render that
|
|
35
51
|
// base inline instead of looking up a page transclusion.
|
|
@@ -46,35 +62,76 @@ export function embedPlugin(opts) {
|
|
|
46
62
|
const r = replacements[i];
|
|
47
63
|
tree.children.splice(r.index, 1, r.node);
|
|
48
64
|
}
|
|
49
|
-
// 2. Inline
|
|
65
|
+
// 2. Inline media embeds. Each branch picks the right HTML based on
|
|
66
|
+
// extension class:
|
|
67
|
+
// - image → <img>
|
|
68
|
+
// - audio → <audio controls>
|
|
69
|
+
// - video → <video controls>
|
|
70
|
+
// - other passthrough (PDF, epub, JSON) → <a> link to the file
|
|
71
|
+
// Anything else falls through to the wikilink resolver later in
|
|
72
|
+
// the pipeline (which will treat it as a page reference).
|
|
50
73
|
findAndReplace(tree, [
|
|
51
74
|
[
|
|
52
75
|
EMBED_INLINE_RE,
|
|
53
76
|
(_match, rawName, _rawAnchor, rawAlias) => {
|
|
54
77
|
const name = rawName.trim();
|
|
55
|
-
if (
|
|
56
|
-
return
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// When no explicit |N hint, fall through to a class; the actual
|
|
65
|
-
// width is set via a CSS variable on <body> so it stays configurable
|
|
66
|
-
// and sanitize-safe (no inline styles on user-controlled HTML).
|
|
67
|
-
const extra = explicit
|
|
68
|
-
|| (context.defaultImageWidth ? ` class="default-width"` : "");
|
|
69
|
-
return {
|
|
70
|
-
type: "html",
|
|
71
|
-
value: `<img src="${escAttr(src)}" alt="${escAttr(name)}" loading="lazy"${extra}>`,
|
|
72
|
-
};
|
|
78
|
+
if (IMAGE_EXT_RE.test(name))
|
|
79
|
+
return imageEmbed(name, rawAlias?.trim(), context, warnings);
|
|
80
|
+
if (AUDIO_EXT_RE.test(name))
|
|
81
|
+
return mediaEmbed(name, "audio", context);
|
|
82
|
+
if (VIDEO_EXT_RE.test(name))
|
|
83
|
+
return mediaEmbed(name, "video", context);
|
|
84
|
+
if (PASSTHROUGH_EXT_RE.test(name))
|
|
85
|
+
return passthroughLink(name, context);
|
|
86
|
+
return false;
|
|
73
87
|
},
|
|
74
88
|
],
|
|
75
89
|
]);
|
|
76
90
|
};
|
|
77
91
|
}
|
|
92
|
+
function imageEmbed(name, alias, context, warnings) {
|
|
93
|
+
const slug = slugify(name);
|
|
94
|
+
const image = context.images.get(slug);
|
|
95
|
+
if (!image && warnings)
|
|
96
|
+
warnings.push({ kind: "missing-image", target: name });
|
|
97
|
+
const path = image?.outputPath ?? name;
|
|
98
|
+
const src = "/" + path.split("/").map(encodeURIComponent).join("/");
|
|
99
|
+
const explicit = parseSizeHint(alias);
|
|
100
|
+
// When no explicit |N hint, fall through to a class; the actual width
|
|
101
|
+
// is set via a CSS variable on <body> so it stays configurable and
|
|
102
|
+
// sanitize-safe (no inline styles on user-controlled HTML).
|
|
103
|
+
const extra = explicit || (context.defaultImageWidth ? ` class="default-width"` : "");
|
|
104
|
+
return {
|
|
105
|
+
type: "html",
|
|
106
|
+
value: `<img src="${escAttr(src)}" alt="${escAttr(name)}" loading="lazy"${extra}>`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/** Render a passthrough media embed as an inline player (audio / video). */
|
|
110
|
+
function mediaEmbed(name, kind, context) {
|
|
111
|
+
const src = passthroughUrl(name, context);
|
|
112
|
+
const tag = kind;
|
|
113
|
+
return {
|
|
114
|
+
type: "html",
|
|
115
|
+
value: `<${tag} controls preload="metadata" src="${escAttr(src)}"></${tag}>`,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/** Render a non-media passthrough embed (PDF / epub / JSON) as a plain link. */
|
|
119
|
+
function passthroughLink(name, context) {
|
|
120
|
+
const src = passthroughUrl(name, context);
|
|
121
|
+
return {
|
|
122
|
+
type: "html",
|
|
123
|
+
value: `<a class="passthrough-link" href="${escAttr(src)}">${escAttr(name)}</a>`,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/** Resolve a passthrough filename to its served URL via the build's index.
|
|
127
|
+
* Falls back to the bare name as a last resort so the rendered link still
|
|
128
|
+
* points somewhere even if the build never picked the file up. */
|
|
129
|
+
function passthroughUrl(name, context) {
|
|
130
|
+
const slug = slugify(name);
|
|
131
|
+
const entry = context.passthroughs?.get(slug);
|
|
132
|
+
const path = entry?.outputPath ?? name;
|
|
133
|
+
return "/" + path.split("/").map(encodeURIComponent).join("/");
|
|
134
|
+
}
|
|
78
135
|
function transcludePage(slug, anchor, context, warnings, rawName) {
|
|
79
136
|
const source = context.markdownContent.get(slug);
|
|
80
137
|
if (source == null) {
|
|
@@ -129,8 +186,10 @@ function expandNestedEmbeds(source, context, depth, ancestors) {
|
|
|
129
186
|
return source;
|
|
130
187
|
return source.replace(EMBED_LINE_RE_G, (line, rawName, rawAnchor) => {
|
|
131
188
|
const name = rawName.trim();
|
|
132
|
-
|
|
133
|
-
|
|
189
|
+
// Media embeds are handled by the inline pass downstream; leave them
|
|
190
|
+
// as-is here so this string-level expansion only chases page transclusions.
|
|
191
|
+
if (isMediaEmbed(name))
|
|
192
|
+
return line;
|
|
134
193
|
const slug = slugify(name);
|
|
135
194
|
if (ancestors.has(slug))
|
|
136
195
|
return `> [!warning] Circular embed of ${name}\n`;
|
|
@@ -159,10 +218,14 @@ function brokenEmbed(slug, message, klass) {
|
|
|
159
218
|
}],
|
|
160
219
|
};
|
|
161
220
|
}
|
|
162
|
-
function stripFrontmatter(source) {
|
|
163
|
-
return source.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/, "");
|
|
164
|
-
}
|
|
165
221
|
function extractSection(body, anchor) {
|
|
222
|
+
// Obsidian block references: `[[Page#^block-id]]` resolves to the block
|
|
223
|
+
// (paragraph or list item) ending with `^block-id`. The marker sits at
|
|
224
|
+
// the END of the block; in source it is either trailing on the last line
|
|
225
|
+
// or alone on a line directly after the block.
|
|
226
|
+
if (anchor.startsWith("^")) {
|
|
227
|
+
return extractBlock(body, anchor.slice(1));
|
|
228
|
+
}
|
|
166
229
|
const target = slugify(anchor);
|
|
167
230
|
const lines = body.split("\n");
|
|
168
231
|
let inSection = false;
|
|
@@ -186,6 +249,41 @@ function extractSection(body, anchor) {
|
|
|
186
249
|
}
|
|
187
250
|
return inSection ? out.join("\n").trim() : null;
|
|
188
251
|
}
|
|
252
|
+
// Find the block (paragraph or list item) terminated by `^<id>`. The marker
|
|
253
|
+
// is either trailing on the block's last line (`Some text ^id`) or alone on
|
|
254
|
+
// the line immediately after the block. Returns the block content with the
|
|
255
|
+
// marker stripped, or null if no such block exists.
|
|
256
|
+
function extractBlock(body, blockId) {
|
|
257
|
+
const lines = body.split("\n");
|
|
258
|
+
const trailRe = new RegExp(`(?:^|\\s)\\^${escapeRegex(blockId)}\\s*$`);
|
|
259
|
+
const aloneRe = new RegExp(`^\\s*\\^${escapeRegex(blockId)}\\s*$`);
|
|
260
|
+
for (let i = 0; i < lines.length; i++) {
|
|
261
|
+
const line = lines[i];
|
|
262
|
+
// Trailing form: marker on the same line as the block's last text.
|
|
263
|
+
if (trailRe.test(line) && !aloneRe.test(line)) {
|
|
264
|
+
const start = blockStart(lines, i);
|
|
265
|
+
const block = lines.slice(start, i + 1).join("\n");
|
|
266
|
+
return block.replace(trailRe, "").trimEnd();
|
|
267
|
+
}
|
|
268
|
+
// Alone-on-its-own-line form: previous non-empty line ends the block.
|
|
269
|
+
if (aloneRe.test(line)) {
|
|
270
|
+
let end = i - 1;
|
|
271
|
+
while (end >= 0 && lines[end].trim() === "")
|
|
272
|
+
end--;
|
|
273
|
+
if (end < 0)
|
|
274
|
+
continue;
|
|
275
|
+
const start = blockStart(lines, end);
|
|
276
|
+
return lines.slice(start, end + 1).join("\n").trimEnd();
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
function blockStart(lines, end) {
|
|
282
|
+
let start = end;
|
|
283
|
+
while (start > 0 && lines[start - 1].trim() !== "")
|
|
284
|
+
start--;
|
|
285
|
+
return start;
|
|
286
|
+
}
|
|
189
287
|
function parseSizeHint(alias) {
|
|
190
288
|
if (!alias)
|
|
191
289
|
return "";
|
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,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"}
|
|
@@ -6,9 +6,12 @@
|
|
|
6
6
|
// — those get read here, validated to live under the vault's
|
|
7
7
|
// .vaults/handlers/ tree (no `../../etc/passwd`), and included verbatim.
|
|
8
8
|
//
|
|
9
|
-
// Output
|
|
10
|
-
//
|
|
11
|
-
//
|
|
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.
|
|
12
15
|
import { readFile } from "node:fs/promises";
|
|
13
16
|
import { dirname, resolve, sep } from "node:path";
|
|
14
17
|
/**
|
|
@@ -20,7 +23,9 @@ export function registerBuiltinAssets(handler, assets) {
|
|
|
20
23
|
BUILTIN_ASSETS.set(handler, assets);
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
23
|
-
* Build the concatenated _handlers.js
|
|
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`.
|
|
24
29
|
*
|
|
25
30
|
* @param userHandlers handlers loaded from `.vaults/handlers/`
|
|
26
31
|
* @param builtinHandlers handlers shipped by vaults-cli core
|
|
@@ -31,22 +36,37 @@ export async function bundleHandlerAssets(userHandlers, builtinHandlers, vaultPa
|
|
|
31
36
|
const seenCss = new Set();
|
|
32
37
|
const jsParts = [];
|
|
33
38
|
const cssParts = [];
|
|
39
|
+
const foundryJsParts = [];
|
|
40
|
+
const foundryCssParts = [];
|
|
41
|
+
const foundryJsSeen = new Set();
|
|
42
|
+
const foundryCssSeen = new Set();
|
|
34
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
|
+
};
|
|
35
53
|
for (const h of builtinHandlers) {
|
|
36
54
|
const inline = BUILTIN_ASSETS.get(h);
|
|
37
55
|
if (!inline)
|
|
38
56
|
continue;
|
|
39
57
|
for (const a of inline.scripts ?? []) {
|
|
40
|
-
if (seenJs.has(a.source))
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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);
|
|
44
63
|
}
|
|
45
64
|
for (const a of inline.styles ?? []) {
|
|
46
|
-
if (seenCss.has(a.source))
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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);
|
|
50
70
|
}
|
|
51
71
|
}
|
|
52
72
|
for (const { handler, sourcePath } of userHandlers) {
|
|
@@ -56,17 +76,30 @@ export async function bundleHandlerAssets(userHandlers, builtinHandlers, vaultPa
|
|
|
56
76
|
if (seenJs.has(abs))
|
|
57
77
|
continue;
|
|
58
78
|
seenJs.add(abs);
|
|
59
|
-
|
|
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);
|
|
60
83
|
}
|
|
61
84
|
for (const rel of handler.assets?.styles ?? []) {
|
|
62
85
|
const abs = resolveAssetPath(handlersRoot, baseDir, rel);
|
|
63
86
|
if (seenCss.has(abs))
|
|
64
87
|
continue;
|
|
65
88
|
seenCss.add(abs);
|
|
66
|
-
|
|
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);
|
|
67
93
|
}
|
|
68
94
|
}
|
|
69
|
-
|
|
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
|
+
};
|
|
70
103
|
}
|
|
71
104
|
/**
|
|
72
105
|
* Resolve a handler asset path and require it lives under .vaults/handlers/.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/render/handlers/assets.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,2EAA2E;AAC3E,6DAA6D;AAC7D,yEAAyE;AACzE,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/render/handlers/assets.ts"],"names":[],"mappings":"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"}
|