typerighter 0.57.0 → 0.57.1

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.
@@ -1,18 +1,18 @@
1
- import { $ as e, B as t, D as n, F as r, H as i, I as a, O as o, R as s, T as c, U as l, Z as u, _ as d, b as f, c as p, d as m, et as h, g, h as _, i as v, nt as y, p as b, q as x, rt as S, v as C, x as w, y as T, z as E } from "./shared-dB08amQA.js";
2
- import { n as D, t as O } from "./page-BreMA8X5.js";
3
- import { t as k } from "./temml-CjI4drVW.js";
4
- import { a as ee, i as te, n as ne, r as re } from "./context-CPrHBM3S.js";
1
+ import { B as e, D as t, F as n, H as r, I as i, O as a, R as o, T as s, U as c, Z as l, _ as u, b as d, c as f, d as p, et as m, g as h, h as g, i as _, nt as v, p as y, q as b, rt as x, v as S, x as ee, y as C, z as w } from "./shared-dB08amQA.js";
2
+ import { n as T, t as E } from "./page-BbSO0VG8.js";
3
+ import { t as D } from "./temml-CjI4drVW.js";
4
+ import { a as O, i as te, n as ne, r as re } from "./context-CPrHBM3S.js";
5
5
  import { t as ie } from "./es-B_QJMowB.js";
6
- import A, { resolve as j } from "node:path";
7
- import M from "picocolors";
6
+ import k, { resolve as A } from "node:path";
7
+ import j from "picocolors";
8
8
  import ae from "@tailwindcss/vite";
9
9
  import oe from "@vitejs/plugin-vue";
10
- import { build as se, normalizePath as N } from "vite";
11
- import P, { readdir as ce } from "node:fs/promises";
10
+ import { build as se, normalizePath as M } from "vite";
11
+ import N, { readdir as ce } from "node:fs/promises";
12
12
  import { fileURLToPath as le } from "node:url";
13
13
  import ue from "node:os";
14
14
  import { Worker as de } from "node:worker_threads";
15
- import F, { createReadStream as fe, existsSync as pe, globSync as me, readFileSync as he, statSync as ge } from "node:fs";
15
+ import P, { createReadStream as fe, existsSync as pe, globSync as me, readFileSync as he, statSync as ge } from "node:fs";
16
16
  import { createRequire as _e } from "node:module";
17
17
  import { createChecker as ve, createCheckerByJson as ye } from "vue-component-meta";
18
18
  import { createHighlighter as be, guessEmbeddedLanguages as xe, isSpecialLang as Se } from "shiki";
@@ -62,13 +62,13 @@ var Ce = class {
62
62
  }
63
63
  };
64
64
  // src/node/build/seo/sitemap.ts
65
- function we(e, t, n, i) {
66
- let a = n ?? "";
65
+ function we(e, t, r, i) {
66
+ let a = r ?? "";
67
67
  return `<?xml version="1.0" encoding="UTF-8"?>
68
68
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
69
69
  ${e.map((e) => {
70
- let n = p(a + t + r(e)), o = i?.get(e);
71
- return ` <url><loc>${n}</loc>${o === void 0 ? "" : `<lastmod>${v(o * 1e3)}</lastmod>`}</url>`;
70
+ let r = f(a + t + n(e)), o = i?.get(e);
71
+ return ` <url><loc>${r}</loc>${o === void 0 ? "" : `<lastmod>${_(o * 1e3)}</lastmod>`}</url>`;
72
72
  }).join("\n")}
73
73
  </urlset>
74
74
  `;
@@ -81,13 +81,13 @@ Sitemap: ${e}${t}sitemap.xml
81
81
  `;
82
82
  }
83
83
  // src/node/build/seo/feed.ts
84
- function Ee(e, t, n, r, a, o) {
84
+ function Ee(e, t, n, i, a, o) {
85
85
  let s = [...e].filter((e) => e.fileMetadata.mtimeSecs > 0).sort((e, t) => t.fileMetadata.mtimeSecs - e.fileMetadata.mtimeSecs).slice(0, 50).map((e) => {
86
- let r = i(e.filepath), a = `${n}${t}${r}`, o = (/* @__PURE__ */ new Date(e.fileMetadata.mtimeSecs * 1e3)).toUTCString(), s = p(e.label ?? r), c = e.excerpt === void 0 ? "" : `<![CDATA[${e.excerpt}]]>`;
86
+ let i = r(e.filepath), a = `${n}${t}${i}`, o = (/* @__PURE__ */ new Date(e.fileMetadata.mtimeSecs * 1e3)).toUTCString(), s = f(e.label ?? i), c = e.excerpt === void 0 ? "" : `<![CDATA[${e.excerpt}]]>`;
87
87
  return ` <item>
88
88
  <title>${s}</title>
89
- <link>${p(a)}</link>
90
- <guid>${p(a)}</guid>
89
+ <link>${f(a)}</link>
90
+ <guid>${f(a)}</guid>
91
91
  <pubDate>${o}</pubDate>
92
92
  <description>${c}</description>
93
93
  </item>`;
@@ -95,11 +95,11 @@ function Ee(e, t, n, r, a, o) {
95
95
  return `<?xml version="1.0" encoding="UTF-8"?>
96
96
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
97
97
  <channel>
98
- <title>${p(r)}</title>
99
- <link>${p(n + t)}</link>
100
- <description>${p(a)}</description>
98
+ <title>${f(i)}</title>
99
+ <link>${f(n + t)}</link>
100
+ <description>${f(a)}</description>
101
101
  <language>${o}</language>
102
- <atom:link href="${p(n + t)}feed.xml" rel="self" type="application/rss+xml"/>
102
+ <atom:link href="${f(n + t)}feed.xml" rel="self" type="application/rss+xml"/>
103
103
  ${s}
104
104
  </channel>
105
105
  </rss>
@@ -107,7 +107,7 @@ ${s}
107
107
  }
108
108
  // src/node/build/fonts.ts
109
109
  function De(e) {
110
- let t = A.basename(e);
110
+ let t = k.basename(e);
111
111
  return t.endsWith(".woff2") && t.includes("-latin-") && !t.includes("-latin-ext-");
112
112
  }
113
113
  // src/node/build/prerender.ts
@@ -118,7 +118,7 @@ async function ke(e) {
118
118
  }
119
119
  async function Ae(e, t, n) {
120
120
  let r = new Ce({
121
- filename: A.resolve(le(import.meta.url), "../prerenderWorker.js"),
121
+ filename: k.resolve(le(import.meta.url), "../prerenderWorker.js"),
122
122
  workerData: {
123
123
  ssrEntryPath: e.ssrEntryPath,
124
124
  base: e.base,
@@ -132,21 +132,21 @@ async function Ae(e, t, n) {
132
132
  }), i = 0, a = e.pageRoutes.length;
133
133
  try {
134
134
  await Promise.all(e.pageRoutes.map(async (t) => {
135
- let n = await r.run(t), o = A.join(e.outDir, n.fileName);
136
- await P.mkdir(A.dirname(o), { recursive: !0 }), await P.writeFile(o, n.html), i++, e.progress?.update(i, a);
135
+ let n = await r.run(t), o = k.join(e.outDir, n.fileName);
136
+ await N.mkdir(k.dirname(o), { recursive: !0 }), await N.writeFile(o, n.html), i++, e.progress?.update(i, a);
137
137
  }));
138
138
  } finally {
139
139
  await r.destroy();
140
140
  }
141
141
  }
142
- async function je(e, t, n) {
142
+ async function je(e, t, r) {
143
143
  let i = await (await import(e.ssrEntryPath)).createRenderer(), a = e.pageRoutes.length, o = 0;
144
144
  for (let s of e.pageRoutes) {
145
- let c = await i(s), l = O(c.pageData, s, {
145
+ let c = await i(s), l = E(c.pageData, s, {
146
146
  base: e.base,
147
147
  origin: e.origin,
148
148
  author: e.author
149
- }), u = D({
149
+ }), u = T({
150
150
  title: l.title,
151
151
  description: l.description,
152
152
  siteTitle: e.siteTitle,
@@ -159,14 +159,14 @@ async function je(e, t, n) {
159
159
  ogType: l.ogType,
160
160
  ogImagePath: l.ogImagePath,
161
161
  jsonLdBlocks: l.jsonLdBlocks,
162
- headExtra: n,
162
+ headExtra: r,
163
163
  appContent: c.html
164
- }), d = l.isHomepage ? "index.html" : `${r(s)}.html`, f = A.join(e.outDir, d);
165
- await P.mkdir(A.dirname(f), { recursive: !0 }), await P.writeFile(f, u), o++, e.progress?.update(o, a);
164
+ }), d = l.isHomepage ? "index.html" : `${n(s)}.html`, f = k.join(e.outDir, d);
165
+ await N.mkdir(k.dirname(f), { recursive: !0 }), await N.writeFile(f, u), o++, e.progress?.update(o, a);
166
166
  }
167
167
  }
168
168
  async function Me(e) {
169
- let t = A.join(e, ".vite", "manifest.json"), n = await P.readFile(t, "utf-8"), r = JSON.parse(n), i = "", a = [], o = [];
169
+ let t = k.join(e, ".vite", "manifest.json"), n = await N.readFile(t, "utf-8"), r = JSON.parse(n), i = "", a = [], o = [];
170
170
  for (let e of Object.values(r)) e.isEntry ? (i = e.file, e.css && a.push(...e.css)) : De(e.file) && o.push(e.file);
171
171
  return {
172
172
  clientEntry: i,
@@ -175,90 +175,56 @@ async function Me(e) {
175
175
  };
176
176
  }
177
177
  // src/node/lib/codegen/app-entry.ts
178
- function Ne(t, n) {
179
- let { rootDir: r = ".", mountPath: i = "", userComponents: a = [] } = t, o = [i, r === "." ? "" : r].filter(Boolean).join("/"), s = a.map((e) => `import ${e.name} from ${JSON.stringify(e.absolutePath)};`).join("\n"), c = a.map((e) => `app.component(${JSON.stringify(e.name)}, ${e.name});`).join("\n"), l = JSON.stringify({
180
- title: t.siteTitle,
181
- description: t.siteDescription,
182
- basePath: t.basePath ?? "/",
183
- origin: t.origin,
184
- lang: t.lang,
185
- repo: t.repo,
186
- author: t.author,
187
- license: t.license,
188
- rootDir: r,
189
- nav: t.nav
178
+ function Ne(e, t) {
179
+ 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({
180
+ title: e.siteTitle,
181
+ description: e.siteDescription,
182
+ basePath: e.basePath ?? "/",
183
+ origin: e.origin,
184
+ lang: e.lang,
185
+ repo: e.repo,
186
+ author: e.author,
187
+ license: e.license,
188
+ rootDir: n === "." ? void 0 : n,
189
+ nav: e.nav
190
190
  });
191
191
  return `
192
- ${[s, "import 'typerighter/style.css';"].filter(Boolean).join("\n")}
192
+ ${[o, "import 'typerighter/style.css';"].filter(Boolean).join("\n")}
193
193
  import 'typerighter/fonts.css';
194
194
  import('typerighter/math.css');
195
195
  import { createTypedownApp } from 'typerighter/client';
196
- import { TdDirectoryIndex, TdGlossaryIndex } from 'typerighter/client/theme-default';
197
- import { isIndexUrl, getDirectoryFromPageUrl, getParentUrl, path } from 'typerighter/shared';
198
- import { h } from 'vue';
199
- import theme from '${n.theme}';
200
- import { pages as initialPages } from '${n.pages}';
201
- import initialSiteData from '${n.siteData}';
202
- let pages = initialPages;
203
- let siteData = initialSiteData;
204
- const contentExts = ${JSON.stringify(e)};
205
-
206
- function findPage(base) {
207
- for (const ext of contentExts) {
208
- const key = base + ext;
209
- if (pages[key]) return pages[key];
210
- }
211
- }
212
-
213
- async function loadPageModule(pagePath) {
214
- const loader = findPage(path.join('/', '${o}', pagePath));
215
- if (loader) return loader();
216
-
217
- if (isIndexUrl(pagePath)) {
218
- const dirPath = getDirectoryFromPageUrl(pagePath);
219
- const dir = siteData.directoryListings[dirPath];
220
- if (dir) return {
221
- default: { name: 'DirectoryIndex', render() { return h(TdDirectoryIndex); } },
222
- pageData: { frontmatter: {}, headings: [], title: dir.title },
223
- };
224
- }
196
+ import { path } from 'typerighter/shared';
197
+ import { shallowRef } from 'vue';
198
+ import theme from '${t.theme}';
199
+ import { pages as initialPages } from '${t.pages}';
200
+ import initialSiteData from '${t.siteData}';
225
201
 
226
- return undefined;
227
- }
228
-
229
- const { app, router, searchIndex: searchIndexRef } = await createTypedownApp(loadPageModule, theme, ${l}, initialSiteData);
230
- ${c}
202
+ const siteData = shallowRef({ ...initialSiteData, pages: initialPages });
203
+ const { app, router, searchIndex: searchIndexRef } = await createTypedownApp({ ...${c}, theme }, siteData);
204
+ ${s}
231
205
  app.mount('#app');
232
206
 
233
207
  // Load search index in the background after the app is mounted
234
- import('${n.searchIndex}').then((m) => { searchIndexRef.value = m.default; });
208
+ import('${t.searchIndex}').then((m) => { searchIndexRef.value = m.default; });
235
209
 
236
210
  // Accept HMR so modules update without a full page reload
237
211
  if (import.meta.hot) {
238
- import.meta.hot.accept('${n.pages}', (m) => {
239
- if (!m) return;
240
- const base = path.join('/', '${o}', router.route.path);
241
- const hadPage = !!findPage(base);
242
- pages = m.pages;
243
- const hasPage = !!findPage(base);
244
- // Current page was removed (deleted or renamed away)
245
- if (hadPage && !hasPage) router.go(getParentUrl(router.route.path));
246
- // A real page appeared where a directory index was shown
247
- if (!hadPage && hasPage) router.go(router.route.path);
212
+ import.meta.hot.accept('${t.pages}', (m) => {
213
+ if (m) siteData.value = { ...siteData.value, pages: m.pages };
248
214
  });
249
215
 
250
- import.meta.hot.accept('${n.searchIndex}', (m) => {
216
+ import.meta.hot.accept('${t.searchIndex}', (m) => {
251
217
  if (m) searchIndexRef.value = m.default;
252
218
  });
253
219
 
254
- import.meta.hot.accept('${n.siteData}', (m) => {
255
- if (m) siteData = m.default;
220
+ import.meta.hot.accept('${t.siteData}', (m) => {
221
+ if (m) siteData.value = { ...m.default, pages: siteData.value.pages };
256
222
  });
257
223
 
258
224
  // Update route.data directly when content changes - Vue SFC setup only re-runs on script block changes
259
- import.meta.hot.on('${n.pageDataEvent}', ({ filepath, pageData }) => {
260
- const eventBase = path.join('/', '${o}', path.stripExtension(filepath));
261
- const routeBase = path.join('/', '${o}', router.route.path);
225
+ import.meta.hot.on('${t.pageDataEvent}', ({ filepath, pageData }) => {
226
+ const eventBase = path.join('/', '${a}', path.stripExtension(filepath));
227
+ const routeBase = path.join('/', '${a}', router.route.path);
262
228
  if (eventBase === routeBase) {
263
229
  router.route.data = pageData;
264
230
  }
@@ -267,11 +233,11 @@ if (import.meta.hot) {
267
233
  `;
268
234
  }
269
235
  // src/node/lib/codegen/theme.ts
270
- var I = "typerighter/client/theme-default";
236
+ var F = "typerighter/client/theme-default";
271
237
  function Pe(e, t) {
272
- let n = e?.notFound ? `import CustomNotFound from ${JSON.stringify(t ? A.resolve(t, e.notFound) : e.notFound)};` : "", r = e?.notFound ? ", NotFound: CustomNotFound" : "";
238
+ let n = e?.notFound ? `import CustomNotFound from ${JSON.stringify(t ? k.resolve(t, e.notFound) : e.notFound)};` : "", r = e?.notFound ? ", NotFound: CustomNotFound" : "";
273
239
  if (e?.component) {
274
- let i = t ? A.resolve(t, e.component) : e.component;
240
+ let i = t ? k.resolve(t, e.component) : e.component;
275
241
  return [
276
242
  `import CustomLayout from ${JSON.stringify(i)};`,
277
243
  n,
@@ -280,24 +246,24 @@ function Pe(e, t) {
280
246
  }
281
247
  let i = Object.entries(e?.slots ?? {});
282
248
  if (0 < i.length) {
283
- let e = i.map(([e, t]) => `${JSON.stringify(x(e))}: () => h(resolveComponent(${JSON.stringify(t)}))`).join(", ");
249
+ let e = i.map(([e, t]) => `${JSON.stringify(b(e))}: () => h(resolveComponent(${JSON.stringify(t)}))`).join(", ");
284
250
  return [
285
- `import DefaultTheme from ${JSON.stringify(I)};`,
251
+ `import DefaultTheme from ${JSON.stringify(F)};`,
286
252
  "import { h, resolveComponent } from 'vue';",
287
253
  n,
288
254
  `export default { Layout: { render() { return h(DefaultTheme.Layout, null, { ${e} }); } }${r} };`
289
255
  ].filter(Boolean).join("\n");
290
256
  }
291
257
  return n ? [
292
- `import DefaultTheme from ${JSON.stringify(I)};`,
258
+ `import DefaultTheme from ${JSON.stringify(F)};`,
293
259
  n,
294
260
  `export default { ...DefaultTheme${r} };`
295
- ].join("\n") : `export { default } from ${JSON.stringify(I)};`;
261
+ ].join("\n") : `export { default } from ${JSON.stringify(F)};`;
296
262
  }
297
263
  // src/node/lib/components.ts
298
264
  function Fe(e) {
299
- let t = A.join(e, "tsconfig.json");
300
- if (F.existsSync(t)) return ve(t);
265
+ let t = k.join(e, "tsconfig.json");
266
+ if (P.existsSync(t)) return ve(t);
301
267
  let n = Ie(e);
302
268
  return ye(e, { compilerOptions: {
303
269
  strict: !1,
@@ -306,10 +272,10 @@ function Fe(e) {
306
272
  ...n && { paths: n }
307
273
  } });
308
274
  }
309
- async function L(e, t) {
275
+ async function I(e, t) {
310
276
  let n = [];
311
277
  for (let r of e) if (r.kind === "dir") {
312
- let e = A.resolve(t, r.path), i;
278
+ let e = k.resolve(t, r.path), i;
313
279
  try {
314
280
  i = await ce(e, { withFileTypes: !0 });
315
281
  } catch {
@@ -317,39 +283,39 @@ async function L(e, t) {
317
283
  }
318
284
  for (let t of i) if (t.isFile() && t.name.endsWith(".vue")) n.push({
319
285
  name: t.name.slice(0, -4),
320
- absolutePath: A.join(e, t.name)
286
+ absolutePath: k.join(e, t.name)
321
287
  });
322
288
  else if (t.isDirectory()) {
323
- let r = A.join(e, t.name, "index.vue");
324
- F.existsSync(r) && n.push({
289
+ let r = k.join(e, t.name, "index.vue");
290
+ P.existsSync(r) && n.push({
325
291
  name: t.name,
326
292
  absolutePath: r
327
293
  });
328
294
  }
329
295
  } else n.push({
330
296
  name: r.name,
331
- absolutePath: A.resolve(t, r.source)
297
+ absolutePath: k.resolve(t, r.source)
332
298
  });
333
299
  return n;
334
300
  }
335
301
  function Ie(e) {
336
302
  try {
337
- let t = _e(A.join(e, "package.json")), n = A.dirname(t.resolve("vue/package.json"));
303
+ let t = _e(k.join(e, "package.json")), n = k.dirname(t.resolve("vue/package.json"));
338
304
  return {
339
305
  vue: [n],
340
- "vue/*": [A.join(n, "*")]
306
+ "vue/*": [k.join(n, "*")]
341
307
  };
342
308
  } catch {
343
309
  return;
344
310
  }
345
311
  }
346
312
  // src/node/lib/progress.ts
347
- var R = [
313
+ var L = [
348
314
  "◐",
349
315
  "◓",
350
316
  "◑",
351
317
  "◒"
352
- ], Le = class {
318
+ ], R = class {
353
319
  logger;
354
320
  label;
355
321
  start;
@@ -357,8 +323,8 @@ var R = [
357
323
  constructor(e, t) {
358
324
  if (this.logger = e, this.label = t, this.start = performance.now(), process.stdout.isTTY) {
359
325
  let e = 0;
360
- process.stdout.write(M.cyan(`${R[0]} ${t}`)), this.spinnerInterval = setInterval(() => {
361
- e = (e + 1) % R.length, process.stdout.write(`\r${M.cyan(`${R[e]} ${this.label}`)}`);
326
+ process.stdout.write(j.cyan(`${L[0]} ${t}`)), this.spinnerInterval = setInterval(() => {
327
+ e = (e + 1) % L.length, process.stdout.write(`\r${j.cyan(`${L[e]} ${this.label}`)}`);
362
328
  }, 120).unref();
363
329
  } else this.logger.start(t);
364
330
  }
@@ -370,19 +336,19 @@ var R = [
370
336
  done(e) {
371
337
  this.stopSpinner(), process.stdout.isTTY && process.stdout.write("\r\x1B[K");
372
338
  let t = Math.round(performance.now() - this.start);
373
- this.logger.success(`${e} (${Re(t)})`);
339
+ this.logger.success(`${e} (${Le(t)})`);
374
340
  }
375
341
  stopSpinner() {
376
342
  this.spinnerInterval &&= (clearInterval(this.spinnerInterval), void 0);
377
343
  }
378
344
  };
379
- function Re(e) {
345
+ function Le(e) {
380
346
  return e < 1e3 ? `${Math.round(e)}ms` : `${(e / 1e3).toFixed(1)}s`;
381
347
  }
382
348
  // src/node/build/index.ts
383
- async function ze(e, t = {}) {
384
- let { root: n, logger: r } = e, a = A.resolve(n, t.outDir ?? "dist"), o = A.join(a, ".client"), s = A.join(a, ".server");
385
- await P.rm(a, {
349
+ async function Re(e, t = {}) {
350
+ let { root: n, logger: i } = e, a = k.resolve(n, t.outDir ?? "dist"), o = k.join(a, ".client"), s = k.join(a, ".server");
351
+ await N.rm(a, {
386
352
  recursive: !0,
387
353
  force: !0
388
354
  });
@@ -390,10 +356,10 @@ async function ze(e, t = {}) {
390
356
  c.getConfig(),
391
357
  c.listFiles(),
392
358
  c.listSidebar()
393
- ]), f = l.origin ?? void 0, p = l.author ?? void 0, m = l.license ?? void 0, h = l.repo ?? void 0, g = t.base ?? l.basePath ?? "/", v = w(g), y = d.map((e) => ({
359
+ ]), f = l.origin ?? void 0, p = l.author ?? void 0, m = l.license ?? void 0, h = l.repo ?? void 0, _ = t.base ?? l.basePath ?? "/", v = ee(_), y = d.map((e) => ({
394
360
  ...e,
395
361
  header: {}
396
- })), b = _(y), x = JSON.stringify({
362
+ })), b = g(y), x = JSON.stringify({
397
363
  title: l.siteTitle,
398
364
  description: l.siteDescription,
399
365
  basePath: v,
@@ -407,11 +373,11 @@ async function ze(e, t = {}) {
407
373
  }), S = JSON.stringify({
408
374
  ready: !0,
409
375
  contentTree: b
410
- }), C = A.join(n, "node_modules", ".typerighter");
411
- await P.mkdir(C, { recursive: !0 });
412
- let T = A.join(C, "client-entry.js"), E = A.join(C, "ssr-entry.js"), D = A.join(C, "theme.js"), O = await L(l.components, n), k = Pe(l.layout ?? void 0, n);
376
+ }), C = k.join(n, "node_modules", ".typerighter");
377
+ await N.mkdir(C, { recursive: !0 });
378
+ let w = k.join(C, "client-entry.js"), T = k.join(C, "ssr-entry.js"), E = k.join(C, "theme.js"), D = await I(l.components, n), O = Pe(l.layout ?? void 0, n);
413
379
  await Promise.all([
414
- P.writeFile(T, Ne({
380
+ N.writeFile(w, Ne({
415
381
  rootDir: l.rootDir,
416
382
  basePath: v,
417
383
  origin: f,
@@ -422,7 +388,7 @@ async function ze(e, t = {}) {
422
388
  author: p,
423
389
  license: m,
424
390
  nav: l.nav,
425
- userComponents: O
391
+ userComponents: D
426
392
  }, {
427
393
  theme: J,
428
394
  pages: W,
@@ -430,17 +396,17 @@ async function ze(e, t = {}) {
430
396
  searchIndex: q,
431
397
  pageDataEvent: Y
432
398
  })),
433
- P.writeFile(E, Be({
399
+ N.writeFile(T, ze({
434
400
  rootDir: l.rootDir,
435
401
  siteConfig: x,
436
402
  siteData: S,
437
- themeModulePath: D,
438
- userComponents: O
403
+ themeModulePath: E,
404
+ userComponents: D
439
405
  })),
440
- P.writeFile(D, k)
406
+ N.writeFile(E, O)
441
407
  ]);
442
408
  try {
443
- let c = vn({ context: e }), m = e.createViteLogger(), h = new Le(r, "Building client bundle...");
409
+ let c = _n({ context: e }), m = e.createViteLogger(), h = new R(i, "Building client bundle...");
444
410
  await se({
445
411
  ...t.viteConfig,
446
412
  root: n,
@@ -455,13 +421,13 @@ async function ze(e, t = {}) {
455
421
  emptyOutDir: !0,
456
422
  rollupOptions: {
457
423
  ...t.viteConfig?.build?.rollupOptions,
458
- input: T
424
+ input: w
459
425
  }
460
426
  }
461
427
  });
462
- let g = await P.readdir(A.join(o, "assets")).catch(() => []);
428
+ let g = await N.readdir(k.join(o, "assets")).catch(() => []);
463
429
  h.done(`Client bundle (${g.length} chunks)`);
464
- let _ = new Le(r, "Building SSR bundle...");
430
+ let _ = new R(i, "Building SSR bundle...");
465
431
  await se({
466
432
  ...t.viteConfig,
467
433
  root: n,
@@ -472,18 +438,18 @@ async function ze(e, t = {}) {
472
438
  build: {
473
439
  ...t.viteConfig?.build,
474
440
  outDir: s,
475
- ssr: E,
441
+ ssr: T,
476
442
  emptyOutDir: !0
477
443
  }
478
444
  }), _.done("SSR bundle");
479
445
  let y = u.map((e) => {
480
- let t = i(e);
446
+ let t = r(e);
481
447
  return t === "index" ? "/" : `/${t}`;
482
448
  });
483
- y.push("/"), He(b.entries, y);
484
- let x = new Le(r, "Pre-rendering pages...");
449
+ y.push("/"), Ve(b.entries, y);
450
+ let x = new R(i, "Pre-rendering pages...");
485
451
  await ke({
486
- ssrEntryPath: A.join(s, "ssr-entry.js"),
452
+ ssrEntryPath: k.join(s, "ssr-entry.js"),
487
453
  clientOutDir: o,
488
454
  outDir: a,
489
455
  base: v,
@@ -496,77 +462,51 @@ async function ze(e, t = {}) {
496
462
  }), x.done(`Pre-rendered ${y.length} pages`);
497
463
  let S = /* @__PURE__ */ new Map();
498
464
  for (let e of d) {
499
- let t = i(e.filepath), n = t === "index" ? "/" : `/${t}`;
465
+ let t = r(e.filepath), n = t === "index" ? "/" : `/${t}`;
500
466
  S.set(n, e.fileMetadata.mtimeSecs);
501
467
  }
502
- let C = we(y, v, f, S), w = [P.writeFile(A.join(a, "sitemap.xml"), C)];
503
- f !== void 0 && (w.push(P.writeFile(A.join(a, "robots.txt"), Te(f, v))), w.push(P.writeFile(A.join(a, "feed.xml"), Ee(d, v, f, l.siteTitle, l.siteDescription, l.lang)))), await Promise.all(w);
504
- let D = A.join(o, "assets"), O = A.join(a, "assets");
505
- await P.cp(D, O, { recursive: !0 }).catch(() => {}), await Ve(A.join(n, l.rootDir), a);
506
- let k = A.join(n, l.publicDir);
507
- await P.cp(k, a, { recursive: !0 }).catch(() => {});
468
+ let ee = we(y, v, f, S), C = [N.writeFile(k.join(a, "sitemap.xml"), ee)];
469
+ f !== void 0 && (C.push(N.writeFile(k.join(a, "robots.txt"), Te(f, v))), C.push(N.writeFile(k.join(a, "feed.xml"), Ee(d, v, f, l.siteTitle, l.siteDescription, l.lang)))), await Promise.all(C);
470
+ let E = k.join(o, "assets"), D = k.join(a, "assets");
471
+ await N.cp(E, D, { recursive: !0 }).catch(() => {}), await Be(k.join(n, l.rootDir), a);
472
+ let O = k.join(n, l.publicDir);
473
+ await N.cp(O, a, { recursive: !0 }).catch(() => {});
508
474
  } finally {
509
475
  await Promise.all([
510
- P.rm(C, {
476
+ N.rm(C, {
511
477
  recursive: !0,
512
478
  force: !0
513
479
  }),
514
- P.rm(o, {
480
+ N.rm(o, {
515
481
  recursive: !0,
516
482
  force: !0
517
483
  }),
518
- P.rm(s, {
484
+ N.rm(s, {
519
485
  recursive: !0,
520
486
  force: !0
521
487
  })
522
488
  ]);
523
489
  }
524
- r.log(`\nBuild complete. Output: ${a}`);
490
+ i.log(`\nBuild complete. Output: ${a}`);
525
491
  }
526
- function Be(t) {
527
- let n = `/${t.rootDir}/${h}`, r = JSON.parse(t.siteConfig), i = JSON.parse(t.siteData), a = i.contentTree ?? { entries: [] }, o = g(a.entries ?? [], r.title ?? ""), s = JSON.stringify({
528
- ...i,
529
- directoryListings: o
530
- }), c = t.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");
492
+ function ze(e) {
493
+ let t = `/${e.rootDir}/${m}`, n = JSON.parse(e.siteConfig), r = JSON.parse(e.siteData), i = r.contentTree ?? { entries: [] }, a = h(i.entries ?? [], n.title ?? ""), o = JSON.stringify({
494
+ ...r,
495
+ directoryListings: a
496
+ }), 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");
531
497
  return `
532
- ${[l, "import { createTypedownApp } from 'typerighter/client';"].filter(Boolean).join("\n")}
533
- import { TdDirectoryIndex, TdGlossaryIndex } from 'typerighter/client/theme-default';
534
- import { isIndexUrl, getDirectoryFromPageUrl } from 'typerighter/shared';
498
+ ${[c, "import { createTypedownApp } from 'typerighter/client';"].filter(Boolean).join("\n")}
535
499
  import { renderToString } from 'vue/server-renderer';
536
- import { h } from 'vue';
537
- import theme from ${JSON.stringify(t.themeModulePath)};
538
-
539
- const pages = import.meta.glob('${n}', { eager: true });
540
- const contentExts = ${JSON.stringify(e)};
541
- const siteData = ${s};
542
-
543
- function findPage(base) {
544
- for (const ext of contentExts) {
545
- const key = base + ext;
546
- if (pages[key]) return pages[key];
547
- }
548
- }
500
+ import { shallowRef } from 'vue';
501
+ import theme from ${JSON.stringify(e.themeModulePath)};
549
502
 
550
- function loadPageModule(pagePath) {
551
- const base = ('/${t.rootDir}/' + pagePath).replace(/\\/+/g, '/').replace(/\\/$/, '');
552
- const page = findPage(base);
553
- if (page) return Promise.resolve(page);
554
-
555
- if (isIndexUrl(pagePath)) {
556
- const dirPath = getDirectoryFromPageUrl(pagePath);
557
- const dir = siteData.directoryListings[dirPath];
558
- if (dir) return Promise.resolve({
559
- default: { name: 'DirectoryIndex', render() { return h(TdDirectoryIndex); } },
560
- pageData: { frontmatter: {}, headings: [], title: dir.title },
561
- });
562
- }
563
-
564
- return Promise.resolve(undefined);
565
- }
503
+ const rawPages = import.meta.glob('${t}', { eager: true });
504
+ const pages = Object.fromEntries(Object.entries(rawPages).map(([k, v]) => [k, () => Promise.resolve(v)]));
505
+ const siteData = shallowRef({ ...${o}, pages });
566
506
 
567
507
  export async function createRenderer() {
568
- const { app, router } = await createTypedownApp(loadPageModule, theme, ${t.siteConfig}, siteData);
569
- ${u}
508
+ const { app, router } = await createTypedownApp({ ...${e.siteConfig}, theme }, siteData);
509
+ ${l}
570
510
  return async function render(url) {
571
511
  await router.go(url, { replace: true });
572
512
  const html = await renderToString(app);
@@ -575,31 +515,31 @@ export async function createRenderer() {
575
515
  }
576
516
  `;
577
517
  }
578
- async function Ve(e, t) {
579
- let n = (await P.readdir(e, {
518
+ async function Be(e, t) {
519
+ let n = (await N.readdir(e, {
580
520
  recursive: !0,
581
521
  withFileTypes: !0
582
- })).filter((e) => e.isFile() && !E(e.name)).map(async (n) => {
583
- let r = A.join(n.parentPath, n.name), i = A.relative(e, r), a = A.join(t, i);
584
- return P.mkdir(A.dirname(a), { recursive: !0 }).then(() => P.copyFile(r, a));
522
+ })).filter((e) => e.isFile() && !w(e.name)).map(async (n) => {
523
+ let r = k.join(n.parentPath, n.name), i = k.relative(e, r), a = k.join(t, i);
524
+ return N.mkdir(k.dirname(a), { recursive: !0 }).then(() => N.copyFile(r, a));
585
525
  });
586
526
  await Promise.all(n);
587
527
  }
588
- function He(e, t, n = "") {
528
+ function Ve(e, t, n = "") {
589
529
  for (let r of e) {
590
530
  if (r.kind !== "dir") continue;
591
531
  let e = `${n}/${r.node.name}`;
592
- d(r.node) || t.push(c(e)), He(r.node.entries, t, e);
532
+ u(r.node) || t.push(s(e)), Ve(r.node.entries, t, e);
593
533
  }
594
534
  }
595
535
  // ../../node_modules/.pnpm/@shikijs+transformers@4.4.3/node_modules/@shikijs/transformers/dist/index.mjs
596
- var Ue = /(\s+\/\/)/, We = /(?:\/\/|["'#]|;{1,2}|%{1,2}|--)(\s*)$/, Ge = /(?:\/\/|#|;{1,2}|%{1,2}|--)(\s*)$/, Ke = [
536
+ var He = /(\s+\/\/)/, Ue = /(?:\/\/|["'#]|;{1,2}|%{1,2}|--)(\s*)$/, We = /(?:\/\/|#|;{1,2}|%{1,2}|--)(\s*)$/, Ge = [
597
537
  [/^(<!--)(.+)(-->)$/, !1],
598
538
  [/^(\/\*)(.+)(\*\/)$/, !1],
599
539
  [/^(\/\/|["'#]|;{1,2}|%{1,2}|--)(.*)$/, !0],
600
540
  [/^(\*)(.+)$/, !0]
601
541
  ];
602
- function qe(e, t, n) {
542
+ function Ke(e, t, n) {
603
543
  let r = [];
604
544
  for (let i of e) {
605
545
  if (n === "v3") {
@@ -609,7 +549,7 @@ function qe(e, t, n) {
609
549
  if (n.type !== "text") return e;
610
550
  let r = t === i.children.length - 1;
611
551
  if (!z(n.value, r)) return e;
612
- let a = n.value.split(Ue);
552
+ let a = n.value.split(He);
613
553
  if (a.length <= 1) return e;
614
554
  let o = [a[0]];
615
555
  for (let e = 1; e < a.length; e += 2) o.push(a[e] + (a[e + 1] || ""));
@@ -653,7 +593,7 @@ function qe(e, t, n) {
653
593
  }
654
594
  if (c) {
655
595
  if (t && !s && n !== 0) {
656
- let t = Je(e[n - 1], "{") && Je(e[n + 1], "}");
596
+ let t = qe(e[n - 1], "{") && qe(e[n + 1], "}");
657
597
  r.push({
658
598
  info: c,
659
599
  line: i,
@@ -675,7 +615,7 @@ function qe(e, t, n) {
675
615
  }
676
616
  return r;
677
617
  }
678
- function Je(e, t) {
618
+ function qe(e, t) {
679
619
  if (e.type !== "element") return !1;
680
620
  let n = e.children[0];
681
621
  return n.type === "text" && n.value.trim() === t;
@@ -684,7 +624,7 @@ function z(e, t) {
684
624
  let n = e.trimStart(), r = e.length - n.length;
685
625
  n = n.trimEnd();
686
626
  let i = e.length - n.length - r;
687
- for (let [e, a] of Ke) {
627
+ for (let [e, a] of Ge) {
688
628
  if (a && !t) continue;
689
629
  let o = e.exec(n);
690
630
  if (o) return [
@@ -694,22 +634,22 @@ function z(e, t) {
694
634
  ];
695
635
  }
696
636
  }
697
- function Ye(e) {
698
- let t = e.match(We);
637
+ function Je(e) {
638
+ let t = e.match(Ue);
699
639
  return t && t[1].trim().length === 0 ? e.slice(0, t.index) : e;
700
640
  }
701
- function Xe(e) {
702
- let t = e.match(Ge);
641
+ function Ye(e) {
642
+ let t = e.match(We);
703
643
  return t && t[1].trim().length === 0 ? e.slice(0, t.index).trimEnd() : e;
704
644
  }
705
- function Ze(e, t, n, r) {
645
+ function Xe(e, t, n, r) {
706
646
  return r ??= "v3", {
707
647
  name: e,
708
648
  code(e) {
709
649
  let i = e.children.filter((e) => e.type === "element"), a = [];
710
650
  e.data ??= {};
711
651
  let o = e.data;
712
- o._shiki_notation ??= qe(i, ["jsx", "tsx"].includes(this.options.lang), r);
652
+ o._shiki_notation ??= Ke(i, ["jsx", "tsx"].includes(this.options.lang), r);
713
653
  let s = o._shiki_notation;
714
654
  for (let e of s) {
715
655
  if (e.info[1].length === 0) continue;
@@ -717,7 +657,7 @@ function Ze(e, t, n, r) {
717
657
  e.isLineCommentOnly && r !== "v1" && o++;
718
658
  let s = !1;
719
659
  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;
720
- r === "v1" ? e.info[1] = Ye(e.info[1]) : r === "v3" && (e.info[1] = Xe(e.info[1]));
660
+ r === "v1" ? e.info[1] = Je(e.info[1]) : r === "v3" && (e.info[1] = Ye(e.info[1]));
721
661
  let c = e.info[1].trim().length === 0;
722
662
  if (c && (e.info[1] = ""), c && e.isLineCommentOnly) a.push(e.line);
723
663
  else if (c && e.isJsxStyle) e.line.children.splice(e.line.children.indexOf(e.token) - 1, 3);
@@ -742,42 +682,42 @@ function Ze(e, t, n, r) {
742
682
  }
743
683
  };
744
684
  }
745
- var Qe = /\{([\d,-]+)\}/;
746
- function $e(e) {
685
+ var Ze = /\{([\d,-]+)\}/;
686
+ function Qe(e) {
747
687
  if (!e) return null;
748
- let t = e.match(Qe);
688
+ let t = e.match(Ze);
749
689
  return t ? t[1].split(",").flatMap((e) => {
750
690
  let t = e.split("-").map((e) => Number.parseInt(e, 10));
751
691
  return t.length === 1 ? [t[0]] : Array.from({ length: t[1] - t[0] + 1 }, (e, n) => t[0] + n);
752
692
  }) : null;
753
693
  }
754
- var et = Symbol("highlighted-lines");
755
- function tt(e = {}) {
694
+ var $e = Symbol("highlighted-lines");
695
+ function et(e = {}) {
756
696
  let { className: t = "highlighted", zeroIndexed: n = !1 } = e;
757
697
  return {
758
698
  name: "@shikijs/transformers:meta-highlight",
759
699
  line(e, r) {
760
700
  if (!this.options.meta?.__raw) return;
761
701
  let i = this.meta;
762
- i[et] ??= $e(this.options.meta.__raw);
763
- let a = i[et] ?? [], o = n ? r - 1 : r;
702
+ i[$e] ??= Qe(this.options.meta.__raw);
703
+ let a = i[$e] ?? [], o = n ? r - 1 : r;
764
704
  return a.includes(o) && this.addClassToHast(e, t), e;
765
705
  }
766
706
  };
767
707
  }
768
- var nt = /[.*+?^${}()|[\]\\]/g;
769
- function rt(e) {
770
- return e.replace(nt, "\\$&");
708
+ var tt = /[.*+?^${}()|[\]\\]/g;
709
+ function nt(e) {
710
+ return e.replace(tt, "\\$&");
771
711
  }
772
712
  function B(e = {}, t = "@shikijs/transformers:notation-map") {
773
713
  let { classMap: n = {}, classActivePre: r = void 0, classActiveCode: i = void 0 } = e;
774
- return Ze(t, RegExp(`#?\\s*\\[!code (${Object.keys(n).map(rt).join("|")})(:\\d+)?\\]`, "gi"), function([e, t, a = ":1"], o, s, c, l) {
714
+ return Xe(t, RegExp(`#?\\s*\\[!code (${Object.keys(n).map(nt).join("|")})(:\\d+)?\\]`, "gi"), function([e, t, a = ":1"], o, s, c, l) {
775
715
  let u = Number.parseInt(a.slice(1), 10);
776
716
  for (let e = l; e < Math.min(l + u, c.length); e++) this.addClassToHast(c[e], n[t]);
777
717
  return r && this.addClassToHast(this.pre, r), i && this.addClassToHast(this.code, i), !0;
778
718
  }, e.matchAlgorithm);
779
719
  }
780
- function it(e = {}) {
720
+ function rt(e = {}) {
781
721
  let { classLineAdd: t = "diff add", classLineRemove: n = "diff remove", classActivePre: r = "has-diff", classActiveCode: i } = e;
782
722
  return B({
783
723
  classMap: {
@@ -789,7 +729,7 @@ function it(e = {}) {
789
729
  matchAlgorithm: e.matchAlgorithm
790
730
  }, "@shikijs/transformers:notation-diff");
791
731
  }
792
- function at(e = {}) {
732
+ function it(e = {}) {
793
733
  let { classMap: t = {
794
734
  error: ["highlighted", "error"],
795
735
  warning: ["highlighted", "warning"],
@@ -802,7 +742,7 @@ function at(e = {}) {
802
742
  matchAlgorithm: e.matchAlgorithm
803
743
  }, "@shikijs/transformers:notation-error-level");
804
744
  }
805
- function ot(e = {}) {
745
+ function at(e = {}) {
806
746
  let { classActiveLine: t = "focused", classActivePre: n = "has-focused", classActiveCode: r } = e;
807
747
  return B({
808
748
  classMap: { focus: t },
@@ -811,7 +751,7 @@ function ot(e = {}) {
811
751
  matchAlgorithm: e.matchAlgorithm
812
752
  }, "@shikijs/transformers:notation-focus");
813
753
  }
814
- function st(e = {}) {
754
+ function ot(e = {}) {
815
755
  let { classActiveLine: t = "highlighted", classActivePre: n = "has-highlighted", classActiveCode: r } = e;
816
756
  return B({
817
757
  classMap: {
@@ -824,41 +764,41 @@ function st(e = {}) {
824
764
  }, "@shikijs/transformers:notation-highlight");
825
765
  }
826
766
  // src/node/lib/render/highlight/language.ts
827
- var ct = [
767
+ var st = [
828
768
  "shellscript",
829
769
  "shell",
830
770
  "bash",
831
771
  "sh",
832
772
  "zsh"
833
773
  ];
834
- function lt(e) {
835
- return ct.includes(e);
774
+ function ct(e) {
775
+ return st.includes(e);
836
776
  }
837
- var ut = /^[a-zA-Z0-9-_]+/;
838
- function dt(e) {
839
- return ut.exec(e)?.[0] || "";
777
+ var lt = /^[a-zA-Z0-9-_]+/;
778
+ function ut(e) {
779
+ return lt.exec(e)?.[0] || "";
840
780
  }
841
781
  // src/node/lib/render/highlight/index.ts
842
- var ft = new FinalizationRegistry((e) => {
782
+ var dt = new FinalizationRegistry((e) => {
843
783
  e();
844
784
  }), V = {
845
785
  light: "github-light",
846
786
  dark: "github-dark"
847
787
  };
848
- async function pt() {
788
+ async function ft() {
849
789
  let e = await be({
850
790
  themes: [V.light, V.dark],
851
791
  langs: []
852
792
  }), t = [
853
- tt(),
854
- it(),
855
- ot({
793
+ et(),
794
+ rt(),
795
+ at({
856
796
  classActiveLine: "has-focus",
857
797
  classActivePre: "has-focused-lines"
858
798
  }),
859
- st(),
860
- at(),
861
- mt(),
799
+ ot(),
800
+ it(),
801
+ pt(),
862
802
  {
863
803
  name: "typedown:add-dir",
864
804
  pre(e) {
@@ -867,7 +807,7 @@ async function pt() {
867
807
  }
868
808
  ], n = new Set(e.getLoadedLanguages());
869
809
  async function r(r, i, a, o) {
870
- let s = dt(i);
810
+ let s = ut(i);
871
811
  if (s) {
872
812
  let e = i;
873
813
  i = s.toLowerCase(), a = e.slice(i.length).replace(/(?<!=)\{/g, " {") + " " + a, a = a.trim().replace(/\s+/g, " ");
@@ -876,7 +816,7 @@ async function pt() {
876
816
  try {
877
817
  !Se(i) && !n.has(i) && (await e.loadLanguage(i), n.add(i));
878
818
  } catch {
879
- ee.warn(`\nThe language '${i}' is not loaded, falling back to 'txt' for syntax highlighting.`), i = "txt";
819
+ O.warn(`\nThe language '${i}' is not loaded, falling back to 'txt' for syntax highlighting.`), i = "txt";
880
820
  }
881
821
  r = r.trimEnd();
882
822
  let c = xe(r, i, e);
@@ -900,7 +840,7 @@ async function pt() {
900
840
  });
901
841
  }
902
842
  },
903
- ...o === void 0 ? [] : [ht(o)]
843
+ ...o === void 0 ? [] : [mt(o)]
904
844
  ],
905
845
  meta: { __raw: a },
906
846
  themes: V,
@@ -928,13 +868,13 @@ async function pt() {
928
868
  }
929
869
  });
930
870
  }
931
- return ft.register(r, () => e.dispose()), r;
871
+ return dt.register(r, () => e.dispose()), r;
932
872
  }
933
- function mt() {
873
+ function pt() {
934
874
  return {
935
875
  name: "typedown:disable-shell-symbol-select",
936
876
  tokens(e) {
937
- if (lt(this.options.lang)) for (let t of e) {
877
+ if (ct(this.options.lang)) for (let t of e) {
938
878
  if (t.length < 2) continue;
939
879
  let e = t[0].content.trim();
940
880
  (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));
@@ -942,7 +882,7 @@ function mt() {
942
882
  }
943
883
  };
944
884
  }
945
- function ht(e) {
885
+ function mt(e) {
946
886
  return {
947
887
  name: "typedown:line-numbers",
948
888
  code(t) {
@@ -974,23 +914,23 @@ function ht(e) {
974
914
  };
975
915
  }
976
916
  // src/node/lib/render/postprocess.ts
977
- var gt;
978
- async function _t(e) {
979
- return e = await bt(e), e = Et(e), e;
917
+ var ht;
918
+ async function gt(e) {
919
+ return e = await yt(e), e = Tt(e), e;
980
920
  }
981
- function vt() {
982
- return gt ||= pt(), gt;
921
+ function _t() {
922
+ return ht ||= ft(), ht;
983
923
  }
984
- var yt = /<pre class="td-code-placeholder"([^>]*)><code>([\s\S]*?)<\/code><\/pre>/g;
924
+ var vt = /<pre class="td-code-placeholder"([^>]*)><code>([\s\S]*?)<\/code><\/pre>/g;
985
925
  function H(e, t) {
986
926
  return e.match(RegExp(`${t}="([^"]*)"`))?.[1];
987
927
  }
988
- async function bt(e) {
989
- let t = await vt(), n = [...e.matchAll(yt)];
928
+ async function yt(e) {
929
+ let t = await _t(), n = [...e.matchAll(vt)];
990
930
  if (n.length === 0) return e;
991
931
  let r = await Promise.all(n.map(async (e) => {
992
- 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 = m(e[2]);
993
- return Ct(await t(s, r, i, o === void 0 ? void 0 : parseInt(o) || 1), r, {
932
+ 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 = p(e[2]);
933
+ return St(await t(s, r, i, o === void 0 ? void 0 : parseInt(o) || 1), r, {
994
934
  title: a,
995
935
  lineNumbers: o
996
936
  });
@@ -1001,7 +941,7 @@ async function bt(e) {
1001
941
  }
1002
942
  return i;
1003
943
  }
1004
- var xt = {
944
+ var bt = {
1005
945
  typescript: "TypeScript",
1006
946
  javascript: "JavaScript",
1007
947
  tsx: "TSX",
@@ -1049,38 +989,38 @@ var xt = {
1049
989
  scala: "Scala",
1050
990
  txt: "Text"
1051
991
  };
1052
- function St(e) {
1053
- return xt[e.toLowerCase()] ?? e;
992
+ function xt(e) {
993
+ return bt[e.toLowerCase()] ?? e;
1054
994
  }
1055
- function Ct(e, t, n) {
995
+ function St(e, t, n) {
1056
996
  t ||= "txt";
1057
- let r = St(t), i = ["td-code-block", "language-" + t];
997
+ let r = xt(t), i = ["td-code-block", "language-" + t];
1058
998
  n.title && i.push("has-title"), n.lineNumbers !== void 0 && i.push("line-numbers-mode");
1059
999
  let a = `<figure class="${i.join(" ")}">`;
1060
- return a += "<figcaption class=\"td-code-header\">", a += "<span class=\"td-code-left\">", a += `<span class="td-code-lang">${p(r)}</span>`, n.title && (a += `<span class="td-code-label">${p(n.title)}</span>`), a += "</span>", a += "<span class=\"td-code-actions\">", a += "<button type=\"button\" aria-label=\"Copy code\" data-copied=\"Copied\" class=\"td-code-copy\">", a += "<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg>", a += "<span class=\"td-code-copy-text\">Copy</span>", a += "</button>", a += "</span>", a += "</figcaption>", a += e, a += "</figure>", a;
1000
+ return a += "<figcaption class=\"td-code-header\">", a += "<span class=\"td-code-left\">", a += `<span class="td-code-lang">${f(r)}</span>`, n.title && (a += `<span class="td-code-label">${f(n.title)}</span>`), a += "</span>", a += "<span class=\"td-code-actions\">", a += "<button type=\"button\" aria-label=\"Copy code\" data-copied=\"Copied\" class=\"td-code-copy\">", a += "<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg>", a += "<span class=\"td-code-copy-text\">Copy</span>", a += "</button>", a += "</span>", a += "</figcaption>", a += e, a += "</figure>", a;
1061
1001
  }
1062
- var wt = /<span class="td-math-inline">([\s\S]*?)<\/span>/g, Tt = /<div class="td-math-block">([\s\S]*?)<\/div>/g;
1063
- function Et(e) {
1064
- return e = e.replace(wt, (e, t) => kt(t, !1)), e = e.replace(Tt, (e, t) => kt(t, !0)), e;
1002
+ var Ct = /<span class="td-math-inline">([\s\S]*?)<\/span>/g, wt = /<div class="td-math-block">([\s\S]*?)<\/div>/g;
1003
+ function Tt(e) {
1004
+ return e = e.replace(Ct, (e, t) => Ot(t, !1)), e = e.replace(wt, (e, t) => Ot(t, !0)), e;
1065
1005
  }
1066
- var Dt = /`([^`]+)`|\$([^$]+)\$/g;
1067
- function Ot(e) {
1006
+ var Et = /`([^`]+)`|\$([^$]+)\$/g;
1007
+ function Dt(e) {
1068
1008
  let t = 0, n = "";
1069
- for (let r of e.matchAll(Dt)) {
1070
- if (n += p(e.slice(t, r.index)), r[1] !== void 0) n += `<code>${p(r[1])}</code>`;
1009
+ for (let r of e.matchAll(Et)) {
1010
+ if (n += f(e.slice(t, r.index)), r[1] !== void 0) n += `<code>${f(r[1])}</code>`;
1071
1011
  else if (r[2] !== void 0) try {
1072
- n += k.renderToString(r[2], { throwOnError: !1 });
1012
+ n += D.renderToString(r[2], { throwOnError: !1 });
1073
1013
  } catch {
1074
- n += p(r[0]);
1014
+ n += f(r[0]);
1075
1015
  }
1076
1016
  t = r.index + r[0].length;
1077
1017
  }
1078
- return n += p(e.slice(t)), n;
1018
+ return n += f(e.slice(t)), n;
1079
1019
  }
1080
- function kt(e, t) {
1020
+ function Ot(e, t) {
1081
1021
  let n = t ? "div" : "span";
1082
1022
  try {
1083
- return k.renderToString(m(e), {
1023
+ return D.renderToString(p(e), {
1084
1024
  throwOnError: !1,
1085
1025
  displayMode: t
1086
1026
  });
@@ -1090,24 +1030,24 @@ function kt(e, t) {
1090
1030
  }
1091
1031
  // src/node/lib/render/vue.ts
1092
1032
  async function U(e, t, n) {
1093
- let r = t.title || t.label || (f(n) ? C(n, (await e.getConfig()).siteTitle) : T(n));
1033
+ let r = t.title || t.label || (d(n) ? S(n, (await e.getConfig()).siteTitle) : C(n));
1094
1034
  return {
1095
1035
  schema: t.schema,
1096
1036
  schemaLabel: t.schemaLabel,
1097
1037
  label: t.label,
1098
1038
  icon: t.icon,
1099
1039
  frontmatter: t.header ?? {},
1100
- headings: jt(t.headings),
1040
+ headings: At(t.headings),
1101
1041
  title: r,
1102
- titleHtml: Ot(r),
1042
+ titleHtml: Dt(r),
1103
1043
  filepath: n,
1104
1044
  fileMetadata: t.fileMetadata,
1105
1045
  seoMetadata: t.seoMetadata,
1106
1046
  excerpt: t.excerpt
1107
1047
  };
1108
1048
  }
1109
- async function At(e, t, n) {
1110
- let r = await _t(t.content), i = await U(e, t, n), a = JSON.stringify(`@typedown/pages?resource=${encodeURIComponent(n)}`);
1049
+ async function kt(e, t, n) {
1050
+ let r = await gt(t.content), i = await U(e, t, n), a = JSON.stringify(`@typedown/pages?resource=${encodeURIComponent(n)}`);
1111
1051
  return {
1112
1052
  vueSrc: [
1113
1053
  "<script>",
@@ -1119,12 +1059,12 @@ async function At(e, t, n) {
1119
1059
  `import { pageData } from ${a}`,
1120
1060
  "useRouter().route.data = pageData",
1121
1061
  "<\/script>",
1122
- `<template><div class="typedown-content">\n${Mt(r)}\n</div></template>`
1062
+ `<template><div class="typedown-content">\n${jt(r)}\n</div></template>`
1123
1063
  ].join("\n"),
1124
1064
  pageData: i
1125
1065
  };
1126
1066
  }
1127
- function jt(e) {
1067
+ function At(e) {
1128
1068
  let t = [], n = [];
1129
1069
  for (let r of e) {
1130
1070
  let e = {
@@ -1140,13 +1080,13 @@ function jt(e) {
1140
1080
  }
1141
1081
  return t;
1142
1082
  }
1143
- function Mt(e) {
1083
+ function jt(e) {
1144
1084
  return e.replaceAll("{{", "&#123;&#123;").replaceAll("}}", "&#125;&#125;");
1145
1085
  }
1146
1086
  // src/node/plugin/vite/constants.ts
1147
- var Nt = "@typedown/app", Pt = "\0@typedown/app", W = "@typedown/pages", Ft = "\0" + W;
1087
+ var Mt = "@typedown/app", Nt = "\0@typedown/app", W = "@typedown/pages", Pt = "\0" + W;
1148
1088
  W + "";
1149
- var G = "\0@typedown/pages?resource=", K = "@typedown/site-data", It = "\0@typedown/site-data", q = "@typedown/search-index", Lt = "\0@typedown/search-index", J = "@typedown/theme", Rt = "\0@typedown/theme", Y = "typedown:page-data";
1089
+ var G = "\0@typedown/pages?resource=", K = "@typedown/site-data", Ft = "\0@typedown/site-data", q = "@typedown/search-index", It = "\0@typedown/search-index", J = "@typedown/theme", Lt = "\0@typedown/theme", Y = "typedown:page-data";
1150
1090
  // src/node/plugin/vite/virtual/utils.ts
1151
1091
  function X(e, t) {
1152
1092
  let n = e.moduleGraph.getModuleById(t);
@@ -1164,13 +1104,13 @@ function X(e, t) {
1164
1104
  }
1165
1105
  }
1166
1106
  // src/node/plugin/vite/virtual/app.ts
1167
- var zt = class {
1107
+ var Rt = class {
1168
1108
  mountPath;
1169
1109
  constructor(e = "") {
1170
1110
  this.mountPath = e;
1171
1111
  }
1172
1112
  async load(e) {
1173
- let t = await (await e.getTdContext()).getConfig(), n = await L(t.components, e.root);
1113
+ let t = await (await e.getTdContext()).getConfig(), n = await I(t.components, e.root);
1174
1114
  return Ne({
1175
1115
  rootDir: t.rootDir,
1176
1116
  mountPath: this.mountPath,
@@ -1193,9 +1133,9 @@ var zt = class {
1193
1133
  });
1194
1134
  }
1195
1135
  invalidate(e) {
1196
- X(e, Pt);
1136
+ X(e, Nt);
1197
1137
  }
1198
- }, Bt = class {
1138
+ }, zt = class {
1199
1139
  mountPath;
1200
1140
  constructor(e = "") {
1201
1141
  this.mountPath = e;
@@ -1233,21 +1173,21 @@ var zt = class {
1233
1173
  });
1234
1174
  }
1235
1175
  invalidate(e) {
1236
- X(e, Ft);
1176
+ X(e, Pt);
1237
1177
  }
1238
- }, Vt = class {
1178
+ }, Bt = class {
1239
1179
  async load(e) {
1240
1180
  return Pe((await (await e.getTdContext()).getConfig()).layout ?? void 0, e.root);
1241
1181
  }
1242
1182
  invalidate(e) {
1243
- X(e, Rt);
1183
+ X(e, Lt);
1244
1184
  }
1245
- }, Ht = "\0@typedown/site-data", Ut = {
1185
+ }, Vt = "\0@typedown/site-data", Ht = {
1246
1186
  ready: !1,
1247
1187
  contentTree: { entries: [] },
1248
1188
  schemas: {},
1249
1189
  directoryListings: {}
1250
- }, Wt = class {
1190
+ }, Ut = class {
1251
1191
  data;
1252
1192
  scan(e) {
1253
1193
  let t = me("**/*.td", {
@@ -1255,40 +1195,40 @@ var zt = class {
1255
1195
  exclude: (e) => e.startsWith("_")
1256
1196
  }).map((e) => ({
1257
1197
  filepath: e,
1258
- label: T(e),
1198
+ label: C(e),
1259
1199
  header: {}
1260
- })), n = _(t);
1200
+ })), n = g(t);
1261
1201
  this.data = {
1262
1202
  contentTree: n,
1263
1203
  schemas: {},
1264
- directoryListings: g(n.entries, "")
1204
+ directoryListings: h(n.entries, "")
1265
1205
  };
1266
1206
  }
1267
1207
  load(e) {
1268
1208
  let t = this.data ? {
1269
1209
  ready: !0,
1270
1210
  ...this.data
1271
- } : Ut;
1211
+ } : Ht;
1272
1212
  return `export default ${JSON.stringify(t)}`;
1273
1213
  }
1274
1214
  clear() {
1275
1215
  this.data = void 0;
1276
1216
  }
1277
- fetch = b((e, t) => {
1278
- Gt(e).then((e) => {
1217
+ fetch = y((e, t) => {
1218
+ Wt(e).then((e) => {
1279
1219
  this.data = e, t && this.invalidate(t);
1280
1220
  }).catch((e) => {
1281
1221
  console.error("[typedown] Failed to fetch site data:", e instanceof Error ? e.message : e);
1282
1222
  });
1283
1223
  }, 200);
1284
1224
  async fetchSync(e) {
1285
- this.data = await Gt(e);
1225
+ this.data = await Wt(e);
1286
1226
  }
1287
1227
  invalidate(e) {
1288
- X(e, Ht);
1228
+ X(e, Vt);
1289
1229
  }
1290
1230
  };
1291
- async function Gt(e) {
1231
+ async function Wt(e) {
1292
1232
  let [t, n, r] = await Promise.all([
1293
1233
  e.getConfig(),
1294
1234
  e.listSidebar(),
@@ -1296,20 +1236,20 @@ async function Gt(e) {
1296
1236
  ]), i = await Promise.all(r.map(async (t) => [t, (await e.getSchema(t)).properties])), a = Object.fromEntries(i), o = n.map((e) => ({
1297
1237
  ...e,
1298
1238
  header: {}
1299
- })), s = _(o);
1239
+ })), s = g(o);
1300
1240
  return {
1301
1241
  contentTree: s,
1302
1242
  schemas: a,
1303
- directoryListings: g(s.entries, t.siteTitle)
1243
+ directoryListings: h(s.entries, t.siteTitle)
1304
1244
  };
1305
1245
  }
1306
1246
  // src/node/lib/search-indexer/index.ts
1307
- var Kt = class {
1247
+ var Gt = class {
1308
1248
  index;
1309
1249
  constructor() {
1310
1250
  this.index = new ie({
1311
- fields: y,
1312
- storeFields: S
1251
+ fields: v,
1252
+ storeFields: x
1313
1253
  });
1314
1254
  }
1315
1255
  addAll(e) {
@@ -1327,20 +1267,20 @@ var Kt = class {
1327
1267
  }
1328
1268
  };
1329
1269
  // src/node/lib/search-indexer/scan.ts
1330
- function qt(e, t) {
1331
- let n = Zt(e), r = [];
1270
+ function Kt(e, t) {
1271
+ let n = Xt(e), r = [];
1332
1272
  for (let t of n) {
1333
- let n = Xt(e, t);
1273
+ let n = Yt(e, t);
1334
1274
  n && r.push(n);
1335
1275
  }
1336
1276
  t.addAll(r);
1337
1277
  }
1338
- function Jt(e, t, r) {
1339
- let i = Xt(e, j(e, t));
1340
- i ? r.addPage(i) : r.discardPage(n(t));
1278
+ function qt(e, n, r) {
1279
+ let i = Yt(e, A(e, n));
1280
+ i ? r.addPage(i) : r.discardPage(t(n));
1341
1281
  }
1342
- function Yt(e, t) {
1343
- let n = T(e);
1282
+ function Jt(e, t) {
1283
+ let n = C(e);
1344
1284
  if (!t.startsWith("---")) return {
1345
1285
  title: n,
1346
1286
  body: t
@@ -1356,54 +1296,54 @@ function Yt(e, t) {
1356
1296
  body: a
1357
1297
  };
1358
1298
  }
1359
- function Xt(e, t) {
1299
+ function Yt(e, n) {
1360
1300
  let r;
1361
1301
  try {
1362
- r = he(t, "utf-8");
1302
+ r = he(n, "utf-8");
1363
1303
  } catch {
1364
1304
  return;
1365
1305
  }
1366
1306
  if (!r.trim()) return;
1367
- let i = t.slice(e.length + 1), { title: a, body: o } = Yt(i, r);
1307
+ let i = n.slice(e.length + 1), { title: a, body: o } = Jt(i, r);
1368
1308
  return {
1369
- id: n(i),
1309
+ id: t(i),
1370
1310
  title: a,
1371
1311
  text: `${a}\n${o}`
1372
1312
  };
1373
1313
  }
1374
- function Zt(e) {
1314
+ function Xt(e) {
1375
1315
  return me("**/*.td", {
1376
1316
  cwd: e,
1377
1317
  exclude: (e) => e.startsWith("_")
1378
- }).map((t) => j(e, t));
1318
+ }).map((t) => A(e, t));
1379
1319
  }
1380
1320
  // src/node/plugin/vite/virtual/search-index.ts
1381
- var Qt = "\0@typedown/search-index", $t = class {
1382
- indexer = new Kt();
1321
+ var Zt = "\0@typedown/search-index", Qt = class {
1322
+ indexer = new Gt();
1383
1323
  load(e) {
1384
1324
  return `export default ${JSON.stringify(this.indexer.serialize())}`;
1385
1325
  }
1386
1326
  index(e) {
1387
- qt(e, this.indexer);
1327
+ Kt(e, this.indexer);
1388
1328
  }
1389
1329
  reindex(e, t) {
1390
- Jt(e, t, this.indexer);
1330
+ qt(e, t, this.indexer);
1391
1331
  }
1392
1332
  invalidate(e) {
1393
- X(e, Qt);
1333
+ X(e, Zt);
1394
1334
  }
1395
- }, en = _e(import.meta.url);
1396
- function tn() {
1335
+ }, $t = _e(import.meta.url);
1336
+ function en() {
1397
1337
  return [{
1398
1338
  find: "vue/server-renderer",
1399
- replacement: en.resolve("vue/server-renderer")
1339
+ replacement: $t.resolve("vue/server-renderer")
1400
1340
  }, {
1401
1341
  find: "vue",
1402
- replacement: en.resolve("vue/dist/vue.runtime.esm-bundler.js")
1342
+ replacement: $t.resolve("vue/dist/vue.runtime.esm-bundler.js")
1403
1343
  }];
1404
1344
  }
1405
1345
  // src/node/plugin/vite/middleware/vault-assets.ts
1406
- var nn = {
1346
+ var tn = {
1407
1347
  jpg: "image/jpeg",
1408
1348
  jpeg: "image/jpeg",
1409
1349
  png: "image/png",
@@ -1421,58 +1361,58 @@ var nn = {
1421
1361
  woff: "font/woff",
1422
1362
  ttf: "font/ttf"
1423
1363
  };
1424
- function rn(e, t) {
1425
- return (n, r, i) => {
1426
- if (!n.url || n.method !== "GET" || r.writableEnded) return i();
1427
- let c = o(n.url);
1428
- if (c.startsWith("/@") || c.startsWith("/node_modules")) return i();
1429
- let l = a(t.basePath), u = (l && c.startsWith(l) ? c.slice(l.length) : c).replace(/^\//, ""), d = j(e.config.root, t.rootDirectory, u);
1364
+ function nn(e, t) {
1365
+ return (n, r, s) => {
1366
+ if (!n.url || n.method !== "GET" || r.writableEnded) return s();
1367
+ let c = a(n.url);
1368
+ if (c.startsWith("/@") || c.startsWith("/node_modules")) return s();
1369
+ let l = i(t.basePath), u = (l && c.startsWith(l) ? c.slice(l.length) : c).replace(/^\//, ""), d = A(e.config.root, t.rootDirectory, u);
1430
1370
  if (pe(d)) try {
1431
1371
  let e = ge(d);
1432
1372
  if (e.isFile()) {
1433
- let t = nn[s(d).slice(1).toLowerCase()] ?? "application/octet-stream";
1373
+ let t = tn[o(d).slice(1).toLowerCase()] ?? "application/octet-stream";
1434
1374
  r.setHeader("Content-Type", t), r.setHeader("Content-Length", e.size), fe(d).pipe(r);
1435
1375
  return;
1436
1376
  }
1437
1377
  } catch {}
1438
- i();
1378
+ s();
1439
1379
  };
1440
1380
  }
1441
1381
  // src/node/plugin/vite/middleware/virtual-html.ts
1442
- function an(e, t, n) {
1443
- return (r, i, s) => {
1382
+ function rn(e, t, n) {
1383
+ return (r, o, s) => {
1444
1384
  if (!r.url) return s();
1445
- let c = a(o(r.url)), l = a(n.basePath);
1385
+ let c = i(a(r.url)), l = i(n.basePath);
1446
1386
  if (c.startsWith("/@") || c.startsWith("/node_modules") || !c.startsWith(l)) return s();
1447
1387
  let u = c.slice(l.length);
1448
1388
  if (u.startsWith("/@") || u.startsWith("/node_modules") || c.includes(".") && !c.endsWith("/index.html")) return s();
1449
1389
  t.getConfig().then(async (t) => {
1450
- let a = await e.transformIndexHtml(r.url ?? "", on(n, t));
1451
- i.setHeader("Content-Type", "text/html"), i.end(a);
1390
+ let i = await e.transformIndexHtml(r.url ?? "", an(n, t));
1391
+ o.setHeader("Content-Type", "text/html"), o.end(i);
1452
1392
  }).catch(() => s());
1453
1393
  };
1454
1394
  }
1455
- function on(e, t) {
1456
- return e.devHtml === void 0 && (e.devHtml = D({
1395
+ function an(e, t) {
1396
+ return e.devHtml === void 0 && (e.devHtml = T({
1457
1397
  title: t.siteTitle,
1458
1398
  description: t.siteDescription,
1459
1399
  base: "/",
1460
1400
  ogType: "website",
1461
- entryScript: Nt
1401
+ entryScript: Mt
1462
1402
  })), e.devHtml;
1463
1403
  }
1464
1404
  // src/node/lib/prop-schema.ts
1465
- function sn(e, t, n) {
1405
+ function on(e, t, n) {
1466
1406
  let r = {};
1467
1407
  for (let i of e) {
1468
- let e = `./${A.relative(t, i.absolutePath)}`;
1408
+ let e = `./${k.relative(t, i.absolutePath)}`;
1469
1409
  try {
1470
1410
  let t = n.getComponentMeta(i.absolutePath), a = {}, o = !1;
1471
1411
  for (let e of t.props) {
1472
1412
  if (e.global) continue;
1473
1413
  let t = Q(e.schema);
1474
1414
  if (t !== void 0) {
1475
- let n = { schema: e.required ? t : u(t) };
1415
+ let n = { schema: e.required ? t : l(t) };
1476
1416
  e.description && (n.description = e.description), a[e.name] = n, o = !0;
1477
1417
  }
1478
1418
  }
@@ -1488,7 +1428,7 @@ function sn(e, t, n) {
1488
1428
  }
1489
1429
  return r;
1490
1430
  }
1491
- function cn(e) {
1431
+ function sn(e) {
1492
1432
  if (!e || e.length !== 1) return;
1493
1433
  let t = Q(e[0]);
1494
1434
  return t === void 0 ? void 0 : {
@@ -1496,8 +1436,8 @@ function cn(e) {
1496
1436
  items: t
1497
1437
  };
1498
1438
  }
1499
- function ln(e, t) {
1500
- if (t && 0 < Object.keys(t).length) return un(t);
1439
+ function cn(e, t) {
1440
+ if (t && 0 < Object.keys(t).length) return ln(t);
1501
1441
  let n = /^(?:Record<string,\s*(\w+)>|\{\s*\[key:\s*string\]:\s*(\w+);\s*\})$/.exec(e);
1502
1442
  if (!n) return;
1503
1443
  let r = Z(n[1] ?? n[2]);
@@ -1525,12 +1465,12 @@ function Z(e) {
1525
1465
  i.push(t);
1526
1466
  }
1527
1467
  let a = i.length === 1 ? i[0] : { oneOf: i };
1528
- return n ? u(a) : a;
1468
+ return n ? l(a) : a;
1529
1469
  }
1530
1470
  return;
1531
1471
  }
1532
1472
  }
1533
- function un(e) {
1473
+ function ln(e) {
1534
1474
  let t = {}, n = [];
1535
1475
  for (let [r, i] of Object.entries(e)) {
1536
1476
  let e = Q(i.schema);
@@ -1547,19 +1487,19 @@ function un(e) {
1547
1487
  function Q(e) {
1548
1488
  if (typeof e == "string") return Z(e);
1549
1489
  switch (e.kind) {
1550
- case "enum": return dn(e.schema);
1551
- case "array": return cn(e.schema);
1552
- case "object": return ln(e.type, e.schema);
1490
+ case "enum": return un(e.schema);
1491
+ case "array": return sn(e.schema);
1492
+ case "object": return cn(e.type, e.schema);
1553
1493
  case "literal": return "value" in e ? { const: e.value } : void 0;
1554
1494
  default: return;
1555
1495
  }
1556
1496
  }
1557
- function dn(e) {
1497
+ function un(e) {
1558
1498
  let t = e ?? [], n = t.some((e) => e === "undefined" || e === "null"), r = t.filter((e) => e !== "undefined" && e !== "null");
1559
1499
  if (r.length === 0) return;
1560
1500
  if (r.length === 1) {
1561
1501
  let e = Q(r[0]);
1562
- return e === void 0 ? void 0 : n ? u(e) : e;
1502
+ return e === void 0 ? void 0 : n ? l(e) : e;
1563
1503
  }
1564
1504
  if (r.every((e) => typeof e == "object" && e.kind === "literal")) {
1565
1505
  let e = [];
@@ -1568,7 +1508,7 @@ function dn(e) {
1568
1508
  e.push(t.value);
1569
1509
  }
1570
1510
  let t = { enum: e };
1571
- return n ? u(t) : t;
1511
+ return n ? l(t) : t;
1572
1512
  }
1573
1513
  let i = [];
1574
1514
  for (let e of r) {
@@ -1578,46 +1518,46 @@ function dn(e) {
1578
1518
  }
1579
1519
  if (i.length === 0) return;
1580
1520
  let a = { oneOf: i };
1581
- return n ? u(a) : a;
1521
+ return n ? l(a) : a;
1582
1522
  }
1583
1523
  // src/node/plugin/vite/subplugins/component-contract.ts
1584
- var fn = ".typedown/components.json";
1585
- function pn(e) {
1524
+ var dn = ".typedown/components.json";
1525
+ function fn(e) {
1586
1526
  return {
1587
1527
  name: "vite-plugin-typedown-component-contract",
1588
1528
  async buildStart() {
1589
1529
  let t = e();
1590
1530
  if (!t) return;
1591
- let n = await L((await (await t.getTdContext()).getConfig()).components, t.root);
1531
+ let n = await I((await (await t.getTdContext()).getConfig()).components, t.root);
1592
1532
  $(t.root, n);
1593
1533
  },
1594
1534
  configureServer(t) {
1595
1535
  let n = e();
1596
1536
  n && n.getTdContext().then(async (e) => {
1597
- let r = await e.getConfig(), i = await L(r.components, n.root);
1598
- $(n.root, i), mn(t, r.components, n.root);
1537
+ let r = await e.getConfig(), i = await I(r.components, n.root);
1538
+ $(n.root, i), pn(t, r.components, n.root);
1599
1539
  }).catch(() => {});
1600
1540
  }
1601
1541
  };
1602
1542
  }
1603
- function mn(e, t, n) {
1604
- let r = new Set(t.filter((e) => e.kind === "explicit").map((e) => N(A.resolve(n, e.source)))), i = new Set(t.filter((e) => e.kind === "dir").map((e) => N(A.resolve(n, e.path))));
1543
+ function pn(e, t, n) {
1544
+ 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))));
1605
1545
  for (let t of i) e.watcher.add(t);
1606
1546
  let a = (a) => {
1607
- hn(a, r, i) && (e.config.logger.info("[typedown] component changed, rebuilding contract..."), L(t, n).then((e) => $(n, e)).catch(() => {}));
1547
+ mn(a, r, i) && (e.config.logger.info("[typedown] component changed, rebuilding contract..."), I(t, n).then((e) => $(n, e)).catch(() => {}));
1608
1548
  };
1609
1549
  e.watcher.on("change", a), e.watcher.on("add", a), e.watcher.on("unlink", a);
1610
1550
  }
1611
- function hn(e, t, n) {
1551
+ function mn(e, t, n) {
1612
1552
  if (!e.endsWith(".vue")) return !1;
1613
- let r = N(e);
1553
+ let r = M(e);
1614
1554
  if (t.has(r)) return !0;
1615
1555
  for (let e of n) if (r.startsWith(e + "/")) return !0;
1616
1556
  return !1;
1617
1557
  }
1618
- function gn() {
1558
+ function hn() {
1619
1559
  try {
1620
- let e = A.dirname(le(import.meta.url)), t = A.resolve(e, "builtin-components.json"), n = JSON.parse(F.readFileSync(t, "utf-8"));
1560
+ let e = k.dirname(le(import.meta.url)), t = k.resolve(e, "builtin-components.json"), n = JSON.parse(P.readFileSync(t, "utf-8"));
1621
1561
  for (let e of Object.values(n)) if (typeof e == "object" && e && "source" in e) {
1622
1562
  let t = e;
1623
1563
  typeof t.source == "string" && t.source.startsWith("./") && (t.source = `typerighter/${t.source.slice(2)}`);
@@ -1627,18 +1567,18 @@ function gn() {
1627
1567
  return {};
1628
1568
  }
1629
1569
  }
1630
- var _n = gn();
1570
+ var gn = hn();
1631
1571
  function $(e, t) {
1632
- if (!(0 < Object.keys(_n).length) && t.length === 0) return;
1633
- let n = 0 < t.length ? sn(t, e, Fe(e)) : {}, r = {
1634
- ..._n,
1572
+ if (!(0 < Object.keys(gn).length) && t.length === 0) return;
1573
+ let n = 0 < t.length ? on(t, e, Fe(e)) : {}, r = {
1574
+ ...gn,
1635
1575
  ...n
1636
- }, i = A.join(e, fn);
1637
- F.mkdirSync(A.dirname(i), { recursive: !0 }), F.writeFileSync(i, JSON.stringify(r, null, 2));
1576
+ }, i = k.join(e, dn);
1577
+ P.mkdirSync(k.dirname(i), { recursive: !0 }), P.writeFileSync(i, JSON.stringify(r, null, 2));
1638
1578
  }
1639
1579
  // src/node/plugin/vite/index.ts
1640
- function vn(e = {}) {
1641
- let n = e.context, r, i, a, o = new zt(e.root ?? ""), s = new Vt(), c = new Bt(e.root ?? ""), u = new Wt(), d = new $t(), f = {
1580
+ function _n(t = {}) {
1581
+ let n = t.context, r, i, a, o = new Rt(t.root ?? ""), s = new Bt(), l = new zt(t.root ?? ""), u = new Ut(), d = new Qt(), f = {
1642
1582
  devHtml: void 0,
1643
1583
  basePath: "/",
1644
1584
  rootDirectory: "vault"
@@ -1650,75 +1590,75 @@ function vn(e = {}) {
1650
1590
  let m = {
1651
1591
  name: "vite-plugin-typedown",
1652
1592
  enforce: "pre",
1653
- async config(t) {
1593
+ async config(e) {
1654
1594
  if (!n) {
1655
- let r = e.root ? j(t.root ?? process.cwd(), e.root) : re(t.root ?? process.cwd());
1595
+ let r = t.root ? A(e.root ?? process.cwd(), t.root) : re(e.root ?? process.cwd());
1656
1596
  n = ne(r);
1657
1597
  }
1658
- a = t.base ?? "/";
1598
+ a = e.base ?? "/";
1659
1599
  let r = await (await p()).getConfig();
1660
1600
  return {
1661
- base: t.base ?? r.basePath,
1601
+ base: e.base ?? r.basePath,
1662
1602
  publicDir: r.publicDir,
1663
1603
  server: {
1664
- port: t.server?.port ?? 8686,
1665
- strictPort: t.server?.strictPort ?? !1
1604
+ port: e.server?.port ?? 8686,
1605
+ strictPort: e.server?.strictPort ?? !1
1666
1606
  },
1667
- resolve: { alias: tn() },
1607
+ resolve: { alias: en() },
1668
1608
  ssr: { noExternal: ["typerighter"] }
1669
1609
  };
1670
1610
  },
1671
1611
  configResolved(e) {
1672
- i = j(e.root, e.build.outDir);
1612
+ i = A(e.root, e.build.outDir);
1673
1613
  },
1674
1614
  async buildStart() {
1675
1615
  if (r) return;
1676
- let e = await p(), t = await e.getConfig(), n = j(t.rootDir);
1616
+ let e = await p(), t = await e.getConfig(), n = A(t.rootDir);
1677
1617
  d.index(n), await u.fetchSync(e);
1678
1618
  let i = await e.checkVault();
1679
- if (Cn(i.diagnostics), 0 < i.errorCount) {
1619
+ if (Sn(i.diagnostics), 0 < i.errorCount) {
1680
1620
  let e = i.diagnostics.filter((e) => e.severity === "error").map((e) => ` ${e.filepath}:${e.line}:${e.column} - ${e.message} (${e.code})`);
1681
1621
  this.error(`Vault check failed with ${i.errorCount} error(s):\n${e.join("\n")}`);
1682
1622
  }
1683
1623
  },
1684
1624
  resolveId(e) {
1685
- if (e === "/@typedown/app" || e === "@typedown/app") return Pt;
1686
- if (e === "@typedown/pages") return Ft;
1687
- if (e.startsWith("@typedown/pages?resource=")) return c.resolvePageData(e);
1688
- if (e === "@typedown/site-data") return It;
1689
- if (e === "@typedown/search-index") return Lt;
1690
- if (e === "@typedown/theme") return Rt;
1625
+ if (e === "/@typedown/app" || e === "@typedown/app") return Nt;
1626
+ if (e === "@typedown/pages") return Pt;
1627
+ if (e.startsWith("@typedown/pages?resource=")) return l.resolvePageData(e);
1628
+ if (e === "@typedown/site-data") return Ft;
1629
+ if (e === "@typedown/search-index") return It;
1630
+ if (e === "@typedown/theme") return Lt;
1691
1631
  },
1692
1632
  async load(e) {
1693
- if (c.isPageDataModule(e)) return c.loadPageData(e, await p());
1633
+ if (l.isPageDataModule(e)) return l.loadPageData(e, await p());
1694
1634
  if (e !== "\0@typedown/search-index" && e !== "\0@typedown/site-data" && e !== "\0@typedown/pages" && e !== "\0@typedown/app" && e !== "\0@typedown/theme") return;
1695
1635
  let t = await p();
1696
1636
  if (e === "\0@typedown/search-index") return d.load(t);
1697
1637
  if (e === "\0@typedown/site-data") return u.load(t);
1698
- if (e === "\0@typedown/pages") return c.load(t);
1638
+ if (e === "\0@typedown/pages") return l.load(t);
1699
1639
  if (e === "\0@typedown/app") return o.load(n);
1700
1640
  if (e === "\0@typedown/theme") return s.load(n);
1701
1641
  },
1702
1642
  async configureServer(e) {
1703
1643
  r = e;
1704
- let t = await p(), n = await t.getConfig(), i = j(n.rootDir);
1644
+ let t = await p(), n = await t.getConfig(), i = A(n.rootDir);
1705
1645
  d.index(i), u.scan(i), u.fetch(t, r), e.httpServer?.once("listening", async () => {
1706
1646
  let e = await t.checkVault();
1707
- 0 < e.diagnostics.length && (console.error(""), Cn(e.diagnostics));
1647
+ 0 < e.diagnostics.length && (console.error(""), Sn(e.diagnostics));
1708
1648
  }), t.rpc.onConfigChanged(() => {
1709
- r && (f.devHtml = void 0, u.clear(), o.invalidate(r), s.invalidate(r), c.invalidate(r), bn(r), u.fetch(t, r));
1649
+ r && (f.devHtml = void 0, u.clear(), o.invalidate(r), s.invalidate(r), l.invalidate(r), yn(r), u.fetch(t, r));
1710
1650
  }), t.rpc.onComponentContractChanged(() => {
1711
- r && (o.invalidate(r), bn(r));
1651
+ r && (o.invalidate(r), yn(r));
1712
1652
  });
1713
1653
  function a(...e) {
1714
1654
  r && t.getConfig().then((t) => {
1715
1655
  if (!r) return;
1716
1656
  let n = [];
1717
1657
  for (let i of e) {
1718
- let e = N(j(r.config.root, t.rootDir, i)), a = r.moduleGraph.getModulesByFile(e);
1658
+ let e = M(A(r.config.root, t.rootDir, i)), a = r.moduleGraph.getModulesByFile(e);
1719
1659
  if (a?.size) {
1720
- for (let e of a) r.moduleGraph.invalidateModule(e), n.push(Sn(e));
1721
- c.invalidatePageData(r, i);
1660
+ for (let e of a) r.moduleGraph.invalidateModule(e), n.push(xn(e));
1661
+ l.invalidatePageData(r, i);
1722
1662
  }
1723
1663
  }
1724
1664
  0 < n.length && r.hot.send({
@@ -1728,29 +1668,29 @@ function vn(e = {}) {
1728
1668
  }).catch(() => {});
1729
1669
  }
1730
1670
  t.rpc.onContentUpdated(({ filepath: e, affectedFiles: n = [] }) => {
1731
- r && (d.reindex(i, e), d.invalidate(r), c.invalidate(r), u.fetch(t, r), a(e, ...n), c.sendPageData(r, t, e));
1671
+ r && (d.reindex(i, e), d.invalidate(r), l.invalidate(r), u.fetch(t, r), a(e, ...n), l.sendPageData(r, t, e));
1732
1672
  }), t.rpc.onContentDeleted(({ filepath: e }) => {
1733
- r && (d.reindex(i, e), d.invalidate(r), c.invalidate(r), u.fetch(t, r), a(e));
1673
+ r && (d.reindex(i, e), d.invalidate(r), l.invalidate(r), u.fetch(t, r), a(e));
1734
1674
  });
1735
- function l() {
1736
- r && (u.clear(), xn(r), u.fetch(t, r));
1675
+ function c() {
1676
+ r && (u.clear(), bn(r), u.fetch(t, r));
1737
1677
  }
1738
- t.rpc.onSchemaUpdated(l), t.rpc.onSchemaDeleted(l);
1678
+ t.rpc.onSchemaUpdated(c), t.rpc.onSchemaDeleted(c);
1739
1679
  let m = await t.getConfig();
1740
1680
  f.basePath = m.basePath, f.rootDirectory = m.rootDir, t.rpc.onConfigChanged((e) => {
1741
1681
  f.basePath = e.basePath, f.rootDirectory = e.rootDir, f.devHtml = void 0;
1742
- }), e.middlewares.use(rn(e, f)), e.middlewares.use(an(e, t, f));
1682
+ }), e.middlewares.use(nn(e, f)), e.middlewares.use(rn(e, t, f));
1743
1683
  },
1744
- async transform(e, n) {
1684
+ async transform(t, n) {
1745
1685
  let r = n.split("?")[0];
1746
- if (!E(r)) return;
1747
- if (t(r)) return {
1686
+ if (!w(r)) return;
1687
+ if (e(r)) return {
1748
1688
  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>`,
1749
1689
  map: null
1750
1690
  };
1751
- let i = await p(), a = await i.getConfig(), o = l(r, a.rootDir);
1691
+ let i = await p(), a = await i.getConfig(), o = c(r, a.rootDir);
1752
1692
  try {
1753
- let { vueSrc: e } = await At(i, await i.getFile(o), o);
1693
+ let { vueSrc: e } = await kt(i, await i.getFile(o), o);
1754
1694
  return {
1755
1695
  code: e,
1756
1696
  map: null
@@ -1762,13 +1702,13 @@ function vn(e = {}) {
1762
1702
  }
1763
1703
  },
1764
1704
  handleHotUpdate({ file: e }) {
1765
- if (E(e)) return [];
1705
+ if (w(e)) return [];
1766
1706
  },
1767
1707
  async closeBundle() {
1768
- if (!e.context && n) try {
1708
+ if (!t.context && n) try {
1769
1709
  let e = (await (await n.getTdContext()).getConfig()).basePath, t = e.startsWith(a) ? e.slice(a.length) : e.replace(/^\//, "");
1770
- await ze(n, {
1771
- outDir: j(i, t),
1710
+ await Re(n, {
1711
+ outDir: A(i, t),
1772
1712
  base: e
1773
1713
  });
1774
1714
  } finally {
@@ -1776,31 +1716,31 @@ function vn(e = {}) {
1776
1716
  }
1777
1717
  }
1778
1718
  }, h = oe({
1779
- include: e.root ? RegExp(`${e.root.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}/.*\\.(?:vue|td)$`) : /\.(?:vue|td)$/,
1719
+ include: t.root ? RegExp(`${t.root.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}/.*\\.(?:vue|td)$`) : /\.(?:vue|td)$/,
1780
1720
  template: { transformAssetUrls: !1 }
1781
1721
  });
1782
1722
  return [
1783
1723
  m,
1784
- pn(() => n),
1724
+ fn(() => n),
1785
1725
  h,
1786
1726
  ...ae()
1787
1727
  ];
1788
1728
  }
1789
- function yn(e) {
1729
+ function vn(e) {
1790
1730
  return [...e.moduleGraph.idToModuleMap.entries()].filter(([e]) => e.endsWith(".td")).map(([, e]) => e);
1791
1731
  }
1792
- function bn(e) {
1793
- for (let t of yn(e)) e.moduleGraph.invalidateModule(t);
1732
+ function yn(e) {
1733
+ for (let t of vn(e)) e.moduleGraph.invalidateModule(t);
1794
1734
  e.hot.send({ type: "full-reload" });
1795
1735
  }
1796
- function xn(e) {
1797
- let t = yn(e).map((t) => (e.moduleGraph.invalidateModule(t), Sn(t)));
1736
+ function bn(e) {
1737
+ let t = vn(e).map((t) => (e.moduleGraph.invalidateModule(t), xn(t)));
1798
1738
  0 < t.length && e.hot.send({
1799
1739
  type: "update",
1800
1740
  updates: t
1801
1741
  });
1802
1742
  }
1803
- function Sn(e) {
1743
+ function xn(e) {
1804
1744
  return {
1805
1745
  type: "js-update",
1806
1746
  path: e.url,
@@ -1808,10 +1748,10 @@ function Sn(e) {
1808
1748
  timestamp: Date.now()
1809
1749
  };
1810
1750
  }
1811
- function Cn(e) {
1751
+ function Sn(e) {
1812
1752
  for (let t of e) {
1813
- let e = `${t.filepath}:${t.line}:${t.column}`, n = t.severity === "error" ? M.red("error") : M.yellow("warn");
1814
- console.error(` ${n} ${e} ${t.message} ${M.dim(`(${t.code})`)}`);
1753
+ let e = `${t.filepath}:${t.line}:${t.column}`, n = t.severity === "error" ? j.red("error") : j.yellow("warn");
1754
+ console.error(` ${n} ${e} ${t.message} ${j.dim(`(${t.code})`)}`);
1815
1755
  }
1816
1756
  }
1817
- export { K as a, q as i, W as n, J as o, Y as r, ze as s, vn as t };
1757
+ export { K as a, q as i, W as n, J as o, Y as r, Re as s, _n as t };