@wizzlethorpe/vaults 0.13.5 → 0.15.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.
Files changed (89) hide show
  1. package/README.md +2 -2
  2. package/dist/asset-refs.js +282 -0
  3. package/dist/asset-refs.js.map +1 -0
  4. package/dist/auth.js.map +1 -1
  5. package/dist/build.js +393 -544
  6. package/dist/build.js.map +1 -1
  7. package/dist/commands/build.js +0 -4
  8. package/dist/commands/build.js.map +1 -1
  9. package/dist/commands/preview.js +0 -4
  10. package/dist/commands/preview.js.map +1 -1
  11. package/dist/commands/push.js +4 -9
  12. package/dist/commands/push.js.map +1 -1
  13. package/dist/commands/role.js +55 -14
  14. package/dist/commands/role.js.map +1 -1
  15. package/dist/config.js +25 -5
  16. package/dist/config.js.map +1 -1
  17. package/dist/escape.js +20 -0
  18. package/dist/escape.js.map +1 -1
  19. package/dist/foundry-adventure.js +86 -0
  20. package/dist/foundry-adventure.js.map +1 -0
  21. package/dist/foundry-defaults.js +65 -0
  22. package/dist/foundry-defaults.js.map +1 -0
  23. package/dist/foundry-grafts.js +610 -0
  24. package/dist/foundry-grafts.js.map +1 -0
  25. package/dist/foundry-html.js +196 -0
  26. package/dist/foundry-html.js.map +1 -0
  27. package/dist/foundry-importer.bundle.js +1192 -322
  28. package/dist/foundry-importer.js +2 -7
  29. package/dist/foundry-importer.js.map +1 -1
  30. package/dist/foundry-meta.js +56 -0
  31. package/dist/foundry-meta.js.map +1 -0
  32. package/dist/foundry-module-journal.js +133 -0
  33. package/dist/foundry-module-journal.js.map +1 -0
  34. package/dist/foundry-module-render.js +75 -0
  35. package/dist/foundry-module-render.js.map +1 -0
  36. package/dist/foundry-module.js +1082 -0
  37. package/dist/foundry-module.js.map +1 -0
  38. package/dist/foundry-types.js +28 -0
  39. package/dist/foundry-types.js.map +1 -0
  40. package/dist/foundry-version.js +30 -0
  41. package/dist/foundry-version.js.map +1 -0
  42. package/dist/frontmatter-defaults.js +68 -0
  43. package/dist/frontmatter-defaults.js.map +1 -0
  44. package/dist/index.js +5 -9
  45. package/dist/index.js.map +1 -1
  46. package/dist/manifest.js +115 -0
  47. package/dist/manifest.js.map +1 -0
  48. package/dist/migrate/0.15-foundry-patch-keys.js +51 -0
  49. package/dist/migrate/0.15-foundry-patch-keys.js.map +1 -0
  50. package/dist/migrate/0.15-foundry-pinned-id.js +68 -0
  51. package/dist/migrate/0.15-foundry-pinned-id.js.map +1 -0
  52. package/dist/migrate/files.js +66 -0
  53. package/dist/migrate/files.js.map +1 -0
  54. package/dist/migrate/registry.js +4 -0
  55. package/dist/migrate/registry.js.map +1 -1
  56. package/dist/migrate/run.js +36 -2
  57. package/dist/migrate/run.js.map +1 -1
  58. package/dist/render/auth-template.js +331 -42
  59. package/dist/render/auth-template.js.map +1 -1
  60. package/dist/render/bases.js +22 -38
  61. package/dist/render/bases.js.map +1 -1
  62. package/dist/render/cover.js +23 -1
  63. package/dist/render/cover.js.map +1 -1
  64. package/dist/render/handlers/assets.js +5 -34
  65. package/dist/render/handlers/assets.js.map +1 -1
  66. package/dist/render/handlers/builtin/battlemap.js +4 -1
  67. package/dist/render/handlers/builtin/battlemap.js.map +1 -1
  68. package/dist/render/handlers/builtin/download.js +90 -0
  69. package/dist/render/handlers/builtin/download.js.map +1 -0
  70. package/dist/render/handlers/builtin/fm-code.js +2 -2
  71. package/dist/render/handlers/builtin/fm-code.js.map +1 -1
  72. package/dist/render/handlers/builtin/foundry-manifest.js +158 -0
  73. package/dist/render/handlers/builtin/foundry-manifest.js.map +1 -0
  74. package/dist/render/handlers/builtin/fvtt-link.js +39 -0
  75. package/dist/render/handlers/builtin/fvtt-link.js.map +1 -0
  76. package/dist/render/handlers/builtin/index.js +4 -1
  77. package/dist/render/handlers/builtin/index.js.map +1 -1
  78. package/dist/render/handlers/builtin/statblock.js +0 -4
  79. package/dist/render/handlers/builtin/statblock.js.map +1 -1
  80. package/dist/render/handlers/types.js.map +1 -1
  81. package/dist/render/pipeline.js +4 -1
  82. package/dist/render/pipeline.js.map +1 -1
  83. package/dist/render/slug.js +0 -5
  84. package/dist/render/slug.js.map +1 -1
  85. package/dist/settings.js +156 -21
  86. package/dist/settings.js.map +1 -1
  87. package/dist/zip.js +78 -0
  88. package/dist/zip.js.map +1 -0
  89. package/package.json +4 -3
package/dist/settings.js CHANGED
@@ -1,11 +1,20 @@
1
1
  import { readFile, writeFile } from "node:fs/promises";
2
+ import { dump as dumpYaml } from "js-yaml";
2
3
  import { join } from "node:path";
3
4
  import matter from "gray-matter";
5
+ export const FOUNDRY_DEFAULTS = {
6
+ package: "compendium",
7
+ player_role: "",
8
+ core_version: "",
9
+ system: "dnd5e",
10
+ module: {},
11
+ };
12
+ const FOUNDRY_PACKAGES = ["none", "compendium", "adventure"];
4
13
  const SCHEMA = {
5
14
  vault_name: {
6
15
  default: "Vault",
7
16
  type: "string",
8
- description: "Display name for the wiki (shown in header and page titles).",
17
+ description: "Display name for the wiki. Shown in the header and in page titles.",
9
18
  },
10
19
  image_quality: {
11
20
  default: 85,
@@ -17,20 +26,28 @@ const SCHEMA = {
17
26
  type: "number",
18
27
  description: "Hard cap (in bytes) on a single file. Larger files are skipped.",
19
28
  },
29
+ default_frontmatter: {
30
+ // Where a vault's default role comes from; there is no separate setting.
31
+ default: [{ match: "**", data: { role: "public" } }],
32
+ type: "rules",
33
+ description: "Frontmatter applied to pages matching a glob, as an ordered list of { match, data }. "
34
+ + "Later rules merge over earlier ones, and a page's own frontmatter beats all of them. "
35
+ + "Use it to set a baseline without editing every file, such as a role for the whole vault.",
36
+ },
20
37
  ignore: {
21
38
  default: [],
22
39
  type: "string[]",
23
- description: "Glob patterns of files to skip when rendering and syncing. Examples: 'Templates/**', '*.draft.md', 'Private/**'. Wildcards cross hidden segments, so 'tools/**' also covers 'tools/.venv/**'.",
40
+ description: "Glob patterns of files to skip, e.g. 'Templates/**' or '*.draft.md'. Wildcards cross hidden segments, so 'tools/**' also covers 'tools/.venv/**'.",
24
41
  },
25
42
  inline_title: {
26
43
  default: true,
27
44
  type: "boolean",
28
- description: "Inject the page title as an <h1> at the top. Set false if your notes already start with a '# Title' heading and you don't want the duplicate.",
45
+ description: "Inject the page title as an <h1>. Set false if your notes already start with their own '# Title'.",
29
46
  },
30
47
  default_image_width: {
31
48
  default: "300px",
32
49
  type: "string",
33
- description: "CSS width applied to images embedded without an explicit '|N' size hint. Any valid CSS dimension works (300px, 50vw, 100%, etc). Set empty string to leave images at natural size.",
50
+ description: "CSS width for images embedded without a '|N' size hint (300px, 50vw, 100%). Empty leaves them at natural size.",
34
51
  },
35
52
  center_images: {
36
53
  default: true,
@@ -40,62 +57,72 @@ const SCHEMA = {
40
57
  preview_mode: {
41
58
  default: "normal",
42
59
  type: "string",
43
- description: "Internal-link preview behavior on pointer (desktop) devices: 'normal' (the default) hovers a preview popover and navigates on click; 'sticky' hovers a preview and pins it open on click (with a 'Go to page' link) instead of navigating; 'none' disables previews entirely so links just navigate.",
60
+ description: "Link previews on desktop: 'normal' hovers a preview and navigates on click, 'sticky' pins the preview open on click instead, 'none' disables them.",
44
61
  },
45
62
  preview_mode_mobile: {
46
63
  default: "sticky",
47
64
  type: "string",
48
- description: "Internal-link preview behavior on touch (mobile) devices, where there is no hover: 'sticky' (the default) shows a preview on tap with a 'Go to page' link instead of navigating; 'none' disables previews so taps just navigate. ('normal' has no hover to trigger it on touch and behaves like 'none'.)",
49
- },
50
- default_role: {
51
- default: "",
52
- type: "string",
53
- description: "Role assigned to pages with no 'role:' frontmatter. Empty string means the lowest-tier role (typically 'public'). Set to e.g. 'dm' for a private-by-default vault. Must be one of your configured roles.",
65
+ description: "Link previews on touch, where there is no hover: 'sticky' shows a preview on tap with a 'Go to page' link, 'none' disables them. 'normal' behaves like 'none' here.",
54
66
  },
55
67
  accent_color: {
56
68
  default: "",
57
69
  type: "string",
58
- description: "Override the accent color (links, headings, highlights). Any CSS color works: '#a8201a', 'crimson', 'rgb(168 32 26)'. Empty = use the built-in scarlet.",
70
+ description: "Accent color for links, headings and highlights. Any CSS color. Empty uses the built-in scarlet.",
59
71
  },
60
72
  bg_color: {
61
73
  default: "",
62
74
  type: "string",
63
- description: "Override the background color for the light palette. Any CSS color works: '#f4ecd8', 'wheat', 'rgb(244 236 216)'. Empty = use the built-in parchment.",
75
+ description: "Background color for the light palette. Any CSS color. Empty uses the built-in parchment.",
64
76
  },
65
77
  accent_color_dark: {
66
78
  default: "",
67
79
  type: "string",
68
- description: "Override the accent color for the dark palette. Any CSS color works. Empty = use the built-in dark accent (a brighter scarlet).",
80
+ description: "Accent color for the dark palette. Empty uses the built-in brighter scarlet.",
69
81
  },
70
82
  bg_color_dark: {
71
83
  default: "",
72
84
  type: "string",
73
- description: "Override the background color for the dark palette. Any CSS color works. Empty = use the built-in deep warm dark.",
85
+ description: "Background color for the dark palette. Empty uses the built-in deep warm dark.",
74
86
  },
75
87
  theme: {
76
88
  default: "auto",
77
89
  type: "string",
78
- description: "Default colour theme: 'auto' (follows the visitor's OS preference), 'light' (parchment + scarlet), or 'dark'. Visitors can flip via the sidebar toggle; their choice persists in localStorage.",
90
+ description: "Default theme: 'auto' follows the visitor's OS setting, or 'light' or 'dark'. Visitors can flip it from the sidebar and their choice persists.",
79
91
  },
80
92
  favicon: {
81
93
  default: "",
82
94
  type: "string",
83
- description: "Vault-relative path to an image used as the site favicon (png/jpg/svg/webp). Empty = generated default with the vault's accent color.",
95
+ description: "Vault-relative path to a favicon image (png/jpg/svg/webp). Empty generates one from the accent color.",
84
96
  },
85
97
  auto_image: {
86
98
  default: true,
87
99
  type: "boolean",
88
- description: "When a page has no 'image:' frontmatter, fall back to the first embedded image in the body. Used for OG/Twitter social cards, Bases card covers, and Foundry actor/item reskins. Set false to opt out.",
100
+ description: "Fall back to a page's first embedded image when it has no 'image:' frontmatter. Used for social cards, Bases card covers, and Foundry art.",
89
101
  },
90
102
  include_unknown_files: {
91
103
  default: false,
92
104
  type: "boolean",
93
- description: "Ship files with unrecognized extensions to every deploy variant. Default false skips them (with a warning) so a stray file in your vault can't accidentally bypass role gating. Recognized media types (audio/video/pdf/epub) are reference-gated like images regardless of this setting.",
105
+ description: "Ship files with unrecognized extensions. Default false skips them with a warning, so a stray file cannot bypass role gating. Recognized media (audio, video, pdf, epub) is reference-gated either way.",
106
+ },
107
+ foundry: {
108
+ default: FOUNDRY_DEFAULTS,
109
+ type: "object",
110
+ description: "Foundry VTT integration. "
111
+ + "'package': 'adventure' ships the vault as one Adventure document you import once, 'compendium' (the default) as browsable packs, one per document type, 'none' ships nothing. "
112
+ + "'player_role': the highest role players may read. Pages at or below it arrive player-visible; empty (the default) means none are. "
113
+ + "'system': the game system your Actor and Item content targets, e.g. dnd5e. "
114
+ + "'core_version': the full quoted Foundry version your exported Scene / Actor JSON came from, e.g. '14.359'. A bare '14' sorts before every release in that generation and costs a Scene its levels. "
115
+ + "'module': extra keys merged into the module.json the vault serves, such as 'authors'."
116
+ },
117
+ site_url: {
118
+ default: "",
119
+ type: "string",
120
+ description: "Public base URL this vault is served from, e.g. 'https://notes.example.com'. Set it and the build writes sitemap.xml and robots.txt; leave it empty and neither is written. Only default-role pages are listed, so a sitemap cannot advertise gated ones.",
94
121
  },
95
122
  footer: {
96
123
  default: "Generated with [Wizzlethorpe Vaults](https://vaults.wizzlethorpe.com).",
97
124
  type: "string",
98
- description: "Markdown text rendered in a small <footer> at the bottom of every page. Supports inline markdown (links, *italic*, **bold**). Set to an empty string to hide the footer entirely.",
125
+ description: "Markdown rendered in a <footer> on every page. Inline markdown works. Empty hides the footer.",
99
126
  },
100
127
  };
101
128
  export { SETTINGS_FILE } from "./paths.js";
@@ -126,8 +153,13 @@ export async function loadSettings(vaultPath) {
126
153
  warnings.push(`settings.md: '${key}' should be a ${def.type}, got ${describeType(v)}. Using default.`);
127
154
  continue;
128
155
  }
156
+ if (def.choices && !def.choices.includes(v)) {
157
+ warnings.push(`settings.md: '${key}' should be one of ${def.choices.join(", ")}, got '${String(v)}'. Using default.`);
158
+ continue;
159
+ }
129
160
  values[key] = v;
130
161
  }
162
+ normalizeFoundry(values, warnings);
131
163
  for (const key of Object.keys(fm)) {
132
164
  if (!(key in SCHEMA)) {
133
165
  warnings.push(`settings.md: unknown setting '${key}' will be removed on next sync.`);
@@ -146,9 +178,86 @@ export async function writeSettings(vaultPath, values) {
146
178
  function defaults() {
147
179
  return Object.fromEntries(Object.entries(SCHEMA).map(([k, def]) => [k, def.default]));
148
180
  }
181
+ function isPlainObject(v) {
182
+ return v !== null && typeof v === "object" && !Array.isArray(v);
183
+ }
184
+ /**
185
+ * Check and fill in the `foundry` block.
186
+ *
187
+ * The generic type check only asks whether it is an object, and every key
188
+ * inside it means something: an unrecognised `package` would silently pick a
189
+ * delivery shape the author did not ask for, with links baked to match, and a
190
+ * misspelled subkey would read as an unset default rather than as a mistake.
191
+ * Missing keys take their defaults, so a vault only states what it changes.
192
+ */
193
+ function normalizeFoundry(values, warnings) {
194
+ const raw = (values.foundry ?? {});
195
+ for (const key of Object.keys(raw)) {
196
+ if (!(key in FOUNDRY_DEFAULTS)) {
197
+ warnings.push(`settings.md: unknown key 'foundry.${key}'. Known: ${Object.keys(FOUNDRY_DEFAULTS).join(", ")}.`);
198
+ }
199
+ }
200
+ const pkg = raw["package"];
201
+ if (pkg !== undefined && !FOUNDRY_PACKAGES.includes(pkg)) {
202
+ warnings.push(`settings.md: 'foundry.package' should be one of ${FOUNDRY_PACKAGES.join(", ")}, `
203
+ + `got '${String(pkg)}'. Using '${FOUNDRY_DEFAULTS.package}'.`);
204
+ }
205
+ const role = raw["player_role"];
206
+ if (role !== undefined && typeof role !== "string") {
207
+ warnings.push(`settings.md: 'foundry.player_role' should be a role name, got ${describeType(role)}.`);
208
+ }
209
+ const core = raw["core_version"];
210
+ if (core !== undefined && typeof core !== "string" && typeof core !== "number") {
211
+ warnings.push(`settings.md: 'foundry.core_version' should be a Foundry version like 14.359, got ${describeType(core)}.`);
212
+ }
213
+ else if (typeof core === "number") {
214
+ // YAML reads an unquoted 14.350 as the number 14.35, which is a different
215
+ // version, and 14 as a generation. Quoting is the only way to say either
216
+ // one exactly.
217
+ warnings.push(`settings.md: 'foundry.core_version' is unquoted, so YAML read it as the number ${core}.`
218
+ + ` Quote it, as '14.359': unquoted, a trailing zero is lost and a bare generation is ambiguous.`);
219
+ }
220
+ else if (typeof core === "string" && /^\d+$/.test(core.trim())) {
221
+ // A bare generation sorts before every patch-level migration inside it, so
222
+ // Foundry treats the data as older than anything released that generation
223
+ // and runs migrations written for the generation before. `14` is how a
224
+ // Scene loses its levels: `migrateLevels` is registered at 14.353 and
225
+ // rebuilds `levels` from a v13 root background that a v14 export does not
226
+ // have.
227
+ warnings.push(`settings.md: 'foundry.core_version' is '${String(core)}', a generation rather than a version.`
228
+ + ` Foundry sorts that before every release in it and runs migrations your data is already past,`
229
+ + ` which costs a Scene its levels. Use the full version you exported from, e.g. 14.359.`);
230
+ }
231
+ const sys = raw["system"];
232
+ if (sys !== undefined && typeof sys !== "string") {
233
+ warnings.push(`settings.md: 'foundry.system' should be a system id like dnd5e, got ${describeType(sys)}.`);
234
+ }
235
+ const module = raw["module"];
236
+ if (module !== undefined && !isPlainObject(module)) {
237
+ warnings.push(`settings.md: 'foundry.module' should be a manifest object, got ${describeType(module)}.`);
238
+ }
239
+ values.foundry = {
240
+ package: FOUNDRY_PACKAGES.includes(pkg)
241
+ ? pkg : FOUNDRY_DEFAULTS.package,
242
+ player_role: typeof role === "string" ? role : FOUNDRY_DEFAULTS.player_role,
243
+ system: typeof sys === "string" && sys ? sys : FOUNDRY_DEFAULTS.system,
244
+ core_version: typeof core === "string" ? core
245
+ : typeof core === "number" ? String(core) : FOUNDRY_DEFAULTS.core_version,
246
+ module: isPlainObject(module) ? module : {},
247
+ };
248
+ }
149
249
  function matchesType(v, t) {
150
250
  if (t === "string[]")
151
251
  return Array.isArray(v) && v.every((item) => typeof item === "string");
252
+ if (t === "object")
253
+ return isPlainObject(v);
254
+ if (t === "rules") {
255
+ return Array.isArray(v) && v.every((item) => isPlainObject(item)
256
+ && typeof item["match"] === "string"
257
+ // A plain object: `typeof` also admits null and arrays, which would pass
258
+ // validation here and then supply nothing (or index keys) downstream.
259
+ && isPlainObject(item["data"]));
260
+ }
152
261
  return typeof v === t;
153
262
  }
154
263
  function describeType(v) {
@@ -161,7 +270,33 @@ function renderSettingsFile(values) {
161
270
  for (const [key, def] of Object.entries(SCHEMA)) {
162
271
  lines.push(`# ${def.description}`);
163
272
  const value = values[key];
164
- if (def.type === "string[]") {
273
+ if (def.type === "object") {
274
+ const obj = (value ?? {});
275
+ if (Object.keys(obj).length === 0) {
276
+ lines.push(`${key}: {}`);
277
+ }
278
+ else {
279
+ lines.push(`${key}:`);
280
+ for (const line of dumpYaml(obj).trimEnd().split("\n"))
281
+ lines.push(` ${line}`);
282
+ }
283
+ }
284
+ else if (def.type === "rules") {
285
+ const rules = (value ?? []);
286
+ if (rules.length === 0) {
287
+ lines.push(`${key}: []`);
288
+ }
289
+ else {
290
+ // Round-tripped through the YAML dumper rather than hand-formatted:
291
+ // the value is arbitrarily nested frontmatter, and a bespoke printer
292
+ // for it would be a second YAML implementation waiting to disagree
293
+ // with the one that parsed it.
294
+ lines.push(`${key}:`);
295
+ for (const line of dumpYaml(rules).trimEnd().split("\n"))
296
+ lines.push(` ${line}`);
297
+ }
298
+ }
299
+ else if (def.type === "string[]") {
165
300
  const arr = (value ?? []);
166
301
  if (arr.length === 0) {
167
302
  lines.push(`${key}: []`);
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
package/dist/zip.js ADDED
@@ -0,0 +1,78 @@
1
+ // A minimal zip writer, for the module a vault ships: two small JSON files,
2
+ // stored uncompressed. The `zip` binary is absent on Windows and many CI
3
+ // images, which is why this exists.
4
+ // Added in Node 22.2.0, which is why package.json asks for it exactly.
5
+ import { crc32 } from "node:zlib";
6
+ // MS-DOS time, which is what the format stores. A fixed timestamp keeps the
7
+ // archive byte-identical between builds of identical content, so a reader is
8
+ // not told there is a new version because the clock moved.
9
+ const DOS_TIME = 0;
10
+ const DOS_DATE = 0x21; // 1980-01-01
11
+ // Bit 11 says the filename is UTF-8. Without it a reader decodes the name as
12
+ // CP437, so anything outside ASCII extracts under a mangled name — and the
13
+ // archive still looks fine until someone's vault is called something with an
14
+ // accent in it.
15
+ const UTF8_NAMES = 0x0800;
16
+ function localHeader(entry, crc) {
17
+ const name = Buffer.from(entry.name, "utf8");
18
+ const head = Buffer.alloc(30);
19
+ head.writeUInt32LE(0x04034b50, 0); // local file header
20
+ head.writeUInt16LE(20, 4); // version needed
21
+ head.writeUInt16LE(UTF8_NAMES, 6);
22
+ head.writeUInt16LE(0, 8); // method: stored
23
+ head.writeUInt16LE(DOS_TIME, 10);
24
+ head.writeUInt16LE(DOS_DATE, 12);
25
+ head.writeUInt32LE(crc, 14);
26
+ head.writeUInt32LE(entry.data.length, 18);
27
+ head.writeUInt32LE(entry.data.length, 22);
28
+ head.writeUInt16LE(name.length, 26);
29
+ head.writeUInt16LE(0, 28); // extra length
30
+ return Buffer.concat([head, name]);
31
+ }
32
+ function centralHeader(entry, crc, offset) {
33
+ const name = Buffer.from(entry.name, "utf8");
34
+ const head = Buffer.alloc(46);
35
+ head.writeUInt32LE(0x02014b50, 0); // central directory header
36
+ head.writeUInt16LE(20, 4); // version made by
37
+ head.writeUInt16LE(20, 6); // version needed
38
+ head.writeUInt16LE(UTF8_NAMES, 8);
39
+ head.writeUInt16LE(0, 10); // method: stored
40
+ head.writeUInt16LE(DOS_TIME, 12);
41
+ head.writeUInt16LE(DOS_DATE, 14);
42
+ head.writeUInt32LE(crc, 16);
43
+ head.writeUInt32LE(entry.data.length, 20);
44
+ head.writeUInt32LE(entry.data.length, 24);
45
+ head.writeUInt16LE(name.length, 28);
46
+ head.writeUInt16LE(0, 30); // extra
47
+ head.writeUInt16LE(0, 32); // comment
48
+ head.writeUInt16LE(0, 34); // disk number
49
+ head.writeUInt16LE(0, 36); // internal attrs
50
+ head.writeUInt32LE(0o644 << 16, 38); // external attrs
51
+ head.writeUInt32LE(offset, 42);
52
+ return Buffer.concat([head, name]);
53
+ }
54
+ /** Build a zip archive holding the given entries, stored uncompressed. */
55
+ export function zip(entries) {
56
+ const local = [];
57
+ const central = [];
58
+ let offset = 0;
59
+ for (const entry of entries) {
60
+ const crc = crc32(entry.data) >>> 0;
61
+ const header = localHeader(entry, crc);
62
+ local.push(header, entry.data);
63
+ central.push(centralHeader(entry, crc, offset));
64
+ offset += header.length + entry.data.length;
65
+ }
66
+ const directory = Buffer.concat(central);
67
+ const end = Buffer.alloc(22);
68
+ end.writeUInt32LE(0x06054b50, 0); // end of central directory
69
+ end.writeUInt16LE(0, 4); // disk
70
+ end.writeUInt16LE(0, 6); // disk with directory
71
+ end.writeUInt16LE(entries.length, 8);
72
+ end.writeUInt16LE(entries.length, 10);
73
+ end.writeUInt32LE(directory.length, 12);
74
+ end.writeUInt32LE(offset, 16);
75
+ end.writeUInt16LE(0, 20); // comment length
76
+ return Buffer.concat([...local, directory, end]);
77
+ }
78
+ //# sourceMappingURL=zip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.js","sourceRoot":"","sources":["../src/zip.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wizzlethorpe/vaults",
3
- "version": "0.13.5",
3
+ "version": "0.15.0",
4
4
  "description": "Sync an Obsidian vault to a Cloudflare-hosted wiki with role-based access. Renders locally, deploys to Cloudflare Pages.",
5
5
  "keywords": [
6
6
  "obsidian",
@@ -21,7 +21,7 @@
21
21
  "author": "wizzlethorpe",
22
22
  "type": "module",
23
23
  "engines": {
24
- "node": ">=22"
24
+ "node": ">=22.2.0"
25
25
  },
26
26
  "bin": {
27
27
  "vaults": "dist/index.js"
@@ -37,6 +37,7 @@
37
37
  "gray-matter": "^4.0.3",
38
38
  "js-yaml": "^4.1.1",
39
39
  "katex": "^0.18.1",
40
+ "marked": "^12.0.0",
40
41
  "mdast-util-find-and-replace": "^3.0.1",
41
42
  "picomatch": "^4.0.2",
42
43
  "rehype-katex": "^7.0.1",
@@ -64,7 +65,7 @@
64
65
  "typescript": "^5.9.3"
65
66
  },
66
67
  "scripts": {
67
- "build": "tsc && node scripts/bundle-importer.mjs",
68
+ "build": "tsc",
68
69
  "start": "node dist/index.js",
69
70
  "test": "node --import tsx --test test/*.test.ts",
70
71
  "typecheck:test": "tsc -p tsconfig.test.json --noEmit"