@wizzlethorpe/vaults 0.1.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/LICENSE +21 -0
- package/README.md +125 -0
- package/dist/api.js +42 -0
- package/dist/api.js.map +1 -0
- package/dist/auth.js +62 -0
- package/dist/auth.js.map +1 -0
- package/dist/build.js +758 -0
- package/dist/build.js.map +1 -0
- package/dist/commands/build.js +23 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/init.js +67 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/password.js +74 -0
- package/dist/commands/password.js.map +1 -0
- package/dist/commands/preview.js +60 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/push.js +191 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/role.js +122 -0
- package/dist/commands/role.js.map +1 -0
- package/dist/config.js +79 -0
- package/dist/config.js.map +1 -0
- package/dist/favicon.js +91 -0
- package/dist/favicon.js.map +1 -0
- package/dist/images.js +47 -0
- package/dist/images.js.map +1 -0
- package/dist/index.js +154 -0
- package/dist/index.js.map +1 -0
- package/dist/obsidian.js +47 -0
- package/dist/obsidian.js.map +1 -0
- package/dist/render/auth-template.js +677 -0
- package/dist/render/auth-template.js.map +1 -0
- package/dist/render/callouts.js +65 -0
- package/dist/render/callouts.js.map +1 -0
- package/dist/render/embed.js +190 -0
- package/dist/render/embed.js.map +1 -0
- package/dist/render/layout.js +414 -0
- package/dist/render/layout.js.map +1 -0
- package/dist/render/mcp-template.js +239 -0
- package/dist/render/mcp-template.js.map +1 -0
- package/dist/render/pipeline.js +59 -0
- package/dist/render/pipeline.js.map +1 -0
- package/dist/render/preview.js +81 -0
- package/dist/render/preview.js.map +1 -0
- package/dist/render/slug.js +12 -0
- package/dist/render/slug.js.map +1 -0
- package/dist/render/styles.js +383 -0
- package/dist/render/styles.js.map +1 -0
- package/dist/render/types.js +2 -0
- package/dist/render/types.js.map +1 -0
- package/dist/render/wikilink.js +55 -0
- package/dist/render/wikilink.js.map +1 -0
- package/dist/scan.js +45 -0
- package/dist/scan.js.map +1 -0
- package/dist/settings.js +157 -0
- package/dist/settings.js.map +1 -0
- package/dist/util.js +60 -0
- package/dist/util.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { visit, SKIP } from "unist-util-visit";
|
|
2
|
+
// Obsidian-style callouts: blockquote starting with `[!type]` becomes a styled div.
|
|
3
|
+
//
|
|
4
|
+
// > [!note] Optional title
|
|
5
|
+
// > Body content
|
|
6
|
+
//
|
|
7
|
+
// > [!dm]
|
|
8
|
+
// > DM-only block
|
|
9
|
+
//
|
|
10
|
+
// Recognised types map to CSS classes via .callout.callout-<type>.
|
|
11
|
+
// If the callout's type matches a name in `redactRoles`, the entire blockquote is
|
|
12
|
+
// removed from the tree — used to strip role-gated callouts during lower-tier builds.
|
|
13
|
+
const CALLOUT_RE = /^\[!(\w+)\][+-]?\s*(.*?)(?:\n|$)/;
|
|
14
|
+
export function calloutPlugin(opts = {}) {
|
|
15
|
+
const redact = opts.redactRoles;
|
|
16
|
+
return () => (tree) => {
|
|
17
|
+
visit(tree, "blockquote", (node, index, parent) => {
|
|
18
|
+
const first = node.children[0];
|
|
19
|
+
if (!first || first.type !== "paragraph")
|
|
20
|
+
return;
|
|
21
|
+
const firstChild = first.children[0];
|
|
22
|
+
if (!firstChild || firstChild.type !== "text")
|
|
23
|
+
return;
|
|
24
|
+
const match = CALLOUT_RE.exec(firstChild.value);
|
|
25
|
+
if (!match)
|
|
26
|
+
return;
|
|
27
|
+
const [fullMatch, type, rawTitle] = match;
|
|
28
|
+
const lowerType = type.toLowerCase();
|
|
29
|
+
// Role-gated callout — drop entirely from this tree.
|
|
30
|
+
if (redact?.has(lowerType) && parent && index != null) {
|
|
31
|
+
parent.children.splice(index, 1);
|
|
32
|
+
return [SKIP, index];
|
|
33
|
+
}
|
|
34
|
+
const title = (rawTitle ?? "").trim() || cap(type);
|
|
35
|
+
const remaining = firstChild.value.slice(fullMatch.length);
|
|
36
|
+
if (remaining.trim()) {
|
|
37
|
+
firstChild.value = remaining.replace(/^\n+/, "");
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
first.children.shift();
|
|
41
|
+
if (first.children.length === 0)
|
|
42
|
+
node.children.shift();
|
|
43
|
+
}
|
|
44
|
+
// Both className and data-callout are emitted: our default CSS keys off
|
|
45
|
+
// the class, while Obsidian-style snippets target [data-callout="…"].
|
|
46
|
+
const lower = type.toLowerCase();
|
|
47
|
+
node.data = {
|
|
48
|
+
hName: "div",
|
|
49
|
+
hProperties: {
|
|
50
|
+
className: ["callout", `callout-${lower}`],
|
|
51
|
+
dataCallout: lower,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
node.children.unshift({
|
|
55
|
+
type: "paragraph",
|
|
56
|
+
data: { hName: "div", hProperties: { className: ["callout-title"] } },
|
|
57
|
+
children: [{ type: "text", value: title }],
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function cap(s) {
|
|
63
|
+
return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=callouts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callouts.js","sourceRoot":"","sources":["../../src/render/callouts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { findAndReplace } from "mdast-util-find-and-replace";
|
|
2
|
+
import { unified } from "unified";
|
|
3
|
+
import remarkParse from "remark-parse";
|
|
4
|
+
import remarkGfm from "remark-gfm";
|
|
5
|
+
import { slugify } from "./slug.js";
|
|
6
|
+
const IMAGE_EXT_RE = /\.(png|jpe?g|webp|gif|svg|avif|tiff?)$/i;
|
|
7
|
+
const EMBED_INLINE_RE = /!\[\[([^\[\]|#\n]+?)(?:#([^\[\]|#\n]+?))?(?:\|([^\[\]#\n]*))?\]\]/g;
|
|
8
|
+
// A line that is *only* an embed — used for page transclusion.
|
|
9
|
+
const EMBED_PARAGRAPH_RE = /^!\[\[([^\[\]|#\n]+?)(?:#([^\[\]|#\n]+?))?(?:\|([^\[\]#\n]*))?\]\]$/;
|
|
10
|
+
// Same shape but global, for recursive string expansion of nested embeds.
|
|
11
|
+
const EMBED_LINE_RE_G = /^!\[\[([^\[\]|#\n]+?)(?:#([^\[\]|#\n]+?))?(?:\|([^\[\]#\n]*))?\]\]$/gm;
|
|
12
|
+
const MAX_DEPTH = 3;
|
|
13
|
+
const subParser = unified().use(remarkParse).use(remarkGfm);
|
|
14
|
+
export function embedPlugin(opts) {
|
|
15
|
+
const { context, warnings } = opts;
|
|
16
|
+
return () => (tree) => {
|
|
17
|
+
// 1. Page transclusion — paragraphs that are a single embed and not an image.
|
|
18
|
+
const replacements = [];
|
|
19
|
+
for (let i = 0; i < tree.children.length; i++) {
|
|
20
|
+
const child = tree.children[i];
|
|
21
|
+
if (child?.type !== "paragraph")
|
|
22
|
+
continue;
|
|
23
|
+
const para = child;
|
|
24
|
+
if (para.children.length !== 1 || para.children[0]?.type !== "text")
|
|
25
|
+
continue;
|
|
26
|
+
const m = EMBED_PARAGRAPH_RE.exec(para.children[0].value.trim());
|
|
27
|
+
if (!m)
|
|
28
|
+
continue;
|
|
29
|
+
const [, rawName, rawAnchor] = m;
|
|
30
|
+
const name = rawName.trim();
|
|
31
|
+
if (IMAGE_EXT_RE.test(name))
|
|
32
|
+
continue;
|
|
33
|
+
replacements.push({ index: i, node: transcludePage(slugify(name), rawAnchor?.trim(), context, warnings, name) });
|
|
34
|
+
}
|
|
35
|
+
for (let i = replacements.length - 1; i >= 0; i--) {
|
|
36
|
+
const r = replacements[i];
|
|
37
|
+
tree.children.splice(r.index, 1, r.node);
|
|
38
|
+
}
|
|
39
|
+
// 2. Inline image embeds.
|
|
40
|
+
findAndReplace(tree, [
|
|
41
|
+
[
|
|
42
|
+
EMBED_INLINE_RE,
|
|
43
|
+
(_match, rawName, _rawAnchor, rawAlias) => {
|
|
44
|
+
const name = rawName.trim();
|
|
45
|
+
if (!IMAGE_EXT_RE.test(name))
|
|
46
|
+
return false;
|
|
47
|
+
const slug = slugify(name);
|
|
48
|
+
const image = context.images.get(slug);
|
|
49
|
+
if (!image && warnings)
|
|
50
|
+
warnings.push({ kind: "missing-image", target: name });
|
|
51
|
+
const path = image?.outputPath ?? name;
|
|
52
|
+
const src = "/" + path.split("/").map(encodeURIComponent).join("/");
|
|
53
|
+
const explicit = parseSizeHint(rawAlias?.trim());
|
|
54
|
+
// When no explicit |N hint, fall through to a class — the actual
|
|
55
|
+
// width is set via a CSS variable on <body> so it stays configurable
|
|
56
|
+
// and sanitize-safe (no inline styles on user-controlled HTML).
|
|
57
|
+
const extra = explicit
|
|
58
|
+
|| (context.defaultImageWidth ? ` class="default-width"` : "");
|
|
59
|
+
return {
|
|
60
|
+
type: "html",
|
|
61
|
+
value: `<img src="${escAttr(src)}" alt="${escAttr(name)}" loading="lazy"${extra}>`,
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
]);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function transcludePage(slug, anchor, context, warnings, rawName) {
|
|
69
|
+
const source = context.markdownContent.get(slug);
|
|
70
|
+
if (source == null) {
|
|
71
|
+
if (warnings)
|
|
72
|
+
warnings.push({ kind: "missing-page", target: rawName });
|
|
73
|
+
return brokenEmbed(slug, "(page not found)", "embed-broken");
|
|
74
|
+
}
|
|
75
|
+
let body = stripFrontmatter(source);
|
|
76
|
+
if (anchor) {
|
|
77
|
+
const section = extractSection(body, anchor);
|
|
78
|
+
if (section == null) {
|
|
79
|
+
if (warnings)
|
|
80
|
+
warnings.push({ kind: "missing-section", target: `${rawName}#${anchor}` });
|
|
81
|
+
return brokenEmbed(slug, "(section not found)", "embed-broken");
|
|
82
|
+
}
|
|
83
|
+
body = section;
|
|
84
|
+
}
|
|
85
|
+
// Recursively expand nested embeds at the string level — no plugin recursion needed.
|
|
86
|
+
const expanded = expandNestedEmbeds(body, context, 1, new Set([slug]));
|
|
87
|
+
const childAst = subParser.parse(expanded);
|
|
88
|
+
const page = context.pages.get(slug);
|
|
89
|
+
const targetHref = page
|
|
90
|
+
? "/" + page.path.replace(/\.md$/i, "").split("/").map(encodeURIComponent).join("/") + (anchor ? `#${anchor}` : "")
|
|
91
|
+
: "#";
|
|
92
|
+
const sourceLink = anchor ? `↗ ${page?.title ?? slug} › ${anchor}` : `↗ ${page?.title ?? slug}`;
|
|
93
|
+
// Append the source-link paragraph to the transcluded children.
|
|
94
|
+
const children = [
|
|
95
|
+
...childAst.children,
|
|
96
|
+
{
|
|
97
|
+
type: "paragraph",
|
|
98
|
+
data: { hName: "div", hProperties: { className: ["embed-source"] } },
|
|
99
|
+
children: [{
|
|
100
|
+
type: "link",
|
|
101
|
+
url: targetHref,
|
|
102
|
+
data: { hProperties: { className: ["internal", "internal-link"] } },
|
|
103
|
+
children: [{ type: "text", value: sourceLink }],
|
|
104
|
+
}],
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
return {
|
|
108
|
+
type: "blockquote",
|
|
109
|
+
data: { hName: "div", hProperties: { className: ["embed"] } },
|
|
110
|
+
children,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Recursively expand `![[…]]` lines as raw markdown before parsing.
|
|
115
|
+
* Cycle and depth caps both apply.
|
|
116
|
+
*/
|
|
117
|
+
function expandNestedEmbeds(source, context, depth, ancestors) {
|
|
118
|
+
if (depth >= MAX_DEPTH)
|
|
119
|
+
return source;
|
|
120
|
+
return source.replace(EMBED_LINE_RE_G, (line, rawName, rawAnchor) => {
|
|
121
|
+
const name = rawName.trim();
|
|
122
|
+
if (IMAGE_EXT_RE.test(name))
|
|
123
|
+
return line; // images stay as embeds for the inline pass
|
|
124
|
+
const slug = slugify(name);
|
|
125
|
+
if (ancestors.has(slug))
|
|
126
|
+
return `> [!warning] Circular embed of ${name}\n`;
|
|
127
|
+
const target = context.markdownContent.get(slug);
|
|
128
|
+
if (target == null)
|
|
129
|
+
return `> [!error] Page not found: ${name}\n`;
|
|
130
|
+
let body = stripFrontmatter(target);
|
|
131
|
+
if (rawAnchor) {
|
|
132
|
+
const section = extractSection(body, rawAnchor.trim());
|
|
133
|
+
if (section == null)
|
|
134
|
+
return `> [!error] Section not found: ${name}#${rawAnchor.trim()}\n`;
|
|
135
|
+
body = section;
|
|
136
|
+
}
|
|
137
|
+
const next = new Set(ancestors);
|
|
138
|
+
next.add(slug);
|
|
139
|
+
return expandNestedEmbeds(body, context, depth + 1, next);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
function brokenEmbed(slug, message, klass) {
|
|
143
|
+
return {
|
|
144
|
+
type: "blockquote",
|
|
145
|
+
data: { hName: "div", hProperties: { className: ["embed", klass] } },
|
|
146
|
+
children: [{
|
|
147
|
+
type: "paragraph",
|
|
148
|
+
children: [{ type: "text", value: `${slug} ${message}` }],
|
|
149
|
+
}],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function stripFrontmatter(source) {
|
|
153
|
+
return source.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/, "");
|
|
154
|
+
}
|
|
155
|
+
function extractSection(body, anchor) {
|
|
156
|
+
const target = slugify(anchor);
|
|
157
|
+
const lines = body.split("\n");
|
|
158
|
+
let inSection = false;
|
|
159
|
+
let level = 0;
|
|
160
|
+
const out = [];
|
|
161
|
+
for (const line of lines) {
|
|
162
|
+
const heading = /^(#{1,6})\s+(.+)$/.exec(line);
|
|
163
|
+
if (heading) {
|
|
164
|
+
const headingLevel = heading[1].length;
|
|
165
|
+
const headingSlug = slugify(heading[2]);
|
|
166
|
+
if (!inSection && headingSlug === target) {
|
|
167
|
+
inSection = true;
|
|
168
|
+
level = headingLevel;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (inSection && headingLevel <= level)
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
if (inSection)
|
|
175
|
+
out.push(line);
|
|
176
|
+
}
|
|
177
|
+
return inSection ? out.join("\n").trim() : null;
|
|
178
|
+
}
|
|
179
|
+
function parseSizeHint(alias) {
|
|
180
|
+
if (!alias)
|
|
181
|
+
return "";
|
|
182
|
+
const m = /^(\d+)(?:x(\d+))?$/.exec(alias);
|
|
183
|
+
if (!m)
|
|
184
|
+
return "";
|
|
185
|
+
return m[2] != null ? ` width="${m[1]}" height="${m[2]}"` : ` width="${m[1]}"`;
|
|
186
|
+
}
|
|
187
|
+
function escAttr(s) {
|
|
188
|
+
return s.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<");
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=embed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/render/embed.ts"],"names":[],"mappings":"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"}
|