@wizzlethorpe/vaults 0.1.0 → 0.2.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.
@@ -0,0 +1,571 @@
1
+ // Minimum-viable Obsidian Bases support.
2
+ //
3
+ // Parses ```base / ```bases code fences inside markdown, evaluates the
4
+ // query against the variant's visible page set, and emits a sortable +
5
+ // filterable HTML table.
6
+ //
7
+ // Supported (v1):
8
+ // - filters: string expression OR { and|or|not: [expr|tree] } tree
9
+ // - views: [{ type: table, name?, limit?, order?: [identifiers] }]
10
+ // - properties: { <id>: { displayName? } }
11
+ // - identifiers: file.{name,basename,path,folder,ext,mtime,ctime,tags}
12
+ // note.X / bare X (frontmatter)
13
+ // - operators: == != < <= > >= && || ! + (string concat / numeric add)
14
+ // - methods: file.hasTag("..."), file.inFolder("..."),
15
+ // stringValue.contains("..."), .startsWith, .endsWith,
16
+ // .lower, .upper
17
+ // - literals: strings (double or single quoted), numbers, true/false, null
18
+ //
19
+ // Deferred (TODO):
20
+ // - .base standalone files (only inline code fences for now)
21
+ // - formulas, summaries, groupBy
22
+ // - cards/list/map view types
23
+ // - duration arithmetic (now() - "1 week" etc.)
24
+ // - regex / list filter chains
25
+ //
26
+ // Unknown view types and unknown YAML keys are warned-on, not fatal —
27
+ // real .base files in the wild include undocumented fields.
28
+ import { visit } from "unist-util-visit";
29
+ import yaml from "js-yaml";
30
+ const BASE_LANG_RE = /^bases?$/i;
31
+ // ── Public plugin entry ────────────────────────────────────────────────────
32
+ export function basesPlugin(opts) {
33
+ return () => (tree) => {
34
+ visit(tree, "code", (node, index, parent) => {
35
+ if (!node.lang || !BASE_LANG_RE.test(node.lang))
36
+ return;
37
+ if (!parent || index == null)
38
+ return;
39
+ const html = renderBase(node.value || "", opts.context, opts.warnings);
40
+ const replacement = { type: "html", value: html };
41
+ parent.children.splice(index, 1, replacement);
42
+ });
43
+ };
44
+ }
45
+ function renderBase(source, context, warnings) {
46
+ let doc;
47
+ try {
48
+ doc = yaml.load(source) ?? {};
49
+ }
50
+ catch (err) {
51
+ return errorBlock(`Failed to parse base YAML: ${err.message}`);
52
+ }
53
+ // Evaluate filters once for the whole doc; views can additionally narrow.
54
+ const allRows = collectRows(context);
55
+ let baseRows;
56
+ try {
57
+ baseRows = doc.filters ? allRows.filter((row) => evalFilter(doc.filters, row)) : allRows;
58
+ }
59
+ catch (err) {
60
+ return errorBlock(`Filter error: ${err.message}`);
61
+ }
62
+ const views = doc.views && doc.views.length > 0 ? doc.views : [{ type: "table" }];
63
+ const blocks = [];
64
+ for (const view of views) {
65
+ if (view.type !== "table") {
66
+ if (warnings)
67
+ warnings.push({ kind: "broken-link", target: `bases view type '${view.type}' (only 'table' is supported)` });
68
+ blocks.push(errorBlock(`Bases: view type '${esc(view.type)}' is not supported (use 'table').`));
69
+ continue;
70
+ }
71
+ blocks.push(renderTableView(view, baseRows, doc, context));
72
+ }
73
+ return blocks.join("\n");
74
+ }
75
+ function collectRows(context) {
76
+ // pages map has multiple keys (basename slug, path slug, aliases) per page.
77
+ // Dedupe by `path` so each page appears once.
78
+ const seen = new Set();
79
+ const rows = [];
80
+ for (const page of context.pages.values()) {
81
+ if (seen.has(page.path))
82
+ continue;
83
+ seen.add(page.path);
84
+ rows.push({ page, fm: page.frontmatter ?? {} });
85
+ }
86
+ // Sort by path so output is stable across runs.
87
+ rows.sort((a, b) => a.page.path.localeCompare(b.page.path));
88
+ return rows;
89
+ }
90
+ // ── Filter tree evaluator ──────────────────────────────────────────────────
91
+ function evalFilter(tree, row) {
92
+ if (typeof tree === "string")
93
+ return toBool(evalExpr(parseExpr(tree), row));
94
+ if ("and" in tree)
95
+ return tree.and.every((t) => evalFilter(t, row));
96
+ if ("or" in tree)
97
+ return tree.or.some((t) => evalFilter(t, row));
98
+ if ("not" in tree)
99
+ return !tree.not.every((t) => evalFilter(t, row));
100
+ throw new Error("Unknown filter shape: " + JSON.stringify(tree));
101
+ }
102
+ function toBool(v) {
103
+ if (v == null)
104
+ return false;
105
+ if (typeof v === "boolean")
106
+ return v;
107
+ if (typeof v === "number")
108
+ return v !== 0 && !Number.isNaN(v);
109
+ if (typeof v === "string")
110
+ return v.length > 0;
111
+ if (Array.isArray(v))
112
+ return v.length > 0;
113
+ return true;
114
+ }
115
+ const OP_TWO = new Set(["==", "!=", "<=", ">=", "&&", "||"]);
116
+ const OP_ONE = new Set(["<", ">", "!", "+", "-", "*", "/", "%"]);
117
+ function tokenize(src) {
118
+ const toks = [];
119
+ let i = 0;
120
+ while (i < src.length) {
121
+ const c = src[i];
122
+ if (/\s/.test(c)) {
123
+ i++;
124
+ continue;
125
+ }
126
+ if (c === '"' || c === "'") {
127
+ const quote = c;
128
+ let j = i + 1;
129
+ let v = "";
130
+ while (j < src.length && src[j] !== quote) {
131
+ if (src[j] === "\\" && j + 1 < src.length) {
132
+ v += src[j + 1];
133
+ j += 2;
134
+ }
135
+ else {
136
+ v += src[j];
137
+ j++;
138
+ }
139
+ }
140
+ if (j >= src.length)
141
+ throw new Error("Unterminated string literal");
142
+ toks.push({ t: "str", v });
143
+ i = j + 1;
144
+ continue;
145
+ }
146
+ if (/[0-9]/.test(c) || (c === "-" && /[0-9]/.test(src[i + 1] ?? ""))) {
147
+ let j = i + (c === "-" ? 1 : 0);
148
+ while (j < src.length && /[0-9.]/.test(src[j]))
149
+ j++;
150
+ toks.push({ t: "num", v: Number(src.slice(i, j)) });
151
+ i = j;
152
+ continue;
153
+ }
154
+ if (/[A-Za-z_]/.test(c)) {
155
+ let j = i + 1;
156
+ while (j < src.length && /[A-Za-z0-9_]/.test(src[j]))
157
+ j++;
158
+ toks.push({ t: "id", v: src.slice(i, j) });
159
+ i = j;
160
+ continue;
161
+ }
162
+ if (c === "(") {
163
+ toks.push({ t: "lp" });
164
+ i++;
165
+ continue;
166
+ }
167
+ if (c === ")") {
168
+ toks.push({ t: "rp" });
169
+ i++;
170
+ continue;
171
+ }
172
+ if (c === ",") {
173
+ toks.push({ t: "comma" });
174
+ i++;
175
+ continue;
176
+ }
177
+ if (c === ".") {
178
+ toks.push({ t: "dot" });
179
+ i++;
180
+ continue;
181
+ }
182
+ const two = src.slice(i, i + 2);
183
+ if (OP_TWO.has(two)) {
184
+ toks.push({ t: "op", v: two });
185
+ i += 2;
186
+ continue;
187
+ }
188
+ if (OP_ONE.has(c)) {
189
+ toks.push({ t: "op", v: c });
190
+ i++;
191
+ continue;
192
+ }
193
+ throw new Error(`Unexpected character '${c}' at position ${i}`);
194
+ }
195
+ toks.push({ t: "end" });
196
+ return toks;
197
+ }
198
+ const BINARY_PREC = {
199
+ "||": 1, "&&": 2,
200
+ "==": 3, "!=": 3, "<": 3, "<=": 3, ">": 3, ">=": 3,
201
+ "+": 4, "-": 4,
202
+ "*": 5, "/": 5, "%": 5,
203
+ };
204
+ function parseExpr(src) {
205
+ const toks = tokenize(src);
206
+ let pos = 0;
207
+ const peek = () => toks[pos];
208
+ const eat = (kind) => {
209
+ const t = toks[pos];
210
+ if (t.t !== kind)
211
+ throw new Error(`Expected ${kind}, got ${t.t} at token ${pos}`);
212
+ pos++;
213
+ return t;
214
+ };
215
+ const parsePrimary = () => {
216
+ const t = peek();
217
+ if (t.t === "num") {
218
+ pos++;
219
+ return { type: "lit", v: t.v };
220
+ }
221
+ if (t.t === "str") {
222
+ pos++;
223
+ return { type: "lit", v: t.v };
224
+ }
225
+ if (t.t === "id") {
226
+ pos++;
227
+ if (t.v === "true")
228
+ return { type: "lit", v: true };
229
+ if (t.v === "false")
230
+ return { type: "lit", v: false };
231
+ if (t.v === "null")
232
+ return { type: "lit", v: null };
233
+ return { type: "id", name: t.v };
234
+ }
235
+ if (t.t === "lp") {
236
+ pos++;
237
+ const e = parseBinary(0);
238
+ eat("rp");
239
+ return e;
240
+ }
241
+ if (t.t === "op" && (t.v === "!" || t.v === "-" || t.v === "+")) {
242
+ pos++;
243
+ return { type: "unary", op: t.v, arg: parsePrimary() };
244
+ }
245
+ throw new Error(`Unexpected token ${JSON.stringify(t)}`);
246
+ };
247
+ const parseSuffix = (e) => {
248
+ while (true) {
249
+ const t = peek();
250
+ if (t.t === "dot") {
251
+ pos++;
252
+ const id = eat("id");
253
+ e = { type: "member", obj: e, name: id.v };
254
+ continue;
255
+ }
256
+ if (t.t === "lp") {
257
+ pos++;
258
+ const args = [];
259
+ if (peek().t !== "rp") {
260
+ args.push(parseBinary(0));
261
+ while (peek().t === "comma") {
262
+ pos++;
263
+ args.push(parseBinary(0));
264
+ }
265
+ }
266
+ eat("rp");
267
+ e = { type: "call", callee: e, args };
268
+ continue;
269
+ }
270
+ return e;
271
+ }
272
+ };
273
+ const parseBinary = (minPrec) => {
274
+ let left = parseSuffix(parsePrimary());
275
+ while (true) {
276
+ const t = peek();
277
+ if (t.t !== "op" || !(t.v in BINARY_PREC))
278
+ break;
279
+ const prec = BINARY_PREC[t.v];
280
+ if (prec < minPrec)
281
+ break;
282
+ pos++;
283
+ const right = parseBinary(prec + 1);
284
+ left = { type: "binary", op: t.v, left, right };
285
+ }
286
+ return left;
287
+ };
288
+ const expr = parseBinary(0);
289
+ if (peek().t !== "end")
290
+ throw new Error("Unexpected trailing tokens");
291
+ return expr;
292
+ }
293
+ // ── Expression evaluator ───────────────────────────────────────────────────
294
+ function evalExpr(e, row) {
295
+ switch (e.type) {
296
+ case "lit": return e.v;
297
+ case "id": return resolveIdentifier(e.name, row);
298
+ case "member": {
299
+ const obj = evalExpr(e.obj, row);
300
+ // For `file.X` and `note.X` chains, treat the parent as a namespace
301
+ // identifier (the parser produces id("file") then member chain).
302
+ if (e.obj.type === "id" && (e.obj.name === "file" || e.obj.name === "note" || e.obj.name === "formula")) {
303
+ return resolveIdentifier(`${e.obj.name}.${e.name}`, row);
304
+ }
305
+ // Otherwise generic property access. Methods like .lower / .contains
306
+ // are handled in `call` below; here we just unwrap the value.
307
+ if (obj == null)
308
+ return undefined;
309
+ if (typeof obj === "object" && !Array.isArray(obj)) {
310
+ return obj[e.name];
311
+ }
312
+ return undefined;
313
+ }
314
+ case "call": {
315
+ // Method calls have a `member` callee: `<obj>.<method>(args)`.
316
+ if (e.callee.type === "member") {
317
+ const args = e.args.map((a) => evalExpr(a, row));
318
+ // file.hasTag / file.inFolder / file.hasLink are special-cased.
319
+ if (e.callee.obj.type === "id" && e.callee.obj.name === "file") {
320
+ return callFileMethod(e.callee.name, args, row);
321
+ }
322
+ const target = evalExpr(e.callee.obj, row);
323
+ return callValueMethod(target, e.callee.name, args);
324
+ }
325
+ // Bare function calls (e.g. `link(...)` if/when we add them).
326
+ if (e.callee.type === "id") {
327
+ const args = e.args.map((a) => evalExpr(a, row));
328
+ return callGlobalFunction(e.callee.name, args);
329
+ }
330
+ throw new Error("Unsupported call shape");
331
+ }
332
+ case "unary": {
333
+ const v = evalExpr(e.arg, row);
334
+ if (e.op === "!")
335
+ return !toBool(v);
336
+ if (e.op === "-")
337
+ return -(Number(v) || 0);
338
+ if (e.op === "+")
339
+ return Number(v) || 0;
340
+ throw new Error("Unknown unary operator: " + e.op);
341
+ }
342
+ case "binary": {
343
+ const l = evalExpr(e.left, row);
344
+ const r = evalExpr(e.right, row);
345
+ switch (e.op) {
346
+ case "&&": return toBool(l) ? r : l;
347
+ case "||": return toBool(l) ? l : r;
348
+ case "==": return looseEq(l, r);
349
+ case "!=": return !looseEq(l, r);
350
+ case "<": return compare(l, r) < 0;
351
+ case "<=": return compare(l, r) <= 0;
352
+ case ">": return compare(l, r) > 0;
353
+ case ">=": return compare(l, r) >= 0;
354
+ case "+": return typeof l === "string" || typeof r === "string"
355
+ ? `${l ?? ""}${r ?? ""}`
356
+ : (Number(l) || 0) + (Number(r) || 0);
357
+ case "-": return (Number(l) || 0) - (Number(r) || 0);
358
+ case "*": return (Number(l) || 0) * (Number(r) || 0);
359
+ case "/": return (Number(l) || 0) / (Number(r) || 1);
360
+ case "%": return (Number(l) || 0) % (Number(r) || 1);
361
+ }
362
+ throw new Error("Unknown binary operator: " + e.op);
363
+ }
364
+ }
365
+ }
366
+ function looseEq(a, b) {
367
+ if (a == null || b == null)
368
+ return a === b;
369
+ if (typeof a === typeof b)
370
+ return a === b;
371
+ // Allow "5" == 5 type comparisons because frontmatter is YAML-loose.
372
+ return String(a) === String(b);
373
+ }
374
+ function compare(a, b) {
375
+ if (typeof a === "number" && typeof b === "number")
376
+ return a - b;
377
+ if (a instanceof Date && b instanceof Date)
378
+ return a.getTime() - b.getTime();
379
+ return String(a ?? "").localeCompare(String(b ?? ""), undefined, { numeric: true, sensitivity: "base" });
380
+ }
381
+ // ── Identifier resolution ──────────────────────────────────────────────────
382
+ function resolveIdentifier(name, row) {
383
+ if (name.startsWith("file."))
384
+ return fileProperty(name.slice(5), row);
385
+ if (name.startsWith("note."))
386
+ return row.fm[name.slice(5)];
387
+ // Bare identifier: resolve against frontmatter (Obsidian shorthand).
388
+ return row.fm[name];
389
+ }
390
+ function fileProperty(prop, row) {
391
+ const path = row.page.path;
392
+ const segments = path.split("/");
393
+ const filename = segments[segments.length - 1];
394
+ const basename = filename.replace(/\.[^.]+$/, "");
395
+ const ext = filename.includes(".") ? filename.slice(filename.lastIndexOf(".") + 1) : "";
396
+ const folder = segments.length > 1 ? segments.slice(0, -1).join("/") : "";
397
+ switch (prop) {
398
+ case "name": return basename;
399
+ case "basename": return basename;
400
+ case "path": return path;
401
+ case "folder": return folder;
402
+ case "ext": return ext;
403
+ case "mtime": return row.page.mtime ? new Date(row.page.mtime * 1000) : null;
404
+ case "ctime": return row.page.birthtime ? new Date(row.page.birthtime * 1000) : null;
405
+ case "tags": {
406
+ const t = row.fm.tags;
407
+ if (Array.isArray(t))
408
+ return t.map(String);
409
+ if (typeof t === "string")
410
+ return [t];
411
+ return [];
412
+ }
413
+ default: return undefined;
414
+ }
415
+ }
416
+ function callFileMethod(name, args, row) {
417
+ switch (name) {
418
+ case "hasTag": {
419
+ const tags = fileProperty("tags", row) || [];
420
+ const want = String(args[0] ?? "").replace(/^#/, "");
421
+ return tags.some((tag) => tag.replace(/^#/, "") === want);
422
+ }
423
+ case "inFolder": {
424
+ const folder = String(fileProperty("folder", row) || "");
425
+ const want = String(args[0] ?? "");
426
+ return folder === want || folder.startsWith(want + "/");
427
+ }
428
+ case "hasLink": {
429
+ // Not modelled in our index; deferred. Evaluate to false so filter
430
+ // semantics stay sane.
431
+ return false;
432
+ }
433
+ }
434
+ throw new Error(`Unknown file method: file.${name}`);
435
+ }
436
+ function callValueMethod(target, name, args) {
437
+ if (target == null)
438
+ return null;
439
+ if (typeof target === "string") {
440
+ switch (name) {
441
+ case "contains": return target.toLowerCase().includes(String(args[0] ?? "").toLowerCase());
442
+ case "startsWith": return target.startsWith(String(args[0] ?? ""));
443
+ case "endsWith": return target.endsWith(String(args[0] ?? ""));
444
+ case "lower": return target.toLowerCase();
445
+ case "upper": return target.toUpperCase();
446
+ case "length": return target.length;
447
+ case "trim": return target.trim();
448
+ }
449
+ }
450
+ if (Array.isArray(target)) {
451
+ switch (name) {
452
+ case "contains": return target.some((v) => looseEq(v, args[0]));
453
+ case "length": return target.length;
454
+ case "join": return target.map(String).join(String(args[0] ?? ", "));
455
+ }
456
+ }
457
+ if (typeof target === "number") {
458
+ switch (name) {
459
+ case "abs": return Math.abs(target);
460
+ case "round": return Math.round(target);
461
+ case "floor": return Math.floor(target);
462
+ case "ceil": return Math.ceil(target);
463
+ case "toFixed": return target.toFixed(Number(args[0] ?? 0));
464
+ }
465
+ }
466
+ throw new Error(`Method '${name}' not supported on ${typeof target}`);
467
+ }
468
+ function callGlobalFunction(name, args) {
469
+ switch (name) {
470
+ case "if": return toBool(args[0]) ? args[1] : args[2];
471
+ case "min": return Math.min(...args.map(Number));
472
+ case "max": return Math.max(...args.map(Number));
473
+ case "now":
474
+ case "today": return new Date();
475
+ case "number": return Number(args[0]);
476
+ }
477
+ throw new Error(`Unknown function: ${name}`);
478
+ }
479
+ // ── Render a table view ────────────────────────────────────────────────────
480
+ function renderTableView(view, allRows, doc, context) {
481
+ let rows = allRows;
482
+ if (view.filters) {
483
+ rows = rows.filter((row) => evalFilter(view.filters, row));
484
+ }
485
+ const columns = view.order && view.order.length > 0 ? view.order : ["file.name"];
486
+ const labels = columns.map((id) => columnLabel(id, doc));
487
+ // Pre-compute every row's display + raw value per column.
488
+ const tbl = rows.map((row) => columns.map((id) => valueForColumn(id, row, context)));
489
+ // Default sort: by first column, ascending.
490
+ const sortIdx = 0;
491
+ tbl.sort((a, b) => compare(a[sortIdx].raw, b[sortIdx].raw));
492
+ if (view.limit && view.limit > 0)
493
+ tbl.length = Math.min(tbl.length, view.limit);
494
+ const header = labels.map((l, i) => `<th data-col="${i}" tabindex="0">${esc(l)}</th>`).join("");
495
+ const body = tbl.map((cells, ri) => {
496
+ const tds = cells.map((c) => `<td data-raw="${escAttr(toSortKey(c.raw))}">${c.html}</td>`).join("");
497
+ return `<tr data-row="${ri}">${tds}</tr>`;
498
+ }).join("");
499
+ const caption = view.name ? `<div class="bases-caption">${esc(view.name)}</div>` : "";
500
+ return `<div class="bases-block">
501
+ ${caption}
502
+ <div class="bases-toolbar">
503
+ <input type="search" class="bases-filter" placeholder="Filter…" aria-label="Filter table">
504
+ <span class="bases-count" data-total="${tbl.length}">${tbl.length} ${tbl.length === 1 ? "row" : "rows"}</span>
505
+ </div>
506
+ <div class="bases-scroll">
507
+ <table class="bases-table">
508
+ <thead><tr>${header}</tr></thead>
509
+ <tbody>${body}</tbody>
510
+ </table>
511
+ </div>
512
+ </div>`;
513
+ }
514
+ function valueForColumn(id, row, context) {
515
+ // file.name renders as a link to the page.
516
+ if (id === "file.name" || id === "file.basename") {
517
+ const title = row.page.title;
518
+ const href = "/" + row.page.path.replace(/\.md$/i, "").split("/").map(encodeURIComponent).join("/");
519
+ return { html: `<a class="internal internal-link" href="${escAttr(href)}">${esc(title)}</a>`, raw: title };
520
+ }
521
+ const v = resolveIdentifier(id, row);
522
+ return { html: renderValue(v), raw: v };
523
+ }
524
+ function renderValue(v) {
525
+ if (v == null)
526
+ return "";
527
+ if (Array.isArray(v))
528
+ return v.map((x) => renderValue(x)).filter(Boolean).join(", ");
529
+ if (v instanceof Date)
530
+ return esc(v.toISOString().slice(0, 10));
531
+ if (typeof v === "boolean")
532
+ return v ? "✓" : "";
533
+ if (typeof v === "string") {
534
+ // Render `[[wikilinks]]` in property values as plain styled text — full
535
+ // wikilink resolution happens later in the wikilink plugin, which only
536
+ // sees text nodes; the bases plugin emits HTML.
537
+ return esc(v);
538
+ }
539
+ return esc(String(v));
540
+ }
541
+ function toSortKey(v) {
542
+ if (v == null)
543
+ return "";
544
+ if (v instanceof Date)
545
+ return String(v.getTime());
546
+ if (Array.isArray(v))
547
+ return v.map(String).join(",");
548
+ return String(v);
549
+ }
550
+ function columnLabel(id, doc) {
551
+ const explicit = doc.properties?.[id]?.displayName;
552
+ if (explicit)
553
+ return explicit;
554
+ if (id.startsWith("note."))
555
+ return id.slice(5);
556
+ if (id.startsWith("file.")) {
557
+ const tail = id.slice(5);
558
+ return tail.charAt(0).toUpperCase() + tail.slice(1);
559
+ }
560
+ return id;
561
+ }
562
+ function errorBlock(message) {
563
+ return `<div class="bases-block bases-error">${esc(message)}</div>`;
564
+ }
565
+ function esc(s) {
566
+ return String(s ?? "").replace(/[&<>]/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;" }[c]));
567
+ }
568
+ function escAttr(s) {
569
+ return String(s ?? "").replace(/[&<>"]/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" }[c]));
570
+ }
571
+ //# sourceMappingURL=bases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bases.js","sourceRoot":"","sources":["../../src/render/bases.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import { visit, SKIP } from "unist-util-visit";
9
9
  //
10
10
  // Recognised types map to CSS classes via .callout.callout-<type>.
11
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.
12
+ // removed from the tree; used to strip role-gated callouts during lower-tier builds.
13
13
  const CALLOUT_RE = /^\[!(\w+)\][+-]?\s*(.*?)(?:\n|$)/;
14
14
  export function calloutPlugin(opts = {}) {
15
15
  const redact = opts.redactRoles;
@@ -26,7 +26,7 @@ export function calloutPlugin(opts = {}) {
26
26
  return;
27
27
  const [fullMatch, type, rawTitle] = match;
28
28
  const lowerType = type.toLowerCase();
29
- // Role-gated callout drop entirely from this tree.
29
+ // Role-gated callout; drop entirely from this tree.
30
30
  if (redact?.has(lowerType) && parent && index != null) {
31
31
  parent.children.splice(index, 1);
32
32
  return [SKIP, index];
@@ -1 +1 @@
1
- {"version":3,"file":"callouts.js","sourceRoot":"","sources":["../../src/render/callouts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"callouts.js","sourceRoot":"","sources":["../../src/render/callouts.ts"],"names":[],"mappings":"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"}