typerighter 0.38.1 → 0.40.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.
Files changed (50) hide show
  1. package/dist/{app-Bnln5XCo.js → app-GI_8rzn8.js} +339 -338
  2. package/dist/{cli-DEOw0tox.js → cli-CPY9dpTQ.js} +28 -26
  3. package/dist/cli.js +1 -1
  4. package/dist/client/app/index.d.ts +8 -0
  5. package/dist/client/app/index.d.ts.map +1 -1
  6. package/dist/client/theme-default.js +174 -174
  7. package/dist/client.js +1 -1
  8. package/dist/context-CNTdcpo4.js +192 -0
  9. package/dist/index.js +3 -3
  10. package/dist/{init-BhEVxNbG.js → init-YypOGdjI.js} +9 -6
  11. package/dist/jsonld-e_0GNJdS.js +84 -0
  12. package/dist/node/build/index.d.ts.map +1 -1
  13. package/dist/node/build/prerender.d.ts +21 -0
  14. package/dist/node/build/prerender.d.ts.map +1 -1
  15. package/dist/node/build/prerenderWorker.d.ts +2 -0
  16. package/dist/node/build/prerenderWorker.d.ts.map +1 -0
  17. package/dist/node/build/seo/feed.d.ts +3 -0
  18. package/dist/node/build/seo/feed.d.ts.map +1 -0
  19. package/dist/node/build/seo/index.d.ts +5 -0
  20. package/dist/node/build/seo/index.d.ts.map +1 -0
  21. package/dist/node/build/seo/jsonld.d.ts +10 -0
  22. package/dist/node/build/seo/jsonld.d.ts.map +1 -0
  23. package/dist/node/build/seo/page.d.ts +6 -0
  24. package/dist/node/build/seo/page.d.ts.map +1 -0
  25. package/dist/node/build/seo/sitemap.d.ts +3 -0
  26. package/dist/node/build/seo/sitemap.d.ts.map +1 -0
  27. package/dist/node/cli/index.d.ts.map +1 -1
  28. package/dist/node/lib/htmlTemplate.d.ts +30 -0
  29. package/dist/node/lib/htmlTemplate.d.ts.map +1 -0
  30. package/dist/node/lib/render/vue.d.ts.map +1 -1
  31. package/dist/node/lib/worker-pool/index.d.ts +21 -0
  32. package/dist/node/lib/worker-pool/index.d.ts.map +1 -0
  33. package/dist/node/plugin/vite/virtual/app.d.ts +2 -0
  34. package/dist/node/plugin/vite/virtual/app.d.ts.map +1 -1
  35. package/dist/prerenderWorker.js +39 -0
  36. package/dist/rolldown-runtime-B0aSnxlc.js +20 -0
  37. package/dist/shared/constants.d.ts.map +1 -1
  38. package/dist/shared/types/ssg.d.ts +6 -0
  39. package/dist/shared/types/ssg.d.ts.map +1 -1
  40. package/dist/shared/utils/time.d.ts +1 -0
  41. package/dist/shared/utils/time.d.ts.map +1 -1
  42. package/dist/shared/utils/url.d.ts +1 -0
  43. package/dist/shared/utils/url.d.ts.map +1 -1
  44. package/dist/{shared-l3GF0JOc.js → shared-LPNgvigl.js} +111 -120
  45. package/dist/shared.js +2 -2
  46. package/dist/{vite-DACnySpv.js → vite-Djs3IU9Y.js} +508 -587
  47. package/dist/vite.js +1 -1
  48. package/package.json +7 -7
  49. package/dist/node/lib/html-template.d.ts +0 -22
  50. package/dist/node/lib/html-template.d.ts.map +0 -1
@@ -1,79 +1,173 @@
1
- import { F as e, I as t, K as n, M as r, P as i, R as a, S as o, T as s, U as c, W as l, _ as u, g as d, h as f, m as p, p as m, q as h, s as g, u as _, v, w as y, z as b } from "./shared-l3GF0JOc.js";
2
- import { t as x } from "./temml-DZbhOfRE.js";
3
- import { t as S } from "./es-ClqUVRJn.js";
4
- import C, { resolve as w } from "node:path";
5
- import T from "picocolors";
6
- import ee from "@tailwindcss/vite";
7
- import te from "@vitejs/plugin-vue";
8
- import { build as ne, createLogger as re, normalizePath as ie } from "vite";
9
- import E from "node:fs/promises";
10
- import { createHighlighter as ae, guessEmbeddedLanguages as oe, isSpecialLang as se } from "shiki";
11
- import D, { createReadStream as ce, existsSync as le, globSync as O, readFileSync as ue, statSync as de } from "node:fs";
12
- import { RpcServer as fe } from "@typerighter/rpc-server";
13
- import { RPC_CANCELLED_CODE as pe, RpcClient as me } from "@typerighter/rpc-client";
14
- import { createRequire as he } from "node:module";
15
- //#region src/node/lib/html-template.ts
16
- function k(e) {
17
- let t = g(e.title), n = g(e.description), r = e.siteTitle !== void 0 && e.title !== e.siteTitle ? `${t} - ${g(e.siteTitle)}` : t, i = e.canonicalUrl === void 0 ? "" : `\n <link rel="canonical" href="${g(e.canonicalUrl)}">`, a = e.headExtra === void 0 ? "" : e.headExtra + "\n", o = JSON.stringify({
18
- "@context": "https://schema.org",
19
- "@type": "Article",
20
- headline: e.title,
21
- description: e.description
22
- });
23
- return `<!DOCTYPE html>
24
- <html lang="${e.lang ?? "en"}">
25
- <head>
26
- <meta charset="UTF-8">
27
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
28
- <title>${r}</title>
29
- <meta name="description" content="${n}">${i}
30
- <link rel="icon" href="${e.base}favicon.svg" type="image/svg+xml">
31
- <meta property="og:type" content="article">
32
- <meta property="og:title" content="${t}">
33
- <meta property="og:description" content="${n}">
34
- <meta property="og:image" content="${e.base}og-image.png">
35
- <meta name="twitter:card" content="summary_large_image">
36
- <meta name="twitter:title" content="${t}">
37
- <meta name="twitter:description" content="${n}">
38
- <meta name="twitter:image" content="${e.base}og-image.png">
39
- <script type="application/ld+json">${o}<\/script>
40
- <script>
41
- (function () {
42
- var theme = localStorage.getItem('td-theme');
43
- var isDark = theme === 'dark' || (theme !== 'light' && matchMedia('(prefers-color-scheme: dark)').matches);
44
- if (isDark) document.documentElement.classList.add('dark');
45
- })()
46
- <\/script>
47
- ${a} </head>
48
- <body>
49
- <div id="app">${e.appContent ?? ""}</div>
50
- <script type="module" src="${e.base}${e.entryScript}"><\/script>
51
- </body>
52
- </html>`;
1
+ import { B as e, C as t, E as n, G as r, I as i, J as a, K as o, L as s, N as c, P as l, R as u, T as d, V as f, Y as p, _ as m, c as h, d as g, g as _, h as v, i as y, m as b, v as x, y as S } from "./shared-LPNgvigl.js";
2
+ import { a as C, i as w, n as T, o as E, r as D, s as O, t as ee } from "./jsonld-e_0GNJdS.js";
3
+ import { t as te } from "./temml-DZbhOfRE.js";
4
+ import { a as ne, i as re, n as ie, r as ae } from "./context-CNTdcpo4.js";
5
+ import { t as oe } from "./es-ClqUVRJn.js";
6
+ import k, { resolve as A } from "node:path";
7
+ import j from "picocolors";
8
+ import se from "@tailwindcss/vite";
9
+ import ce from "@vitejs/plugin-vue";
10
+ import { build as M, normalizePath as le } from "vite";
11
+ import N from "node:fs/promises";
12
+ import { fileURLToPath as ue } from "node:url";
13
+ import de from "node:os";
14
+ import { Worker as fe } from "node:worker_threads";
15
+ import { createHighlighter as pe, guessEmbeddedLanguages as me, isSpecialLang as he } from "shiki";
16
+ import { createReadStream as ge, existsSync as _e, globSync as P, readFileSync as ve, statSync as ye } from "node:fs";
17
+ import { createRequire as be } from "node:module";
18
+ //#region src/node/lib/worker-pool/index.ts
19
+ var xe = class {
20
+ workers = [];
21
+ queue = [];
22
+ destroyed = !1;
23
+ startupError;
24
+ constructor(e) {
25
+ let t = e.concurrency ?? Math.max(1, Math.floor(de.cpus().length / 2));
26
+ for (let n = 0; n < t; n++) {
27
+ let t = new fe(e.filename, { workerData: e.workerData }), n = { worker: t };
28
+ this.workers.push(n), t.on("message", (e) => {
29
+ let t = n.pending;
30
+ n.pending = void 0, e.error === void 0 ? t?.resolve(e.result) : t?.reject(Error(e.error)), this.dispatch(n);
31
+ }), t.on("error", (e) => {
32
+ let t = n.pending;
33
+ n.pending = void 0, t?.reject(e), this.destroyAll(e);
34
+ });
35
+ }
36
+ }
37
+ run(e) {
38
+ return this.destroyed ? Promise.reject(this.startupError ?? /* @__PURE__ */ Error("Worker pool is destroyed")) : new Promise((t, n) => {
39
+ let r = {
40
+ task: e,
41
+ resolve: t,
42
+ reject: n
43
+ }, i = this.workers.find((e) => e.pending === void 0);
44
+ i ? (i.pending = r, i.worker.postMessage(r.task)) : this.queue.push(r);
45
+ });
46
+ }
47
+ async destroy() {
48
+ this.destroyed = !0, this.rejectAll(/* @__PURE__ */ Error("Worker pool is destroyed")), await Promise.all(this.workers.map((e) => e.worker.terminate()));
49
+ }
50
+ dispatch(e) {
51
+ let t = this.queue.shift();
52
+ t !== void 0 && (e.pending = t, e.worker.postMessage(t.task));
53
+ }
54
+ rejectAll(e) {
55
+ for (let t of this.queue) t.reject(e);
56
+ this.queue.length = 0;
57
+ for (let t of this.workers) t.pending &&= (t.pending.reject(e), void 0);
58
+ }
59
+ destroyAll(e) {
60
+ this.destroyed || (this.startupError = e instanceof Error ? e : Error(String(e)), this.destroyed = !0, this.rejectAll(e), Promise.all(this.workers.map((e) => e.worker.terminate())).catch(() => {}));
61
+ }
62
+ };
63
+ //#endregion
64
+ //#region src/node/build/seo/sitemap.ts
65
+ function Se(e, t, n, r) {
66
+ let i = n ?? "";
67
+ return `<?xml version="1.0" encoding="UTF-8"?>
68
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
69
+ ${e.map((e) => {
70
+ let n = h(i + t + c(e)), a = r?.get(e);
71
+ return ` <url><loc>${n}</loc>${a === void 0 ? "" : `<lastmod>${y(a)}</lastmod>`}</url>`;
72
+ }).join("\n")}
73
+ </urlset>
74
+ `;
75
+ }
76
+ function Ce(e, t) {
77
+ return `User-agent: *
78
+ Allow: /
79
+
80
+ Sitemap: ${e}${t}sitemap.xml
81
+ `;
82
+ }
83
+ //#endregion
84
+ //#region src/node/build/seo/feed.ts
85
+ function we(t, n, r, i, a, o) {
86
+ let s = [...t].filter((e) => e.metadata.mtime > 0).sort((e, t) => t.metadata.mtime - e.metadata.mtime).slice(0, 50).map((t) => {
87
+ let i = e(t.filepath), a = `${r}${n}${i}`, o = new Date(t.metadata.mtime).toUTCString(), s = h(t.label ?? i), c = t.excerpt === void 0 ? "" : `<![CDATA[${t.excerpt}]]>`;
88
+ return ` <item>
89
+ <title>${s}</title>
90
+ <link>${h(a)}</link>
91
+ <guid>${h(a)}</guid>
92
+ <pubDate>${o}</pubDate>
93
+ <description>${c}</description>
94
+ </item>`;
95
+ }).join("\n");
96
+ return `<?xml version="1.0" encoding="UTF-8"?>
97
+ <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
98
+ <channel>
99
+ <title>${h(i)}</title>
100
+ <link>${h(r + n)}</link>
101
+ <description>${h(a)}</description>
102
+ <language>${o}</language>
103
+ <atom:link href="${h(r + n)}feed.xml" rel="self" type="application/rss+xml"/>
104
+ ${s}
105
+ </channel>
106
+ </rss>
107
+ `;
53
108
  }
54
109
  //#endregion
55
110
  //#region src/node/build/prerender.ts
56
- async function ge(e) {
57
- let t = await import(e.ssrEntryPath), { clientEntry: n, cssFiles: r, jsFiles: i } = await _e(e.clientOutDir), a = e.pagePaths.length, o = 0, s = [r.map((t) => ` <link rel="stylesheet" href="${e.base}${t}">`).join("\n"), i.map((t) => ` <link rel="modulepreload" href="${e.base}${t}">`).join("\n")].filter(Boolean).join("\n") || void 0;
58
- for (let r = 0; r < a; r += 32) {
59
- let i = e.pagePaths.slice(r, r + 32);
60
- await Promise.all(i.map(async (r) => {
61
- let i = await t.render(r), c = k({
62
- title: i.pageData.title,
63
- description: i.pageData.frontmatter.description === void 0 ? "" : String(i.pageData.frontmatter.description),
111
+ var Te = 64;
112
+ async function Ee(e) {
113
+ let { clientEntry: t, cssFiles: n, jsFiles: r } = await ke(e.clientOutDir), i = [n.map((t) => ` <link rel="stylesheet" href="${e.base}${t}">`).join("\n"), r.map((t) => ` <link rel="modulepreload" href="${e.base}${t}">`).join("\n")].filter(Boolean).join("\n") || void 0;
114
+ e.pagePaths.length >= Te ? await De(e, t, i) : await Oe(e, t, i);
115
+ }
116
+ async function De(e, t, n) {
117
+ let r = new xe({
118
+ filename: k.resolve(ue(import.meta.url), "../prerenderWorker.js"),
119
+ workerData: {
120
+ ssrEntryPath: e.ssrEntryPath,
121
+ base: e.base,
122
+ origin: e.origin,
123
+ lang: e.lang,
124
+ siteTitle: e.siteTitle,
125
+ author: e.author,
126
+ clientEntry: t,
127
+ headExtra: n
128
+ }
129
+ }), i = 0, a = e.pagePaths.length;
130
+ try {
131
+ await Promise.all(e.pagePaths.map(async (t) => {
132
+ let n = await r.run(t), o = k.join(e.outDir, n.fileName);
133
+ await N.mkdir(k.dirname(o), { recursive: !0 }), await N.writeFile(o, n.html), i++, e.progress?.update(i, a);
134
+ }));
135
+ } finally {
136
+ await r.destroy();
137
+ }
138
+ }
139
+ async function Oe(e, t, n) {
140
+ let r = await import(e.ssrEntryPath), i = e.pagePaths.length, a = 0;
141
+ for (let o = 0; o < i; o += 32) {
142
+ let s = e.pagePaths.slice(o, o + 32);
143
+ await Promise.all(s.map(async (o) => {
144
+ let s = await r.render(o), l = E(s.pageData), u = C(s.pageData), d = D(s.pageData), f = e.base + c(o), p = [ee({
145
+ title: l,
146
+ description: u,
147
+ canonicalUrl: f,
148
+ author: e.author,
149
+ dateModified: d
150
+ }), T(o, l)].filter((e) => e !== void 0), m = O({
151
+ title: l,
152
+ description: u,
64
153
  siteTitle: e.siteTitle,
154
+ author: e.author,
65
155
  base: e.base,
66
- entryScript: n,
67
- canonicalUrl: e.base + r.replace(/^\//, ""),
68
- headExtra: s,
69
- appContent: i.html
70
- }), l = r === "/" ? "index.html" : `${r.replace(/^\//, "")}.html`, u = C.join(e.outDir, l);
71
- await E.mkdir(C.dirname(u), { recursive: !0 }), await E.writeFile(u, c), o++, e.progress?.update(o, a);
156
+ origin: e.origin,
157
+ lang: e.lang,
158
+ entryScript: t,
159
+ canonicalUrl: f,
160
+ ogImagePath: w(s.pageData),
161
+ jsonLdBlocks: p,
162
+ headExtra: n,
163
+ appContent: s.html
164
+ }), h = o === "/" ? "index.html" : `${c(o)}.html`, g = k.join(e.outDir, h);
165
+ await N.mkdir(k.dirname(g), { recursive: !0 }), await N.writeFile(g, m), a++, e.progress?.update(a, i);
72
166
  }));
73
167
  }
74
168
  }
75
- async function _e(e) {
76
- let t = C.join(e, ".vite", "manifest.json"), n = await E.readFile(t, "utf-8"), r = JSON.parse(n), i = "", a = [], o = [];
169
+ async function ke(e) {
170
+ let t = k.join(e, ".vite", "manifest.json"), n = await N.readFile(t, "utf-8"), r = JSON.parse(n), i = "", a = [], o = [];
77
171
  for (let e of Object.values(r)) e.isEntry ? (i = e.file, e.css && a.push(...e.css)) : e.file.endsWith(".js") && o.push(e.file);
78
172
  return {
79
173
  clientEntry: i,
@@ -83,12 +177,12 @@ async function _e(e) {
83
177
  }
84
178
  //#endregion
85
179
  //#region src/node/lib/progress.ts
86
- var A = [
180
+ var F = [
87
181
  "◐",
88
182
  "◓",
89
183
  "◑",
90
184
  "◒"
91
- ], j = class {
185
+ ], I = class {
92
186
  logger;
93
187
  label;
94
188
  start;
@@ -96,8 +190,8 @@ var A = [
96
190
  constructor(e, t) {
97
191
  if (this.logger = e, this.label = t, this.start = performance.now(), process.stdout.isTTY) {
98
192
  let e = 0;
99
- process.stdout.write(T.cyan(`${A[0]} ${t}`)), this.spinnerInterval = setInterval(() => {
100
- e = (e + 1) % A.length, process.stdout.write(`\r${T.cyan(`${A[e]} ${this.label}`)}`);
193
+ process.stdout.write(j.cyan(`${F[0]} ${t}`)), this.spinnerInterval = setInterval(() => {
194
+ e = (e + 1) % F.length, process.stdout.write(`\r${j.cyan(`${F[e]} ${this.label}`)}`);
101
195
  }, 120).unref();
102
196
  } else this.logger.start(t);
103
197
  }
@@ -109,138 +203,150 @@ var A = [
109
203
  done(e) {
110
204
  this.stopSpinner(), process.stdout.isTTY && process.stdout.write("\r\x1B[K");
111
205
  let t = Math.round(performance.now() - this.start);
112
- this.logger.success(`${e} (${ve(t)})`);
206
+ this.logger.success(`${e} (${Ae(t)})`);
113
207
  }
114
208
  stopSpinner() {
115
209
  this.spinnerInterval &&= (clearInterval(this.spinnerInterval), void 0);
116
210
  }
117
211
  };
118
- function ve(e) {
212
+ function Ae(e) {
119
213
  return e < 1e3 ? `${Math.round(e)}ms` : `${(e / 1e3).toFixed(1)}s`;
120
214
  }
121
215
  //#endregion
122
216
  //#region src/node/build/index.ts
123
- var ye = "typerighter/client/theme-default";
124
- async function M(e, t = {}) {
125
- let { root: n, logger: r } = e, i = C.resolve(n, t.outDir ?? "dist"), o = C.join(i, ".client"), s = C.join(i, ".server");
126
- await E.rm(i, {
217
+ var je = "typerighter/client/theme-default";
218
+ async function L(t, n = {}) {
219
+ let { root: r, logger: i } = t, a = k.resolve(r, n.outDir ?? "dist"), o = k.join(a, ".client"), s = k.join(a, ".server");
220
+ await N.rm(a, {
127
221
  recursive: !0,
128
222
  force: !0
129
223
  });
130
- let c = await e.getTdContext(), [l, u, d, f] = await Promise.all([
224
+ let c = await t.getTdContext(), [l, u, d, f] = await Promise.all([
131
225
  c.getConfig(),
132
226
  c.listFiles(),
133
227
  c.listSidebar(),
134
228
  c.listSchemas()
135
- ]), p = t.base ?? l.basePath ?? "/", h = p.endsWith("/") ? p : p + "/", g = d.map((e) => ({
229
+ ]), p = l.origin ?? void 0, m = l.author ?? void 0, h = l.license ?? void 0, g = l.repo ?? void 0, _ = n.base ?? l.basePath ?? "/", v = _.endsWith("/") ? _ : _ + "/", y = d.map((e) => ({
136
230
  ...e,
137
231
  header: {}
138
- })), _ = m(g), v = JSON.stringify({
232
+ })), x = b(y), S = JSON.stringify({
139
233
  title: l.siteTitle,
140
234
  description: l.siteDescription,
141
- basePath: h,
235
+ basePath: v,
236
+ origin: p,
237
+ lang: l.lang,
142
238
  nav: l.nav
143
- }), y = JSON.stringify({
239
+ }), C = JSON.stringify({
144
240
  ready: !0,
145
- contentTree: _
146
- }), b = C.join(n, "node_modules", ".typerighter");
147
- await E.mkdir(b, { recursive: !0 });
148
- let x = C.join(b, "client-entry.js"), S = C.join(b, "ssr-entry.js");
149
- await Promise.all([E.writeFile(x, Q({
241
+ contentTree: x
242
+ }), w = k.join(r, "node_modules", ".typerighter");
243
+ await N.mkdir(w, { recursive: !0 });
244
+ let T = k.join(w, "client-entry.js"), E = k.join(w, "ssr-entry.js");
245
+ await Promise.all([N.writeFile(T, Q({
150
246
  rootDir: l.rootDir,
151
- basePath: h,
247
+ basePath: v,
248
+ origin: p,
249
+ lang: l.lang,
152
250
  siteTitle: l.siteTitle,
153
251
  siteDescription: l.siteDescription,
154
- repo: l.repo,
155
- author: l.author,
156
- license: l.license,
252
+ repo: g,
253
+ author: m,
254
+ license: h,
157
255
  nav: l.nav
158
- })), E.writeFile(S, be({
256
+ })), N.writeFile(E, Me({
159
257
  rootDir: l.rootDir,
160
- layoutImport: ye,
161
- siteConfig: v,
162
- siteData: y
258
+ layoutImport: je,
259
+ siteConfig: S,
260
+ siteData: C
163
261
  }))]);
164
262
  try {
165
- let c = $({ context: e }), d = e.createViteLogger(), f = new j(r, "Building client bundle...");
166
- await ne({
167
- ...t.viteConfig,
168
- root: n,
169
- base: h,
263
+ let c = $({ context: t }), f = t.createViteLogger(), h = new I(i, "Building client bundle...");
264
+ await M({
265
+ ...n.viteConfig,
266
+ root: r,
267
+ base: v,
170
268
  plugins: c,
171
- customLogger: d,
269
+ customLogger: f,
172
270
  logLevel: "silent",
173
271
  build: {
174
- ...t.viteConfig?.build,
272
+ ...n.viteConfig?.build,
175
273
  outDir: o,
176
274
  manifest: !0,
177
275
  emptyOutDir: !0,
178
276
  rollupOptions: {
179
- ...t.viteConfig?.build?.rollupOptions,
180
- input: x
277
+ ...n.viteConfig?.build?.rollupOptions,
278
+ input: T
181
279
  }
182
280
  }
183
281
  });
184
- let p = await E.readdir(C.join(o, "assets")).catch(() => []);
185
- f.done(`Client bundle (${p.length} chunks)`);
186
- let m = new j(r, "Building SSR bundle...");
187
- await ne({
188
- ...t.viteConfig,
189
- root: n,
190
- base: h,
282
+ let g = await N.readdir(k.join(o, "assets")).catch(() => []);
283
+ h.done(`Client bundle (${g.length} chunks)`);
284
+ let _ = new I(i, "Building SSR bundle...");
285
+ await M({
286
+ ...n.viteConfig,
287
+ root: r,
288
+ base: v,
191
289
  plugins: c,
192
- customLogger: d,
290
+ customLogger: f,
193
291
  logLevel: "silent",
194
292
  build: {
195
- ...t.viteConfig?.build,
293
+ ...n.viteConfig?.build,
196
294
  outDir: s,
197
- ssr: S,
295
+ ssr: E,
198
296
  emptyOutDir: !0
199
297
  }
200
- }), m.done("SSR bundle");
201
- let g = u.map((e) => {
202
- let t = a(e);
203
- return t === "index" ? "/" : `/${t}`;
298
+ }), _.done("SSR bundle");
299
+ let y = u.map((t) => {
300
+ let n = e(t);
301
+ return n === "index" ? "/" : `/${n}`;
204
302
  });
205
- g.push("/"), N(_.entries, "", g);
206
- let v = new j(r, "Pre-rendering pages...");
207
- await ge({
208
- ssrEntryPath: C.join(s, "ssr-entry.js"),
303
+ y.push("/"), R(x.entries, "", y);
304
+ let b = new I(i, "Pre-rendering pages...");
305
+ await Ee({
306
+ ssrEntryPath: k.join(s, "ssr-entry.js"),
209
307
  clientOutDir: o,
210
- outDir: i,
211
- base: h,
212
- pagePaths: g,
308
+ outDir: a,
309
+ base: v,
310
+ origin: p,
311
+ lang: l.lang,
312
+ pagePaths: y,
213
313
  siteTitle: l.siteTitle,
214
- progress: v
215
- }), v.done(`Pre-rendered ${g.length} pages`);
216
- let y = Se(g, h);
217
- await E.writeFile(C.join(i, "sitemap.xml"), y);
218
- let b = C.join(o, "assets"), w = C.join(i, "assets");
219
- await E.cp(b, w, { recursive: !0 }).catch(() => {}), await xe(C.join(n, l.rootDir), i);
220
- let T = C.join(n, l.publicDir);
221
- await E.cp(T, i, { recursive: !0 }).catch(() => {});
314
+ author: m,
315
+ progress: b
316
+ }), b.done(`Pre-rendered ${y.length} pages`);
317
+ let S = /* @__PURE__ */ new Map();
318
+ for (let t of d) {
319
+ let n = e(t.filepath), r = n === "index" ? "/" : `/${n}`;
320
+ S.set(r, t.metadata.mtime);
321
+ }
322
+ let C = Se(y, v, p, S), w = [N.writeFile(k.join(a, "sitemap.xml"), C)];
323
+ p !== void 0 && (w.push(N.writeFile(k.join(a, "robots.txt"), Ce(p, v))), w.push(N.writeFile(k.join(a, "feed.xml"), we(d, v, p, l.siteTitle, l.siteDescription, l.lang)))), await Promise.all(w);
324
+ let D = k.join(o, "assets"), O = k.join(a, "assets");
325
+ await N.cp(D, O, { recursive: !0 }).catch(() => {}), await Ne(k.join(r, l.rootDir), a);
326
+ let ee = k.join(r, l.publicDir);
327
+ await N.cp(ee, a, { recursive: !0 }).catch(() => {});
222
328
  } finally {
223
329
  await Promise.all([
224
- E.rm(b, {
330
+ N.rm(w, {
225
331
  recursive: !0,
226
332
  force: !0
227
333
  }),
228
- E.rm(o, {
334
+ N.rm(o, {
229
335
  recursive: !0,
230
336
  force: !0
231
337
  }),
232
- E.rm(s, {
338
+ N.rm(s, {
233
339
  recursive: !0,
234
340
  force: !0
235
341
  })
236
342
  ]);
237
343
  }
238
- r.log(`\nBuild complete. Output: ${i}`);
344
+ i.log(`\nBuild complete. Output: ${a}`);
239
345
  }
240
- function be(e) {
241
- let t = `/${e.rootDir}/${l}`, n = JSON.parse(e.siteConfig), r = JSON.parse(e.siteData), i = r.contentTree ?? { entries: [] }, a = p(i.entries ?? [], n.title ?? ""), o = JSON.stringify({
242
- ...r,
243
- directoryListings: a
346
+ function Me(e) {
347
+ let t = `/${e.rootDir}/${o}`, n = JSON.parse(e.siteConfig), i = JSON.parse(e.siteData), a = i.contentTree ?? { entries: [] }, s = v(a.entries ?? [], n.title ?? ""), c = JSON.stringify({
348
+ ...i,
349
+ directoryListings: s
244
350
  });
245
351
  return `
246
352
  import { createTypedownApp } from 'typerighter/client';
@@ -251,8 +357,8 @@ import { h } from 'vue';
251
357
  import theme from '${e.layoutImport}';
252
358
 
253
359
  const pages = import.meta.glob('${t}', { eager: true });
254
- const contentExts = ${JSON.stringify(c)};
255
- const siteData = ${o};
360
+ const contentExts = ${JSON.stringify(r)};
361
+ const siteData = ${c};
256
362
 
257
363
  function findPage(base) {
258
364
  for (const ext of contentExts) {
@@ -286,39 +392,32 @@ export async function render(url) {
286
392
  }
287
393
  `;
288
394
  }
289
- async function xe(t, n) {
290
- let r = (await E.readdir(t, {
395
+ async function Ne(e, t) {
396
+ let n = (await N.readdir(e, {
291
397
  recursive: !0,
292
398
  withFileTypes: !0
293
- })).filter((t) => t.isFile() && !e(t.name)).map(async (e) => {
294
- let r = C.join(e.parentPath, e.name), i = C.relative(t, r), a = C.join(n, i);
295
- return E.mkdir(C.dirname(a), { recursive: !0 }).then(() => E.copyFile(r, a));
399
+ })).filter((e) => e.isFile() && !s(e.name)).map(async (n) => {
400
+ let r = k.join(n.parentPath, n.name), i = k.relative(e, r), a = k.join(t, i);
401
+ return N.mkdir(k.dirname(a), { recursive: !0 }).then(() => N.copyFile(r, a));
296
402
  });
297
- await Promise.all(r);
403
+ await Promise.all(n);
298
404
  }
299
- function Se(e, t) {
300
- return `<?xml version="1.0" encoding="UTF-8"?>
301
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
302
- ${e.map((e) => ` <url><loc>${g(t + e.replace(/^\//, ""))}</loc></url>`).join("\n")}
303
- </urlset>
304
- `;
305
- }
306
- function N(e, t, n) {
307
- for (let r of e) {
308
- if (r.kind !== "dir") continue;
309
- let e = `${t}/${r.node.name}`;
310
- f(r.node) || n.push(o(e)), N(r.node.entries, e, n);
405
+ function R(e, n, r) {
406
+ for (let i of e) {
407
+ if (i.kind !== "dir") continue;
408
+ let e = `${n}/${i.node.name}`;
409
+ _(i.node) || r.push(t(e)), R(i.node.entries, e, r);
311
410
  }
312
411
  }
313
412
  //#endregion
314
413
  //#region ../../node_modules/.pnpm/@shikijs+transformers@4.4.3/node_modules/@shikijs/transformers/dist/index.mjs
315
- var Ce = /(\s+\/\/)/, we = /(?:\/\/|["'#]|;{1,2}|%{1,2}|--)(\s*)$/, Te = /(?:\/\/|#|;{1,2}|%{1,2}|--)(\s*)$/, Ee = [
414
+ var Pe = /(\s+\/\/)/, Fe = /(?:\/\/|["'#]|;{1,2}|%{1,2}|--)(\s*)$/, Ie = /(?:\/\/|#|;{1,2}|%{1,2}|--)(\s*)$/, Le = [
316
415
  [/^(<!--)(.+)(-->)$/, !1],
317
416
  [/^(\/\*)(.+)(\*\/)$/, !1],
318
417
  [/^(\/\/|["'#]|;{1,2}|%{1,2}|--)(.*)$/, !0],
319
418
  [/^(\*)(.+)$/, !0]
320
419
  ];
321
- function De(e, t, n) {
420
+ function Re(e, t, n) {
322
421
  let r = [];
323
422
  for (let i of e) {
324
423
  if (n === "v3") {
@@ -327,8 +426,8 @@ function De(e, t, n) {
327
426
  let n = e.children[0];
328
427
  if (n.type !== "text") return e;
329
428
  let r = t === i.children.length - 1;
330
- if (!F(n.value, r)) return e;
331
- let a = n.value.split(Ce);
429
+ if (!z(n.value, r)) return e;
430
+ let a = n.value.split(Pe);
332
431
  if (a.length <= 1) return e;
333
432
  let o = [a[0]];
334
433
  for (let e = 1; e < a.length; e += 2) o.push(a[e] + (a[e + 1] || ""));
@@ -349,13 +448,13 @@ function De(e, t, n) {
349
448
  if (a.type !== "element") continue;
350
449
  let o = a.children.at(0);
351
450
  if (o?.type !== "text") continue;
352
- let s = n === e.length - 1, c = F(o.value, s), l;
451
+ let s = n === e.length - 1, c = z(o.value, s), l;
353
452
  if (!c && n > 0 && o.value.trim().startsWith("[!code")) {
354
453
  let t = e[n - 1];
355
454
  if (t?.type === "element") {
356
455
  let n = t.children.at(0);
357
456
  if (n?.type === "text" && n.value.includes("//")) {
358
- let l = F(n.value + o.value, s);
457
+ let l = z(n.value + o.value, s);
359
458
  if (l) {
360
459
  c = l, r.push({
361
460
  info: l,
@@ -372,7 +471,7 @@ function De(e, t, n) {
372
471
  }
373
472
  if (c) {
374
473
  if (t && !s && n !== 0) {
375
- let t = P(e[n - 1], "{") && P(e[n + 1], "}");
474
+ let t = ze(e[n - 1], "{") && ze(e[n + 1], "}");
376
475
  r.push({
377
476
  info: c,
378
477
  line: i,
@@ -394,16 +493,16 @@ function De(e, t, n) {
394
493
  }
395
494
  return r;
396
495
  }
397
- function P(e, t) {
496
+ function ze(e, t) {
398
497
  if (e.type !== "element") return !1;
399
498
  let n = e.children[0];
400
499
  return n.type === "text" && n.value.trim() === t;
401
500
  }
402
- function F(e, t) {
501
+ function z(e, t) {
403
502
  let n = e.trimStart(), r = e.length - n.length;
404
503
  n = n.trimEnd();
405
504
  let i = e.length - n.length - r;
406
- for (let [e, a] of Ee) {
505
+ for (let [e, a] of Le) {
407
506
  if (a && !t) continue;
408
507
  let o = e.exec(n);
409
508
  if (o) return [
@@ -413,22 +512,22 @@ function F(e, t) {
413
512
  ];
414
513
  }
415
514
  }
416
- function Oe(e) {
417
- let t = e.match(we);
515
+ function Be(e) {
516
+ let t = e.match(Fe);
418
517
  return t && t[1].trim().length === 0 ? e.slice(0, t.index) : e;
419
518
  }
420
- function ke(e) {
421
- let t = e.match(Te);
519
+ function Ve(e) {
520
+ let t = e.match(Ie);
422
521
  return t && t[1].trim().length === 0 ? e.slice(0, t.index).trimEnd() : e;
423
522
  }
424
- function Ae(e, t, n, r) {
523
+ function He(e, t, n, r) {
425
524
  return r ??= "v3", {
426
525
  name: e,
427
526
  code(e) {
428
527
  let i = e.children.filter((e) => e.type === "element"), a = [];
429
528
  e.data ??= {};
430
529
  let o = e.data;
431
- o._shiki_notation ??= De(i, ["jsx", "tsx"].includes(this.options.lang), r);
530
+ o._shiki_notation ??= Re(i, ["jsx", "tsx"].includes(this.options.lang), r);
432
531
  let s = o._shiki_notation;
433
532
  for (let e of s) {
434
533
  if (e.info[1].length === 0) continue;
@@ -436,7 +535,7 @@ function Ae(e, t, n, r) {
436
535
  e.isLineCommentOnly && r !== "v1" && o++;
437
536
  let s = !1;
438
537
  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;
439
- r === "v1" ? e.info[1] = Oe(e.info[1]) : r === "v3" && (e.info[1] = ke(e.info[1]));
538
+ r === "v1" ? e.info[1] = Be(e.info[1]) : r === "v3" && (e.info[1] = Ve(e.info[1]));
440
539
  let c = e.info[1].trim().length === 0;
441
540
  if (c && (e.info[1] = ""), c && e.isLineCommentOnly) a.push(e.line);
442
541
  else if (c && e.isJsxStyle) e.line.children.splice(e.line.children.indexOf(e.token) - 1, 3);
@@ -461,44 +560,44 @@ function Ae(e, t, n, r) {
461
560
  }
462
561
  };
463
562
  }
464
- var je = /\{([\d,-]+)\}/;
465
- function Me(e) {
563
+ var Ue = /\{([\d,-]+)\}/;
564
+ function We(e) {
466
565
  if (!e) return null;
467
- let t = e.match(je);
566
+ let t = e.match(Ue);
468
567
  return t ? t[1].split(",").flatMap((e) => {
469
568
  let t = e.split("-").map((e) => Number.parseInt(e, 10));
470
569
  return t.length === 1 ? [t[0]] : Array.from({ length: t[1] - t[0] + 1 }, (e, n) => t[0] + n);
471
570
  }) : null;
472
571
  }
473
- var Ne = Symbol("highlighted-lines");
474
- function Pe(e = {}) {
572
+ var Ge = Symbol("highlighted-lines");
573
+ function Ke(e = {}) {
475
574
  let { className: t = "highlighted", zeroIndexed: n = !1 } = e;
476
575
  return {
477
576
  name: "@shikijs/transformers:meta-highlight",
478
577
  line(e, r) {
479
578
  if (!this.options.meta?.__raw) return;
480
579
  let i = this.meta;
481
- i[Ne] ??= Me(this.options.meta.__raw);
482
- let a = i[Ne] ?? [], o = n ? r - 1 : r;
580
+ i[Ge] ??= We(this.options.meta.__raw);
581
+ let a = i[Ge] ?? [], o = n ? r - 1 : r;
483
582
  return a.includes(o) && this.addClassToHast(e, t), e;
484
583
  }
485
584
  };
486
585
  }
487
- var Fe = /[.*+?^${}()|[\]\\]/g;
488
- function Ie(e) {
489
- return e.replace(Fe, "\\$&");
586
+ var qe = /[.*+?^${}()|[\]\\]/g;
587
+ function Je(e) {
588
+ return e.replace(qe, "\\$&");
490
589
  }
491
- function I(e = {}, t = "@shikijs/transformers:notation-map") {
590
+ function B(e = {}, t = "@shikijs/transformers:notation-map") {
492
591
  let { classMap: n = {}, classActivePre: r = void 0, classActiveCode: i = void 0 } = e;
493
- return Ae(t, RegExp(`#?\\s*\\[!code (${Object.keys(n).map(Ie).join("|")})(:\\d+)?\\]`, "gi"), function([e, t, a = ":1"], o, s, c, l) {
592
+ return He(t, RegExp(`#?\\s*\\[!code (${Object.keys(n).map(Je).join("|")})(:\\d+)?\\]`, "gi"), function([e, t, a = ":1"], o, s, c, l) {
494
593
  let u = Number.parseInt(a.slice(1), 10);
495
594
  for (let e = l; e < Math.min(l + u, c.length); e++) this.addClassToHast(c[e], n[t]);
496
595
  return r && this.addClassToHast(this.pre, r), i && this.addClassToHast(this.code, i), !0;
497
596
  }, e.matchAlgorithm);
498
597
  }
499
- function Le(e = {}) {
598
+ function Ye(e = {}) {
500
599
  let { classLineAdd: t = "diff add", classLineRemove: n = "diff remove", classActivePre: r = "has-diff", classActiveCode: i } = e;
501
- return I({
600
+ return B({
502
601
  classMap: {
503
602
  "++": t,
504
603
  "--": n
@@ -508,31 +607,31 @@ function Le(e = {}) {
508
607
  matchAlgorithm: e.matchAlgorithm
509
608
  }, "@shikijs/transformers:notation-diff");
510
609
  }
511
- function Re(e = {}) {
610
+ function Xe(e = {}) {
512
611
  let { classMap: t = {
513
612
  error: ["highlighted", "error"],
514
613
  warning: ["highlighted", "warning"],
515
614
  info: ["highlighted", "info"]
516
615
  }, classActivePre: n = "has-highlighted", classActiveCode: r } = e;
517
- return I({
616
+ return B({
518
617
  classMap: t,
519
618
  classActivePre: n,
520
619
  classActiveCode: r,
521
620
  matchAlgorithm: e.matchAlgorithm
522
621
  }, "@shikijs/transformers:notation-error-level");
523
622
  }
524
- function ze(e = {}) {
623
+ function Ze(e = {}) {
525
624
  let { classActiveLine: t = "focused", classActivePre: n = "has-focused", classActiveCode: r } = e;
526
- return I({
625
+ return B({
527
626
  classMap: { focus: t },
528
627
  classActivePre: n,
529
628
  classActiveCode: r,
530
629
  matchAlgorithm: e.matchAlgorithm
531
630
  }, "@shikijs/transformers:notation-focus");
532
631
  }
533
- function Be(e = {}) {
632
+ function Qe(e = {}) {
534
633
  let { classActiveLine: t = "highlighted", classActivePre: n = "has-highlighted", classActiveCode: r } = e;
535
- return I({
634
+ return B({
536
635
  classMap: {
537
636
  highlight: t,
538
637
  hl: t
@@ -544,73 +643,42 @@ function Be(e = {}) {
544
643
  }
545
644
  //#endregion
546
645
  //#region src/node/lib/render/highlight/language.ts
547
- var Ve = [
646
+ var $e = [
548
647
  "shellscript",
549
648
  "shell",
550
649
  "bash",
551
650
  "sh",
552
651
  "zsh"
553
652
  ];
554
- function He(e) {
555
- return Ve.includes(e);
653
+ function et(e) {
654
+ return $e.includes(e);
556
655
  }
557
- var Ue = /^[a-zA-Z0-9-_]+/;
558
- function We(e) {
559
- return Ue.exec(e)?.[0] || "";
656
+ var tt = /^[a-zA-Z0-9-_]+/;
657
+ function nt(e) {
658
+ return tt.exec(e)?.[0] || "";
560
659
  }
561
660
  //#endregion
562
- //#region src/node/lib/logger.ts
563
- var Ge = /\u001B\[[0-9;]*m/g, Ke = class {
564
- logStream;
565
- constructor(e) {
566
- e !== void 0 && (this.logStream = D.createWriteStream(e, { flags: "a" }), process.once("exit", () => this.close()));
567
- }
568
- info(e) {
569
- console.log(T.cyan(`ℹ ${e}`)), this.writeToFile("INFO", e);
570
- }
571
- warn(e) {
572
- console.warn(T.yellow(`⚠ ${e}`)), this.writeToFile("WARN", e);
573
- }
574
- error(e) {
575
- console.error(T.red(`✖ ${e}`)), this.writeToFile("ERROR", e);
576
- }
577
- success(e) {
578
- console.log(T.green(`✔ ${e}`)), this.writeToFile("SUCCESS", e);
579
- }
580
- start(e) {
581
- console.log(T.cyan(`◐ ${e}`)), this.writeToFile("START", e);
582
- }
583
- log(e) {
584
- console.log(e), this.writeToFile("LOG", e);
585
- }
586
- writeToFile(e, t) {
587
- if (!this.logStream) return;
588
- let n = (/* @__PURE__ */ new Date()).toISOString(), r = t.replace(Ge, "");
589
- this.logStream.write(`${n} [${e}] ${r}\n`);
590
- }
591
- close() {
592
- this.logStream?.end(), this.logStream = void 0;
593
- }
594
- }, qe = new Ke(), Je = new FinalizationRegistry((e) => {
661
+ //#region src/node/lib/render/highlight/index.ts
662
+ var rt = new FinalizationRegistry((e) => {
595
663
  e();
596
- }), L = {
664
+ }), V = {
597
665
  light: "github-light",
598
666
  dark: "github-dark"
599
667
  };
600
- async function Ye() {
601
- let e = await ae({
602
- themes: [L.light, L.dark],
668
+ async function it() {
669
+ let e = await pe({
670
+ themes: [V.light, V.dark],
603
671
  langs: []
604
672
  }), t = [
605
- Pe(),
606
- Le(),
607
- ze({
673
+ Ke(),
674
+ Ye(),
675
+ Ze({
608
676
  classActiveLine: "has-focus",
609
677
  classActivePre: "has-focused-lines"
610
678
  }),
611
- Be(),
612
- Re(),
679
+ Qe(),
613
680
  Xe(),
681
+ at(),
614
682
  {
615
683
  name: "typedown:add-dir",
616
684
  pre(e) {
@@ -619,19 +687,19 @@ async function Ye() {
619
687
  }
620
688
  ], n = new Set(e.getLoadedLanguages());
621
689
  async function r(r, i, a) {
622
- let o = We(i);
690
+ let o = nt(i);
623
691
  if (o) {
624
692
  let e = i;
625
693
  i = o.toLowerCase(), a = e.slice(i.length).replace(/(?<!=)\{/g, " {") + " " + a, a = a.trim().replace(/\s+/g, " ");
626
694
  }
627
695
  i ||= "txt";
628
696
  try {
629
- !se(i) && !n.has(i) && (await e.loadLanguage(i), n.add(i));
697
+ !he(i) && !n.has(i) && (await e.loadLanguage(i), n.add(i));
630
698
  } catch {
631
- qe.warn(`\nThe language '${i}' is not loaded, falling back to 'txt' for syntax highlighting.`), i = "txt";
699
+ ne.warn(`\nThe language '${i}' is not loaded, falling back to 'txt' for syntax highlighting.`), i = "txt";
632
700
  }
633
701
  r = r.trimEnd();
634
- let s = oe(r, i, e);
702
+ let s = me(r, i, e);
635
703
  return await e.loadLanguage(...s), e.codeToHtml(r, {
636
704
  lang: i,
637
705
  transformers: [...t, {
@@ -648,7 +716,7 @@ async function Ye() {
648
716
  }
649
717
  }],
650
718
  meta: { __raw: a },
651
- themes: L,
719
+ themes: V,
652
720
  defaultColor: !1,
653
721
  colorReplacements: {
654
722
  "github-light": {
@@ -673,13 +741,13 @@ async function Ye() {
673
741
  }
674
742
  });
675
743
  }
676
- return Je.register(r, () => e.dispose()), r;
744
+ return rt.register(r, () => e.dispose()), r;
677
745
  }
678
- function Xe() {
746
+ function at() {
679
747
  return {
680
748
  name: "typedown:disable-shell-symbol-select",
681
749
  tokens(e) {
682
- if (He(this.options.lang)) for (let t of e) {
750
+ if (et(this.options.lang)) for (let t of e) {
683
751
  if (t.length < 2) continue;
684
752
  let e = t[0].content.trim();
685
753
  (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));
@@ -689,20 +757,20 @@ function Xe() {
689
757
  }
690
758
  //#endregion
691
759
  //#region src/node/lib/render/postprocess.ts
692
- var R;
693
- async function Ze(e) {
694
- return e = await et(e), e = it(e), e;
760
+ var H;
761
+ async function ot(e) {
762
+ return e = await lt(e), e = pt(e), e;
695
763
  }
696
- function Qe() {
697
- return R ||= Ye(), R;
764
+ function st() {
765
+ return H ||= it(), H;
698
766
  }
699
- var $e = /<pre class="td-code-placeholder"(?: data-lang="([^"]*)")?(?: data-meta="([^"]*)")?><code>([\s\S]*?)<\/code><\/pre>/g;
700
- async function et(e) {
701
- let t = await Qe(), n = [...e.matchAll($e)];
767
+ var ct = /<pre class="td-code-placeholder"(?: data-lang="([^"]*)")?(?: data-meta="([^"]*)")?><code>([\s\S]*?)<\/code><\/pre>/g;
768
+ async function lt(e) {
769
+ let t = await st(), n = [...e.matchAll(ct)];
702
770
  if (n.length === 0) return e;
703
771
  let r = await Promise.all(n.map(async (e) => {
704
- let n = e[1] || "", r = e[2] || "", i = _(e[3]);
705
- return tt(await t(i, n, r), n, r);
772
+ let n = e[1] || "", r = e[2] || "", i = g(e[3]);
773
+ return ut(await t(i, n, r), n, r);
706
774
  })), i = e;
707
775
  for (let e = n.length - 1; 0 <= e; e--) {
708
776
  let t = n[e];
@@ -710,7 +778,7 @@ async function et(e) {
710
778
  }
711
779
  return i;
712
780
  }
713
- function tt(e, t, n) {
781
+ function ut(e, t, n) {
714
782
  t ||= "txt";
715
783
  let r = t.replace(/_/g, " "), i = `<div class="language-${t}"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">${r}</span>` + e + "</div>";
716
784
  if (/:line-numbers\b/.test(n)) {
@@ -721,14 +789,14 @@ function tt(e, t, n) {
721
789
  }
722
790
  return i;
723
791
  }
724
- var nt = /<span class="td-math-inline">([\s\S]*?)<\/span>/g, rt = /<div class="td-math-block">([\s\S]*?)<\/div>/g;
725
- function it(e) {
726
- return e = e.replace(nt, (e, t) => z(t, !1)), e = e.replace(rt, (e, t) => z(t, !0)), e;
792
+ var dt = /<span class="td-math-inline">([\s\S]*?)<\/span>/g, ft = /<div class="td-math-block">([\s\S]*?)<\/div>/g;
793
+ function pt(e) {
794
+ return e = e.replace(dt, (e, t) => U(t, !1)), e = e.replace(ft, (e, t) => U(t, !0)), e;
727
795
  }
728
- function z(e, t) {
796
+ function U(e, t) {
729
797
  let n = t ? "div" : "span";
730
798
  try {
731
- return x.renderToString(_(e), {
799
+ return te.renderToString(g(e), {
732
800
  throwOnError: !1,
733
801
  displayMode: t
734
802
  });
@@ -738,21 +806,22 @@ function z(e, t) {
738
806
  }
739
807
  //#endregion
740
808
  //#region src/node/lib/render/vue.ts
741
- async function B(e, t, n) {
742
- let r = t.title || t.label || (v(n) ? d(n, (await e.getConfig()).siteTitle) : u(n));
809
+ async function W(e, t, n) {
810
+ let r = t.title || t.label || (S(n) ? m(n, (await e.getConfig()).siteTitle) : x(n));
743
811
  return {
744
812
  schema: t.schema,
745
813
  schemaLabel: t.schemaLabel,
746
814
  label: t.label,
747
815
  icon: t.icon,
748
816
  frontmatter: t.header ?? {},
749
- headings: ot(t.headings),
817
+ headings: ht(t.headings),
750
818
  title: r,
751
- metadata: t.metadata
819
+ metadata: t.metadata,
820
+ meta: t.meta
752
821
  };
753
822
  }
754
- async function at(e, t, n) {
755
- let r = await Ze(t.content), i = await B(e, t, n), a = JSON.stringify(`@typedown/pages?resource=${encodeURIComponent(n)}`);
823
+ async function mt(e, t, n) {
824
+ let r = await ot(t.content), i = await W(e, t, n), a = JSON.stringify(`@typedown/pages?resource=${encodeURIComponent(n)}`);
756
825
  return {
757
826
  vueSrc: [
758
827
  "<script>",
@@ -764,12 +833,12 @@ async function at(e, t, n) {
764
833
  `import { pageData } from ${a}`,
765
834
  "useRouter().route.data = pageData",
766
835
  "<\/script>",
767
- `<template><div class="typedown-content">\n${st(r)}\n</div></template>`
836
+ `<template><div class="typedown-content">\n${gt(r)}\n</div></template>`
768
837
  ].join("\n"),
769
838
  pageData: i
770
839
  };
771
840
  }
772
- function ot(e) {
841
+ function ht(e) {
773
842
  let t = [], n = [];
774
843
  for (let r of e) {
775
844
  let e = {
@@ -785,191 +854,37 @@ function ot(e) {
785
854
  }
786
855
  return t;
787
856
  }
788
- function st(e) {
857
+ function gt(e) {
789
858
  return e.replaceAll("{{", "&#123;&#123;").replaceAll("}}", "&#125;&#125;");
790
859
  }
791
860
  //#endregion
792
- //#region src/node/lib/typedown-context.ts
793
- var ct = class {
794
- client;
795
- constructor(e) {
796
- this.client = e, this.registerNotificationHandlers(e);
797
- }
798
- cachedConfig;
799
- cachedFiles;
800
- cachedSchemas;
801
- cachedSchemaMap = /* @__PURE__ */ new Map();
802
- cachedFileMap = /* @__PURE__ */ new Map();
803
- registerNotificationHandlers(e) {
804
- e.onConfigChanged((e) => {
805
- this.cachedConfig = e;
806
- }), e.onContentUpdated(({ filepath: e, affectedFiles: t = [] }) => {
807
- this.cachedFiles = void 0, this.cachedFileMap.delete(e);
808
- for (let e of t) this.cachedFileMap.delete(e);
809
- }), e.onContentDeleted(({ filepath: e }) => {
810
- this.cachedFiles = void 0, this.cachedFileMap.delete(e);
811
- }), e.onSchemaUpdated(({ schema: e }) => {
812
- this.cachedSchemas = void 0, this.cachedSchemaMap.delete(e);
813
- }), e.onSchemaDeleted(({ schema: e }) => {
814
- this.cachedSchemas = void 0, this.cachedSchemaMap.delete(e);
815
- });
816
- }
817
- get rpc() {
818
- return this.client;
819
- }
820
- async getFile(e) {
821
- let t = this.cachedFileMap.get(e);
822
- if (t) return t;
823
- let n = await H(() => this.rpc.requestFile(e));
824
- return this.cachedFileMap.set(e, n), n;
825
- }
826
- async getFiles(e) {
827
- let t = e.filter((e) => !this.cachedFileMap.has(e));
828
- if (0 < t.length) {
829
- let e = await H(() => this.rpc.requestFiles(t));
830
- for (let [n, r] of t.entries()) this.cachedFileMap.set(r, e[n]);
831
- }
832
- return e.map((e) => this.cachedFileMap.get(e));
833
- }
834
- async listFiles() {
835
- return this.cachedFiles ||= await H(() => this.rpc.listVault()), this.cachedFiles;
836
- }
837
- async listSidebar() {
838
- return H(() => this.rpc.listSidebar());
839
- }
840
- async getConfig() {
841
- return this.cachedConfig ||= await H(() => this.rpc.getConfig()), this.cachedConfig;
842
- }
843
- async getSchema(e) {
844
- let t = this.cachedSchemaMap.get(e);
845
- if (t) return t;
846
- let n = await H(() => this.rpc.getSchema(e));
847
- return this.cachedSchemaMap.set(e, n), n;
848
- }
849
- async listSchemas() {
850
- return this.cachedSchemas ||= await H(() => this.rpc.listSchemas()), this.cachedSchemas;
851
- }
852
- async checkVault() {
853
- return H(() => this.rpc.checkVault());
854
- }
855
- async formatFile(e) {
856
- return H(() => this.rpc.formatFile(e));
857
- }
858
- };
859
- function V(e) {
860
- return e instanceof Error && "code" in e && e.code === pe;
861
- }
862
- async function H(e, t = 5) {
863
- for (let n = 0; n < t; n++) try {
864
- return await e();
865
- } catch (e) {
866
- if (!V(e) || n === t - 1) throw e;
867
- await new Promise((e) => setTimeout(e, 50 * (n + 1)));
868
- }
869
- throw Error("unreachable");
870
- }
871
- //#endregion
872
- //#region src/node/context.ts
873
- var U = ["typedown.yaml", "typedown.yml"];
874
- function W(e) {
875
- let t = new Ke(dt(e));
876
- function n() {
877
- let e = re("warn");
878
- return {
879
- ...e,
880
- info(e) {
881
- t.writeToFile("VITE", e);
882
- },
883
- warn(n) {
884
- e.warn(n), t.writeToFile("VITE:WARN", n);
885
- },
886
- error(n) {
887
- e.error(n), t.writeToFile("VITE:ERROR", n);
888
- }
889
- };
890
- }
891
- let r, i, a, o = !1;
892
- function s() {
893
- t.log(""), u(), process.exit(0);
894
- }
895
- function c() {
896
- u();
897
- }
898
- async function l() {
899
- if (r) return r;
900
- process.on("SIGINT", s), process.on("SIGTERM", s), i = new fe({ root: e }), await new Promise((e, t) => {
901
- i?.once("error", t), i?.listen(() => {
902
- i?.removeListener("error", t), e();
903
- });
904
- });
905
- let t = i.host, n = i.port;
906
- if (t === void 0 || n === void 0) throw Error("RPC server started but host/port not available");
907
- return a = await me.connectTcp(t, n), r = new ct(a), i.unref(), process.on("exit", c), r;
908
- }
909
- function u() {
910
- o || (o = !0, process.removeListener("exit", c), process.removeListener("SIGINT", s), process.removeListener("SIGTERM", s), a?.dispose(), i?.close(), r = void 0, i = void 0, a = void 0);
911
- }
912
- return {
913
- root: e,
914
- logger: t,
915
- getTdContext: l,
916
- createViteLogger: n,
917
- dispose: u
918
- };
919
- }
920
- function lt(e) {
921
- let t = C.resolve(e);
922
- for (;;) {
923
- if (ut(t)) return t;
924
- let e = C.dirname(t);
925
- if (e === t) break;
926
- t = e;
927
- }
928
- return C.resolve(e);
929
- }
930
- function ut(e) {
931
- return U.some((t) => D.existsSync(C.join(e, t)));
932
- }
933
- function dt(e) {
934
- try {
935
- let t = C.join(e, ".typedown", ".local"), n = C.join(t, "logs");
936
- D.mkdirSync(n, { recursive: !0 });
937
- let r = C.join(t, ".gitignore");
938
- D.existsSync(r) || D.writeFileSync(r, "*\n");
939
- let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
940
- return C.join(n, `${i}.log`);
941
- } catch {
942
- return;
943
- }
944
- }
945
- //#endregion
946
861
  //#region src/node/plugin/vite/constants.ts
947
- var ft = "@typedown/app", G = "\0@typedown/app", K = "@typedown/pages", q = "\0" + K;
862
+ var _t = "@typedown/app", G = "\0@typedown/app", K = "@typedown/pages", q = "\0" + K;
948
863
  K + "";
949
- var J = "\0@typedown/pages?resource=", Y = "@typedown/site-data", pt = "\0@typedown/site-data", X = "@typedown/search-index", mt = "\0@typedown/search-index";
864
+ var J = "\0@typedown/pages?resource=", Y = "@typedown/site-data", vt = "\0@typedown/site-data", X = "@typedown/search-index", yt = "\0@typedown/search-index";
950
865
  //#endregion
951
866
  //#region src/node/plugin/vite/virtual/utils.ts
952
867
  function Z(e, t) {
953
868
  let n = e.moduleGraph.getModuleById(t);
954
869
  if (!n) return;
955
870
  e.moduleGraph.invalidateModule(n);
956
- let r = ht(n.url);
871
+ let r = bt(n.url);
957
872
  for (let t of n.importers) e.hot.send({
958
873
  type: "update",
959
874
  updates: [{
960
875
  type: "js-update",
961
- path: ht(t.url),
876
+ path: bt(t.url),
962
877
  acceptedPath: r,
963
878
  timestamp: Date.now()
964
879
  }]
965
880
  });
966
881
  }
967
- function ht(e) {
882
+ function bt(e) {
968
883
  return e.startsWith("\0") ? "/@id/__x00__" + e.slice(1) : e;
969
884
  }
970
885
  //#endregion
971
886
  //#region src/node/plugin/vite/virtual/app.ts
972
- var gt = class {
887
+ var xt = class {
973
888
  async load(e) {
974
889
  let t = await e.getConfig();
975
890
  return Q({
@@ -986,6 +901,8 @@ function Q(e) {
986
901
  title: e.siteTitle,
987
902
  description: e.siteDescription,
988
903
  basePath: e.basePath ?? "/",
904
+ origin: e.origin,
905
+ lang: e.lang,
989
906
  repo: e.repo,
990
907
  author: e.author,
991
908
  license: e.license,
@@ -1002,7 +919,7 @@ import theme from 'typerighter/client/theme-default';
1002
919
  import { pages as initialPages } from '${K}';
1003
920
  import initialSiteData from '${Y}';
1004
921
  let pages = initialPages;
1005
- const contentExts = ${JSON.stringify(c)};
922
+ const contentExts = ${JSON.stringify(r)};
1006
923
 
1007
924
  function findPage(base) {
1008
925
  for (const ext of contentExts) {
@@ -1059,7 +976,7 @@ if (import.meta.hot) {
1059
976
  }
1060
977
  //#endregion
1061
978
  //#region src/node/plugin/vite/virtual/pages.ts
1062
- var _t = class {
979
+ var St = class {
1063
980
  async load(e) {
1064
981
  let t = (await e.getConfig()).rootDir ?? ".";
1065
982
  return `export const pages = import.meta.glob('${t === "." ? "/**/*.{td,md}" : `/${t}/**/*.{td,md}`}');`;
@@ -1071,7 +988,7 @@ var _t = class {
1071
988
  return e.startsWith(J);
1072
989
  }
1073
990
  async loadPageData(e, t) {
1074
- let n = decodeURIComponent(e.slice(J.length)), r = await B(t, await t.getFile(n), n);
991
+ let n = decodeURIComponent(e.slice(J.length)), r = await W(t, await t.getFile(n), n);
1075
992
  return `export const pageData = ${JSON.stringify(r)}`;
1076
993
  }
1077
994
  invalidatePageData(e, t) {
@@ -1080,53 +997,53 @@ var _t = class {
1080
997
  invalidate(e) {
1081
998
  Z(e, q);
1082
999
  }
1083
- }, vt = "\0@typedown/site-data", yt = {
1000
+ }, Ct = "\0@typedown/site-data", wt = {
1084
1001
  ready: !1,
1085
1002
  contentTree: { entries: [] },
1086
1003
  schemas: {},
1087
1004
  directoryListings: {}
1088
- }, bt = class {
1005
+ }, Tt = class {
1089
1006
  data;
1090
1007
  scan(e) {
1091
- let t = O("**/*.td", {
1008
+ let t = P("**/*.td", {
1092
1009
  cwd: e,
1093
1010
  exclude: (e) => e.startsWith("_")
1094
1011
  }).map((e) => ({
1095
1012
  filepath: e,
1096
- label: u(e),
1013
+ label: x(e),
1097
1014
  header: {}
1098
- })), n = m(t);
1015
+ })), n = b(t);
1099
1016
  this.data = {
1100
1017
  contentTree: n,
1101
1018
  schemas: {},
1102
- directoryListings: p(n.entries, "")
1019
+ directoryListings: v(n.entries, "")
1103
1020
  };
1104
1021
  }
1105
1022
  load(e) {
1106
1023
  let t = this.data ? {
1107
1024
  ready: !0,
1108
1025
  ...this.data
1109
- } : yt;
1026
+ } : wt;
1110
1027
  return `export default ${JSON.stringify(t)}`;
1111
1028
  }
1112
1029
  clear() {
1113
1030
  this.data = void 0;
1114
1031
  }
1115
1032
  fetch(e, t) {
1116
- xt(e).then((e) => {
1033
+ Et(e).then((e) => {
1117
1034
  this.data = e, t && this.invalidate(t);
1118
1035
  }).catch((e) => {
1119
1036
  console.error("[typedown] Failed to fetch site data:", e instanceof Error ? e.message : e);
1120
1037
  });
1121
1038
  }
1122
1039
  async fetchSync(e) {
1123
- this.data = await xt(e);
1040
+ this.data = await Et(e);
1124
1041
  }
1125
1042
  invalidate(e) {
1126
- Z(e, vt);
1043
+ Z(e, Ct);
1127
1044
  }
1128
1045
  };
1129
- async function xt(e) {
1046
+ async function Et(e) {
1130
1047
  let [t, n, r] = await Promise.all([
1131
1048
  e.getConfig(),
1132
1049
  e.listSidebar(),
@@ -1134,21 +1051,21 @@ async function xt(e) {
1134
1051
  ]), i = await Promise.all(r.map(async (t) => [t, (await e.getSchema(t)).properties])), a = Object.fromEntries(i), o = n.map((e) => ({
1135
1052
  ...e,
1136
1053
  header: {}
1137
- })), s = m(o);
1054
+ })), s = b(o);
1138
1055
  return {
1139
1056
  contentTree: s,
1140
1057
  schemas: a,
1141
- directoryListings: p(s.entries, t.siteTitle)
1058
+ directoryListings: v(s.entries, t.siteTitle)
1142
1059
  };
1143
1060
  }
1144
1061
  //#endregion
1145
1062
  //#region src/node/lib/search-indexer/index.ts
1146
- var St = class {
1063
+ var Dt = class {
1147
1064
  index;
1148
1065
  constructor() {
1149
- this.index = new S({
1150
- fields: n,
1151
- storeFields: h
1066
+ this.index = new oe({
1067
+ fields: a,
1068
+ storeFields: p
1152
1069
  });
1153
1070
  }
1154
1071
  addAll(e) {
@@ -1167,20 +1084,20 @@ var St = class {
1167
1084
  };
1168
1085
  //#endregion
1169
1086
  //#region src/node/lib/search-indexer/scan.ts
1170
- function Ct(e, t) {
1171
- let n = Dt(e), r = [];
1087
+ function Ot(e, t) {
1088
+ let n = Mt(e), r = [];
1172
1089
  for (let t of n) {
1173
- let n = Et(e, t);
1090
+ let n = jt(e, t);
1174
1091
  n && r.push(n);
1175
1092
  }
1176
1093
  t.addAll(r);
1177
1094
  }
1178
- function wt(e, t, n) {
1179
- let r = Et(e, w(e, t));
1180
- r ? n.addPage(r) : n.discardPage(y(t));
1095
+ function kt(e, t, n) {
1096
+ let r = jt(e, A(e, t));
1097
+ r ? n.addPage(r) : n.discardPage(d(t));
1181
1098
  }
1182
- function Tt(e, t) {
1183
- let n = u(e);
1099
+ function At(e, t) {
1100
+ let n = x(e);
1184
1101
  if (!t.startsWith("---")) return {
1185
1102
  title: n,
1186
1103
  body: t
@@ -1196,56 +1113,56 @@ function Tt(e, t) {
1196
1113
  body: a
1197
1114
  };
1198
1115
  }
1199
- function Et(e, t) {
1116
+ function jt(e, t) {
1200
1117
  let n;
1201
1118
  try {
1202
- n = ue(t, "utf-8");
1119
+ n = ve(t, "utf-8");
1203
1120
  } catch {
1204
1121
  return;
1205
1122
  }
1206
1123
  if (!n.trim()) return;
1207
- let r = t.slice(e.length + 1), { title: i, body: a } = Tt(r, n);
1124
+ let r = t.slice(e.length + 1), { title: i, body: a } = At(r, n);
1208
1125
  return {
1209
- id: y(r),
1126
+ id: d(r),
1210
1127
  title: i,
1211
1128
  text: `${i}\n${a}`
1212
1129
  };
1213
1130
  }
1214
- function Dt(e) {
1215
- return O("**/*.td", {
1131
+ function Mt(e) {
1132
+ return P("**/*.td", {
1216
1133
  cwd: e,
1217
1134
  exclude: (e) => e.startsWith("_")
1218
- }).map((t) => w(e, t));
1135
+ }).map((t) => A(e, t));
1219
1136
  }
1220
1137
  //#endregion
1221
1138
  //#region src/node/plugin/vite/virtual/search-index.ts
1222
- var Ot = "\0@typedown/search-index", kt = class {
1223
- indexer = new St();
1139
+ var Nt = "\0@typedown/search-index", Pt = class {
1140
+ indexer = new Dt();
1224
1141
  load(e) {
1225
1142
  return `export default ${JSON.stringify(this.indexer.serialize())}`;
1226
1143
  }
1227
1144
  index(e) {
1228
- Ct(e, this.indexer);
1145
+ Ot(e, this.indexer);
1229
1146
  }
1230
1147
  reindex(e, t) {
1231
- wt(e, t, this.indexer);
1148
+ kt(e, t, this.indexer);
1232
1149
  }
1233
1150
  invalidate(e) {
1234
- Z(e, Ot);
1151
+ Z(e, Nt);
1235
1152
  }
1236
- }, At = he(import.meta.url);
1237
- function jt() {
1153
+ }, Ft = be(import.meta.url);
1154
+ function It() {
1238
1155
  return [{
1239
1156
  find: "vue/server-renderer",
1240
- replacement: At.resolve("vue/server-renderer")
1157
+ replacement: Ft.resolve("vue/server-renderer")
1241
1158
  }, {
1242
1159
  find: "vue",
1243
- replacement: At.resolve("vue/dist/vue.runtime.esm-bundler.js")
1160
+ replacement: Ft.resolve("vue/dist/vue.runtime.esm-bundler.js")
1244
1161
  }];
1245
1162
  }
1246
1163
  //#endregion
1247
1164
  //#region src/node/plugin/vite/middleware/vault-assets.ts
1248
- var Mt = {
1165
+ var Lt = {
1249
1166
  jpg: "image/jpeg",
1250
1167
  jpeg: "image/jpeg",
1251
1168
  png: "image/png",
@@ -1263,17 +1180,17 @@ var Mt = {
1263
1180
  woff: "font/woff",
1264
1181
  ttf: "font/ttf"
1265
1182
  };
1266
- function Nt(e, t) {
1267
- return (n, a, o) => {
1268
- if (!n.url || n.method !== "GET" || a.writableEnded) return o();
1269
- let c = s(n.url);
1270
- if (c.startsWith("/@") || c.startsWith("/node_modules")) return o();
1271
- let l = r(t.basePath), u = (l && c.startsWith(l) ? c.slice(l.length) : c).replace(/^\//, ""), d = w(e.config.root, t.rootDirectory, u);
1272
- if (le(d)) try {
1273
- let e = de(d);
1183
+ function Rt(e, t) {
1184
+ return (r, a, o) => {
1185
+ if (!r.url || r.method !== "GET" || a.writableEnded) return o();
1186
+ let s = n(r.url);
1187
+ if (s.startsWith("/@") || s.startsWith("/node_modules")) return o();
1188
+ let c = l(t.basePath), u = (c && s.startsWith(c) ? s.slice(c.length) : s).replace(/^\//, ""), d = A(e.config.root, t.rootDirectory, u);
1189
+ if (_e(d)) try {
1190
+ let e = ye(d);
1274
1191
  if (e.isFile()) {
1275
- let t = Mt[i(d).slice(1).toLowerCase()] ?? "application/octet-stream";
1276
- a.setHeader("Content-Type", t), a.setHeader("Content-Length", e.size), ce(d).pipe(a);
1192
+ let t = Lt[i(d).slice(1).toLowerCase()] ?? "application/octet-stream";
1193
+ a.setHeader("Content-Type", t), a.setHeader("Content-Length", e.size), ge(d).pipe(a);
1277
1194
  return;
1278
1195
  }
1279
1196
  } catch {}
@@ -1282,183 +1199,187 @@ function Nt(e, t) {
1282
1199
  }
1283
1200
  //#endregion
1284
1201
  //#region src/node/plugin/vite/middleware/virtual-html.ts
1285
- function Pt(e, t, n) {
1202
+ function zt(e, t, r) {
1286
1203
  return (i, a, o) => {
1287
1204
  if (!i.url) return o();
1288
- let c = r(s(i.url)), l = r(n.basePath);
1289
- if (c.startsWith("/@") || c.startsWith("/node_modules") || !c.startsWith(l)) return o();
1290
- let u = c.slice(l.length);
1291
- if (u.startsWith("/@") || u.startsWith("/node_modules") || c.includes(".") && !c.endsWith("/index.html")) return o();
1205
+ let s = l(n(i.url)), c = l(r.basePath);
1206
+ if (s.startsWith("/@") || s.startsWith("/node_modules") || !s.startsWith(c)) return o();
1207
+ let u = s.slice(c.length);
1208
+ if (u.startsWith("/@") || u.startsWith("/node_modules") || s.includes(".") && !s.endsWith("/index.html")) return o();
1292
1209
  t.getConfig().then(async (t) => {
1293
- let r = await e.transformIndexHtml(i.url ?? "", Ft(n, t));
1294
- a.setHeader("Content-Type", "text/html"), a.end(r);
1210
+ let n = await e.transformIndexHtml(i.url ?? "", Bt(r, t));
1211
+ a.setHeader("Content-Type", "text/html"), a.end(n);
1295
1212
  }).catch(() => o());
1296
1213
  };
1297
1214
  }
1298
- function Ft(e, t) {
1299
- return e.devHtml === void 0 && (e.devHtml = k({
1215
+ function Bt(e, t) {
1216
+ return e.devHtml === void 0 && (e.devHtml = O({
1300
1217
  title: t.siteTitle,
1301
1218
  description: t.siteDescription,
1302
1219
  base: "/",
1303
- entryScript: ft
1220
+ entryScript: _t
1304
1221
  })), e.devHtml;
1305
1222
  }
1306
1223
  //#endregion
1307
1224
  //#region src/node/plugin/vite/index.ts
1308
- function $(n = {}) {
1309
- let r = n.context, i, a, o, s = new gt(), c = new _t(), l = new bt(), u = new kt(), d = {
1225
+ function $(e = {}) {
1226
+ let t = e.context, n, r, i, a = new xt(), o = new St(), c = new Tt(), l = new Pt(), d = {
1310
1227
  devHtml: void 0,
1311
1228
  basePath: "/",
1312
1229
  rootDirectory: "vault"
1313
1230
  };
1314
- function f() {
1315
- if (r === void 0) throw Error("typedown plugin not initialized");
1316
- return r.getTdContext();
1231
+ function p() {
1232
+ if (t === void 0) throw Error("typedown plugin not initialized");
1233
+ return t.getTdContext();
1317
1234
  }
1318
1235
  return [
1319
1236
  {
1320
1237
  name: "vite-plugin-typedown",
1321
1238
  enforce: "pre",
1322
- async config(e) {
1323
- r ||= W(n.root ? w(e.root ?? process.cwd(), n.root) : lt(e.root ?? process.cwd())), o = e.base ?? "/";
1324
- let t = await (await f()).getConfig();
1239
+ async config(n) {
1240
+ if (!t) {
1241
+ let r = e.root ? A(n.root ?? process.cwd(), e.root) : ae(n.root ?? process.cwd());
1242
+ t = ie(r);
1243
+ }
1244
+ i = n.base ?? "/";
1245
+ let r = await (await p()).getConfig();
1325
1246
  return {
1326
- base: e.base ?? t.basePath,
1327
- publicDir: t.publicDir,
1247
+ base: n.base ?? r.basePath,
1248
+ publicDir: r.publicDir,
1328
1249
  server: {
1329
- port: e.server?.port ?? 8686,
1330
- strictPort: e.server?.strictPort ?? !1
1250
+ port: n.server?.port ?? 8686,
1251
+ strictPort: n.server?.strictPort ?? !1
1331
1252
  },
1332
- resolve: { alias: jt() },
1253
+ resolve: { alias: It() },
1333
1254
  ssr: { noExternal: ["typerighter"] }
1334
1255
  };
1335
1256
  },
1336
1257
  configResolved(e) {
1337
- a = w(e.root, e.build.outDir);
1258
+ r = A(e.root, e.build.outDir);
1338
1259
  },
1339
1260
  async buildStart() {
1340
- if (i) return;
1341
- let e = await f(), t = await e.getConfig(), n = w(t.rootDir);
1342
- u.index(n), await l.fetchSync(e);
1343
- let r = await e.checkVault();
1344
- if (Bt(r.diagnostics), 0 < r.errorCount) {
1345
- let e = r.diagnostics.filter((e) => e.severity === "error").map((e) => ` ${e.filepath}:${e.line}:${e.column} - ${e.message} (${e.code})`);
1346
- this.error(`Vault check failed with ${r.errorCount} error(s):\n${e.join("\n")}`);
1261
+ if (n) return;
1262
+ let e = await p(), t = await e.getConfig(), r = A(t.rootDir);
1263
+ l.index(r), await c.fetchSync(e);
1264
+ let i = await e.checkVault();
1265
+ if (Gt(i.diagnostics), 0 < i.errorCount) {
1266
+ let e = i.diagnostics.filter((e) => e.severity === "error").map((e) => ` ${e.filepath}:${e.line}:${e.column} - ${e.message} (${e.code})`);
1267
+ this.error(`Vault check failed with ${i.errorCount} error(s):\n${e.join("\n")}`);
1347
1268
  }
1348
1269
  },
1349
1270
  resolveId(e) {
1350
1271
  if (e === "/@typedown/app" || e === "@typedown/app") return G;
1351
1272
  if (e === "@typedown/pages") return q;
1352
- if (e.startsWith("@typedown/pages?resource=")) return c.resolvePageData(e);
1353
- if (e === "@typedown/site-data") return pt;
1354
- if (e === "@typedown/search-index") return mt;
1273
+ if (e.startsWith("@typedown/pages?resource=")) return o.resolvePageData(e);
1274
+ if (e === "@typedown/site-data") return vt;
1275
+ if (e === "@typedown/search-index") return yt;
1355
1276
  },
1356
1277
  async load(e) {
1357
- if (c.isPageDataModule(e)) return c.loadPageData(e, await f());
1278
+ if (o.isPageDataModule(e)) return o.loadPageData(e, await p());
1358
1279
  if (e !== "\0@typedown/search-index" && e !== "\0@typedown/site-data" && e !== "\0@typedown/pages" && e !== "\0@typedown/app") return;
1359
- let t = await f();
1360
- if (e === "\0@typedown/search-index") return u.load(t);
1361
- if (e === "\0@typedown/site-data") return l.load(t);
1362
- if (e === "\0@typedown/pages") return c.load(t);
1363
- if (e === "\0@typedown/app") return s.load(t);
1280
+ let t = await p();
1281
+ if (e === "\0@typedown/search-index") return l.load(t);
1282
+ if (e === "\0@typedown/site-data") return c.load(t);
1283
+ if (e === "\0@typedown/pages") return o.load(t);
1284
+ if (e === "\0@typedown/app") return a.load(t);
1364
1285
  },
1365
1286
  async configureServer(e) {
1366
- i = e;
1367
- let t = await f(), n = await t.getConfig(), r = w(n.rootDir);
1368
- u.index(r), l.scan(r), l.fetch(t, i), e.httpServer?.once("listening", async () => {
1287
+ n = e;
1288
+ let t = await p(), r = await t.getConfig(), i = A(r.rootDir);
1289
+ l.index(i), c.scan(i), c.fetch(t, n), e.httpServer?.once("listening", async () => {
1369
1290
  let e = await t.checkVault();
1370
- 0 < e.diagnostics.length && (console.error(""), Bt(e.diagnostics));
1291
+ 0 < e.diagnostics.length && (console.error(""), Gt(e.diagnostics));
1371
1292
  }), t.rpc.onConfigChanged(() => {
1372
- i && (d.devHtml = void 0, l.clear(), s.invalidate(i), c.invalidate(i), Lt(i), l.fetch(t, i));
1293
+ n && (d.devHtml = void 0, c.clear(), a.invalidate(n), o.invalidate(n), Ht(n), c.fetch(t, n));
1373
1294
  });
1374
- function a(...e) {
1375
- i && t.getConfig().then((t) => {
1376
- if (!i) return;
1377
- let n = [];
1378
- for (let r of e) {
1379
- let e = ie(w(i.config.root, t.rootDir, r)), a = i.moduleGraph.getModulesByFile(e);
1295
+ function s(...e) {
1296
+ n && t.getConfig().then((t) => {
1297
+ if (!n) return;
1298
+ let r = [];
1299
+ for (let i of e) {
1300
+ let e = le(A(n.config.root, t.rootDir, i)), a = n.moduleGraph.getModulesByFile(e);
1380
1301
  if (a?.size) {
1381
- for (let e of a) i.moduleGraph.invalidateModule(e), n.push(zt(e));
1382
- c.invalidatePageData(i, r);
1302
+ for (let e of a) n.moduleGraph.invalidateModule(e), r.push(Wt(e));
1303
+ o.invalidatePageData(n, i);
1383
1304
  }
1384
1305
  }
1385
- 0 < n.length && i.hot.send({
1306
+ 0 < r.length && n.hot.send({
1386
1307
  type: "update",
1387
- updates: n
1308
+ updates: r
1388
1309
  });
1389
1310
  }).catch(() => {});
1390
1311
  }
1391
- t.rpc.onContentUpdated(({ filepath: e, affectedFiles: n = [] }) => {
1392
- i && (u.index(r), u.invalidate(i), c.invalidate(i), l.clear(), l.fetch(t, i), a(e, ...n));
1312
+ t.rpc.onContentUpdated(({ filepath: e, affectedFiles: r = [] }) => {
1313
+ n && (l.index(i), l.invalidate(n), o.invalidate(n), c.clear(), c.fetch(t, n), s(e, ...r));
1393
1314
  }), t.rpc.onContentDeleted(({ filepath: e }) => {
1394
- i && (u.index(r), u.invalidate(i), c.invalidate(i), l.clear(), l.fetch(t, i), a(e));
1315
+ n && (l.index(i), l.invalidate(n), o.invalidate(n), c.clear(), c.fetch(t, n), s(e));
1395
1316
  });
1396
- function o() {
1397
- i && (l.clear(), Rt(i), l.fetch(t, i));
1317
+ function u() {
1318
+ n && (c.clear(), Ut(n), c.fetch(t, n));
1398
1319
  }
1399
- t.rpc.onSchemaUpdated(o), t.rpc.onSchemaDeleted(o);
1400
- let p = await t.getConfig();
1401
- d.basePath = p.basePath, d.rootDirectory = p.rootDir, t.rpc.onConfigChanged((e) => {
1320
+ t.rpc.onSchemaUpdated(u), t.rpc.onSchemaDeleted(u);
1321
+ let f = await t.getConfig();
1322
+ d.basePath = f.basePath, d.rootDirectory = f.rootDir, t.rpc.onConfigChanged((e) => {
1402
1323
  d.basePath = e.basePath, d.rootDirectory = e.rootDir, d.devHtml = void 0;
1403
- }), e.middlewares.use(Nt(e, d)), e.middlewares.use(Pt(e, t, d));
1324
+ }), e.middlewares.use(Rt(e, d)), e.middlewares.use(zt(e, t, d));
1404
1325
  },
1405
- async transform(n, r) {
1406
- let i = r.split("?")[0];
1407
- if (!e(i)) return;
1408
- if (t(i)) return {
1326
+ async transform(e, t) {
1327
+ let n = t.split("?")[0];
1328
+ if (!s(n)) return;
1329
+ if (u(n)) return {
1409
1330
  code: "<script>import { TdNotFound } from 'typerighter/client/theme-default'; export default TdNotFound; export const pageData = { frontmatter: {}, headings: [], title: '' };<\/script>",
1410
1331
  map: null
1411
1332
  };
1412
- let a = await f(), o = await a.getConfig(), s = b(i, o.rootDir);
1333
+ let r = await p(), i = await r.getConfig(), a = f(n, i.rootDir);
1413
1334
  try {
1414
- let { vueSrc: e } = await at(a, await a.getFile(s), s);
1335
+ let { vueSrc: e } = await mt(r, await r.getFile(a), a);
1415
1336
  return {
1416
1337
  code: e,
1417
1338
  map: null
1418
1339
  };
1419
1340
  } catch (e) {
1420
- if (V(e)) return;
1341
+ if (re(e)) return;
1421
1342
  let t = e instanceof Error ? e.message : String(e);
1422
- this.error(`[typedown] Failed to transform ${s}: ${t}`);
1343
+ this.error(`[typedown] Failed to transform ${a}: ${t}`);
1423
1344
  }
1424
1345
  },
1425
- handleHotUpdate({ file: t }) {
1426
- if (e(t)) return [];
1346
+ handleHotUpdate({ file: e }) {
1347
+ if (s(e)) return [];
1427
1348
  },
1428
1349
  async closeBundle() {
1429
- if (!n.context && r) try {
1430
- let e = (await (await r.getTdContext()).getConfig()).basePath, t = e.startsWith(o) ? e.slice(o.length) : e.replace(/^\//, "");
1431
- await M(r, {
1432
- outDir: w(a, t),
1350
+ if (!e.context && t) try {
1351
+ let e = (await (await t.getTdContext()).getConfig()).basePath, n = e.startsWith(i) ? e.slice(i.length) : e.replace(/^\//, "");
1352
+ await L(t, {
1353
+ outDir: A(r, n),
1433
1354
  base: e
1434
1355
  });
1435
1356
  } finally {
1436
- r.dispose();
1357
+ t.dispose();
1437
1358
  }
1438
1359
  }
1439
1360
  },
1440
- te({
1441
- include: n.root ? RegExp(`${n.root.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}/.*\\.(?:vue|td)$`) : /\.(?:vue|td)$/,
1361
+ ce({
1362
+ include: e.root ? RegExp(`${e.root.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}/.*\\.(?:vue|td)$`) : /\.(?:vue|td)$/,
1442
1363
  template: { transformAssetUrls: !1 }
1443
1364
  }),
1444
- ...ee()
1365
+ ...se()
1445
1366
  ];
1446
1367
  }
1447
- function It(e) {
1368
+ function Vt(e) {
1448
1369
  return [...e.moduleGraph.idToModuleMap.entries()].filter(([e]) => e.endsWith(".td")).map(([, e]) => e);
1449
1370
  }
1450
- function Lt(e) {
1451
- for (let t of It(e)) e.moduleGraph.invalidateModule(t);
1371
+ function Ht(e) {
1372
+ for (let t of Vt(e)) e.moduleGraph.invalidateModule(t);
1452
1373
  e.hot.send({ type: "full-reload" });
1453
1374
  }
1454
- function Rt(e) {
1455
- let t = It(e).map((t) => (e.moduleGraph.invalidateModule(t), zt(t)));
1375
+ function Ut(e) {
1376
+ let t = Vt(e).map((t) => (e.moduleGraph.invalidateModule(t), Wt(t)));
1456
1377
  0 < t.length && e.hot.send({
1457
1378
  type: "update",
1458
1379
  updates: t
1459
1380
  });
1460
1381
  }
1461
- function zt(e) {
1382
+ function Wt(e) {
1462
1383
  return {
1463
1384
  type: "js-update",
1464
1385
  path: e.url,
@@ -1466,11 +1387,11 @@ function zt(e) {
1466
1387
  timestamp: Date.now()
1467
1388
  };
1468
1389
  }
1469
- function Bt(e) {
1390
+ function Gt(e) {
1470
1391
  for (let t of e) {
1471
- let e = `${t.filepath}:${t.line}:${t.column}`, n = t.severity === "error" ? T.red("error") : T.yellow("warn");
1472
- console.error(` ${n} ${e} ${t.message} ${T.dim(`(${t.code})`)}`);
1392
+ let e = `${t.filepath}:${t.line}:${t.column}`, n = t.severity === "error" ? j.red("error") : j.yellow("warn");
1393
+ console.error(` ${n} ${e} ${t.message} ${j.dim(`(${t.code})`)}`);
1473
1394
  }
1474
1395
  }
1475
1396
  //#endregion
1476
- export { M as a, W as i, Q as n, U as r, $ as t };
1397
+ export { Q as n, L as r, $ as t };