@wizzlethorpe/vaults 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +8 -7
  2. package/dist/build.js +363 -115
  3. package/dist/build.js.map +1 -1
  4. package/dist/commands/build.js +2 -1
  5. package/dist/commands/build.js.map +1 -1
  6. package/dist/commands/password.js +1 -1
  7. package/dist/commands/password.js.map +1 -1
  8. package/dist/commands/patreon.js +24 -20
  9. package/dist/commands/patreon.js.map +1 -1
  10. package/dist/commands/preview.js +5 -4
  11. package/dist/commands/preview.js.map +1 -1
  12. package/dist/commands/push.js +7 -8
  13. package/dist/commands/push.js.map +1 -1
  14. package/dist/config.js +21 -10
  15. package/dist/config.js.map +1 -1
  16. package/dist/escape.js +29 -0
  17. package/dist/escape.js.map +1 -0
  18. package/dist/favicon.js +3 -36
  19. package/dist/favicon.js.map +1 -1
  20. package/dist/foundry-importer.js +61 -0
  21. package/dist/foundry-importer.js.map +1 -0
  22. package/dist/images.js +0 -30
  23. package/dist/images.js.map +1 -1
  24. package/dist/index.js +3 -2
  25. package/dist/index.js.map +1 -1
  26. package/dist/migrate/0.6-legacy-auth-settings.js +3 -5
  27. package/dist/migrate/0.6-legacy-auth-settings.js.map +1 -1
  28. package/dist/migrate/registry.js +1 -7
  29. package/dist/migrate/registry.js.map +1 -1
  30. package/dist/paths.js +21 -6
  31. package/dist/paths.js.map +1 -1
  32. package/dist/render/auth-template.js +21 -142
  33. package/dist/render/auth-template.js.map +1 -1
  34. package/dist/render/bases.js +56 -44
  35. package/dist/render/bases.js.map +1 -1
  36. package/dist/render/callouts.js +29 -10
  37. package/dist/render/callouts.js.map +1 -1
  38. package/dist/render/embed.js +124 -26
  39. package/dist/render/embed.js.map +1 -1
  40. package/dist/render/extensions.js +68 -0
  41. package/dist/render/extensions.js.map +1 -0
  42. package/dist/render/external-links.js +32 -0
  43. package/dist/render/external-links.js.map +1 -0
  44. package/dist/render/frontmatter.js +17 -0
  45. package/dist/render/frontmatter.js.map +1 -0
  46. package/dist/render/handlers/assets.js +48 -15
  47. package/dist/render/handlers/assets.js.map +1 -1
  48. package/dist/render/handlers/builtin/dice.js +1 -1
  49. package/dist/render/handlers/builtin/dice.js.map +1 -1
  50. package/dist/render/handlers/builtin/fm-code.js +50 -0
  51. package/dist/render/handlers/builtin/fm-code.js.map +1 -0
  52. package/dist/render/handlers/builtin/fm.js +6 -12
  53. package/dist/render/handlers/builtin/fm.js.map +1 -1
  54. package/dist/render/handlers/builtin/index.js +2 -1
  55. package/dist/render/handlers/builtin/index.js.map +1 -1
  56. package/dist/render/handlers/builtin/inline-format.js +26 -0
  57. package/dist/render/handlers/builtin/inline-format.js.map +1 -0
  58. package/dist/render/handlers/builtin/statblock.js +158 -18
  59. package/dist/render/handlers/builtin/statblock.js.map +1 -1
  60. package/dist/render/handlers/dispatch.js +15 -20
  61. package/dist/render/handlers/dispatch.js.map +1 -1
  62. package/dist/render/handlers/types.js +41 -21
  63. package/dist/render/handlers/types.js.map +1 -1
  64. package/dist/render/image-srcs.js +42 -0
  65. package/dist/render/image-srcs.js.map +1 -0
  66. package/dist/render/layout.js +60 -9
  67. package/dist/render/layout.js.map +1 -1
  68. package/dist/render/pipeline.js +22 -9
  69. package/dist/render/pipeline.js.map +1 -1
  70. package/dist/render/preview.js +53 -18
  71. package/dist/render/preview.js.map +1 -1
  72. package/dist/render/slug.js +5 -0
  73. package/dist/render/slug.js.map +1 -1
  74. package/dist/render/styles.js +88 -10
  75. package/dist/render/styles.js.map +1 -1
  76. package/dist/render/wikilink.js +15 -4
  77. package/dist/render/wikilink.js.map +1 -1
  78. package/dist/scan.js +1 -1
  79. package/dist/scan.js.map +1 -1
  80. package/dist/settings.js +16 -1
  81. package/dist/settings.js.map +1 -1
  82. package/dist/version.js +36 -0
  83. package/dist/version.js.map +1 -0
  84. package/package.json +2 -1
@@ -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
- const CALLOUT_RE = /^\[!(\w+)\][+-]?[ \t]*(.*?)(?:\n|$)/;
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
- node.data = {
51
- hName: "div",
52
- hProperties: {
53
- className: ["callout", `callout-${lower}`],
54
- dataCallout: lower,
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: "div", hProperties: { className: ["callout-title"] } },
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,qCAAqC,CAAC;AAEzD,MAAM,UAAU,aAAa,CAAC,OAA8C,EAAE;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IAChC,OAAO,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;QACpB,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,IAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAAE,OAAO;YACjD,MAAM,UAAU,GAAI,KAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO;YAEtD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAE,UAAmB,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;YAC1C,MAAM,SAAS,GAAG,IAAK,CAAC,WAAW,EAAE,CAAC;YAEtC,oDAAoD;YACpD,IAAI,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBACtD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACjC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACvB,CAAC;YAED,MAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,IAAK,CAAC,CAAC;YAEpD,MAAM,SAAS,GAAI,UAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACrE,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,UAAmB,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACL,KAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACtC,IAAK,KAAmB,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACxE,CAAC;YAED,wEAAwE;YACxE,sEAAsE;YACtE,MAAM,KAAK,GAAG,IAAK,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,GAAG;gBACV,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE;oBACX,SAAS,EAAE,CAAC,SAAS,EAAE,WAAW,KAAK,EAAE,CAAC;oBAC1C,WAAW,EAAE,KAAK;iBACnB;aACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACpB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE;gBACrE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;aACvB,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,CAAS;IACpB,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"callouts.js","sourceRoot":"","sources":["../../src/render/callouts.ts"],"names":[],"mappings":"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"}
@@ -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
- const IMAGE_EXT_RE = /\.(png|jpe?g|webp|gif|svg|avif|tiff?)$/i;
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
- if (IMAGE_EXT_RE.test(name))
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 image embeds.
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 (!IMAGE_EXT_RE.test(name))
56
- return false;
57
- const slug = slugify(name);
58
- const image = context.images.get(slug);
59
- if (!image && warnings)
60
- warnings.push({ kind: "missing-image", target: name });
61
- const path = image?.outputPath ?? name;
62
- const src = "/" + path.split("/").map(encodeURIComponent).join("/");
63
- const explicit = parseSizeHint(rawAlias?.trim());
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
- if (IMAGE_EXT_RE.test(name))
133
- return line; // images stay as embeds for the inline pass
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 "";
@@ -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 is two strings: a concatenated _handlers.js and _handlers.css.
10
- // Each unique source is included exactly once even if multiple handlers
11
- // reference it, so shared utility files don't duplicate.
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 and _handlers.css for a deploy.
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
- continue;
42
- seenJs.add(a.source);
43
- jsParts.push(`/* ${a.source} */\n${a.content}`);
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
- continue;
48
- seenCss.add(a.source);
49
- cssParts.push(`/* ${a.source} */\n${a.content}`);
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
- jsParts.push(`/* ${rel} (${abs}) */\n${await readFile(abs, "utf8")}`);
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
- cssParts.push(`/* ${rel} (${abs}) */\n${await readFile(abs, "utf8")}`);
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
- return { js: jsParts.join("\n\n"), css: cssParts.join("\n\n") };
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":"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"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/render/handlers/assets.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@
11
11
  //
12
12
  // Subset of Dice Roller's syntax: basic XdY +/- Z arithmetic, optional X.
13
13
  // More complex modifiers (kh, kl, explode, etc.) are not supported.
14
- import { htmlEscape } from "../types.js";
14
+ import { htmlEscape } from "../../../escape.js";
15
15
  import { registerBuiltinAssets } from "../assets.js";
16
16
  // Formula validation: optional X, then 'd', then Y, then optional ± integer.
17
17
  // Only used at build time to decide whether render() emits a clickable
@@ -1 +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,aAAa,CAAC;AACzC,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"}
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"}