typerighter 0.44.1 → 0.45.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 (35) hide show
  1. package/dist/{app-C-CwtIly.js → app-D0bX_TJ8.js} +1 -1
  2. package/dist/builtin-components.json +95 -0
  3. package/dist/{cli-BYbSBUOA.js → cli-_m_a7JaO.js} +5 -5
  4. package/dist/cli.js +1 -1
  5. package/dist/client/theme-default.js +194 -194
  6. package/dist/client.js +1 -1
  7. package/dist/index.js +2 -2
  8. package/dist/{init-C3xKB6xH.js → init-CbYgEsOM.js} +203 -189
  9. package/dist/{jsonld-CrXLLdKW.js → jsonld-CRHOaFMj.js} +15 -15
  10. package/dist/node/build/builtin-contract.d.ts +3 -0
  11. package/dist/node/build/builtin-contract.d.ts.map +1 -0
  12. package/dist/node/cli/init.d.ts.map +1 -1
  13. package/dist/node/lib/codegen/app-entry.d.ts +1 -0
  14. package/dist/node/lib/codegen/app-entry.d.ts.map +1 -1
  15. package/dist/node/lib/components.d.ts +9 -7
  16. package/dist/node/lib/components.d.ts.map +1 -1
  17. package/dist/node/lib/prop-schema.d.ts +17 -0
  18. package/dist/node/lib/prop-schema.d.ts.map +1 -0
  19. package/dist/node/plugin/vite/subplugins/component-contract.d.ts.map +1 -1
  20. package/dist/node/plugin/vite/virtual/app.d.ts +2 -0
  21. package/dist/node/plugin/vite/virtual/app.d.ts.map +1 -1
  22. package/dist/node/plugin/vite/virtual/pages.d.ts +2 -0
  23. package/dist/node/plugin/vite/virtual/pages.d.ts.map +1 -1
  24. package/dist/prerenderWorker.js +2 -2
  25. package/dist/{renderMath-DBw8KV_4.js → renderMath-C59kPnxc.js} +1 -1
  26. package/dist/shared/types/json-schema.d.ts +12 -3
  27. package/dist/shared/types/json-schema.d.ts.map +1 -1
  28. package/dist/shared/utils/format.d.ts +1 -0
  29. package/dist/shared/utils/format.d.ts.map +1 -1
  30. package/dist/{shared-B-wDtFX6.js → shared-C5ERr4vS.js} +64 -54
  31. package/dist/shared.js +1 -1
  32. package/dist/typerighter.css +1 -1
  33. package/dist/{vite-B7uvklyW.js → vite-KkSlWwFu.js} +428 -367
  34. package/dist/vite.js +1 -1
  35. package/package.json +6 -4
@@ -1,5 +1,5 @@
1
- import { $ as e, D as t, E as n, F as r, G as i, H as a, J as o, L as s, P as c, R as l, V as u, X as d, Z as f, _ as p, b as m, c as h, d as g, et as _, g as v, h as y, i as b, p as x, v as S, w as C, y as w, z as T } from "./shared-B-wDtFX6.js";
2
- import { a as E, i as D, n as O, o as ee, r as te, s as ne, t as re } from "./jsonld-CrXLLdKW.js";
1
+ import { D as e, E as t, F as n, H as r, K as i, L as a, P as o, Q as s, R as c, V as l, Y as u, Z as d, _ as f, b as p, c as m, d as h, et as g, g as _, h as v, i as y, p as b, tt as x, v as S, w as C, y as w, z as T } from "./shared-C5ERr4vS.js";
2
+ import { a as E, i as D, n as O, o as ee, r as te, s as ne, t as re } from "./jsonld-CRHOaFMj.js";
3
3
  import { t as ie } from "./temml-D47Z4xZ2.js";
4
4
  import { a as ae, i as oe, n as se, r as ce } from "./context-CSvoDxVt.js";
5
5
  import { t as le } from "./es-ClqUVRJn.js";
@@ -13,9 +13,9 @@ import { fileURLToPath as me } from "node:url";
13
13
  import he from "node:os";
14
14
  import { Worker as ge } from "node:worker_threads";
15
15
  import P, { createReadStream as _e, existsSync as ve, globSync as ye, readFileSync as be, statSync as xe } from "node:fs";
16
- import { createChecker as Se, createCheckerByJson as Ce } from "vue-component-meta";
17
- import { createHighlighter as we, guessEmbeddedLanguages as Te, isSpecialLang as Ee } from "shiki";
18
- import { createRequire as De } from "node:module";
16
+ import { createRequire as Se } from "node:module";
17
+ import { createChecker as Ce, createCheckerByJson as we } from "vue-component-meta";
18
+ import { createHighlighter as Te, guessEmbeddedLanguages as Ee, isSpecialLang as De } from "shiki";
19
19
  //#region src/node/lib/worker-pool/index.ts
20
20
  var Oe = class {
21
21
  workers = [];
@@ -68,8 +68,8 @@ function ke(e, t, n, r) {
68
68
  return `<?xml version="1.0" encoding="UTF-8"?>
69
69
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
70
70
  ${e.map((e) => {
71
- let n = h(i + t + c(e)), a = r?.get(e);
72
- return ` <url><loc>${n}</loc>${a === void 0 ? "" : `<lastmod>${b(a)}</lastmod>`}</url>`;
71
+ let n = m(i + t + o(e)), a = r?.get(e);
72
+ return ` <url><loc>${n}</loc>${a === void 0 ? "" : `<lastmod>${y(a)}</lastmod>`}</url>`;
73
73
  }).join("\n")}
74
74
  </urlset>
75
75
  `;
@@ -85,11 +85,11 @@ Sitemap: ${e}${t}sitemap.xml
85
85
  //#region src/node/build/seo/feed.ts
86
86
  function je(e, t, n, r, i, a) {
87
87
  let o = [...e].filter((e) => e.fileMetadata.mtime > 0).sort((e, t) => t.fileMetadata.mtime - e.fileMetadata.mtime).slice(0, 50).map((e) => {
88
- let r = u(e.filepath), i = `${n}${t}${r}`, a = new Date(e.fileMetadata.mtime).toUTCString(), o = h(e.label ?? r), s = e.excerpt === void 0 ? "" : `<![CDATA[${e.excerpt}]]>`;
88
+ let r = l(e.filepath), i = `${n}${t}${r}`, a = new Date(e.fileMetadata.mtime).toUTCString(), o = m(e.label ?? r), s = e.excerpt === void 0 ? "" : `<![CDATA[${e.excerpt}]]>`;
89
89
  return ` <item>
90
90
  <title>${o}</title>
91
- <link>${h(i)}</link>
92
- <guid>${h(i)}</guid>
91
+ <link>${m(i)}</link>
92
+ <guid>${m(i)}</guid>
93
93
  <pubDate>${a}</pubDate>
94
94
  <description>${s}</description>
95
95
  </item>`;
@@ -97,11 +97,11 @@ function je(e, t, n, r, i, a) {
97
97
  return `<?xml version="1.0" encoding="UTF-8"?>
98
98
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
99
99
  <channel>
100
- <title>${h(r)}</title>
101
- <link>${h(n + t)}</link>
102
- <description>${h(i)}</description>
100
+ <title>${m(r)}</title>
101
+ <link>${m(n + t)}</link>
102
+ <description>${m(i)}</description>
103
103
  <language>${a}</language>
104
- <atom:link href="${h(n + t)}feed.xml" rel="self" type="application/rss+xml"/>
104
+ <atom:link href="${m(n + t)}feed.xml" rel="self" type="application/rss+xml"/>
105
105
  ${o}
106
106
  </channel>
107
107
  </rss>
@@ -145,14 +145,14 @@ async function Fe(e, t, n) {
145
145
  }
146
146
  async function Ie(e, t, n) {
147
147
  let r = await (await import(e.ssrEntryPath)).createRenderer(), i = e.pagePaths.length, a = 0;
148
- for (let o of e.pagePaths) {
149
- let s = await r(o), l = ee(s.pageData), u = E(s.pageData), d = te(s.pageData), f = e.base + c(o), p = [re({
148
+ for (let s of e.pagePaths) {
149
+ let c = await r(s), l = ee(c.pageData), u = E(c.pageData), d = te(c.pageData), f = e.base + o(s), p = [re({
150
150
  title: l,
151
151
  description: u,
152
152
  canonicalUrl: f,
153
153
  author: e.author,
154
154
  dateModified: d
155
- }), O(o, l)].filter((e) => e !== void 0), m = ne({
155
+ }), O(s, l)].filter((e) => e !== void 0), m = ne({
156
156
  title: l,
157
157
  description: u,
158
158
  siteTitle: e.siteTitle,
@@ -162,11 +162,11 @@ async function Ie(e, t, n) {
162
162
  lang: e.lang,
163
163
  entryScript: t,
164
164
  canonicalUrl: f,
165
- ogImagePath: D(s.pageData),
165
+ ogImagePath: D(c.pageData),
166
166
  jsonLdBlocks: p,
167
167
  headExtra: n,
168
- appContent: s.html
169
- }), h = o === "/" ? "index.html" : `${c(o)}.html`, g = k.join(e.outDir, h);
168
+ appContent: c.html
169
+ }), h = s === "/" ? "index.html" : `${o(s)}.html`, g = k.join(e.outDir, h);
170
170
  await N.mkdir(k.dirname(g), { recursive: !0 }), await N.writeFile(g, m), a++, e.progress?.update(a, i);
171
171
  }
172
172
  }
@@ -182,7 +182,7 @@ async function Le(e) {
182
182
  //#endregion
183
183
  //#region src/node/lib/codegen/app-entry.ts
184
184
  function Re(e, t) {
185
- let { rootDir: n = ".", userComponents: r = [] } = e, i = r.map((e) => `import ${e.name} from ${JSON.stringify(e.absolutePath)};`).join("\n"), a = r.map((e) => `app.component(${JSON.stringify(e.name)}, ${e.name});`).join("\n"), o = JSON.stringify({
185
+ let { rootDir: n = ".", mountPath: r = "", userComponents: i = [] } = e, a = [r, n === "." ? "" : n].filter(Boolean).join("/"), o = i.map((e) => `import ${e.name} from ${JSON.stringify(e.absolutePath)};`).join("\n"), s = i.map((e) => `app.component(${JSON.stringify(e.name)}, ${e.name});`).join("\n"), c = JSON.stringify({
186
186
  title: e.siteTitle,
187
187
  description: e.siteDescription,
188
188
  basePath: e.basePath ?? "/",
@@ -195,7 +195,7 @@ function Re(e, t) {
195
195
  nav: e.nav
196
196
  });
197
197
  return `
198
- ${[i, "import 'typerighter/style.css';"].filter(Boolean).join("\n")}
198
+ ${[o, "import 'typerighter/style.css';"].filter(Boolean).join("\n")}
199
199
  import 'typerighter/fonts.css';
200
200
  import('typerighter/math.css');
201
201
  import { createTypedownApp } from 'typerighter/client';
@@ -216,7 +216,7 @@ function findPage(base) {
216
216
  }
217
217
 
218
218
  async function loadPageModule(pagePath) {
219
- const loader = findPage(path.join('/', '${n}', pagePath));
219
+ const loader = findPage(path.join('/', '${a}', pagePath));
220
220
  if (loader) return loader();
221
221
 
222
222
  if (isIndexUrl(pagePath)) {
@@ -231,8 +231,8 @@ async function loadPageModule(pagePath) {
231
231
  return undefined;
232
232
  }
233
233
 
234
- const { app, router, searchIndex: searchIndexRef, siteData } = await createTypedownApp(loadPageModule, theme, ${o}, initialSiteData);
235
- ${a}
234
+ const { app, router, searchIndex: searchIndexRef, siteData } = await createTypedownApp(loadPageModule, theme, ${c}, initialSiteData);
235
+ ${s}
236
236
  app.mount('#app');
237
237
 
238
238
  // Load search index in the background after the app is mounted
@@ -242,7 +242,7 @@ import('${t.searchIndex}').then((m) => { searchIndexRef.value = m.default; });
242
242
  if (import.meta.hot) {
243
243
  import.meta.hot.accept('${t.pages}', (m) => {
244
244
  if (!m) return;
245
- const base = path.join('/', '${n}', router.route.path);
245
+ const base = path.join('/', '${a}', router.route.path);
246
246
  const hadPage = !!findPage(base);
247
247
  pages = m.pages;
248
248
  const hasPage = !!findPage(base);
@@ -262,8 +262,8 @@ if (import.meta.hot) {
262
262
 
263
263
  // Update route.data directly when content changes - Vue SFC setup only re-runs on script block changes
264
264
  import.meta.hot.on('${t.pageDataEvent}', ({ filepath, pageData }) => {
265
- const eventBase = path.join('/', '${n}', path.stripExtension(filepath));
266
- const routeBase = path.join('/', '${n}', router.route.path);
265
+ const eventBase = path.join('/', '${a}', path.stripExtension(filepath));
266
+ const routeBase = path.join('/', '${a}', router.route.path);
267
267
  if (eventBase === routeBase) {
268
268
  router.route.data = pageData;
269
269
  }
@@ -302,42 +302,35 @@ function ze(e, t) {
302
302
  }
303
303
  //#endregion
304
304
  //#region src/node/lib/components.ts
305
- function Be(e, t) {
306
- let n = Ve(t), r = {};
307
- for (let i of e) {
308
- let e = `./${k.relative(t, i.absolutePath)}`;
309
- try {
310
- let t = n.getComponentMeta(i.absolutePath), a = {}, s = !1;
311
- for (let e of t.props) {
312
- if (e.global) continue;
313
- let t = L(e.schema);
314
- t !== void 0 && (a[e.name] = e.required ? t : o(t), s = !0);
315
- }
316
- r[i.name] = {
317
- source: e,
318
- props: s ? a : void 0
319
- };
320
- } catch {
321
- r[i.name] = { source: e };
322
- }
323
- }
324
- return r;
305
+ function Be(e) {
306
+ let t = k.join(e, "tsconfig.json");
307
+ if (P.existsSync(t)) return Ce(t);
308
+ let n = Ve(e);
309
+ return we(e, { compilerOptions: {
310
+ strict: !1,
311
+ jsx: "preserve",
312
+ jsxImportSource: "vue",
313
+ ...n && { paths: n }
314
+ } });
325
315
  }
326
316
  async function I(e, t) {
327
317
  let n = [];
328
318
  for (let r of e) if (r.kind === "dir") {
329
319
  let e = k.resolve(t, r.path), i;
330
320
  try {
331
- i = await pe(e);
321
+ i = await pe(e, { withFileTypes: !0 });
332
322
  } catch {
333
323
  continue;
334
324
  }
335
- for (let t of i) {
336
- if (!t.endsWith(".vue")) continue;
337
- let r = t.slice(0, -4);
338
- n.push({
339
- name: r,
340
- absolutePath: k.join(e, t)
325
+ for (let t of i) if (t.isFile() && t.name.endsWith(".vue")) n.push({
326
+ name: t.name.slice(0, -4),
327
+ absolutePath: k.join(e, t.name)
328
+ });
329
+ else if (t.isDirectory()) {
330
+ let r = k.join(e, t.name, "index.vue");
331
+ P.existsSync(r) && n.push({
332
+ name: t.name,
333
+ absolutePath: r
341
334
  });
342
335
  }
343
336
  } else n.push({
@@ -347,76 +340,24 @@ async function I(e, t) {
347
340
  return n;
348
341
  }
349
342
  function Ve(e) {
350
- let t = k.join(e, "tsconfig.json");
351
- return P.existsSync(t) ? Se(t) : Ce(e, { compilerOptions: {
352
- strict: !1,
353
- jsx: "preserve",
354
- jsxImportSource: "vue"
355
- } });
356
- }
357
- function He(e) {
358
- if (!e || e.length !== 1) return;
359
- let t = L(e[0]);
360
- return t === void 0 ? void 0 : {
361
- type: "array",
362
- items: t
363
- };
364
- }
365
- function Ue(e) {
366
- let t = e ?? [], n = t.some((e) => e === "undefined" || e === "null"), r = t.filter((e) => e !== "undefined" && e !== "null");
367
- if (r.length !== 1) return;
368
- let i = L(r[0]);
369
- if (i !== void 0) return n ? o(i) : i;
370
- }
371
- function L(e) {
372
- if (typeof e == "string") return Ge(e);
373
- switch (e.kind) {
374
- case "enum": return Ue(e.schema);
375
- case "array": return He(e.schema);
376
- case "object": return We(e.type, e.schema);
377
- default: return;
378
- }
379
- }
380
- function We(e, t) {
381
- if (t && 0 < Object.keys(t).length) return Ke(t);
382
- let n = /^(?:Record<string,\s*(\w+)>|\{\s*\[key:\s*string\]:\s*(\w+);\s*\})$/.exec(e);
383
- if (!n) return;
384
- let r = Ge(n[1] ?? n[2]);
385
- return r === void 0 ? void 0 : {
386
- type: "object",
387
- additionalProperties: r
388
- };
389
- }
390
- function Ge(e) {
391
- switch (e) {
392
- case "string": return { type: "string" };
393
- case "number": return { type: "number" };
394
- case "boolean": return { type: "boolean" };
395
- default: return;
396
- }
397
- }
398
- function Ke(e) {
399
- let t = {}, n = [];
400
- for (let [r, i] of Object.entries(e)) {
401
- let e = L(i.schema);
402
- if (e === void 0) return;
403
- t[r] = e, i.required && n.push(r);
343
+ try {
344
+ let t = Se(k.join(e, "package.json")), n = k.dirname(t.resolve("vue/package.json"));
345
+ return {
346
+ vue: [n],
347
+ "vue/*": [k.join(n, "*")]
348
+ };
349
+ } catch {
350
+ return;
404
351
  }
405
- let r = {
406
- type: "object",
407
- properties: t,
408
- additionalProperties: !1
409
- };
410
- return 0 < n.length && (r.required = n), r;
411
352
  }
412
353
  //#endregion
413
354
  //#region src/node/lib/progress.ts
414
- var R = [
355
+ var L = [
415
356
  "◐",
416
357
  "◓",
417
358
  "◑",
418
359
  "◒"
419
- ], z = class {
360
+ ], R = class {
420
361
  logger;
421
362
  label;
422
363
  start;
@@ -424,8 +365,8 @@ var R = [
424
365
  constructor(e, t) {
425
366
  if (this.logger = e, this.label = t, this.start = performance.now(), process.stdout.isTTY) {
426
367
  let e = 0;
427
- process.stdout.write(j.cyan(`${R[0]} ${t}`)), this.spinnerInterval = setInterval(() => {
428
- e = (e + 1) % R.length, process.stdout.write(`\r${j.cyan(`${R[e]} ${this.label}`)}`);
368
+ process.stdout.write(j.cyan(`${L[0]} ${t}`)), this.spinnerInterval = setInterval(() => {
369
+ e = (e + 1) % L.length, process.stdout.write(`\r${j.cyan(`${L[e]} ${this.label}`)}`);
429
370
  }, 120).unref();
430
371
  } else this.logger.start(t);
431
372
  }
@@ -437,31 +378,31 @@ var R = [
437
378
  done(e) {
438
379
  this.stopSpinner(), process.stdout.isTTY && process.stdout.write("\r\x1B[K");
439
380
  let t = Math.round(performance.now() - this.start);
440
- this.logger.success(`${e} (${qe(t)})`);
381
+ this.logger.success(`${e} (${He(t)})`);
441
382
  }
442
383
  stopSpinner() {
443
384
  this.spinnerInterval &&= (clearInterval(this.spinnerInterval), void 0);
444
385
  }
445
386
  };
446
- function qe(e) {
387
+ function He(e) {
447
388
  return e < 1e3 ? `${Math.round(e)}ms` : `${(e / 1e3).toFixed(1)}s`;
448
389
  }
449
390
  //#endregion
450
391
  //#region src/node/build/index.ts
451
- async function Je(e, t = {}) {
392
+ async function Ue(e, t = {}) {
452
393
  let { root: n, logger: r } = e, i = k.resolve(n, t.outDir ?? "dist"), a = k.join(i, ".client"), o = k.join(i, ".server");
453
394
  await N.rm(i, {
454
395
  recursive: !0,
455
396
  force: !0
456
397
  });
457
- let s = await e.getTdContext(), [c, l, d] = await Promise.all([
398
+ let s = await e.getTdContext(), [c, u, d] = await Promise.all([
458
399
  s.getConfig(),
459
400
  s.listFiles(),
460
401
  s.listSidebar()
461
- ]), f = c.origin ?? void 0, p = c.author ?? void 0, m = c.license ?? void 0, h = c.repo ?? void 0, g = t.base ?? c.basePath ?? "/", _ = g.endsWith("/") ? g : g + "/", v = d.map((e) => ({
402
+ ]), f = c.origin ?? void 0, p = c.author ?? void 0, m = c.license ?? void 0, h = c.repo ?? void 0, g = t.base ?? c.basePath ?? "/", _ = g.endsWith("/") ? g : g + "/", y = d.map((e) => ({
462
403
  ...e,
463
404
  header: {}
464
- })), b = y(v), x = JSON.stringify({
405
+ })), b = v(y), x = JSON.stringify({
465
406
  title: c.siteTitle,
466
407
  description: c.siteDescription,
467
408
  basePath: _,
@@ -492,13 +433,13 @@ async function Je(e, t = {}) {
492
433
  nav: c.nav,
493
434
  userComponents: D
494
435
  }, {
495
- theme: Y,
496
- pages: G,
497
- siteData: q,
498
- searchIndex: J,
499
- pageDataEvent: X
436
+ theme: J,
437
+ pages: W,
438
+ siteData: K,
439
+ searchIndex: q,
440
+ pageDataEvent: Y
500
441
  })),
501
- N.writeFile(T, Ye({
442
+ N.writeFile(T, We({
502
443
  rootDir: c.rootDir,
503
444
  siteConfig: x,
504
445
  siteData: S,
@@ -508,7 +449,7 @@ async function Je(e, t = {}) {
508
449
  N.writeFile(E, O)
509
450
  ]);
510
451
  try {
511
- let s = gn({ context: e }), m = e.createViteLogger(), h = new z(r, "Building client bundle...");
452
+ let s = yn({ context: e }), m = e.createViteLogger(), h = new R(r, "Building client bundle...");
512
453
  await fe({
513
454
  ...t.viteConfig,
514
455
  root: n,
@@ -529,7 +470,7 @@ async function Je(e, t = {}) {
529
470
  });
530
471
  let g = await N.readdir(k.join(a, "assets")).catch(() => []);
531
472
  h.done(`Client bundle (${g.length} chunks)`);
532
- let v = new z(r, "Building SSR bundle...");
473
+ let v = new R(r, "Building SSR bundle...");
533
474
  await fe({
534
475
  ...t.viteConfig,
535
476
  root: n,
@@ -544,12 +485,12 @@ async function Je(e, t = {}) {
544
485
  emptyOutDir: !0
545
486
  }
546
487
  }), v.done("SSR bundle");
547
- let y = l.map((e) => {
548
- let t = u(e);
488
+ let y = u.map((e) => {
489
+ let t = l(e);
549
490
  return t === "index" ? "/" : `/${t}`;
550
491
  });
551
- y.push("/"), Ze(b.entries, "", y);
552
- let x = new z(r, "Pre-rendering pages...");
492
+ y.push("/"), Ke(b.entries, "", y);
493
+ let x = new R(r, "Pre-rendering pages...");
553
494
  await Pe({
554
495
  ssrEntryPath: k.join(o, "ssr-entry.js"),
555
496
  clientOutDir: a,
@@ -564,13 +505,13 @@ async function Je(e, t = {}) {
564
505
  }), x.done(`Pre-rendered ${y.length} pages`);
565
506
  let S = /* @__PURE__ */ new Map();
566
507
  for (let e of d) {
567
- let t = u(e.filepath), n = t === "index" ? "/" : `/${t}`;
508
+ let t = l(e.filepath), n = t === "index" ? "/" : `/${t}`;
568
509
  S.set(n, e.fileMetadata.mtime);
569
510
  }
570
511
  let C = ke(y, _, f, S), E = [N.writeFile(k.join(i, "sitemap.xml"), C)];
571
512
  f !== void 0 && (E.push(N.writeFile(k.join(i, "robots.txt"), Ae(f, _))), E.push(N.writeFile(k.join(i, "feed.xml"), je(d, _, f, c.siteTitle, c.siteDescription, c.lang)))), await Promise.all(E);
572
513
  let D = k.join(a, "assets"), O = k.join(i, "assets");
573
- await N.cp(D, O, { recursive: !0 }).catch(() => {}), await Xe(k.join(n, c.rootDir), i);
514
+ await N.cp(D, O, { recursive: !0 }).catch(() => {}), await Ge(k.join(n, c.rootDir), i);
574
515
  let ee = k.join(n, c.publicDir);
575
516
  await N.cp(ee, i, { recursive: !0 }).catch(() => {});
576
517
  } finally {
@@ -591,13 +532,13 @@ async function Je(e, t = {}) {
591
532
  }
592
533
  r.log(`\nBuild complete. Output: ${i}`);
593
534
  }
594
- function Ye(e) {
595
- let t = `/${e.rootDir}/${f}`, n = JSON.parse(e.siteConfig), r = JSON.parse(e.siteData), i = r.contentTree ?? { entries: [] }, a = v(i.entries ?? [], n.title ?? ""), o = JSON.stringify({
535
+ function We(e) {
536
+ let t = `/${e.rootDir}/${s}`, n = JSON.parse(e.siteConfig), r = JSON.parse(e.siteData), i = r.contentTree ?? { entries: [] }, a = _(i.entries ?? [], n.title ?? ""), o = JSON.stringify({
596
537
  ...r,
597
538
  directoryListings: a
598
- }), s = e.userComponents ?? [], c = s.map((e) => `import ${e.name} from ${JSON.stringify(e.absolutePath)};`).join("\n"), l = s.map((e) => `app.component(${JSON.stringify(e.name)}, ${e.name});`).join("\n");
539
+ }), c = e.userComponents ?? [], l = c.map((e) => `import ${e.name} from ${JSON.stringify(e.absolutePath)};`).join("\n"), u = c.map((e) => `app.component(${JSON.stringify(e.name)}, ${e.name});`).join("\n");
599
540
  return `
600
- ${[c, "import { createTypedownApp } from 'typerighter/client';"].filter(Boolean).join("\n")}
541
+ ${[l, "import { createTypedownApp } from 'typerighter/client';"].filter(Boolean).join("\n")}
601
542
  import { TdDirectoryIndex, TdGlossaryIndex } from 'typerighter/client/theme-default';
602
543
  import { isIndexUrl, getDirectoryFromPageUrl } from 'typerighter/shared';
603
544
  import { renderToString } from 'vue/server-renderer';
@@ -634,7 +575,7 @@ function loadPageModule(pagePath) {
634
575
 
635
576
  export async function createRenderer() {
636
577
  const { app, router } = await createTypedownApp(loadPageModule, theme, ${e.siteConfig}, siteData);
637
- ${l}
578
+ ${u}
638
579
  return async function render(url) {
639
580
  await router.go(url, { replace: true });
640
581
  const html = await renderToString(app);
@@ -643,32 +584,32 @@ export async function createRenderer() {
643
584
  }
644
585
  `;
645
586
  }
646
- async function Xe(e, t) {
587
+ async function Ge(e, t) {
647
588
  let n = (await N.readdir(e, {
648
589
  recursive: !0,
649
590
  withFileTypes: !0
650
- })).filter((e) => e.isFile() && !l(e.name)).map(async (n) => {
591
+ })).filter((e) => e.isFile() && !c(e.name)).map(async (n) => {
651
592
  let r = k.join(n.parentPath, n.name), i = k.relative(e, r), a = k.join(t, i);
652
593
  return N.mkdir(k.dirname(a), { recursive: !0 }).then(() => N.copyFile(r, a));
653
594
  });
654
595
  await Promise.all(n);
655
596
  }
656
- function Ze(e, t, n) {
597
+ function Ke(e, t, n) {
657
598
  for (let r of e) {
658
599
  if (r.kind !== "dir") continue;
659
600
  let e = `${t}/${r.node.name}`;
660
- p(r.node) || n.push(C(e)), Ze(r.node.entries, e, n);
601
+ f(r.node) || n.push(C(e)), Ke(r.node.entries, e, n);
661
602
  }
662
603
  }
663
604
  //#endregion
664
605
  //#region ../../node_modules/.pnpm/@shikijs+transformers@4.4.3/node_modules/@shikijs/transformers/dist/index.mjs
665
- var Qe = /(\s+\/\/)/, $e = /(?:\/\/|["'#]|;{1,2}|%{1,2}|--)(\s*)$/, et = /(?:\/\/|#|;{1,2}|%{1,2}|--)(\s*)$/, tt = [
606
+ var qe = /(\s+\/\/)/, Je = /(?:\/\/|["'#]|;{1,2}|%{1,2}|--)(\s*)$/, Ye = /(?:\/\/|#|;{1,2}|%{1,2}|--)(\s*)$/, Xe = [
666
607
  [/^(<!--)(.+)(-->)$/, !1],
667
608
  [/^(\/\*)(.+)(\*\/)$/, !1],
668
609
  [/^(\/\/|["'#]|;{1,2}|%{1,2}|--)(.*)$/, !0],
669
610
  [/^(\*)(.+)$/, !0]
670
611
  ];
671
- function nt(e, t, n) {
612
+ function Ze(e, t, n) {
672
613
  let r = [];
673
614
  for (let i of e) {
674
615
  if (n === "v3") {
@@ -677,8 +618,8 @@ function nt(e, t, n) {
677
618
  let n = e.children[0];
678
619
  if (n.type !== "text") return e;
679
620
  let r = t === i.children.length - 1;
680
- if (!B(n.value, r)) return e;
681
- let a = n.value.split(Qe);
621
+ if (!z(n.value, r)) return e;
622
+ let a = n.value.split(qe);
682
623
  if (a.length <= 1) return e;
683
624
  let o = [a[0]];
684
625
  for (let e = 1; e < a.length; e += 2) o.push(a[e] + (a[e + 1] || ""));
@@ -699,13 +640,13 @@ function nt(e, t, n) {
699
640
  if (a.type !== "element") continue;
700
641
  let o = a.children.at(0);
701
642
  if (o?.type !== "text") continue;
702
- let s = n === e.length - 1, c = B(o.value, s), l;
643
+ let s = n === e.length - 1, c = z(o.value, s), l;
703
644
  if (!c && n > 0 && o.value.trim().startsWith("[!code")) {
704
645
  let t = e[n - 1];
705
646
  if (t?.type === "element") {
706
647
  let n = t.children.at(0);
707
648
  if (n?.type === "text" && n.value.includes("//")) {
708
- let l = B(n.value + o.value, s);
649
+ let l = z(n.value + o.value, s);
709
650
  if (l) {
710
651
  c = l, r.push({
711
652
  info: l,
@@ -722,7 +663,7 @@ function nt(e, t, n) {
722
663
  }
723
664
  if (c) {
724
665
  if (t && !s && n !== 0) {
725
- let t = rt(e[n - 1], "{") && rt(e[n + 1], "}");
666
+ let t = Qe(e[n - 1], "{") && Qe(e[n + 1], "}");
726
667
  r.push({
727
668
  info: c,
728
669
  line: i,
@@ -744,16 +685,16 @@ function nt(e, t, n) {
744
685
  }
745
686
  return r;
746
687
  }
747
- function rt(e, t) {
688
+ function Qe(e, t) {
748
689
  if (e.type !== "element") return !1;
749
690
  let n = e.children[0];
750
691
  return n.type === "text" && n.value.trim() === t;
751
692
  }
752
- function B(e, t) {
693
+ function z(e, t) {
753
694
  let n = e.trimStart(), r = e.length - n.length;
754
695
  n = n.trimEnd();
755
696
  let i = e.length - n.length - r;
756
- for (let [e, a] of tt) {
697
+ for (let [e, a] of Xe) {
757
698
  if (a && !t) continue;
758
699
  let o = e.exec(n);
759
700
  if (o) return [
@@ -763,22 +704,22 @@ function B(e, t) {
763
704
  ];
764
705
  }
765
706
  }
766
- function it(e) {
767
- let t = e.match($e);
707
+ function $e(e) {
708
+ let t = e.match(Je);
768
709
  return t && t[1].trim().length === 0 ? e.slice(0, t.index) : e;
769
710
  }
770
- function at(e) {
771
- let t = e.match(et);
711
+ function et(e) {
712
+ let t = e.match(Ye);
772
713
  return t && t[1].trim().length === 0 ? e.slice(0, t.index).trimEnd() : e;
773
714
  }
774
- function ot(e, t, n, r) {
715
+ function tt(e, t, n, r) {
775
716
  return r ??= "v3", {
776
717
  name: e,
777
718
  code(e) {
778
719
  let i = e.children.filter((e) => e.type === "element"), a = [];
779
720
  e.data ??= {};
780
721
  let o = e.data;
781
- o._shiki_notation ??= nt(i, ["jsx", "tsx"].includes(this.options.lang), r);
722
+ o._shiki_notation ??= Ze(i, ["jsx", "tsx"].includes(this.options.lang), r);
782
723
  let s = o._shiki_notation;
783
724
  for (let e of s) {
784
725
  if (e.info[1].length === 0) continue;
@@ -786,7 +727,7 @@ function ot(e, t, n, r) {
786
727
  e.isLineCommentOnly && r !== "v1" && o++;
787
728
  let s = !1;
788
729
  if (e.info[1] = e.info[1].replace(t, (...t) => n.call(this, t, e.line, e.token, i, o) ? (s = !0, "") : t[0]), !s) continue;
789
- r === "v1" ? e.info[1] = it(e.info[1]) : r === "v3" && (e.info[1] = at(e.info[1]));
730
+ r === "v1" ? e.info[1] = $e(e.info[1]) : r === "v3" && (e.info[1] = et(e.info[1]));
790
731
  let c = e.info[1].trim().length === 0;
791
732
  if (c && (e.info[1] = ""), c && e.isLineCommentOnly) a.push(e.line);
792
733
  else if (c && e.isJsxStyle) e.line.children.splice(e.line.children.indexOf(e.token) - 1, 3);
@@ -811,44 +752,44 @@ function ot(e, t, n, r) {
811
752
  }
812
753
  };
813
754
  }
814
- var st = /\{([\d,-]+)\}/;
815
- function ct(e) {
755
+ var nt = /\{([\d,-]+)\}/;
756
+ function rt(e) {
816
757
  if (!e) return null;
817
- let t = e.match(st);
758
+ let t = e.match(nt);
818
759
  return t ? t[1].split(",").flatMap((e) => {
819
760
  let t = e.split("-").map((e) => Number.parseInt(e, 10));
820
761
  return t.length === 1 ? [t[0]] : Array.from({ length: t[1] - t[0] + 1 }, (e, n) => t[0] + n);
821
762
  }) : null;
822
763
  }
823
- var lt = Symbol("highlighted-lines");
824
- function ut(e = {}) {
764
+ var it = Symbol("highlighted-lines");
765
+ function at(e = {}) {
825
766
  let { className: t = "highlighted", zeroIndexed: n = !1 } = e;
826
767
  return {
827
768
  name: "@shikijs/transformers:meta-highlight",
828
769
  line(e, r) {
829
770
  if (!this.options.meta?.__raw) return;
830
771
  let i = this.meta;
831
- i[lt] ??= ct(this.options.meta.__raw);
832
- let a = i[lt] ?? [], o = n ? r - 1 : r;
772
+ i[it] ??= rt(this.options.meta.__raw);
773
+ let a = i[it] ?? [], o = n ? r - 1 : r;
833
774
  return a.includes(o) && this.addClassToHast(e, t), e;
834
775
  }
835
776
  };
836
777
  }
837
- var dt = /[.*+?^${}()|[\]\\]/g;
838
- function ft(e) {
839
- return e.replace(dt, "\\$&");
778
+ var ot = /[.*+?^${}()|[\]\\]/g;
779
+ function st(e) {
780
+ return e.replace(ot, "\\$&");
840
781
  }
841
- function V(e = {}, t = "@shikijs/transformers:notation-map") {
782
+ function B(e = {}, t = "@shikijs/transformers:notation-map") {
842
783
  let { classMap: n = {}, classActivePre: r = void 0, classActiveCode: i = void 0 } = e;
843
- return ot(t, RegExp(`#?\\s*\\[!code (${Object.keys(n).map(ft).join("|")})(:\\d+)?\\]`, "gi"), function([e, t, a = ":1"], o, s, c, l) {
784
+ return tt(t, RegExp(`#?\\s*\\[!code (${Object.keys(n).map(st).join("|")})(:\\d+)?\\]`, "gi"), function([e, t, a = ":1"], o, s, c, l) {
844
785
  let u = Number.parseInt(a.slice(1), 10);
845
786
  for (let e = l; e < Math.min(l + u, c.length); e++) this.addClassToHast(c[e], n[t]);
846
787
  return r && this.addClassToHast(this.pre, r), i && this.addClassToHast(this.code, i), !0;
847
788
  }, e.matchAlgorithm);
848
789
  }
849
- function pt(e = {}) {
790
+ function ct(e = {}) {
850
791
  let { classLineAdd: t = "diff add", classLineRemove: n = "diff remove", classActivePre: r = "has-diff", classActiveCode: i } = e;
851
- return V({
792
+ return B({
852
793
  classMap: {
853
794
  "++": t,
854
795
  "--": n
@@ -858,31 +799,31 @@ function pt(e = {}) {
858
799
  matchAlgorithm: e.matchAlgorithm
859
800
  }, "@shikijs/transformers:notation-diff");
860
801
  }
861
- function mt(e = {}) {
802
+ function lt(e = {}) {
862
803
  let { classMap: t = {
863
804
  error: ["highlighted", "error"],
864
805
  warning: ["highlighted", "warning"],
865
806
  info: ["highlighted", "info"]
866
807
  }, classActivePre: n = "has-highlighted", classActiveCode: r } = e;
867
- return V({
808
+ return B({
868
809
  classMap: t,
869
810
  classActivePre: n,
870
811
  classActiveCode: r,
871
812
  matchAlgorithm: e.matchAlgorithm
872
813
  }, "@shikijs/transformers:notation-error-level");
873
814
  }
874
- function ht(e = {}) {
815
+ function ut(e = {}) {
875
816
  let { classActiveLine: t = "focused", classActivePre: n = "has-focused", classActiveCode: r } = e;
876
- return V({
817
+ return B({
877
818
  classMap: { focus: t },
878
819
  classActivePre: n,
879
820
  classActiveCode: r,
880
821
  matchAlgorithm: e.matchAlgorithm
881
822
  }, "@shikijs/transformers:notation-focus");
882
823
  }
883
- function gt(e = {}) {
824
+ function dt(e = {}) {
884
825
  let { classActiveLine: t = "highlighted", classActivePre: n = "has-highlighted", classActiveCode: r } = e;
885
- return V({
826
+ return B({
886
827
  classMap: {
887
828
  highlight: t,
888
829
  hl: t
@@ -894,42 +835,42 @@ function gt(e = {}) {
894
835
  }
895
836
  //#endregion
896
837
  //#region src/node/lib/render/highlight/language.ts
897
- var _t = [
838
+ var ft = [
898
839
  "shellscript",
899
840
  "shell",
900
841
  "bash",
901
842
  "sh",
902
843
  "zsh"
903
844
  ];
904
- function vt(e) {
905
- return _t.includes(e);
845
+ function pt(e) {
846
+ return ft.includes(e);
906
847
  }
907
- var yt = /^[a-zA-Z0-9-_]+/;
908
- function bt(e) {
909
- return yt.exec(e)?.[0] || "";
848
+ var mt = /^[a-zA-Z0-9-_]+/;
849
+ function ht(e) {
850
+ return mt.exec(e)?.[0] || "";
910
851
  }
911
852
  //#endregion
912
853
  //#region src/node/lib/render/highlight/index.ts
913
- var xt = new FinalizationRegistry((e) => {
854
+ var gt = new FinalizationRegistry((e) => {
914
855
  e();
915
- }), H = {
856
+ }), V = {
916
857
  light: "github-light",
917
858
  dark: "github-dark"
918
859
  };
919
- async function St() {
920
- let e = await we({
921
- themes: [H.light, H.dark],
860
+ async function _t() {
861
+ let e = await Te({
862
+ themes: [V.light, V.dark],
922
863
  langs: []
923
864
  }), t = [
924
- ut(),
925
- pt(),
926
- ht({
865
+ at(),
866
+ ct(),
867
+ ut({
927
868
  classActiveLine: "has-focus",
928
869
  classActivePre: "has-focused-lines"
929
870
  }),
930
- gt(),
931
- mt(),
932
- Ct(),
871
+ dt(),
872
+ lt(),
873
+ vt(),
933
874
  {
934
875
  name: "typedown:add-dir",
935
876
  pre(e) {
@@ -938,19 +879,19 @@ async function St() {
938
879
  }
939
880
  ], n = new Set(e.getLoadedLanguages());
940
881
  async function r(r, i, a) {
941
- let o = bt(i);
882
+ let o = ht(i);
942
883
  if (o) {
943
884
  let e = i;
944
885
  i = o.toLowerCase(), a = e.slice(i.length).replace(/(?<!=)\{/g, " {") + " " + a, a = a.trim().replace(/\s+/g, " ");
945
886
  }
946
887
  i ||= "txt";
947
888
  try {
948
- !Ee(i) && !n.has(i) && (await e.loadLanguage(i), n.add(i));
889
+ !De(i) && !n.has(i) && (await e.loadLanguage(i), n.add(i));
949
890
  } catch {
950
891
  ae.warn(`\nThe language '${i}' is not loaded, falling back to 'txt' for syntax highlighting.`), i = "txt";
951
892
  }
952
893
  r = r.trimEnd();
953
- let s = Te(r, i, e);
894
+ let s = Ee(r, i, e);
954
895
  return await e.loadLanguage(...s), e.codeToHtml(r, {
955
896
  lang: i,
956
897
  transformers: [...t, {
@@ -967,7 +908,7 @@ async function St() {
967
908
  }
968
909
  }],
969
910
  meta: { __raw: a },
970
- themes: H,
911
+ themes: V,
971
912
  defaultColor: !1,
972
913
  colorReplacements: {
973
914
  "github-light": {
@@ -992,13 +933,13 @@ async function St() {
992
933
  }
993
934
  });
994
935
  }
995
- return xt.register(r, () => e.dispose()), r;
936
+ return gt.register(r, () => e.dispose()), r;
996
937
  }
997
- function Ct() {
938
+ function vt() {
998
939
  return {
999
940
  name: "typedown:disable-shell-symbol-select",
1000
941
  tokens(e) {
1001
- if (vt(this.options.lang)) for (let t of e) {
942
+ if (pt(this.options.lang)) for (let t of e) {
1002
943
  if (t.length < 2) continue;
1003
944
  let e = t[0].content.trim();
1004
945
  (e === "$" || e === ">") && t[1].content[0] === " " && (t[0].content = e + " ", t[0].htmlStyle ??= {}, t[0].htmlStyle["user-select"] = "none", t[0].htmlStyle["-webkit-user-select"] = "none", t[1].content = t[1].content.slice(1));
@@ -1008,23 +949,23 @@ function Ct() {
1008
949
  }
1009
950
  //#endregion
1010
951
  //#region src/node/lib/render/postprocess.ts
1011
- var wt;
1012
- async function Tt(e) {
1013
- return e = await Ot(e), e = Mt(e), e;
952
+ var yt;
953
+ async function bt(e) {
954
+ return e = await Ct(e), e = Dt(e), e;
1014
955
  }
1015
- function Et() {
1016
- return wt ||= St(), wt;
956
+ function xt() {
957
+ return yt ||= _t(), yt;
1017
958
  }
1018
- var Dt = /<pre class="td-code-placeholder"([^>]*)><code>([\s\S]*?)<\/code><\/pre>/g;
1019
- function U(e, t) {
959
+ var St = /<pre class="td-code-placeholder"([^>]*)><code>([\s\S]*?)<\/code><\/pre>/g;
960
+ function H(e, t) {
1020
961
  return e.match(RegExp(`${t}="([^"]*)"`))?.[1];
1021
962
  }
1022
- async function Ot(e) {
1023
- let t = await Et(), n = [...e.matchAll(Dt)];
963
+ async function Ct(e) {
964
+ let t = await xt(), n = [...e.matchAll(St)];
1024
965
  if (n.length === 0) return e;
1025
966
  let r = await Promise.all(n.map(async (e) => {
1026
- let n = e[1], r = U(n, "data-lang") ?? "", i = U(n, "data-meta") ?? "", a = U(n, "data-title"), o = U(n, "data-line-numbers"), s = g(e[2]);
1027
- return kt(await t(s, r, i), r, {
967
+ let n = e[1], r = H(n, "data-lang") ?? "", i = H(n, "data-meta") ?? "", a = H(n, "data-title"), o = H(n, "data-line-numbers"), s = h(e[2]);
968
+ return wt(await t(s, r, i), r, {
1028
969
  title: a,
1029
970
  lineNumbers: o
1030
971
  });
@@ -1035,39 +976,39 @@ async function Ot(e) {
1035
976
  }
1036
977
  return i;
1037
978
  }
1038
- function kt(e, t, n) {
979
+ function wt(e, t, n) {
1039
980
  t ||= "txt";
1040
981
  let r = n.title ?? t.replace(/_/g, " "), i = ["language-" + t];
1041
982
  n.title && i.push("has-title"), n.lineNumbers !== void 0 && i.push("line-numbers-mode");
1042
- let a = `<div class="${i.join(" ")}"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">${h(r)}</span>` + e;
983
+ let a = `<div class="${i.join(" ")}"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">${m(r)}</span>` + e;
1043
984
  if (n.lineNumbers !== void 0) {
1044
985
  let e = parseInt(n.lineNumbers) || 1, t = a.slice(a.indexOf("<code>"), a.indexOf("</code>")).split("\n").length, r = [...Array(t)].map((t, n) => `<span class="line-number">${n + e}</span><br>`).join("");
1045
986
  a += `<div class="line-numbers-wrapper" aria-hidden="true">${r}</div>`;
1046
987
  }
1047
988
  return a += "</div>", a;
1048
989
  }
1049
- var At = /<span class="td-math-inline">([\s\S]*?)<\/span>/g, jt = /<div class="td-math-block">([\s\S]*?)<\/div>/g;
1050
- function Mt(e) {
1051
- return e = e.replace(At, (e, t) => Ft(t, !1)), e = e.replace(jt, (e, t) => Ft(t, !0)), e;
990
+ var Tt = /<span class="td-math-inline">([\s\S]*?)<\/span>/g, Et = /<div class="td-math-block">([\s\S]*?)<\/div>/g;
991
+ function Dt(e) {
992
+ return e = e.replace(Tt, (e, t) => At(t, !1)), e = e.replace(Et, (e, t) => At(t, !0)), e;
1052
993
  }
1053
- var Nt = /`([^`]+)`|\$([^$]+)\$/g;
1054
- function Pt(e) {
994
+ var Ot = /`([^`]+)`|\$([^$]+)\$/g;
995
+ function kt(e) {
1055
996
  let t = 0, n = "";
1056
- for (let r of e.matchAll(Nt)) {
1057
- if (n += h(e.slice(t, r.index)), r[1] !== void 0) n += `<code>${h(r[1])}</code>`;
997
+ for (let r of e.matchAll(Ot)) {
998
+ if (n += m(e.slice(t, r.index)), r[1] !== void 0) n += `<code>${m(r[1])}</code>`;
1058
999
  else if (r[2] !== void 0) try {
1059
1000
  n += ie.renderToString(r[2], { throwOnError: !1 });
1060
1001
  } catch {
1061
- n += h(r[0]);
1002
+ n += m(r[0]);
1062
1003
  }
1063
1004
  t = r.index + r[0].length;
1064
1005
  }
1065
- return n += h(e.slice(t)), n;
1006
+ return n += m(e.slice(t)), n;
1066
1007
  }
1067
- function Ft(e, t) {
1008
+ function At(e, t) {
1068
1009
  let n = t ? "div" : "span";
1069
1010
  try {
1070
- return ie.renderToString(g(e), {
1011
+ return ie.renderToString(h(e), {
1071
1012
  throwOnError: !1,
1072
1013
  displayMode: t
1073
1014
  });
@@ -1077,24 +1018,24 @@ function Ft(e, t) {
1077
1018
  }
1078
1019
  //#endregion
1079
1020
  //#region src/node/lib/render/vue.ts
1080
- async function W(e, t, n) {
1081
- let r = t.title || t.label || (m(n) ? S(n, (await e.getConfig()).siteTitle) : w(n));
1021
+ async function U(e, t, n) {
1022
+ let r = t.title || t.label || (p(n) ? S(n, (await e.getConfig()).siteTitle) : w(n));
1082
1023
  return {
1083
1024
  schema: t.schema,
1084
1025
  schemaLabel: t.schemaLabel,
1085
1026
  label: t.label,
1086
1027
  icon: t.icon,
1087
1028
  frontmatter: t.header ?? {},
1088
- headings: Lt(t.headings),
1029
+ headings: Mt(t.headings),
1089
1030
  title: r,
1090
- titleHtml: Pt(r),
1031
+ titleHtml: kt(r),
1091
1032
  filepath: n,
1092
1033
  fileMetadata: t.fileMetadata,
1093
1034
  seoMetadata: t.seoMetadata
1094
1035
  };
1095
1036
  }
1096
- async function It(e, t, n) {
1097
- let r = await Tt(t.content), i = await W(e, t, n), a = JSON.stringify(`@typedown/pages?resource=${encodeURIComponent(n)}`);
1037
+ async function jt(e, t, n) {
1038
+ let r = await bt(t.content), i = await U(e, t, n), a = JSON.stringify(`@typedown/pages?resource=${encodeURIComponent(n)}`);
1098
1039
  return {
1099
1040
  vueSrc: [
1100
1041
  "<script>",
@@ -1106,12 +1047,12 @@ async function It(e, t, n) {
1106
1047
  `import { pageData } from ${a}`,
1107
1048
  "useRouter().route.data = pageData",
1108
1049
  "<\/script>",
1109
- `<template><div class="typedown-content">\n${Rt(r)}\n</div></template>`
1050
+ `<template><div class="typedown-content">\n${Nt(r)}\n</div></template>`
1110
1051
  ].join("\n"),
1111
1052
  pageData: i
1112
1053
  };
1113
1054
  }
1114
- function Lt(e) {
1055
+ function Mt(e) {
1115
1056
  let t = [], n = [];
1116
1057
  for (let r of e) {
1117
1058
  let e = {
@@ -1127,17 +1068,17 @@ function Lt(e) {
1127
1068
  }
1128
1069
  return t;
1129
1070
  }
1130
- function Rt(e) {
1071
+ function Nt(e) {
1131
1072
  return e.replaceAll("{{", "&#123;&#123;").replaceAll("}}", "&#125;&#125;");
1132
1073
  }
1133
1074
  //#endregion
1134
1075
  //#region src/node/plugin/vite/constants.ts
1135
- var zt = "@typedown/app", Bt = "\0@typedown/app", G = "@typedown/pages", Vt = "\0" + G;
1136
- G + "";
1137
- var K = "\0@typedown/pages?resource=", q = "@typedown/site-data", Ht = "\0@typedown/site-data", J = "@typedown/search-index", Ut = "\0@typedown/search-index", Y = "@typedown/theme", Wt = "\0@typedown/theme", X = "typedown:page-data";
1076
+ var Pt = "@typedown/app", Ft = "\0@typedown/app", W = "@typedown/pages", It = "\0" + W;
1077
+ W + "";
1078
+ var G = "\0@typedown/pages?resource=", K = "@typedown/site-data", Lt = "\0@typedown/site-data", q = "@typedown/search-index", Rt = "\0@typedown/search-index", J = "@typedown/theme", zt = "\0@typedown/theme", Y = "typedown:page-data";
1138
1079
  //#endregion
1139
1080
  //#region src/node/plugin/vite/virtual/utils.ts
1140
- function Z(e, t) {
1081
+ function X(e, t) {
1141
1082
  let n = e.moduleGraph.getModuleById(t);
1142
1083
  if (n) {
1143
1084
  e.moduleGraph.invalidateModule(n);
@@ -1154,11 +1095,16 @@ function Z(e, t) {
1154
1095
  }
1155
1096
  //#endregion
1156
1097
  //#region src/node/plugin/vite/virtual/app.ts
1157
- var Gt = class {
1098
+ var Bt = class {
1099
+ mountPath;
1100
+ constructor(e = "") {
1101
+ this.mountPath = e;
1102
+ }
1158
1103
  async load(e) {
1159
1104
  let t = await (await e.getTdContext()).getConfig(), n = await I(t.components, e.root);
1160
1105
  return Re({
1161
1106
  rootDir: t.rootDir,
1107
+ mountPath: this.mountPath,
1162
1108
  basePath: t.basePath,
1163
1109
  origin: t.origin ?? void 0,
1164
1110
  lang: t.lang,
@@ -1170,40 +1116,44 @@ var Gt = class {
1170
1116
  nav: t.nav,
1171
1117
  userComponents: n
1172
1118
  }, {
1173
- theme: Y,
1174
- pages: G,
1175
- siteData: q,
1176
- searchIndex: J,
1177
- pageDataEvent: X
1119
+ theme: J,
1120
+ pages: W,
1121
+ siteData: K,
1122
+ searchIndex: q,
1123
+ pageDataEvent: Y
1178
1124
  });
1179
1125
  }
1180
1126
  invalidate(e) {
1181
- Z(e, Bt);
1127
+ X(e, Ft);
1128
+ }
1129
+ }, Vt = class {
1130
+ mountPath;
1131
+ constructor(e = "") {
1132
+ this.mountPath = e;
1182
1133
  }
1183
- }, Kt = class {
1184
1134
  async load(e) {
1185
- let t = (await e.getConfig()).rootDir ?? ".";
1186
- return `export const pages = import.meta.glob('${t === "." ? "/**/*.{td,md}" : `/${t}/**/*.{td,md}`}');`;
1135
+ let t = (await e.getConfig()).rootDir ?? ".", n = [this.mountPath, t === "." ? "" : t].filter(Boolean);
1136
+ return `export const pages = import.meta.glob('${0 < n.length ? `/${n.join("/")}/**/*.{td,md}` : "/**/*.{td,md}"}');`;
1187
1137
  }
1188
1138
  resolvePageData(e) {
1189
1139
  if (e.startsWith("@typedown/pages?resource=")) return "\0" + e;
1190
1140
  }
1191
1141
  isPageDataModule(e) {
1192
- return e.startsWith(K);
1142
+ return e.startsWith(G);
1193
1143
  }
1194
1144
  async loadPageData(e, t) {
1195
- let n = decodeURIComponent(e.slice(K.length)), r = await W(t, await t.getFile(n), n);
1145
+ let n = decodeURIComponent(e.slice(G.length)), r = await U(t, await t.getFile(n), n);
1196
1146
  return `export const pageData = ${JSON.stringify(r)}`;
1197
1147
  }
1198
1148
  invalidatePageData(e, t) {
1199
- Z(e, K + encodeURIComponent(t));
1149
+ X(e, G + encodeURIComponent(t));
1200
1150
  }
1201
1151
  sendPageData(e, t, n) {
1202
1152
  t.getFile(n).then(async (r) => {
1203
- let i = await W(t, r, n);
1153
+ let i = await U(t, r, n);
1204
1154
  e.hot.send({
1205
1155
  type: "custom",
1206
- event: X,
1156
+ event: Y,
1207
1157
  data: {
1208
1158
  filepath: n,
1209
1159
  pageData: i
@@ -1214,21 +1164,21 @@ var Gt = class {
1214
1164
  });
1215
1165
  }
1216
1166
  invalidate(e) {
1217
- Z(e, Vt);
1167
+ X(e, It);
1218
1168
  }
1219
- }, qt = class {
1169
+ }, Ht = class {
1220
1170
  async load(e) {
1221
1171
  return ze((await (await e.getTdContext()).getConfig()).layout ?? void 0, e.root);
1222
1172
  }
1223
1173
  invalidate(e) {
1224
- Z(e, Wt);
1174
+ X(e, zt);
1225
1175
  }
1226
- }, Jt = "\0@typedown/site-data", Yt = {
1176
+ }, Ut = "\0@typedown/site-data", Wt = {
1227
1177
  ready: !1,
1228
1178
  contentTree: { entries: [] },
1229
1179
  schemas: {},
1230
1180
  directoryListings: {}
1231
- }, Xt = class {
1181
+ }, Gt = class {
1232
1182
  data;
1233
1183
  scan(e) {
1234
1184
  let t = ye("**/*.td", {
@@ -1238,38 +1188,38 @@ var Gt = class {
1238
1188
  filepath: e,
1239
1189
  label: w(e),
1240
1190
  header: {}
1241
- })), n = y(t);
1191
+ })), n = v(t);
1242
1192
  this.data = {
1243
1193
  contentTree: n,
1244
1194
  schemas: {},
1245
- directoryListings: v(n.entries, "")
1195
+ directoryListings: _(n.entries, "")
1246
1196
  };
1247
1197
  }
1248
1198
  load(e) {
1249
1199
  let t = this.data ? {
1250
1200
  ready: !0,
1251
1201
  ...this.data
1252
- } : Yt;
1202
+ } : Wt;
1253
1203
  return `export default ${JSON.stringify(t)}`;
1254
1204
  }
1255
1205
  clear() {
1256
1206
  this.data = void 0;
1257
1207
  }
1258
- fetch = x((e, t) => {
1259
- Q(e).then((e) => {
1208
+ fetch = b((e, t) => {
1209
+ Kt(e).then((e) => {
1260
1210
  this.data = e, t && this.invalidate(t);
1261
1211
  }).catch((e) => {
1262
1212
  console.error("[typedown] Failed to fetch site data:", e instanceof Error ? e.message : e);
1263
1213
  });
1264
1214
  }, 200);
1265
1215
  async fetchSync(e) {
1266
- this.data = await Q(e);
1216
+ this.data = await Kt(e);
1267
1217
  }
1268
1218
  invalidate(e) {
1269
- Z(e, Jt);
1219
+ X(e, Ut);
1270
1220
  }
1271
1221
  };
1272
- async function Q(e) {
1222
+ async function Kt(e) {
1273
1223
  let [t, n, r] = await Promise.all([
1274
1224
  e.getConfig(),
1275
1225
  e.listSidebar(),
@@ -1277,21 +1227,21 @@ async function Q(e) {
1277
1227
  ]), i = await Promise.all(r.map(async (t) => [t, (await e.getSchema(t)).properties])), a = Object.fromEntries(i), o = n.map((e) => ({
1278
1228
  ...e,
1279
1229
  header: {}
1280
- })), s = y(o);
1230
+ })), s = v(o);
1281
1231
  return {
1282
1232
  contentTree: s,
1283
1233
  schemas: a,
1284
- directoryListings: v(s.entries, t.siteTitle)
1234
+ directoryListings: _(s.entries, t.siteTitle)
1285
1235
  };
1286
1236
  }
1287
1237
  //#endregion
1288
1238
  //#region src/node/lib/search-indexer/index.ts
1289
- var Zt = class {
1239
+ var qt = class {
1290
1240
  index;
1291
1241
  constructor() {
1292
1242
  this.index = new le({
1293
- fields: e,
1294
- storeFields: _
1243
+ fields: g,
1244
+ storeFields: x
1295
1245
  });
1296
1246
  }
1297
1247
  addAll(e) {
@@ -1310,19 +1260,19 @@ var Zt = class {
1310
1260
  };
1311
1261
  //#endregion
1312
1262
  //#region src/node/lib/search-indexer/scan.ts
1313
- function Qt(e, t) {
1314
- let n = nn(e), r = [];
1263
+ function Jt(e, t) {
1264
+ let n = Qt(e), r = [];
1315
1265
  for (let t of n) {
1316
- let n = tn(e, t);
1266
+ let n = Zt(e, t);
1317
1267
  n && r.push(n);
1318
1268
  }
1319
1269
  t.addAll(r);
1320
1270
  }
1321
- function $t(e, t, r) {
1322
- let i = tn(e, A(e, t));
1323
- i ? r.addPage(i) : r.discardPage(n(t));
1271
+ function Yt(e, n, r) {
1272
+ let i = Zt(e, A(e, n));
1273
+ i ? r.addPage(i) : r.discardPage(t(n));
1324
1274
  }
1325
- function en(e, t) {
1275
+ function Xt(e, t) {
1326
1276
  let n = w(e);
1327
1277
  if (!t.startsWith("---")) return {
1328
1278
  title: n,
@@ -1339,22 +1289,22 @@ function en(e, t) {
1339
1289
  body: a
1340
1290
  };
1341
1291
  }
1342
- function tn(e, t) {
1292
+ function Zt(e, n) {
1343
1293
  let r;
1344
1294
  try {
1345
- r = be(t, "utf-8");
1295
+ r = be(n, "utf-8");
1346
1296
  } catch {
1347
1297
  return;
1348
1298
  }
1349
1299
  if (!r.trim()) return;
1350
- let i = t.slice(e.length + 1), { title: a, body: o } = en(i, r);
1300
+ let i = n.slice(e.length + 1), { title: a, body: o } = Xt(i, r);
1351
1301
  return {
1352
- id: n(i),
1302
+ id: t(i),
1353
1303
  title: a,
1354
1304
  text: `${a}\n${o}`
1355
1305
  };
1356
1306
  }
1357
- function nn(e) {
1307
+ function Qt(e) {
1358
1308
  return ye("**/*.td", {
1359
1309
  cwd: e,
1360
1310
  exclude: (e) => e.startsWith("_")
@@ -1362,33 +1312,33 @@ function nn(e) {
1362
1312
  }
1363
1313
  //#endregion
1364
1314
  //#region src/node/plugin/vite/virtual/search-index.ts
1365
- var rn = "\0@typedown/search-index", an = class {
1366
- indexer = new Zt();
1315
+ var $t = "\0@typedown/search-index", en = class {
1316
+ indexer = new qt();
1367
1317
  load(e) {
1368
1318
  return `export default ${JSON.stringify(this.indexer.serialize())}`;
1369
1319
  }
1370
1320
  index(e) {
1371
- Qt(e, this.indexer);
1321
+ Jt(e, this.indexer);
1372
1322
  }
1373
1323
  reindex(e, t) {
1374
- $t(e, t, this.indexer);
1324
+ Yt(e, t, this.indexer);
1375
1325
  }
1376
1326
  invalidate(e) {
1377
- Z(e, rn);
1327
+ X(e, $t);
1378
1328
  }
1379
- }, on = De(import.meta.url);
1380
- function sn() {
1329
+ }, tn = Se(import.meta.url);
1330
+ function nn() {
1381
1331
  return [{
1382
1332
  find: "vue/server-renderer",
1383
- replacement: on.resolve("vue/server-renderer")
1333
+ replacement: tn.resolve("vue/server-renderer")
1384
1334
  }, {
1385
1335
  find: "vue",
1386
- replacement: on.resolve("vue/dist/vue.runtime.esm-bundler.js")
1336
+ replacement: tn.resolve("vue/dist/vue.runtime.esm-bundler.js")
1387
1337
  }];
1388
1338
  }
1389
1339
  //#endregion
1390
1340
  //#region src/node/plugin/vite/middleware/vault-assets.ts
1391
- var cn = {
1341
+ var rn = {
1392
1342
  jpg: "image/jpeg",
1393
1343
  jpeg: "image/jpeg",
1394
1344
  png: "image/png",
@@ -1406,50 +1356,145 @@ var cn = {
1406
1356
  woff: "font/woff",
1407
1357
  ttf: "font/ttf"
1408
1358
  };
1409
- function ln(e, n) {
1410
- return (i, a, o) => {
1411
- if (!i.url || i.method !== "GET" || a.writableEnded) return o();
1412
- let c = t(i.url);
1413
- if (c.startsWith("/@") || c.startsWith("/node_modules")) return o();
1414
- let l = r(n.basePath), u = (l && c.startsWith(l) ? c.slice(l.length) : c).replace(/^\//, ""), d = A(e.config.root, n.rootDirectory, u);
1359
+ function an(t, r) {
1360
+ return (i, o, s) => {
1361
+ if (!i.url || i.method !== "GET" || o.writableEnded) return s();
1362
+ let c = e(i.url);
1363
+ if (c.startsWith("/@") || c.startsWith("/node_modules")) return s();
1364
+ let l = n(r.basePath), u = (l && c.startsWith(l) ? c.slice(l.length) : c).replace(/^\//, ""), d = A(t.config.root, r.rootDirectory, u);
1415
1365
  if (ve(d)) try {
1416
1366
  let e = xe(d);
1417
1367
  if (e.isFile()) {
1418
- let t = cn[s(d).slice(1).toLowerCase()] ?? "application/octet-stream";
1419
- a.setHeader("Content-Type", t), a.setHeader("Content-Length", e.size), _e(d).pipe(a);
1368
+ let t = rn[a(d).slice(1).toLowerCase()] ?? "application/octet-stream";
1369
+ o.setHeader("Content-Type", t), o.setHeader("Content-Length", e.size), _e(d).pipe(o);
1420
1370
  return;
1421
1371
  }
1422
1372
  } catch {}
1423
- o();
1373
+ s();
1424
1374
  };
1425
1375
  }
1426
1376
  //#endregion
1427
1377
  //#region src/node/plugin/vite/middleware/virtual-html.ts
1428
- function un(e, n, i) {
1378
+ function on(t, r, i) {
1429
1379
  return (a, o, s) => {
1430
1380
  if (!a.url) return s();
1431
- let c = r(t(a.url)), l = r(i.basePath);
1381
+ let c = n(e(a.url)), l = n(i.basePath);
1432
1382
  if (c.startsWith("/@") || c.startsWith("/node_modules") || !c.startsWith(l)) return s();
1433
1383
  let u = c.slice(l.length);
1434
1384
  if (u.startsWith("/@") || u.startsWith("/node_modules") || c.includes(".") && !c.endsWith("/index.html")) return s();
1435
- n.getConfig().then(async (t) => {
1436
- let n = await e.transformIndexHtml(a.url ?? "", dn(i, t));
1385
+ r.getConfig().then(async (e) => {
1386
+ let n = await t.transformIndexHtml(a.url ?? "", sn(i, e));
1437
1387
  o.setHeader("Content-Type", "text/html"), o.end(n);
1438
1388
  }).catch(() => s());
1439
1389
  };
1440
1390
  }
1441
- function dn(e, t) {
1391
+ function sn(e, t) {
1442
1392
  return e.devHtml === void 0 && (e.devHtml = ne({
1443
1393
  title: t.siteTitle,
1444
1394
  description: t.siteDescription,
1445
1395
  base: "/",
1446
- entryScript: zt
1396
+ entryScript: Pt
1447
1397
  })), e.devHtml;
1448
1398
  }
1449
1399
  //#endregion
1450
- //#region src/node/plugin/vite/subplugins/component-contract.ts
1451
- var fn = ".typedown/components.json";
1400
+ //#region src/node/lib/prop-schema.ts
1401
+ function cn(e, t, n) {
1402
+ let r = {};
1403
+ for (let i of e) {
1404
+ let e = `./${k.relative(t, i.absolutePath)}`;
1405
+ try {
1406
+ let t = n.getComponentMeta(i.absolutePath), a = {}, o = !1;
1407
+ for (let e of t.props) {
1408
+ if (e.global) continue;
1409
+ let t = Z(e.schema);
1410
+ if (t !== void 0) {
1411
+ let n = { schema: e.required ? t : u(t) };
1412
+ e.description && (n.description = e.description), a[e.name] = n, o = !0;
1413
+ }
1414
+ }
1415
+ let s = t.slots.map((e) => e.name).filter((e) => e !== "default");
1416
+ r[i.name] = {
1417
+ source: e,
1418
+ props: o ? a : void 0,
1419
+ slots: 0 < s.length ? s : void 0
1420
+ };
1421
+ } catch {
1422
+ r[i.name] = { source: e };
1423
+ }
1424
+ }
1425
+ return r;
1426
+ }
1427
+ function ln(e) {
1428
+ if (!e || e.length !== 1) return;
1429
+ let t = Z(e[0]);
1430
+ return t === void 0 ? void 0 : {
1431
+ type: "array",
1432
+ items: t
1433
+ };
1434
+ }
1435
+ function un(e, t) {
1436
+ if (t && 0 < Object.keys(t).length) return fn(t);
1437
+ let n = /^(?:Record<string,\s*(\w+)>|\{\s*\[key:\s*string\]:\s*(\w+);\s*\})$/.exec(e);
1438
+ if (!n) return;
1439
+ let r = dn(n[1] ?? n[2]);
1440
+ return r === void 0 ? void 0 : {
1441
+ type: "object",
1442
+ additionalProperties: r
1443
+ };
1444
+ }
1445
+ function dn(e) {
1446
+ switch (e) {
1447
+ case "string": return { type: "string" };
1448
+ case "number": return { type: "number" };
1449
+ case "boolean": return { type: "boolean" };
1450
+ default: return;
1451
+ }
1452
+ }
1453
+ function fn(e) {
1454
+ let t = {}, n = [];
1455
+ for (let [r, i] of Object.entries(e)) {
1456
+ let e = Z(i.schema);
1457
+ if (e === void 0) return;
1458
+ t[r] = e, i.required && n.push(r);
1459
+ }
1460
+ let r = {
1461
+ type: "object",
1462
+ properties: t,
1463
+ additionalProperties: !1
1464
+ };
1465
+ return 0 < n.length && (r.required = n), r;
1466
+ }
1467
+ function Z(e) {
1468
+ if (typeof e == "string") return dn(e);
1469
+ switch (e.kind) {
1470
+ case "enum": return pn(e.schema);
1471
+ case "array": return ln(e.schema);
1472
+ case "object": return un(e.type, e.schema);
1473
+ default: return;
1474
+ }
1475
+ }
1452
1476
  function pn(e) {
1477
+ let t = e ?? [], n = t.some((e) => e === "undefined" || e === "null"), r = t.filter((e) => e !== "undefined" && e !== "null");
1478
+ if (r.length !== 0) {
1479
+ if (r.length === 1) {
1480
+ let e = Z(r[0]);
1481
+ return e === void 0 ? void 0 : n ? u(e) : e;
1482
+ }
1483
+ if (r.every((e) => typeof e == "object" && e.kind === "literal")) {
1484
+ let e = [];
1485
+ for (let t of r) {
1486
+ if (typeof t == "string" || !("value" in t)) return;
1487
+ e.push(t.value);
1488
+ }
1489
+ let t = { enum: e };
1490
+ return n ? u(t) : t;
1491
+ }
1492
+ }
1493
+ }
1494
+ //#endregion
1495
+ //#region src/node/plugin/vite/subplugins/component-contract.ts
1496
+ var mn = ".typedown/components.json";
1497
+ function hn(e) {
1453
1498
  return {
1454
1499
  name: "vite-plugin-typedown-component-contract",
1455
1500
  async buildStart() {
@@ -1462,35 +1507,51 @@ function pn(e) {
1462
1507
  let n = e();
1463
1508
  n && n.getTdContext().then(async (e) => {
1464
1509
  let r = await e.getConfig(), i = await I(r.components, n.root);
1465
- $(n.root, i), mn(t, r.components, n.root);
1510
+ $(n.root, i), gn(t, r.components, n.root);
1466
1511
  }).catch(() => {});
1467
1512
  }
1468
1513
  };
1469
1514
  }
1470
- function mn(e, t, n) {
1515
+ function gn(e, t, n) {
1471
1516
  let r = new Set(t.filter((e) => e.kind === "explicit").map((e) => M(k.resolve(n, e.source)))), i = new Set(t.filter((e) => e.kind === "dir").map((e) => M(k.resolve(n, e.path))));
1472
1517
  for (let t of i) e.watcher.add(t);
1473
1518
  let a = (a) => {
1474
- hn(a, r, i) && (e.config.logger.info("[typedown] component changed, rebuilding contract..."), I(t, n).then((e) => $(n, e)).catch(() => {}));
1519
+ _n(a, r, i) && (e.config.logger.info("[typedown] component changed, rebuilding contract..."), I(t, n).then((e) => $(n, e)).catch(() => {}));
1475
1520
  };
1476
1521
  e.watcher.on("change", a), e.watcher.on("add", a), e.watcher.on("unlink", a);
1477
1522
  }
1478
- function hn(e, t, n) {
1523
+ function _n(e, t, n) {
1479
1524
  if (!e.endsWith(".vue")) return !1;
1480
1525
  let r = M(e);
1481
1526
  if (t.has(r)) return !0;
1482
1527
  for (let e of n) if (r.startsWith(e + "/")) return !0;
1483
1528
  return !1;
1484
1529
  }
1530
+ function vn() {
1531
+ try {
1532
+ let e = k.dirname(me(import.meta.url)), t = k.resolve(e, "builtin-components.json"), n = JSON.parse(P.readFileSync(t, "utf-8"));
1533
+ for (let e of Object.values(n)) if (typeof e == "object" && e && "source" in e) {
1534
+ let t = e;
1535
+ typeof t.source == "string" && t.source.startsWith("./") && (t.source = `typerighter/${t.source.slice(2)}`);
1536
+ }
1537
+ return n;
1538
+ } catch {
1539
+ return {};
1540
+ }
1541
+ }
1542
+ var Q = vn();
1485
1543
  function $(e, t) {
1486
- if (t.length === 0) return;
1487
- let n = Be(t, e), r = k.join(e, fn);
1488
- P.mkdirSync(k.dirname(r), { recursive: !0 }), P.writeFileSync(r, JSON.stringify(n, null, 2));
1544
+ if (!(0 < Object.keys(Q).length) && t.length === 0) return;
1545
+ let n = 0 < t.length ? cn(t, e, Be(e)) : {}, r = {
1546
+ ...Q,
1547
+ ...n
1548
+ }, i = k.join(e, mn);
1549
+ P.mkdirSync(k.dirname(i), { recursive: !0 }), P.writeFileSync(i, JSON.stringify(r, null, 2));
1489
1550
  }
1490
1551
  //#endregion
1491
1552
  //#region src/node/plugin/vite/index.ts
1492
- function gn(e = {}) {
1493
- let t = e.context, n, r, i, o = new Gt(), s = new qt(), c = new Kt(), u = new Xt(), d = new an(), f = {
1553
+ function yn(e = {}) {
1554
+ let t = e.context, n, i, a, o = new Bt(e.root ?? ""), s = new Ht(), l = new Vt(e.root ?? ""), u = new Gt(), d = new en(), f = {
1494
1555
  devHtml: void 0,
1495
1556
  basePath: "/",
1496
1557
  rootDirectory: "vault"
@@ -1507,7 +1568,7 @@ function gn(e = {}) {
1507
1568
  let r = e.root ? A(n.root ?? process.cwd(), e.root) : ce(n.root ?? process.cwd());
1508
1569
  t = se(r);
1509
1570
  }
1510
- i = n.base ?? "/";
1571
+ a = n.base ?? "/";
1511
1572
  let r = await (await p()).getConfig();
1512
1573
  return {
1513
1574
  base: n.base ?? r.basePath,
@@ -1516,38 +1577,38 @@ function gn(e = {}) {
1516
1577
  port: n.server?.port ?? 8686,
1517
1578
  strictPort: n.server?.strictPort ?? !1
1518
1579
  },
1519
- resolve: { alias: sn() },
1580
+ resolve: { alias: nn() },
1520
1581
  ssr: { noExternal: ["typerighter"] }
1521
1582
  };
1522
1583
  },
1523
1584
  configResolved(e) {
1524
- r = A(e.root, e.build.outDir);
1585
+ i = A(e.root, e.build.outDir);
1525
1586
  },
1526
1587
  async buildStart() {
1527
1588
  if (n) return;
1528
1589
  let e = await p(), t = await e.getConfig(), r = A(t.rootDir);
1529
1590
  d.index(r), await u.fetchSync(e);
1530
1591
  let i = await e.checkVault();
1531
- if (xn(i.diagnostics), 0 < i.errorCount) {
1592
+ if (wn(i.diagnostics), 0 < i.errorCount) {
1532
1593
  let e = i.diagnostics.filter((e) => e.severity === "error").map((e) => ` ${e.filepath}:${e.line}:${e.column} - ${e.message} (${e.code})`);
1533
1594
  this.error(`Vault check failed with ${i.errorCount} error(s):\n${e.join("\n")}`);
1534
1595
  }
1535
1596
  },
1536
1597
  resolveId(e) {
1537
- if (e === "/@typedown/app" || e === "@typedown/app") return Bt;
1538
- if (e === "@typedown/pages") return Vt;
1539
- if (e.startsWith("@typedown/pages?resource=")) return c.resolvePageData(e);
1540
- if (e === "@typedown/site-data") return Ht;
1541
- if (e === "@typedown/search-index") return Ut;
1542
- if (e === "@typedown/theme") return Wt;
1598
+ if (e === "/@typedown/app" || e === "@typedown/app") return Ft;
1599
+ if (e === "@typedown/pages") return It;
1600
+ if (e.startsWith("@typedown/pages?resource=")) return l.resolvePageData(e);
1601
+ if (e === "@typedown/site-data") return Lt;
1602
+ if (e === "@typedown/search-index") return Rt;
1603
+ if (e === "@typedown/theme") return zt;
1543
1604
  },
1544
1605
  async load(e) {
1545
- if (c.isPageDataModule(e)) return c.loadPageData(e, await p());
1606
+ if (l.isPageDataModule(e)) return l.loadPageData(e, await p());
1546
1607
  if (e !== "\0@typedown/search-index" && e !== "\0@typedown/site-data" && e !== "\0@typedown/pages" && e !== "\0@typedown/app" && e !== "\0@typedown/theme") return;
1547
1608
  let n = await p();
1548
1609
  if (e === "\0@typedown/search-index") return d.load(n);
1549
1610
  if (e === "\0@typedown/site-data") return u.load(n);
1550
- if (e === "\0@typedown/pages") return c.load(n);
1611
+ if (e === "\0@typedown/pages") return l.load(n);
1551
1612
  if (e === "\0@typedown/app") return o.load(t);
1552
1613
  if (e === "\0@typedown/theme") return s.load(t);
1553
1614
  },
@@ -1556,11 +1617,11 @@ function gn(e = {}) {
1556
1617
  let t = await p(), r = await t.getConfig(), i = A(r.rootDir);
1557
1618
  d.index(i), u.scan(i), u.fetch(t, n), e.httpServer?.once("listening", async () => {
1558
1619
  let e = await t.checkVault();
1559
- 0 < e.diagnostics.length && (console.error(""), xn(e.diagnostics));
1620
+ 0 < e.diagnostics.length && (console.error(""), wn(e.diagnostics));
1560
1621
  }), t.rpc.onConfigChanged(() => {
1561
- n && (f.devHtml = void 0, u.clear(), o.invalidate(n), s.invalidate(n), c.invalidate(n), vn(n), u.fetch(t, n));
1622
+ n && (f.devHtml = void 0, u.clear(), o.invalidate(n), s.invalidate(n), l.invalidate(n), xn(n), u.fetch(t, n));
1562
1623
  }), t.rpc.onComponentContractChanged(() => {
1563
- n && (o.invalidate(n), vn(n));
1624
+ n && (o.invalidate(n), xn(n));
1564
1625
  });
1565
1626
  function a(...e) {
1566
1627
  n && t.getConfig().then((t) => {
@@ -1569,8 +1630,8 @@ function gn(e = {}) {
1569
1630
  for (let i of e) {
1570
1631
  let e = M(A(n.config.root, t.rootDir, i)), a = n.moduleGraph.getModulesByFile(e);
1571
1632
  if (a?.size) {
1572
- for (let e of a) n.moduleGraph.invalidateModule(e), r.push(bn(e));
1573
- c.invalidatePageData(n, i);
1633
+ for (let e of a) n.moduleGraph.invalidateModule(e), r.push(Cn(e));
1634
+ l.invalidatePageData(n, i);
1574
1635
  }
1575
1636
  }
1576
1637
  0 < r.length && n.hot.send({
@@ -1580,29 +1641,29 @@ function gn(e = {}) {
1580
1641
  }).catch(() => {});
1581
1642
  }
1582
1643
  t.rpc.onContentUpdated(({ filepath: e, affectedFiles: r = [] }) => {
1583
- n && (d.reindex(i, e), d.invalidate(n), c.invalidate(n), u.fetch(t, n), a(e, ...r), c.sendPageData(n, t, e));
1644
+ n && (d.reindex(i, e), d.invalidate(n), l.invalidate(n), u.fetch(t, n), a(e, ...r), l.sendPageData(n, t, e));
1584
1645
  }), t.rpc.onContentDeleted(({ filepath: e }) => {
1585
- n && (d.reindex(i, e), d.invalidate(n), c.invalidate(n), u.fetch(t, n), a(e));
1646
+ n && (d.reindex(i, e), d.invalidate(n), l.invalidate(n), u.fetch(t, n), a(e));
1586
1647
  });
1587
- function l() {
1588
- n && (u.clear(), yn(n), u.fetch(t, n));
1648
+ function c() {
1649
+ n && (u.clear(), Sn(n), u.fetch(t, n));
1589
1650
  }
1590
- t.rpc.onSchemaUpdated(l), t.rpc.onSchemaDeleted(l);
1651
+ t.rpc.onSchemaUpdated(c), t.rpc.onSchemaDeleted(c);
1591
1652
  let m = await t.getConfig();
1592
1653
  f.basePath = m.basePath, f.rootDirectory = m.rootDir, t.rpc.onConfigChanged((e) => {
1593
1654
  f.basePath = e.basePath, f.rootDirectory = e.rootDir, f.devHtml = void 0;
1594
- }), e.middlewares.use(ln(e, f)), e.middlewares.use(un(e, t, f));
1655
+ }), e.middlewares.use(an(e, f)), e.middlewares.use(on(e, t, f));
1595
1656
  },
1596
1657
  async transform(e, t) {
1597
1658
  let n = t.split("?")[0];
1598
- if (!l(n)) return;
1659
+ if (!c(n)) return;
1599
1660
  if (T(n)) return {
1600
- code: `<script>import theme from '${Y}'; import { TdNotFound } from 'typerighter/client/theme-default'; export default theme.NotFound || TdNotFound; export const pageData = { frontmatter: {}, headings: [], title: '' };<\/script>`,
1661
+ code: `<script>import theme from '${J}'; import { TdNotFound } from 'typerighter/client/theme-default'; export default theme.NotFound || TdNotFound; export const pageData = { frontmatter: {}, headings: [], title: '' };<\/script>`,
1601
1662
  map: null
1602
1663
  };
1603
- let r = await p(), i = await r.getConfig(), o = a(n, i.rootDir);
1664
+ let i = await p(), a = await i.getConfig(), o = r(n, a.rootDir);
1604
1665
  try {
1605
- let { vueSrc: e } = await It(r, await r.getFile(o), o);
1666
+ let { vueSrc: e } = await jt(i, await i.getFile(o), o);
1606
1667
  return {
1607
1668
  code: e,
1608
1669
  map: null
@@ -1614,13 +1675,13 @@ function gn(e = {}) {
1614
1675
  }
1615
1676
  },
1616
1677
  handleHotUpdate({ file: e }) {
1617
- if (l(e)) return [];
1678
+ if (c(e)) return [];
1618
1679
  },
1619
1680
  async closeBundle() {
1620
1681
  if (!e.context && t) try {
1621
- let e = (await (await t.getTdContext()).getConfig()).basePath, n = e.startsWith(i) ? e.slice(i.length) : e.replace(/^\//, "");
1622
- await Je(t, {
1623
- outDir: A(r, n),
1682
+ let e = (await (await t.getTdContext()).getConfig()).basePath, n = e.startsWith(a) ? e.slice(a.length) : e.replace(/^\//, "");
1683
+ await Ue(t, {
1684
+ outDir: A(i, n),
1624
1685
  base: e
1625
1686
  });
1626
1687
  } finally {
@@ -1633,26 +1694,26 @@ function gn(e = {}) {
1633
1694
  });
1634
1695
  return [
1635
1696
  m,
1636
- pn(() => t),
1697
+ hn(() => t),
1637
1698
  h,
1638
1699
  ...ue()
1639
1700
  ];
1640
1701
  }
1641
- function _n(e) {
1702
+ function bn(e) {
1642
1703
  return [...e.moduleGraph.idToModuleMap.entries()].filter(([e]) => e.endsWith(".td")).map(([, e]) => e);
1643
1704
  }
1644
- function vn(e) {
1645
- for (let t of _n(e)) e.moduleGraph.invalidateModule(t);
1705
+ function xn(e) {
1706
+ for (let t of bn(e)) e.moduleGraph.invalidateModule(t);
1646
1707
  e.hot.send({ type: "full-reload" });
1647
1708
  }
1648
- function yn(e) {
1649
- let t = _n(e).map((t) => (e.moduleGraph.invalidateModule(t), bn(t)));
1709
+ function Sn(e) {
1710
+ let t = bn(e).map((t) => (e.moduleGraph.invalidateModule(t), Cn(t)));
1650
1711
  0 < t.length && e.hot.send({
1651
1712
  type: "update",
1652
1713
  updates: t
1653
1714
  });
1654
1715
  }
1655
- function bn(e) {
1716
+ function Cn(e) {
1656
1717
  return {
1657
1718
  type: "js-update",
1658
1719
  path: e.url,
@@ -1660,11 +1721,11 @@ function bn(e) {
1660
1721
  timestamp: Date.now()
1661
1722
  };
1662
1723
  }
1663
- function xn(e) {
1724
+ function wn(e) {
1664
1725
  for (let t of e) {
1665
1726
  let e = `${t.filepath}:${t.line}:${t.column}`, n = t.severity === "error" ? j.red("error") : j.yellow("warn");
1666
1727
  console.error(` ${n} ${e} ${t.message} ${j.dim(`(${t.code})`)}`);
1667
1728
  }
1668
1729
  }
1669
1730
  //#endregion
1670
- export { q as a, J as i, G as n, Y as o, X as r, Je as s, gn as t };
1731
+ export { K as a, q as i, W as n, J as o, Y as r, Ue as s, yn as t };