@wizzlethorpe/vaults 0.13.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/asset-refs.js +274 -0
- package/dist/asset-refs.js.map +1 -0
- package/dist/auth.js.map +1 -1
- package/dist/build.js +252 -492
- package/dist/build.js.map +1 -1
- package/dist/commands/build.js +54 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/preview.js +0 -4
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/push.js +4 -9
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/role.js +55 -14
- package/dist/commands/role.js.map +1 -1
- package/dist/config.js +25 -5
- package/dist/config.js.map +1 -1
- package/dist/foundry-importer.bundle.js +1228 -327
- package/dist/foundry-importer.js +2 -7
- package/dist/foundry-importer.js.map +1 -1
- package/dist/foundry-meta.js +284 -0
- package/dist/foundry-meta.js.map +1 -0
- package/dist/foundry-module-journal.js +112 -0
- package/dist/foundry-module-journal.js.map +1 -0
- package/dist/foundry-module-render.js +75 -0
- package/dist/foundry-module-render.js.map +1 -0
- package/dist/foundry-module.js +1075 -0
- package/dist/foundry-module.js.map +1 -0
- package/dist/frontmatter-defaults.js +68 -0
- package/dist/frontmatter-defaults.js.map +1 -0
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/manifest.js +115 -0
- package/dist/manifest.js.map +1 -0
- package/dist/render/auth-template.js +323 -35
- package/dist/render/auth-template.js.map +1 -1
- package/dist/render/bases.js +22 -38
- package/dist/render/bases.js.map +1 -1
- package/dist/render/cover.js +23 -1
- package/dist/render/cover.js.map +1 -1
- package/dist/render/handlers/builtin/download.js +90 -0
- package/dist/render/handlers/builtin/download.js.map +1 -0
- package/dist/render/handlers/builtin/foundry-manifest.js +158 -0
- package/dist/render/handlers/builtin/foundry-manifest.js.map +1 -0
- package/dist/render/handlers/builtin/index.js +3 -1
- package/dist/render/handlers/builtin/index.js.map +1 -1
- package/dist/render/pipeline.js +4 -1
- package/dist/render/pipeline.js.map +1 -1
- package/dist/render/slug.js +0 -5
- package/dist/render/slug.js.map +1 -1
- package/dist/scan.js +8 -0
- package/dist/scan.js.map +1 -1
- package/dist/settings.js +112 -6
- package/dist/settings.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
// Built-in `foundry-manifest` code-block handler.
|
|
2
|
+
//
|
|
3
|
+
// ```foundry-manifest
|
|
4
|
+
// manifest: downloads/module.json
|
|
5
|
+
// label: Marlo Download Test
|
|
6
|
+
// note: v0.0.1
|
|
7
|
+
// ```
|
|
8
|
+
//
|
|
9
|
+
// Renders an install link for a Foundry VTT module hosted in this vault.
|
|
10
|
+
// Split from `download` because the two only look alike. A download hands a
|
|
11
|
+
// file to a person through their browser, which already carries their session
|
|
12
|
+
// cookie. This hands a URL to a *machine*: Foundry's installer runs on the
|
|
13
|
+
// Foundry server, sees no cookie, and has nowhere to put a header — so the URL
|
|
14
|
+
// has to authenticate on its own, which is what /_link mints.
|
|
15
|
+
//
|
|
16
|
+
// The block names only the manifest. The zip is whatever the manifest's own
|
|
17
|
+
// `download` field says, so the build reads it, stages it, and checks that the
|
|
18
|
+
// field is relative — an absolute URL cannot be signed when the vault is
|
|
19
|
+
// reached over a different hostname than the one it names.
|
|
20
|
+
import { registerBuiltinAssets } from "../assets.js";
|
|
21
|
+
const MANIFEST_BLOCK_RE = /^```foundry-manifest[^\n]*\n([\s\S]*?)^```/gm;
|
|
22
|
+
export function parseManifestBlock(content) {
|
|
23
|
+
const out = {};
|
|
24
|
+
for (const line of content.split("\n")) {
|
|
25
|
+
const trimmed = line.trim();
|
|
26
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
27
|
+
continue;
|
|
28
|
+
const sep = trimmed.indexOf(":");
|
|
29
|
+
if (sep === -1)
|
|
30
|
+
continue;
|
|
31
|
+
out[trimmed.slice(0, sep).trim().toLowerCase()] = trimmed.slice(sep + 1).trim();
|
|
32
|
+
}
|
|
33
|
+
const manifest = (out["manifest"] ?? "").replace(/^\/+/, "");
|
|
34
|
+
if (!manifest)
|
|
35
|
+
return null;
|
|
36
|
+
return { manifest, label: out["label"] ?? "Install in Foundry VTT", note: out["note"] ?? "" };
|
|
37
|
+
}
|
|
38
|
+
/** Manifest paths named by a page's ```foundry-manifest blocks. */
|
|
39
|
+
export function foundryManifestPaths(source) {
|
|
40
|
+
const paths = [];
|
|
41
|
+
for (const block of source.matchAll(MANIFEST_BLOCK_RE)) {
|
|
42
|
+
const spec = parseManifestBlock(block[1] ?? "");
|
|
43
|
+
if (spec)
|
|
44
|
+
paths.push(spec.manifest);
|
|
45
|
+
}
|
|
46
|
+
return paths;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The vault path a manifest's `download` field points at, or null when it is
|
|
50
|
+
* absent or absolute.
|
|
51
|
+
*
|
|
52
|
+
* Absolute is not merely discouraged: the middleware signs a download URL only
|
|
53
|
+
* when it resolves onto the host the request arrived on, and it cannot tell
|
|
54
|
+
* this vault's second hostname from anyone else's. So an absolute URL goes
|
|
55
|
+
* unsigned and the install fails on its second fetch.
|
|
56
|
+
*/
|
|
57
|
+
export function manifestDownloadPath(manifestJson, siteUrl = "") {
|
|
58
|
+
try {
|
|
59
|
+
const parsed = JSON.parse(manifestJson);
|
|
60
|
+
if (typeof parsed.download !== "string" || !parsed.download)
|
|
61
|
+
return { path: null, absolute: null };
|
|
62
|
+
if (/^[a-z][a-z0-9+.-]*:|^\/\//i.test(parsed.download)) {
|
|
63
|
+
// The vault's own URL is not a foreign one. A public vault has to write
|
|
64
|
+
// absolute URLs — Foundry's installer fetches `download` with no base to
|
|
65
|
+
// resolve against — so the file it names is still a file this build has
|
|
66
|
+
// to stage, and only a URL pointing somewhere else is a problem.
|
|
67
|
+
const base = siteUrl.replace(/\/+$/, "");
|
|
68
|
+
if (base && parsed.download.startsWith(base + "/")) {
|
|
69
|
+
return { path: parsed.download.slice(base.length + 1), absolute: null };
|
|
70
|
+
}
|
|
71
|
+
return { path: null, absolute: parsed.download };
|
|
72
|
+
}
|
|
73
|
+
return { path: parsed.download.replace(/^\/+/, ""), absolute: null };
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return { path: null, absolute: null };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function servedHref(path) {
|
|
80
|
+
return "/" + path.split("/").map(encodeURIComponent).join("/");
|
|
81
|
+
}
|
|
82
|
+
export const foundryManifestHandler = {
|
|
83
|
+
codeBlock: "foundry-manifest",
|
|
84
|
+
render(content, ctx) {
|
|
85
|
+
const spec = parseManifestBlock(content);
|
|
86
|
+
if (!spec) {
|
|
87
|
+
return { html: '<div class="vaults-download-error">foundry-manifest: needs a <code>manifest:</code> line</div>' };
|
|
88
|
+
}
|
|
89
|
+
const esc = ctx.escape;
|
|
90
|
+
// A single-role vault ships no middleware, so there is no /_link to mint
|
|
91
|
+
// through — and nothing to mint, since the manifest is public. The button
|
|
92
|
+
// copies the plain URL, which is also the better link: it does not expire,
|
|
93
|
+
// so Foundry can check for updates through it. Defaults to gated, the
|
|
94
|
+
// assumption that fails safely.
|
|
95
|
+
const gated = ctx.render?.gated !== false;
|
|
96
|
+
const href = servedHref(spec.manifest);
|
|
97
|
+
return {
|
|
98
|
+
html: [
|
|
99
|
+
`<div class="vaults-download vaults-foundry-manifest">`,
|
|
100
|
+
`<span class="vaults-download-label">${esc(spec.label)}</span>`,
|
|
101
|
+
spec.note ? `<span class="vaults-download-note">${esc(spec.note)}</span>` : "",
|
|
102
|
+
// Gated links are minted per click: short-lived by design, so one baked
|
|
103
|
+
// in at build time would be dead before anyone read the page.
|
|
104
|
+
`<button class="vaults-download-manifest" type="button"`,
|
|
105
|
+
gated ? "" : ` data-direct="1"`,
|
|
106
|
+
` data-manifest="${esc(href)}">Copy install link</button>`,
|
|
107
|
+
`<p class="vaults-download-hint">Paste into Foundry's <em>Install Module</em> dialog.</p>`,
|
|
108
|
+
`</div>`,
|
|
109
|
+
].join(""),
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
const MANIFEST_STYLES = `
|
|
114
|
+
.vaults-foundry-manifest { display: flex; flex-direction: column; gap: .15rem; }
|
|
115
|
+
.vaults-download-manifest { font: inherit; font-size: .85rem; margin-top: .7rem; align-self: flex-start; padding: .35rem .8rem; border: 1px solid var(--rule, #ccc); border-radius: 4px; background: var(--bg, #fff); color: var(--fg, #222); cursor: pointer; }
|
|
116
|
+
.vaults-download-manifest:hover { border-color: var(--accent, #333); }
|
|
117
|
+
.vaults-download-hint { font-size: .8rem; color: var(--fg-muted, #666); margin: .5rem 0 0; }
|
|
118
|
+
`;
|
|
119
|
+
// Puts an install URL on the clipboard.
|
|
120
|
+
//
|
|
121
|
+
// On a gated vault that means asking the deploy to mint a short-lived one, per
|
|
122
|
+
// click, because it expires: a URL baked in at build time would be dead long
|
|
123
|
+
// before anyone pressed the button. On a public vault there is no middleware
|
|
124
|
+
// to ask and nothing to authenticate, so the plain URL is copied as-is.
|
|
125
|
+
const MANIFEST_RUNTIME = `
|
|
126
|
+
(function () {
|
|
127
|
+
document.addEventListener("click", async function (e) {
|
|
128
|
+
var btn = e.target.closest(".vaults-download-manifest");
|
|
129
|
+
if (!btn) return;
|
|
130
|
+
var original = btn.textContent;
|
|
131
|
+
btn.disabled = true;
|
|
132
|
+
btn.textContent = "Generating…";
|
|
133
|
+
try {
|
|
134
|
+
if (btn.dataset.direct) {
|
|
135
|
+
// Public vault: no middleware to ask, and nothing to authenticate.
|
|
136
|
+
await navigator.clipboard.writeText(new URL(btn.dataset.manifest, location.href).href);
|
|
137
|
+
btn.textContent = "Copied";
|
|
138
|
+
} else {
|
|
139
|
+
var res = await fetch("/_link?path=" + encodeURIComponent(btn.dataset.manifest), { credentials: "same-origin" });
|
|
140
|
+
if (!res.ok) throw new Error(String(res.status));
|
|
141
|
+
var data = await res.json();
|
|
142
|
+
await navigator.clipboard.writeText(data.url);
|
|
143
|
+
btn.textContent = "Copied — expires in " + data.expiresInMinutes + " min";
|
|
144
|
+
}
|
|
145
|
+
} catch (err) {
|
|
146
|
+
btn.textContent = "Couldn't generate a link";
|
|
147
|
+
} finally {
|
|
148
|
+
btn.disabled = false;
|
|
149
|
+
setTimeout(function () { btn.textContent = original; }, 6000);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
})();
|
|
153
|
+
`;
|
|
154
|
+
registerBuiltinAssets(foundryManifestHandler, {
|
|
155
|
+
scripts: [{ source: "builtin/foundry-manifest.runtime.js", content: MANIFEST_RUNTIME }],
|
|
156
|
+
styles: [{ source: "builtin/foundry-manifest.css", content: MANIFEST_STYLES }],
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=foundry-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foundry-manifest.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/foundry-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
// of the same name; see buildRegistry() in handlers/types.ts.
|
|
5
5
|
import { battlemapHandler } from "./battlemap.js";
|
|
6
6
|
import { diceHandler } from "./dice.js";
|
|
7
|
+
import { downloadHandler } from "./download.js";
|
|
7
8
|
import { fmHandler } from "./fm.js";
|
|
8
9
|
import { fmCodeHandler } from "./fm-code.js";
|
|
10
|
+
import { foundryManifestHandler } from "./foundry-manifest.js";
|
|
9
11
|
import { galleryHandler } from "./gallery.js";
|
|
10
12
|
import { statblockHandler } from "./statblock.js";
|
|
11
13
|
export const BUILTIN_HANDLERS = [
|
|
12
|
-
diceHandler, fmHandler, fmCodeHandler, statblockHandler, battlemapHandler, galleryHandler,
|
|
14
|
+
diceHandler, fmHandler, fmCodeHandler, statblockHandler, battlemapHandler, galleryHandler, downloadHandler, foundryManifestHandler,
|
|
13
15
|
];
|
|
14
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,2EAA2E;AAC3E,8DAA8D;AAG9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/render/handlers/builtin/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,2EAA2E;AAC3E,8DAA8D;AAG9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,sBAAsB;CACnI,CAAC"}
|
package/dist/render/pipeline.js
CHANGED
|
@@ -36,7 +36,10 @@ const sanitizeSchema = {
|
|
|
36
36
|
audio: ["src", "controls", "preload", "loop", "muted"],
|
|
37
37
|
video: ["src", "controls", "preload", "loop", "muted", "width", "height", "poster"],
|
|
38
38
|
source: ["src", "type"],
|
|
39
|
-
|
|
39
|
+
// `download` asks the browser to save rather than navigate, which is what
|
|
40
|
+
// the `download` handler's links are for. It carries no script and cannot
|
|
41
|
+
// change where a link points, only what the browser does on arrival.
|
|
42
|
+
a: ["href", "title", "className", "id", "target", "rel", "download"],
|
|
40
43
|
div: ["className", "data*", "role"],
|
|
41
44
|
span: ["className", "data*"],
|
|
42
45
|
code: ["className", "title"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/render/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,cAAc,EAAE,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,cAAc,GAAG;IACrB,GAAG,aAAa;IAChB,aAAa,EAAE,EAAE;IACjB,qEAAqE;IACrE,sEAAsE;IACtE,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;IAC5F,UAAU,EAAE;QACV,GAAG,aAAa,CAAC,UAAU;QAC3B,kEAAkE;QAClE,uEAAuE;QACvE,oEAAoE;QACpE,mEAAmE;QACnE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,CAAC;QACxJ,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;QACjD,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;QACtD,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACnF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/render/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,cAAc,EAAE,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,cAAc,GAAG;IACrB,GAAG,aAAa;IAChB,aAAa,EAAE,EAAE;IACjB,qEAAqE;IACrE,sEAAsE;IACtE,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;IAC5F,UAAU,EAAE;QACV,GAAG,aAAa,CAAC,UAAU;QAC3B,kEAAkE;QAClE,uEAAuE;QACvE,oEAAoE;QACpE,mEAAmE;QACnE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,CAAC;QACxJ,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;QACjD,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;QACtD,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACnF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,0EAA0E;QAC1E,0EAA0E;QAC1E,qEAAqE;QACrE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC;QACpE,GAAG,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC;QACnC,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;QAC5B,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;QAC5B,KAAK,EAAE,CAAC,WAAW,CAAC;QACpB,EAAE,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC;QACtC,EAAE,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;QAC1B,EAAE,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;QAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC;QACxD,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC;QAChH,mEAAmE;QACnE,4BAA4B;QAC5B,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC;KACxC;IACD,uEAAuE;IACvE,wEAAwE;IACxE,sEAAsE;IACtE,QAAQ,EAAE,EAAE,GAAG,CAAC,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;CAC3D,CAAC;AAyBF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,OAAsB,EACtB,aAAqB,EACrB,SAAgC;IAEhC,MAAM,MAAM,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAA4B,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACjF,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACvB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,kDAAkD;IAClD,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,wEAAwE;IACxE,6EAA6E;IAC7E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;SAC3B,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;SAC5B,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9E,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE;SACzB,GAAG,CAAC,WAAW,CAAC;SAChB,GAAG,CAAC,SAAS,CAAC;QACf,qEAAqE;QACrE,yEAAyE;SACxE,GAAG,CAAC,UAAU,CAAC;QAChB,mEAAmE;QACnE,iEAAiE;QACjE,oEAAoE;QACpE,gBAAgB;SACf,GAAG,CAAC,cAAc,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE;QACzE,OAAO,EAAE;YACP,QAAQ,EAAE,aAAa;YACvB,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,UAAU;SACnB;KACF,CAAC,CAAC;SACF,GAAG,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,oEAAoE;QACpE,mEAAmE;QACnE,qCAAqC;SACpC,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;SACvC,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxC,uEAAuE;QACvE,wEAAwE;QACxE,yEAAyE;SACxE,GAAG,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;SACjC,GAAG,CAAC,mBAAmB,EAAE,CAAC;SAC1B,GAAG,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;SACpD,GAAG,CAAC,YAAY,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;SAC/C,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,UAAU,CAAC;SACf,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC;QACpC,mEAAmE;QACnE,wEAAwE;QACxE,yEAAyE;QACzE,sDAAsD;SACrD,GAAG,CAAC,WAAW,CAAC;SAChB,GAAG,CAAC,eAAe,CAAC;SACpB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,EAAE,CAAC,KAAK,CAAC;WACnD,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;WACzB,aAAa,CAAC;IAEnB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,wEAAwE;IACxE,2EAA2E;IAC3E,sCAAsC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC9C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACvE,CAAC"}
|
package/dist/render/slug.js
CHANGED
|
@@ -9,9 +9,4 @@ export function slugify(name) {
|
|
|
9
9
|
.replace(/[^a-z0-9]+/g, "-")
|
|
10
10
|
.replace(/^-+|-+$/g, "");
|
|
11
11
|
}
|
|
12
|
-
// Historical alias retained for the bases plugin. The "sibling-import
|
|
13
|
-
// avoidance" comment in bases.ts predates the current shape of slug.ts (which
|
|
14
|
-
// has no imports of its own), so a direct re-export is fine — the alias is
|
|
15
|
-
// kept so existing call sites don't churn.
|
|
16
|
-
export { slugify as slugifySimple };
|
|
17
12
|
//# sourceMappingURL=slug.js.map
|
package/dist/render/slug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/render/slug.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE;SACb,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC
|
|
1
|
+
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/render/slug.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE;SACb,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/scan.js
CHANGED
|
@@ -2,7 +2,13 @@ import { readdir, readFile, stat } from "node:fs/promises";
|
|
|
2
2
|
import { createHash } from "node:crypto";
|
|
3
3
|
import { join, relative, sep } from "node:path";
|
|
4
4
|
const IGNORED_DIRS = new Set([".git", ".obsidian", ".trash", "node_modules", ".vaults"]);
|
|
5
|
+
// `module.json` at the vault ROOT is build configuration for `--module`, the
|
|
6
|
+
// same way settings.md and .vaultrc.json are: it is the source the compiler
|
|
7
|
+
// merges its `packs` array into, not content to publish. The generated copy
|
|
8
|
+
// lands in the output directory and ships from there. A module.json anywhere
|
|
9
|
+
// else in the vault is an ordinary file and is left alone.
|
|
5
10
|
const IGNORED_FILES = new Set([".DS_Store", ".vaultrc.json"]);
|
|
11
|
+
const IGNORED_ROOT_FILES = new Set(["module.json"]);
|
|
6
12
|
export async function scanVault(root) {
|
|
7
13
|
const out = [];
|
|
8
14
|
await walk(root, root, out);
|
|
@@ -23,6 +29,8 @@ async function walk(root, dir, out) {
|
|
|
23
29
|
continue;
|
|
24
30
|
if (IGNORED_FILES.has(entry.name))
|
|
25
31
|
continue;
|
|
32
|
+
if (dir === root && IGNORED_ROOT_FILES.has(entry.name))
|
|
33
|
+
continue;
|
|
26
34
|
if (entry.name.startsWith("."))
|
|
27
35
|
continue;
|
|
28
36
|
const body = await readFile(abs);
|
package/dist/scan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAgBhD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;AACzF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
|
package/dist/settings.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
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
|
+
module: {},
|
|
9
|
+
};
|
|
10
|
+
const FOUNDRY_PACKAGES = ["none", "compendium", "adventure"];
|
|
4
11
|
const SCHEMA = {
|
|
5
12
|
vault_name: {
|
|
6
13
|
default: "Vault",
|
|
@@ -17,6 +24,21 @@ const SCHEMA = {
|
|
|
17
24
|
type: "number",
|
|
18
25
|
description: "Hard cap (in bytes) on a single file. Larger files are skipped.",
|
|
19
26
|
},
|
|
27
|
+
default_frontmatter: {
|
|
28
|
+
// A page with no `role:` is public, which is what `default_role` used to
|
|
29
|
+
// say in a setting of its own. A rule says it in the vocabulary everything
|
|
30
|
+
// else already uses, and a vault that wants the opposite polarity edits
|
|
31
|
+
// this one line rather than learning a second mechanism.
|
|
32
|
+
default: [{ match: "**", data: { role: "public" } }],
|
|
33
|
+
type: "rules",
|
|
34
|
+
description: "Frontmatter applied to pages that match a glob, before anything else reads them. "
|
|
35
|
+
+ "An ordered list of { match, data }: later rules merge over earlier ones, and a page's "
|
|
36
|
+
+ "own frontmatter always wins. Use it to set a baseline without editing every file — "
|
|
37
|
+
+ "e.g. role for a whole vault, or 'foundry: { journal: false }' for a folder whose pages "
|
|
38
|
+
+ "exist to make compendium documents rather than articles. Applied once, where "
|
|
39
|
+
+ "frontmatter is read, so the wiki, the Foundry sync and the module compiler all see "
|
|
40
|
+
+ "the same page.",
|
|
41
|
+
},
|
|
20
42
|
ignore: {
|
|
21
43
|
default: [],
|
|
22
44
|
type: "string[]",
|
|
@@ -47,11 +69,6 @@ const SCHEMA = {
|
|
|
47
69
|
type: "string",
|
|
48
70
|
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
71
|
},
|
|
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.",
|
|
54
|
-
},
|
|
55
72
|
accent_color: {
|
|
56
73
|
default: "",
|
|
57
74
|
type: "string",
|
|
@@ -92,6 +109,16 @@ const SCHEMA = {
|
|
|
92
109
|
type: "boolean",
|
|
93
110
|
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.",
|
|
94
111
|
},
|
|
112
|
+
foundry: {
|
|
113
|
+
default: FOUNDRY_DEFAULTS,
|
|
114
|
+
type: "object",
|
|
115
|
+
description: "Everything this vault says about Foundry VTT. 'package' is how it is delivered: 'adventure' packages it as one Adventure document, so importing it once makes every internal link resolve to the documents you imported \u2014 what a campaign wants; 'compendium' (the default) produces browsable packs, one per document type, which is what a reference library wants; 'none' ships no integration at all and the deploy drops the importer bundle and sync endpoints. 'player_role' is the highest role your players may read: pages at that role or below import player-visible, everything above stays GM-only, and empty (the default) means none of it is. 'module' is the manifest for 'vaults build --module' \u2014 anything Foundry accepts in a module.json, with only 'packs' written for you; leave it empty and the compiler looks for a module.json at the vault root or in foundry/ instead.",
|
|
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 emits sitemap.xml and robots.txt so search engines can index the site; leave it empty and neither is written. Only pages in the default (lowest) role are listed — a sitemap naming gated pages would advertise that they exist.",
|
|
121
|
+
},
|
|
95
122
|
footer: {
|
|
96
123
|
default: "Generated with [Wizzlethorpe Vaults](https://vaults.wizzlethorpe.com).",
|
|
97
124
|
type: "string",
|
|
@@ -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,57 @@ 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 module = raw["module"];
|
|
210
|
+
if (module !== undefined && !isPlainObject(module)) {
|
|
211
|
+
warnings.push(`settings.md: 'foundry.module' should be a manifest object, got ${describeType(module)}.`);
|
|
212
|
+
}
|
|
213
|
+
values.foundry = {
|
|
214
|
+
package: FOUNDRY_PACKAGES.includes(pkg)
|
|
215
|
+
? pkg : FOUNDRY_DEFAULTS.package,
|
|
216
|
+
player_role: typeof role === "string" ? role : FOUNDRY_DEFAULTS.player_role,
|
|
217
|
+
module: isPlainObject(module) ? module : {},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
149
220
|
function matchesType(v, t) {
|
|
150
221
|
if (t === "string[]")
|
|
151
222
|
return Array.isArray(v) && v.every((item) => typeof item === "string");
|
|
223
|
+
if (t === "object")
|
|
224
|
+
return isPlainObject(v);
|
|
225
|
+
if (t === "rules") {
|
|
226
|
+
return Array.isArray(v) && v.every((item) => isPlainObject(item)
|
|
227
|
+
&& typeof item["match"] === "string"
|
|
228
|
+
// A plain object: `typeof` also admits null and arrays, which would pass
|
|
229
|
+
// validation here and then supply nothing (or index keys) downstream.
|
|
230
|
+
&& isPlainObject(item["data"]));
|
|
231
|
+
}
|
|
152
232
|
return typeof v === t;
|
|
153
233
|
}
|
|
154
234
|
function describeType(v) {
|
|
@@ -161,7 +241,33 @@ function renderSettingsFile(values) {
|
|
|
161
241
|
for (const [key, def] of Object.entries(SCHEMA)) {
|
|
162
242
|
lines.push(`# ${def.description}`);
|
|
163
243
|
const value = values[key];
|
|
164
|
-
if (def.type === "
|
|
244
|
+
if (def.type === "object") {
|
|
245
|
+
const obj = (value ?? {});
|
|
246
|
+
if (Object.keys(obj).length === 0) {
|
|
247
|
+
lines.push(`${key}: {}`);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
lines.push(`${key}:`);
|
|
251
|
+
for (const line of dumpYaml(obj).trimEnd().split("\n"))
|
|
252
|
+
lines.push(` ${line}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else if (def.type === "rules") {
|
|
256
|
+
const rules = (value ?? []);
|
|
257
|
+
if (rules.length === 0) {
|
|
258
|
+
lines.push(`${key}: []`);
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
// Round-tripped through the YAML dumper rather than hand-formatted:
|
|
262
|
+
// the value is arbitrarily nested frontmatter, and a bespoke printer
|
|
263
|
+
// for it would be a second YAML implementation waiting to disagree
|
|
264
|
+
// with the one that parsed it.
|
|
265
|
+
lines.push(`${key}:`);
|
|
266
|
+
for (const line of dumpYaml(rules).trimEnd().split("\n"))
|
|
267
|
+
lines.push(` ${line}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
else if (def.type === "string[]") {
|
|
165
271
|
const arr = (value ?? []);
|
|
166
272
|
if (arr.length === 0) {
|
|
167
273
|
lines.push(`${key}: []`);
|
package/dist/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.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.
|
|
3
|
+
"version": "0.14.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",
|
|
@@ -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",
|