mdzilla 0.0.6 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,7 +14,7 @@ Markdown browser for humans and agents.
14
14
 
15
15
  > Browse docs from local directories, GitHub repos, and remote websites — all from your terminal.
16
16
 
17
- Built with [md4x](https://github.com/unjs/md4x), [mdream](https://github.com/harlan-zw/mdream), [giget](https://github.com/unjs/giget) and [speed-highlight](https://github.com/speed-highlight/core), [nitro](https://v3.nitro.build/), [h3](https://h3.dev/), [srvx](https://srvx.h3.dev/) and [vite](https://vite.dev/).
17
+ Built with [md4x](https://github.com/unjs/md4x), [giget](https://github.com/unjs/giget) and [speed-highlight](https://github.com/speed-highlight/core), [nitro](https://v3.nitro.build/), [h3](https://h3.dev/), [srvx](https://srvx.h3.dev/) and [vite](https://vite.dev/).
18
18
 
19
19
  Supports any website with [`/llms.txt`](https://llmstxt.org/) or markdown content negotiation.
20
20
 
@@ -591,21 +591,9 @@ var DocsSourceHTTP = class extends DocsSource {
591
591
  return `# Fetch Error\n\nFailed to fetch \`${url}\`\n\n> ${err instanceof Error ? err.message : String(err)}`;
592
592
  }
593
593
  if (!res.ok) return `# ${res.status} ${res.statusText}\n\nFailed to fetch \`${url}\``;
594
- const contentType = res.headers.get("content-type") || "";
595
- const text = await res.text();
596
- if (_isHTML(contentType, text)) {
597
- const { htmlToMarkdown } = await import("mdream");
598
- return htmlToMarkdown(text, { origin: url });
599
- }
600
- return text;
594
+ return await res.text();
601
595
  }
602
596
  };
603
- /** Check if a response is HTML by content-type or content sniffing */
604
- function _isHTML(contentType, body) {
605
- if (contentType.includes("text/html") || contentType.includes("application/xhtml")) return true;
606
- const trimmed = body.trimStart();
607
- return trimmed.startsWith("<!") || trimmed.startsWith("<html");
608
- }
609
597
  /** Extract a readable title from a URL */
610
598
  function _titleFromURL(url) {
611
599
  try {
@@ -14,16 +14,19 @@ var te = Object.defineProperty, v = (e, t) => () => (e && (t = e(e = 0)), t), y
14
14
  enumerable: !0
15
15
  });
16
16
  return t || te(n, Symbol.toStringTag, { value: `Module` }), n;
17
- }, ne = {};
18
- globalThis.__nitro_vite_envs__ = ne;
19
- var b, re = v((() => {
17
+ };
18
+ globalThis.__nitro_vite_envs__ = {};
19
+ var b, ne = v((() => {
20
20
  b = (() => {
21
21
  let e = function() {};
22
22
  return e.prototype = Object.create(null), Object.freeze(e.prototype), e;
23
23
  })();
24
- })), ie, x, ae = v((() => {
25
- ie = URL, x = Response;
24
+ })), re, x, ie = v((() => {
25
+ re = URL, x = Response;
26
26
  }));
27
+ function ae(e) {
28
+ return decodeURI(e.includes(`%25`) ? e.replace(/%25/g, `%2525`) : e);
29
+ }
27
30
  function oe(e = ``) {
28
31
  return e.replace(ve, ``);
29
32
  }
@@ -48,14 +51,14 @@ function S(e, t, n = {}) {
48
51
  }
49
52
  function le(e, t, n, r) {
50
53
  if (e === ye) return new x(null);
51
- if (e === N && (e = new M({
54
+ if (e === P && (e = new N({
52
55
  status: 404,
53
56
  message: `Cannot find any route matching [${t.req.method}] ${t.url}`
54
57
  })), e && e instanceof Error) {
55
- let i = M.isError(e), a = i ? e : new M(e);
58
+ let i = N.isError(e), a = i ? e : new N(e);
56
59
  i || (a.unhandled = !0, e?.stack && (a.stack = e.stack)), a.unhandled && !n.silent && console.error(a);
57
- let { onError: o } = n;
58
- return o && !r ? Promise.resolve(o(a, t)).catch((e) => e).then((r) => le(r ?? e, t, n, !0)) : fe(a, n.debug);
60
+ let { onError: o } = n, s = t[k]?.[j];
61
+ return o && !r ? Promise.resolve(o(a, t)).catch((e) => e).then((r) => le(r ?? e, t, n, !0)) : fe(a, n.debug, s);
59
62
  }
60
63
  let i = t[k], a = i?.[A];
61
64
  if (t[k] = void 0, !(e instanceof Response)) {
@@ -89,14 +92,14 @@ function ue(e, t, n) {
89
92
  let r = typeof e;
90
93
  if (r === `string`) return { body: e };
91
94
  if (e instanceof Uint8Array) return t.res.headers.set(`content-length`, e.byteLength.toString()), { body: e };
92
- if (e instanceof P || e?.constructor?.name === `HTTPResponse`) return e;
95
+ if (e instanceof F || e?.constructor?.name === `HTTPResponse`) return e;
93
96
  if (ce(e, r)) return {
94
97
  body: JSON.stringify(e, void 0, n.debug ? 2 : void 0),
95
- headers: L
98
+ headers: R
96
99
  };
97
100
  if (r === `bigint`) return {
98
101
  body: e.toString(),
99
- headers: L
102
+ headers: R
100
103
  };
101
104
  if (e instanceof Blob) {
102
105
  let t = new Headers({
@@ -113,15 +116,16 @@ function ue(e, t, n) {
113
116
  function de(e, t) {
114
117
  return e === `HEAD` || t === 100 || t === 101 || t === 102 || t === 204 || t === 205 || t === 304;
115
118
  }
116
- function fe(e, t) {
117
- return new x(JSON.stringify({
119
+ function fe(e, t, n) {
120
+ let r = e.headers ? C(R, e.headers) : new Headers(R);
121
+ return n && (r = C(r, n)), new x(JSON.stringify({
118
122
  ...e.toJSON(),
119
123
  stack: t && e.stack ? e.stack.split(`
120
124
  `).map((e) => e.trim()) : void 0
121
125
  }, void 0, t ? 2 : void 0), {
122
126
  status: e.status,
123
127
  statusText: e.statusText,
124
- headers: e.headers ? C(L, e.headers) : new Headers(L)
128
+ headers: r
125
129
  });
126
130
  }
127
131
  function w(e, t, n, r = 0) {
@@ -130,7 +134,7 @@ function w(e, t, n, r = 0) {
130
134
  return pe(c) ? s() : typeof c?.then == `function` ? c.then((e) => pe(e) ? s() : e) : c;
131
135
  }
132
136
  function pe(e) {
133
- return e === void 0 || e === N;
137
+ return e === void 0 || e === P;
134
138
  }
135
139
  function me(e) {
136
140
  let t = new b();
@@ -139,10 +143,10 @@ function me(e) {
139
143
  for (let p = 0; p < n + 1; p++) switch (f = p === n ? 38 : e.charCodeAt(p), f) {
140
144
  case 38:
141
145
  if (d = o > a, d || (o = p), r = e.slice(a + 1, o), d || r.length > 0) {
142
- if (l && (r = r.replace(R, ` `)), s) try {
146
+ if (l && (r = r.replace(z, ` `)), s) try {
143
147
  r = decodeURIComponent(r);
144
148
  } catch {}
145
- if (d && (i = e.slice(o + 1, p), u && (i = i.replace(R, ` `)), c)) try {
149
+ if (d && (i = e.slice(o + 1, p), u && (i = i.replace(z, ` `)), c)) try {
146
150
  i = decodeURIComponent(i);
147
151
  } catch {}
148
152
  let n = t[r];
@@ -169,7 +173,7 @@ function T(e) {
169
173
  if (typeof e == `function`) return ge(e);
170
174
  let t = e.handler || (e.fetch ? function(t) {
171
175
  return e.fetch(t.req);
172
- } : z);
176
+ } : B);
173
177
  return Object.assign(ge(e.middleware?.length ? function(n) {
174
178
  return w(n, e.middleware, t);
175
179
  } : t), e);
@@ -177,7 +181,7 @@ function T(e) {
177
181
  function ge(e) {
178
182
  return `fetch` in e ? e : Object.assign(e, { fetch: (t) => {
179
183
  typeof t == `string` && (t = new URL(t, `http://_`)), t instanceof URL && (t = new Request(t));
180
- let n = new j(t);
184
+ let n = new M(t);
181
185
  try {
182
186
  return Promise.resolve(S(e(n), n));
183
187
  } catch (e) {
@@ -201,8 +205,8 @@ function D(e) {
201
205
  return e.fetch(t.req);
202
206
  };
203
207
  }
204
- var O, k, A, j, _e, ve, M, N, ye, P, F, I, be, L, R, z, xe, Se = v((() => {
205
- re(), ae(), O = `h3.internal.event.`, k = Symbol.for(`${O}res`), A = Symbol.for(`${O}res.headers`), j = class {
208
+ var O, k, A, j, M, _e, ve, N, P, ye, F, I, L, be, R, z, B, xe, Se = v((() => {
209
+ ne(), ie(), O = `h3.internal.event.`, k = Symbol.for(`${O}res`), A = Symbol.for(`${O}res.headers`), j = Symbol.for(`${O}res.err.headers`), M = class {
206
210
  app;
207
211
  req;
208
212
  url;
@@ -210,8 +214,8 @@ var O, k, A, j, _e, ve, M, N, ye, P, F, I, be, L, R, z, xe, Se = v((() => {
210
214
  static __is_event__ = !0;
211
215
  constructor(e, t, n) {
212
216
  this.context = t || e.context || new b(), this.req = e, this.app = n;
213
- let r = e._url;
214
- this.url = r && r instanceof URL ? r : new ie(e.url);
217
+ let r = e._url, i = r && r instanceof URL ? r : new re(e.url);
218
+ i.pathname.includes(`%`) && (i.pathname = ae(i.pathname)), this.url = i;
215
219
  }
216
220
  get res() {
217
221
  return this[k] ||= new _e();
@@ -246,7 +250,10 @@ var O, k, A, j, _e, ve, M, N, ye, P, F, I, be, L, R, z, xe, Se = v((() => {
246
250
  get headers() {
247
251
  return this[A] ||= new Headers();
248
252
  }
249
- }, ve = /[^\u0009\u0020-\u007E]/g, M = class e extends Error {
253
+ get errHeaders() {
254
+ return this[j] ||= new Headers();
255
+ }
256
+ }, ve = /[^\u0009\u0020-\u007E]/g, N = class e extends Error {
250
257
  get name() {
251
258
  return `HTTPError`;
252
259
  }
@@ -270,7 +277,7 @@ var O, k, A, j, _e, ve, M, N, ye, P, F, I, be, L, R, z, xe, Se = v((() => {
270
277
  constructor(e, t) {
271
278
  let n, r;
272
279
  typeof e == `string` ? (n = e, r = t) : r = e;
273
- let i = se(r?.status || r?.cause?.status || r?.status || r?.statusCode, 500), a = oe(r?.statusText || r?.cause?.statusText || r?.statusText || r?.statusMessage), o = n || r?.message || r?.cause?.message || r?.statusText || r?.statusMessage || [
280
+ let i = se(r?.status || r?.statusCode || r?.cause?.status || r?.cause?.statusCode, 500), a = oe(r?.statusText || r?.statusMessage || r?.cause?.statusText || r?.cause?.statusMessage), o = n || r?.message || r?.cause?.message || r?.statusText || r?.statusMessage || [
274
281
  `HTTPError`,
275
282
  i,
276
283
  a
@@ -296,7 +303,7 @@ var O, k, A, j, _e, ve, M, N, ye, P, F, I, be, L, R, z, xe, Se = v((() => {
296
303
  ...e ? void 0 : this.body
297
304
  };
298
305
  }
299
- }, N = Symbol.for(`h3.notFound`), ye = Symbol.for(`h3.handled`), P = class {
306
+ }, P = Symbol.for(`h3.notFound`), ye = Symbol.for(`h3.handled`), F = class {
300
307
  #e;
301
308
  #t;
302
309
  body;
@@ -312,13 +319,13 @@ var O, k, A, j, _e, ve, M, N, ye, P, F, I, be, L, R, z, xe, Se = v((() => {
312
319
  get headers() {
313
320
  return this.#e ||= new Headers(this.#t?.headers);
314
321
  }
315
- }, F = (e) => (...t) => {
322
+ }, I = (e) => (...t) => {
316
323
  throw Error(`Headers are frozen (${e} ${t.join(`, `)})`);
317
- }, I = class extends Headers {
318
- set = F(`set`);
319
- append = F(`append`);
320
- delete = F(`delete`);
321
- }, be = new I({ "content-length": `0` }), L = new I({ "content-type": `application/json;charset=UTF-8` }), R = /\+/g, z = () => N, xe = class {
324
+ }, L = class extends Headers {
325
+ set = I(`set`);
326
+ append = I(`append`);
327
+ delete = I(`delete`);
328
+ }, be = new L({ "content-length": `0` }), R = new L({ "content-type": `application/json;charset=UTF-8` }), z = /\+/g, B = () => P, xe = class {
322
329
  config;
323
330
  "~middleware";
324
331
  "~routes" = [];
@@ -331,11 +338,11 @@ var O, k, A, j, _e, ve, M, N, ye, P, F, I, be, L, R, z, xe, Se = v((() => {
331
338
  handler(e) {
332
339
  let t = this[`~findRoute`](e);
333
340
  t && (e.context.params = t.params, e.context.matchedRoute = t.data);
334
- let n = t?.data.handler || z, r = this[`~getMiddleware`](e, t);
341
+ let n = t?.data.handler || B, r = this[`~getMiddleware`](e, t);
335
342
  return r.length > 0 ? w(e, r, n) : n(e);
336
343
  }
337
344
  "~request"(e, t) {
338
- let n = new j(e, t, this), r;
345
+ let n = new M(e, t, this), r;
339
346
  try {
340
347
  if (this.config.onRequest) {
341
348
  let e = this.config.onRequest(n);
@@ -355,16 +362,16 @@ var O, k, A, j, _e, ve, M, N, ye, P, F, I, be, L, R, z, xe, Se = v((() => {
355
362
  return n ? [...r, ...n] : r;
356
363
  }
357
364
  }, new TextEncoder();
358
- })), B = v((() => {
365
+ })), V = v((() => {
359
366
  Se();
360
367
  }));
361
- B(), ae();
368
+ V(), ie();
362
369
  var we = (e, t) => {
363
- let n = V(e, t);
370
+ let n = Te(e, t);
364
371
  return new x(typeof n.body == `string` ? n.body : JSON.stringify(n.body, null, 2), n);
365
372
  };
366
- function V(e, t) {
367
- let n = e.unhandled ?? !M.isError(e), { status: r = 500, statusText: i = `` } = n ? {} : e;
373
+ function Te(e, t) {
374
+ let n = e.unhandled ?? !N.isError(e), { status: r = 500, statusText: i = `` } = n ? {} : e;
368
375
  if (r === 404) {
369
376
  let e = t.url || new URL(t.req.url);
370
377
  if (/^\/[^/]/.test(`/`) && !e.pathname.startsWith(`/`)) return {
@@ -390,32 +397,32 @@ function V(e, t) {
390
397
  }
391
398
  };
392
399
  }
393
- var Te = [we];
394
- async function Ee(e, t) {
395
- for (let n of Te) try {
396
- let r = await n(e, t, { defaultHandler: V });
400
+ var Ee = [we];
401
+ async function De(e, t) {
402
+ for (let n of Ee) try {
403
+ let r = await n(e, t, { defaultHandler: Te });
397
404
  if (r) return r;
398
405
  } catch (e) {
399
406
  console.error(e);
400
407
  }
401
408
  }
402
409
  String.fromCharCode;
403
- var De = /%2f/gi;
404
- function Oe(e = ``) {
410
+ var Oe = /%2f/gi;
411
+ function ke(e = ``) {
405
412
  try {
406
413
  return decodeURIComponent(`` + e);
407
414
  } catch {
408
415
  return `` + e;
409
416
  }
410
417
  }
411
- function ke(e) {
412
- return Oe(e.replace(De, `%252F`));
418
+ function Ae(e) {
419
+ return ke(e.replace(Oe, `%252F`));
413
420
  }
414
- var Ae = /\/$|\/\?|\/#/, je = /^\.?\//;
421
+ var je = /\/$|\/\?|\/#/, Me = /^\.?\//;
415
422
  function H(e = ``, t) {
416
- return t ? Ae.test(e) : e.endsWith(`/`);
423
+ return t ? je.test(e) : e.endsWith(`/`);
417
424
  }
418
- function Me(e = ``, t) {
425
+ function Ne(e = ``, t) {
419
426
  if (!t) return (H(e) ? e.slice(0, -1) : e) || `/`;
420
427
  if (!H(e, !0)) return e || `/`;
421
428
  let n = e, r = ``, i = e.indexOf(`#`);
@@ -423,7 +430,7 @@ function Me(e = ``, t) {
423
430
  let [a, ...o] = n.split(`?`);
424
431
  return ((a.endsWith(`/`) ? a.slice(0, -1) : a) || `/`) + (o.length > 0 ? `?${o.join(`?`)}` : ``) + r;
425
432
  }
426
- function Ne(e = ``, t) {
433
+ function Pe(e = ``, t) {
427
434
  if (!t) return e.endsWith(`/`) ? e : e + `/`;
428
435
  if (H(e, !0)) return e || `/`;
429
436
  let n = e, r = ``, i = e.indexOf(`#`);
@@ -431,30 +438,30 @@ function Ne(e = ``, t) {
431
438
  let [a, ...o] = n.split(`?`);
432
439
  return a + `/` + (o.length > 0 ? `?${o.join(`?`)}` : ``) + r;
433
440
  }
434
- function Pe(e = ``) {
441
+ function Fe(e = ``) {
435
442
  return e.startsWith(`/`);
436
443
  }
437
- function Fe(e = ``) {
438
- return Pe(e) ? e : `/` + e;
444
+ function Ie(e = ``) {
445
+ return Fe(e) ? e : `/` + e;
439
446
  }
440
- function Ie(e) {
447
+ function Le(e) {
441
448
  return e && e !== `/`;
442
449
  }
443
- function Le(e, ...t) {
450
+ function Re(e, ...t) {
444
451
  let n = e || ``;
445
- for (let e of t.filter((e) => Ie(e))) if (n) {
446
- let t = e.replace(je, ``);
447
- n = Ne(n) + t;
452
+ for (let e of t.filter((e) => Le(e))) if (n) {
453
+ let t = e.replace(Me, ``);
454
+ n = Pe(n) + t;
448
455
  } else n = e;
449
456
  return n;
450
457
  }
451
- var Re = ((e) => function(t) {
458
+ var ze = ((e) => function(t) {
452
459
  for (let [n, r] of Object.entries(e.options || {})) t.res.headers.set(n, r);
453
460
  }), U = {
454
461
  "/assets/index-BC9qhYL0.js": {
455
462
  type: `text/javascript; charset=utf-8`,
456
463
  etag: `"2c32-P9M3yJbjRmzrrPeoaEqQI2KbS4E"`,
457
- mtime: `2026-03-14T09:22:03.134Z`,
464
+ mtime: `2026-03-24T10:49:38.806Z`,
458
465
  size: 11314,
459
466
  path: `../public/assets/index-BC9qhYL0.js`,
460
467
  data: `KGZ1bmN0aW9uKCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgbGlua2ApLnJlbExpc3Q7aWYoZSYmZS5zdXBwb3J0cyYmZS5zdXBwb3J0cyhgbW9kdWxlcHJlbG9hZGApKXJldHVybjtmb3IobGV0IGUgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXWApKW4oZSk7bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2ZvcihsZXQgdCBvZiBlKWlmKHQudHlwZT09PWBjaGlsZExpc3RgKWZvcihsZXQgZSBvZiB0LmFkZGVkTm9kZXMpZS50YWdOYW1lPT09YExJTktgJiZlLnJlbD09PWBtb2R1bGVwcmVsb2FkYCYmbihlKX0pLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSk7ZnVuY3Rpb24gdChlKXtsZXQgdD17fTtyZXR1cm4gZS5pbnRlZ3JpdHkmJih0LmludGVncml0eT1lLmludGVncml0eSksZS5yZWZlcnJlclBvbGljeSYmKHQucmVmZXJyZXJQb2xpY3k9ZS5yZWZlcnJlclBvbGljeSksZS5jcm9zc09yaWdpbj09PWB1c2UtY3JlZGVudGlhbHNgP3QuY3JlZGVudGlhbHM9YGluY2x1ZGVgOmUuY3Jvc3NPcmlnaW49PT1gYW5vbnltb3VzYD90LmNyZWRlbnRpYWxzPWBvbWl0YDp0LmNyZWRlbnRpYWxzPWBzYW1lLW9yaWdpbmAsdH1mdW5jdGlvbiBuKGUpe2lmKGUuZXApcmV0dXJuO2UuZXA9ITA7bGV0IG49dChlKTtmZXRjaChlLmhyZWYsbil9fSkoKTt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChgaWNvbi1zdW5gKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBpY29uLW1vb25gKTtmdW5jdGlvbiBuKCl7bGV0IG49bG9jYWxTdG9yYWdlLmdldEl0ZW0oYHRoZW1lYCkscj1uPT09YGRhcmtgfHwhbiYmd2luZG93Lm1hdGNoTWVkaWEoYChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylgKS5tYXRjaGVzO2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGBkYXJrYCxyKSxlLmNsYXNzTGlzdC50b2dnbGUoYGhpZGRlbmAsIXIpLHQuY2xhc3NMaXN0LnRvZ2dsZShgaGlkZGVuYCxyKX1mdW5jdGlvbiByKCl7bigpLHdpbmRvdy5tYXRjaE1lZGlhKGAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspYCkuYWRkRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCwoKT0+e2xvY2FsU3RvcmFnZS5nZXRJdGVtKGB0aGVtZWApfHxuKCl9KSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgdGhlbWUtdG9nZ2xlYCkuYWRkRXZlbnRMaXN0ZW5lcihgY2xpY2tgLCgpPT57bGV0IGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhgZGFya2ApO2xvY2FsU3RvcmFnZS5zZXRJdGVtKGB0aGVtZWAsZT9gbGlnaHRgOmBkYXJrYCksbigpfSl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlLnBhdGg9PT10PyEwOmUuY2hpbGRyZW4/LnNvbWUoZT0+aShlLHQpKT8/ITF9ZnVuY3Rpb24gYShlLHQpe3JldHVybiBlLm1hcChlPT57bGV0IG49ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5sZW5ndGg+MCxyPW4/YShlLmNoaWxkcmVuLHQrMSk6YGAsaT0xMit0KjEyO3JldHVybmAKICAgICAgICA8bGk+CiAgICAgICAgICAke2UucGFnZSE9PSExJiYhKG4mJmUuY2hpbGRyZW4/LlswXT8ucGF0aD09PWUucGF0aCk/YDxhIGhyZWY9IiR7ZS5wYXRofSIKICAgICAgICAgICAgY2xhc3M9Im5hdi1saW5rIGJsb2NrIHB5LTEuNSB0ZXh0LXNtICR7bj9gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDBgOmB0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTQwMGB9IGhvdmVyOmJnLWdyYXktMTAwIGhvdmVyOnRleHQtZ3JheS05MDAgZGFyazpob3ZlcjpiZy1ncmF5LTgwMCBkYXJrOmhvdmVyOnRleHQtZ3JheS0xMDAgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyIKICAgICAgICAgICAgc3R5bGU9InBhZGRpbmctbGVmdDogJHtpfXB4OyBwYWRkaW5nLXJpZ2h0OiAxMnB4IgogICAgICAgICAgICBkYXRhLXBhdGg9IiR7ZS5wYXRofSI+CiAgICAgICAgICAgICR7ZS50aXRsZX0KICAgICAgICAgIDwvYT5gOmA8c3BhbgogICAgICAgICAgICBjbGFzcz0iYmxvY2sgcHktMS41IHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDAgY3Vyc29yLWRlZmF1bHQiCiAgICAgICAgICAgIHN0eWxlPSJwYWRkaW5nLWxlZnQ6ICR7aX1weDsgcGFkZGluZy1yaWdodDogMTJweCI+CiAgICAgICAgICAgICR7ZS50aXRsZX0KICAgICAgICAgIDwvc3Bhbj5gfQogICAgICAgICAgJHtyP2A8dWwgY2xhc3M9Im10LTAuNSI+JHtyfTwvdWw+YDpgYH0KICAgICAgICA8L2xpPmB9KS5qb2luKGBgKX1mdW5jdGlvbiBvKGUsdCl7bGV0IG49ZS5zb21lKGU9PmkoZSx0KSkscj0hMDtyZXR1cm4gZS5tYXAoZT0+e2lmKCEoZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5sZW5ndGg+MCkpcmV0dXJuYDxsaT4ke2UucGFnZT09PSExP2A8c3BhbiBjbGFzcz0iYmxvY2sgcHktMS41IHB4LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC1ncmF5LTEwMCBjdXJzb3ItZGVmYXVsdCI+CiAgICAgICAgICAgICAgICAke2UudGl0bGV9CiAgICAgICAgICAgICAgPC9zcGFuPmA6YDxhIGhyZWY9IiR7ZS5wYXRofSIKICAgICAgICAgICAgICAgIGNsYXNzPSJuYXYtbGluayBibG9jayBweS0xLjUgcHgtMyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LWdyYXktMTAwIGhvdmVyOmJnLWdyYXktMTAwIGRhcms6aG92ZXI6YmctZ3JheS04MDAgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyIKICAgICAgICAgICAgICAgIGRhdGEtcGF0aD0iJHtlLnBhdGh9Ij4KICAgICAgICAgICAgICAgICR7ZS50aXRsZX0KICAgICAgICAgICAgICA8L2E+YH08L2xpPmA7bGV0IG89aShlLHQpfHwhbiYmcjtyPSExO2xldCBzPWUucGFnZSE9PSExJiZlLmNoaWxkcmVuPy5bMF0/LnBhdGghPT1lLnBhdGgsYz1gPHN2ZyBjbGFzcz0ibmF2LWNoZXZyb24gdy00IGgtNCB0ZXh0LWdyYXktNDAwIHRyYW5zaXRpb24tdHJhbnNmb3JtICR7bz9gcm90YXRlLTkwYDpgYH0iIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjIxIDE0Ljc3YS43NS43NSAwIDAxLjAyLTEuMDZMMTEuMTY4IDEwIDcuMjMgNi4yOWEuNzUuNzUgMCAxMTEuMDQtMS4wOGw0LjUgNC4yNWEuNzUuNzUgMCAwMTAgMS4wOGwtNC41IDQuMjVhLjc1Ljc1IDAgMDEtMS4wNi0uMDJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz5gLGw9cz9gPGEgaHJlZj0iJHtlLnBhdGh9IgogICAgICAgICAgICBjbGFzcz0ibmF2LWxpbmsgZmxleC0xIHB5LTEuNSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LWdyYXktMTAwIGhvdmVyOnRleHQtZ3JheS02MDAgZGFyazpob3Zlcjp0ZXh0LWdyYXktMzAwIHRyYW5zaXRpb24tY29sb3JzIgogICAgICAgICAgICBkYXRhLXBhdGg9IiR7ZS5wYXRofSI+CiAgICAgICAgICAgICR7ZS50aXRsZX0KICAgICAgICAgIDwvYT5gOmA8c3BhbiBjbGFzcz0iZmxleC0xIHB5LTEuNSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LWdyYXktMTAwIj4KICAgICAgICAgICAgJHtlLnRpdGxlfQogICAgICAgICAgPC9zcGFuPmAsdT1hKGUuY2hpbGRyZW4sMSk7cmV0dXJuYAogICAgICAgIDxsaSBkYXRhLXNlY3Rpb249IiR7ZS5wYXRofSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBweC0zIHJvdW5kZWQtbWQgaG92ZXI6YmctZ3JheS0xMDAgZGFyazpob3ZlcjpiZy1ncmF5LTgwMCB0cmFuc2l0aW9uLWNvbG9ycyBjdXJzb3ItcG9pbnRlciI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi10b2dnbGUgcC0wLjUgLW1sLTEgbXItMSIgZGF0YS1zZWN0aW9uPSIke2UucGF0aH0iIGFyaWEtbGFiZWw9IlRvZ2dsZSBzZWN0aW9uIj4KICAgICAgICAgICAgICAke2N9CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAke2x9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx1bCBjbGFzcz0ibmF2LXNlY3Rpb24gbXQtMC41ICR7bz9gYDpgaGlkZGVuYH0iIGRhdGEtc2VjdGlvbj0iJHtlLnBhdGh9Ij4KICAgICAgICAgICAgJHt1fQogICAgICAgICAgPC91bD4KICAgICAgICA8L2xpPmB9KS5qb2luKGBgKX1mdW5jdGlvbiBzKGUpe2ZvcihsZXQgdCBvZiBlKXtpZih0LnBhZ2UhPT0hMSlyZXR1cm4gdC5wYXRoO2lmKHQuY2hpbGRyZW4pe2xldCBlPXModC5jaGlsZHJlbik7aWYoZSlyZXR1cm4gZX19fXZhciBjPVtdO2Z1bmN0aW9uIGwoZSx0KXtjPXQ7bGV0IG49bG9jYXRpb24ucGF0aG5hbWU7ZS5pbm5lckhUTUw9dC5sZW5ndGg/YDx1bCBjbGFzcz0ic3BhY2UteS0wLjUiPiR7byh0LG4pfTwvdWw+YDpgPHAgY2xhc3M9InB4LTMgcHktMiB0ZXh0LXNtIHRleHQtZ3JheS00MDAiPk5vIHBhZ2VzIGxvYWRlZDwvcD5gLGUuYWRkRXZlbnRMaXN0ZW5lcihgY2xpY2tgLHQ9PntsZXQgbj10LnRhcmdldCxyPW4uY2xvc2VzdChgLm5hdi10b2dnbGVgKTtpZihyKXt1KGUsci5kYXRhc2V0LnNlY3Rpb24pO3JldHVybn1sZXQgaT1uLmNsb3Nlc3QoYGxpW2RhdGEtc2VjdGlvbl1gKTtpJiYhbi5jbG9zZXN0KGAubmF2LWxpbmtgKSYmdShlLGkuZGF0YXNldC5zZWN0aW9uKX0pfWZ1bmN0aW9uIHUoZSx0KXtsZXQgbj1lLnF1ZXJ5U2VsZWN0b3IoYHVsLm5hdi1zZWN0aW9uW2RhdGEtc2VjdGlvbj0iJHt0fSJdYCk7biYmKG4uY2xhc3NMaXN0LmNvbnRhaW5zKGBoaWRkZW5gKT8oZS5xdWVyeVNlbGVjdG9yQWxsKGB1bC5uYXYtc2VjdGlvbmApLmZvckVhY2goZT0+e2UuY2xhc3NMaXN0LmFkZChgaGlkZGVuYCl9KSxlLnF1ZXJ5U2VsZWN0b3JBbGwoYC5uYXYtY2hldnJvbmApLmZvckVhY2goZT0+e2UuY2xhc3NMaXN0LnJlbW92ZShgcm90YXRlLTkwYCl9KSxuLmNsYXNzTGlzdC5yZW1vdmUoYGhpZGRlbmApLGUucXVlcnlTZWxlY3RvcihgLm5hdi10b2dnbGVbZGF0YS1zZWN0aW9uPSIke3R9Il0gLm5hdi1jaGV2cm9uYCk/LmNsYXNzTGlzdC5hZGQoYHJvdGF0ZS05MGApKToobi5jbGFzc0xpc3QuYWRkKGBoaWRkZW5gKSxlLnF1ZXJ5U2VsZWN0b3IoYC5uYXYtdG9nZ2xlW2RhdGEtc2VjdGlvbj0iJHt0fSJdIC5uYXYtY2hldnJvbmApPy5jbGFzc0xpc3QucmVtb3ZlKGByb3RhdGUtOTBgKSkpfWZ1bmN0aW9uIGQoZSx0KXtlLnF1ZXJ5U2VsZWN0b3JBbGwoYC5uYXYtbGlua2ApLmZvckVhY2goZT0+e2xldCBuPWUuZ2V0QXR0cmlidXRlKGBkYXRhLXBhdGhgKT09PXQ7ZS5jbGFzc0xpc3QudG9nZ2xlKGBuYXYtYWN0aXZlYCxuKSxlLmNsYXNzTGlzdC50b2dnbGUoYGZvbnQtbWVkaXVtYCxuKX0pO2xldCBuPWMuZmluZChlPT5pKGUsdCkpO24/LmNoaWxkcmVuPy5sZW5ndGgmJihlLnF1ZXJ5U2VsZWN0b3JBbGwoYHVsLm5hdi1zZWN0aW9uYCkuZm9yRWFjaChlPT57ZS5jbGFzc0xpc3QuYWRkKGBoaWRkZW5gKX0pLGUucXVlcnlTZWxlY3RvckFsbChgLm5hdi1jaGV2cm9uYCkuZm9yRWFjaChlPT57ZS5jbGFzc0xpc3QucmVtb3ZlKGByb3RhdGUtOTBgKX0pLGUucXVlcnlTZWxlY3RvcihgdWwubmF2LXNlY3Rpb25bZGF0YS1zZWN0aW9uPSIke24ucGF0aH0iXWApPy5jbGFzc0xpc3QucmVtb3ZlKGBoaWRkZW5gKSxlLnF1ZXJ5U2VsZWN0b3IoYC5uYXYtdG9nZ2xlW2RhdGEtc2VjdGlvbj0iJHtuLnBhdGh9Il0gLm5hdi1jaGV2cm9uYCk/LmNsYXNzTGlzdC5hZGQoYHJvdGF0ZS05MGApKX1mdW5jdGlvbiBmKGUsdCl7ZS5pbm5lckhUTUw9YDxhcnRpY2xlIGNsYXNzPSJwcm9zZSBwcm9zZS1ncmF5IG1heC13LW5vbmUiPiR7dH08L2FydGljbGU+YDtmb3IobGV0IHQgb2YgZS5xdWVyeVNlbGVjdG9yQWxsKGBhW2hyZWZdYCkpe2xldCBuPXQuZ2V0QXR0cmlidXRlKGBocmVmYCk7bi5zdGFydHNXaXRoKGAvYCk/dC5hZGRFdmVudExpc3RlbmVyKGBjbGlja2AsZT0+e2UucHJldmVudERlZmF1bHQoKSxoaXN0b3J5LnB1c2hTdGF0ZShudWxsLGBgLG4pLHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBQb3BTdGF0ZUV2ZW50KGBwb3BzdGF0ZWApKX0pOm4uc3RhcnRzV2l0aChgI2ApP3QuYWRkRXZlbnRMaXN0ZW5lcihgY2xpY2tgLHQ9Pnt0LnByZXZlbnREZWZhdWx0KCk7bGV0IHI9bi5zbGljZSgxKSxpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIpfHxlLnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtDU1MuZXNjYXBlKHIpfSJdYCk7aSYmKGkuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOmBzbW9vdGhgfSksaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCxgYCxuKSl9KTovXmh0dHBzPzpcL1wvLy50ZXN0KG4pJiYodC50YXJnZXQ9YF9ibGFua2AsdC5yZWw9YG5vb3BlbmVyIG5vcmVmZXJyZXJgKX19YXN5bmMgZnVuY3Rpb24gcChlLHQpe2YoZSxgPHAgY2xhc3M9InRleHQtZ3JheS00MDAiPkxvYWRpbmcuLi48L3A+YCk7bGV0IG49YXdhaXQoYXdhaXQgZmV0Y2goYC9hcGkvcGFnZT9wYXRoPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHQpfWApKS5qc29uKCk7aWYobi5lcnJvcilmKGUsYDxwIGNsYXNzPSJ0ZXh0LXJlZC01MDAiPiR7bi5lcnJvcn08L3A+YCk7ZWxzZXtmKGUsbi5odG1sKTtsZXQgdD1sb2NhdGlvbi5oYXNoLnNsaWNlKDEpO2lmKHQpe2xldCBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpfHxlLnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtDU1MuZXNjYXBlKHQpfSJdYCk7biYmbi5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6YHNtb290aGB9KX19fXZhciBtPVtdO2Z1bmN0aW9uIGgoZSl7bT1lfWZ1bmN0aW9uIGcoKXtsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2VhcmNoLXRyaWdnZXJgKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzZWFyY2gtbW9kYWxgKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzZWFyY2gtYmFja2Ryb3BgKSxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzZWFyY2gtaW5wdXRgKSxpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzZWFyY2gtcmVzdWx0c2ApLGEsbz0tMSxzPVtdO2UuYWRkRXZlbnRMaXN0ZW5lcihgY2xpY2tgLGMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGtleWRvd25gLGU9PnsoZS5tZXRhS2V5fHxlLmN0cmxLZXkpJiZlLmtleT09PWBrYCYmKGUucHJldmVudERlZmF1bHQoKSxjKCkpfSksbi5hZGRFdmVudExpc3RlbmVyKGBjbGlja2AsbCksci5hZGRFdmVudExpc3RlbmVyKGBpbnB1dGAsKCk9PntjbGVhclRpbWVvdXQoYSk7bGV0IGU9ci52YWx1ZS50cmltKCk7aWYoZS5sZW5ndGg8Mil7bz0tMSxzPVtdLHAoKTtyZXR1cm59YT1zZXRUaW1lb3V0KCgpPT51KGUpLDIwMCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoYGtleWRvd25gLGU9PntlLmtleT09PWBBcnJvd0Rvd25gPyhlLnByZXZlbnREZWZhdWx0KCksZihvKzEpKTplLmtleT09PWBBcnJvd1VwYD8oZS5wcmV2ZW50RGVmYXVsdCgpLGYoby0xKSk6ZS5rZXk9PT1gRW50ZXJgJiZvPj0wPyhlLnByZXZlbnREZWZhdWx0KCksaChzW29dLnBhdGgpKTplLmtleT09PWBFc2NhcGVgJiZsKCl9KTtmdW5jdGlvbiBjKCl7dC5jbGFzc0xpc3QucmVtb3ZlKGBoaWRkZW5gKSxyLnZhbHVlPWBgLG89LTEscz1bXSxwKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5yLmZvY3VzKCkpfWZ1bmN0aW9uIGwoKXt0LmNsYXNzTGlzdC5hZGQoYGhpZGRlbmApLHIudmFsdWU9YGAscz1bXSxvPS0xfWFzeW5jIGZ1bmN0aW9uIHUoZSl7cz0oYXdhaXQoYXdhaXQgZmV0Y2goYC9hcGkvc2VhcmNoP3E9JHtlbmNvZGVVUklDb21wb25lbnQoZSl9YCkpLmpzb24oKSkucmVzdWx0cyxvPXMubGVuZ3RoPjA/MDotMSxkKCl9ZnVuY3Rpb24gZCgpe2lmKHMubGVuZ3RoPT09MCl7aS5pbm5lckhUTUw9YDxwIGNsYXNzPSJweC00IHB5LTggdGV4dC1zbSB0ZXh0LWdyYXktNDAwIHRleHQtY2VudGVyIj5ObyByZXN1bHRzIGZvdW5kPC9wPmA7cmV0dXJufWkuaW5uZXJIVE1MPXMubWFwKChlLHQpPT5gCiAgICAgIDxhIGhyZWY9IiR7ZS5wYXRofSIgY2xhc3M9InNlYXJjaC1pdGVtIGZsZXggaXRlbXMtc3RhcnQgZ2FwLTMgcHgtNCBweS0zIGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1ncmF5LTgwMCBob3ZlcjpiZy1ncmF5LTUwIGRhcms6aG92ZXI6YmctZ3JheS04MDAgdHJhbnNpdGlvbi1jb2xvcnMgJHt0PT09bz9gYmctZ3JheS01MCBkYXJrOmJnLWdyYXktODAwYDpgYH0iIGRhdGEtaW5kZXg9IiR7dH0iPgogICAgICAgIDxzdmcgY2xhc3M9InNpemUtNCBtdC0wLjUgc2hyaW5rLTAgdGV4dC1ncmF5LTQwMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNMTkuNSAxNC4yNXYtMi42MjVhMy4zNzUgMy4zNzUgMCAwIDAtMy4zNzUtMy4zNzVoLTEuNUExLjEyNSAxLjEyNSAwIDAgMSAxMy41IDcuMTI1di0xLjVhMy4zNzUgMy4zNzUgMCAwIDAtMy4zNzUtMy4zNzVIOC4yNW0yLjI1IDBINS42MjVjLS42MjEgMC0xLjEyNS41MDQtMS4xMjUgMS4xMjV2MTcuMjVjMCAuNjIxLjUwNCAxLjEyNSAxLjEyNSAxLjEyNWgxMi43NWMuNjIxIDAgMS4xMjUtLjUwNCAxLjEyNS0xLjEyNVYxMS4yNWE5IDkgMCAwIDAtOS05WiIgLz4KICAgICAgICA8L3N2Zz4KICAgICAgICA8ZGl2IGNsYXNzPSJtaW4tdy0wIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDAiPiR7dihlLnRpdGxlKX08L2Rpdj4KICAgICAgICAgICR7ZS5zbmlwcGV0c1swXT9gPGRpdiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMCBtdC0wLjUgbGluZS1jbGFtcC0yIj4ke3YoZS5zbmlwcGV0c1swXSl9PC9kaXY+YDpgYH0KICAgICAgICA8L2Rpdj4KICAgICAgPC9hPmApLmpvaW4oYGApLGkucXVlcnlTZWxlY3RvckFsbChgLnNlYXJjaC1pdGVtYCkuZm9yRWFjaChlPT57ZS5hZGRFdmVudExpc3RlbmVyKGBjbGlja2AsKCk9PmwoKSl9KX1mdW5jdGlvbiBmKGUpe3MubGVuZ3RoIT09MCYmKG89TWF0aC5tYXgoMCxNYXRoLm1pbihlLHMubGVuZ3RoLTEpKSxkKCksaS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1pbmRleD0iJHtvfSJdYCk/LnNjcm9sbEludG9WaWV3KHtibG9jazpgbmVhcmVzdGB9KSl9ZnVuY3Rpb24gcCgpe2xldCBlPV8obSk7aWYoZS5sZW5ndGg9PT0wKXtpLmlubmVySFRNTD1gPHAgY2xhc3M9InB4LTQgcHktOCB0ZXh0LXNtIHRleHQtZ3JheS00MDAgdGV4dC1jZW50ZXIiPlR5cGUgdG8gc2VhcmNo4oCmPC9wPmA7cmV0dXJufXM9ZS5tYXAoZT0+KHtwYXRoOmUucGF0aCx0aXRsZTplLnRpdGxlLHNuaXBwZXRzOltdfSkpLG89LTEsaS5pbm5lckhUTUw9cy5tYXAoKGUsdCk9PmAKICAgICAgPGEgaHJlZj0iJHtlLnBhdGh9IiBjbGFzcz0ic2VhcmNoLWl0ZW0gZmxleCBpdGVtcy1zdGFydCBnYXAtMyBweC00IHB5LTMgYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWdyYXktODAwIGhvdmVyOmJnLWdyYXktNTAgZGFyazpob3ZlcjpiZy1ncmF5LTgwMCB0cmFuc2l0aW9uLWNvbG9ycyIgZGF0YS1pbmRleD0iJHt0fSI+CiAgICAgICAgPHN2ZyBjbGFzcz0ic2l6ZS00IG10LTAuNSBzaHJpbmstMCB0ZXh0LWdyYXktNDAwIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGQ9Ik0xOS41IDE0LjI1di0yLjYyNWEzLjM3NSAzLjM3NSAwIDAgMC0zLjM3NS0zLjM3NWgtMS41QTEuMTI1IDEuMTI1IDAgMCAxIDEzLjUgNy4xMjV2LTEuNWEzLjM3NSAzLjM3NSAwIDAgMC0zLjM3NS0zLjM3NUg4LjI1bTIuMjUgMEg1LjYyNWMtLjYyMSAwLTEuMTI1LjUwNC0xLjEyNSAxLjEyNXYxNy4yNWMwIC42MjEuNTA0IDEuMTI1IDEuMTI1IDEuMTI1aDEyLjc1Yy42MjEgMCAxLjEyNS0uNTA0IDEuMTI1LTEuMTI1VjExLjI1YTkgOSAwIDAgMC05LTlaIiAvPgogICAgICAgIDwvc3ZnPgogICAgICAgIDxkaXYgY2xhc3M9Im1pbi13LTAiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC1ncmF5LTEwMCI+JHt2KGUudGl0bGUpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2E+YCkuam9pbihgYCksaS5xdWVyeVNlbGVjdG9yQWxsKGAuc2VhcmNoLWl0ZW1gKS5mb3JFYWNoKGU9PntlLmFkZEV2ZW50TGlzdGVuZXIoYGNsaWNrYCx0PT57dC5wcmV2ZW50RGVmYXVsdCgpO2xldCBuPU51bWJlcihlLmRhdGFzZXQuaW5kZXgpO2goc1tuXS5wYXRoKX0pfSl9ZnVuY3Rpb24gaChlKXtsb2NhdGlvbi5oYXNoPWUsbCgpfX1mdW5jdGlvbiBfKGUpe2xldCB0PVtdO2ZvcihsZXQgbiBvZiBlKW4ucGFnZSE9PSExJiZ0LnB1c2goe3BhdGg6bi5wYXRoLHRpdGxlOm4udGl0bGV9KSxuLmNoaWxkcmVuJiZ0LnB1c2goLi4uXyhuLmNoaWxkcmVuKSk7cmV0dXJuIHR9ZnVuY3Rpb24gdihlKXtyZXR1cm4gZS5yZXBsYWNlKC8mL2csYCZhbXA7YCkucmVwbGFjZSgvPC9nLGAmbHQ7YCkucmVwbGFjZSgvPi9nLGAmZ3Q7YCkucmVwbGFjZSgvIi9nLGAmcXVvdDtgKX12YXIgeT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2lkZWJhcmApLGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNvbnRlbnRgKTtyKCksZygpO2Z1bmN0aW9uIHgoZSl7aGlzdG9yeS5wdXNoU3RhdGUobnVsbCxgYCxlKSxTKCl9YXN5bmMgZnVuY3Rpb24gUygpe2xldCBlPWxvY2F0aW9uLnBhdGhuYW1lO2lmKGU9PT1gL2Ape2YoYixgPHAgY2xhc3M9InRleHQtZ3JheS00MDAiPlNlbGVjdCBhIHBhZ2UgZnJvbSB0aGUgc2lkZWJhci48L3A+YCk7cmV0dXJufWQoeSxlKSxhd2FpdCBwKGIsZSl9YXN5bmMgZnVuY3Rpb24gQygpe2YoYixgPHAgY2xhc3M9InRleHQtZ3JheS00MDAiPkxvYWRpbmcuLi48L3A+YCk7bGV0IGU9KGF3YWl0KGF3YWl0IGZldGNoKGAvYXBpL21ldGFgKSkuanNvbigpKS50b2M7aWYobCh5LGUpLGgoZSkseS5hZGRFdmVudExpc3RlbmVyKGBjbGlja2AsZT0+e2xldCB0PWUudGFyZ2V0LmNsb3Nlc3QoYGEubmF2LWxpbmtgKTt0JiYoZS5wcmV2ZW50RGVmYXVsdCgpLHgodC5nZXRBdHRyaWJ1dGUoYGRhdGEtcGF0aGApKSl9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgcG9wc3RhdGVgLFMpLGxvY2F0aW9uLnBhdGhuYW1lPT09YC9gKXtsZXQgdD1zKGUpO2lmKHQpe3godCk7cmV0dXJufX1TKCl9QygpOw==`
@@ -462,56 +469,56 @@ var Re = ((e) => function(t) {
462
469
  "/assets/logo-BLkVGWak.svg": {
463
470
  type: `image/svg+xml`,
464
471
  etag: `"557-HYXN/qI1kFu3DGsCSw4J8HIDoeU"`,
465
- mtime: `2026-03-14T09:22:03.134Z`,
472
+ mtime: `2026-03-24T10:49:38.807Z`,
466
473
  size: 1367,
467
474
  path: `../public/assets/logo-BLkVGWak.svg`,
468
475
  data: `PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+CiAgPCEtLSBCb2R5OiByb3VuZGVkIHJlY3RhbmdsZSAoZG9jdW1lbnQgc2hhcGUpIC0tPgogIDxyZWN0IHg9IjQwIiB5PSIzMCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIxNTAiIHJ4PSIxOCIgcnk9IjE4IiBmaWxsPSIjMkIyRDQyIi8+CgogIDwhLS0gRG9jdW1lbnQgbGluZXMgKG1hcmtkb3duIGZlZWwpIC0tPgogIDxyZWN0IHg9IjYyIiB5PSI3MCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjYiIHJ4PSIzIiBmaWxsPSIjOEQ5OUFFIi8+CiAgPHJlY3QgeD0iNjIiIHk9Ijg2IiB3aWR0aD0iNzYiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTAyIiB3aWR0aD0iNjIiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTE4IiB3aWR0aD0iNzAiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTM0IiB3aWR0aD0iNDAiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KCiAgPCEtLSBIZWFkaW5nIGhhc2ggbWFyayAobWFya2Rvd24gIykgLS0+CiAgPHRleHQgeD0iNjIiIHk9IjYwIiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1zaXplPSIxOCIgZmlsbD0iI0VERjJGNCI+IzwvdGV4dD4KCiAgPCEtLSBFeWVzIC0tPgogIDxjaXJjbGUgY3g9Ijc4IiBjeT0iMTcyIiByPSI1IiBmaWxsPSIjRUYyMzNDIi8+CiAgPGNpcmNsZSBjeD0iMTIyIiBjeT0iMTcyIiByPSI1IiBmaWxsPSIjRUYyMzNDIi8+CgogIDwhLS0gVGVldGggKHppbGxhIGJpdGUgb24gYm90dG9tKSAtLT4KICA8cG9seWdvbiBwb2ludHM9IjY4LDE4MCA3NCwxOTIgODAsMTgwIiBmaWxsPSIjRURGMkY0Ii8+CiAgPHBvbHlnb24gcG9pbnRzPSI4OCwxODAgOTQsMTkyIDEwMCwxODAiIGZpbGw9IiNFREYyRjQiLz4KICA8cG9seWdvbiBwb2ludHM9IjEwOCwxODAgMTE0LDE5MiAxMjAsMTgwIiBmaWxsPSIjRURGMkY0Ii8+CiAgPHBvbHlnb24gcG9pbnRzPSIxMjgsMTgwIDEzNCwxOTIgMTQwLDE4MCIgZmlsbD0iI0VERjJGNCIvPgoKICA8IS0tIFNwaWtlcyBvbiB0b3AgKHppbGxhIGhvcm5zKSAtLT4KICA8cG9seWdvbiBwb2ludHM9IjcwLDMwIDc4LDEwIDg2LDMwIiBmaWxsPSIjMkIyRDQyIi8+CiAgPHBvbHlnb24gcG9pbnRzPSI5MiwzMCAxMDAsNiAxMDgsMzAiIGZpbGw9IiMyQjJENDIiLz4KICA8cG9seWdvbiBwb2ludHM9IjExNCwzMCAxMjIsMTAgMTMwLDMwIiBmaWxsPSIjMkIyRDQyIi8+Cjwvc3ZnPgo=`
469
476
  }
470
477
  };
471
- function ze(e) {
478
+ function Be(e) {
472
479
  if (U[e]) return U[e]._data ? U[e]._data : U[e].data ? (U[e]._data = Uint8Array.from(atob(U[e].data), (e) => e.charCodeAt(0)), U[e]._data) : U[e].data;
473
480
  }
474
- var Be = {};
475
- function Ve(e = ``) {
481
+ var Ve = {};
482
+ function He(e = ``) {
476
483
  if (U[e]) return !0;
477
- for (let t in Be) if (e.startsWith(t)) return !0;
484
+ for (let t in Ve) if (e.startsWith(t)) return !0;
478
485
  return !1;
479
486
  }
480
- function He(e) {
487
+ function Ue(e) {
481
488
  return U[e];
482
489
  }
483
- B();
484
- var Ue = new Set([`HEAD`, `GET`]), We = {
490
+ V();
491
+ var We = new Set([`HEAD`, `GET`]), Ge = {
485
492
  gzip: `.gz`,
486
493
  br: `.br`,
487
494
  zstd: `.zst`
488
- }, Ge = T((e) => {
489
- if (e.req.method && !Ue.has(e.req.method)) return;
490
- let t = ke(Fe(Me(e.url.pathname))), n, r = [...(e.req.headers.get(`accept-encoding`) || ``).split(`,`).map((e) => We[e.trim()]).filter(Boolean).sort(), ``];
491
- for (let e of r) for (let r of [t + e, Le(t, `index.html` + e)]) {
492
- let e = He(r);
495
+ }, Ke = T((e) => {
496
+ if (e.req.method && !We.has(e.req.method)) return;
497
+ let t = Ae(Ie(Ne(e.url.pathname))), n, r = [...(e.req.headers.get(`accept-encoding`) || ``).split(`,`).map((e) => Ge[e.trim()]).filter(Boolean).sort(), ``];
498
+ for (let e of r) for (let r of [t + e, Re(t, `index.html` + e)]) {
499
+ let e = Ue(r);
493
500
  if (e) {
494
501
  n = e, t = r;
495
502
  break;
496
503
  }
497
504
  }
498
505
  if (!n) {
499
- if (Ve(t)) throw e.res.headers.delete(`Cache-Control`), new M({ status: 404 });
506
+ if (He(t)) throw e.res.headers.delete(`Cache-Control`), new N({ status: 404 });
500
507
  return;
501
508
  }
502
509
  if (r.length > 1 && e.res.headers.append(`Vary`, `Accept-Encoding`), e.req.headers.get(`if-none-match`) === n.etag) return e.res.status = 304, e.res.statusText = `Not Modified`, ``;
503
510
  let i = e.req.headers.get(`if-modified-since`), a = new Date(n.mtime);
504
- return i && n.mtime && new Date(i) >= a ? (e.res.status = 304, e.res.statusText = `Not Modified`, ``) : (n.type && e.res.headers.set(`Content-Type`, n.type), n.etag && !e.res.headers.has(`ETag`) && e.res.headers.set(`ETag`, n.etag), n.mtime && !e.res.headers.has(`Last-Modified`) && e.res.headers.set(`Last-Modified`, a.toUTCString()), n.encoding && !e.res.headers.has(`Content-Encoding`) && e.res.headers.set(`Content-Encoding`, n.encoding), n.size > 0 && !e.res.headers.has(`Content-Length`) && e.res.headers.set(`Content-Length`, n.size.toString()), ze(t));
511
+ return i && n.mtime && new Date(i) >= a ? (e.res.status = 304, e.res.statusText = `Not Modified`, ``) : (n.type && e.res.headers.set(`Content-Type`, n.type), n.etag && !e.res.headers.has(`ETag`) && e.res.headers.set(`ETag`, n.etag), n.mtime && !e.res.headers.has(`Last-Modified`) && e.res.headers.set(`Last-Modified`, a.toUTCString()), n.encoding && !e.res.headers.has(`Content-Encoding`) && e.res.headers.set(`Content-Encoding`, n.encoding), n.size > 0 && !e.res.headers.has(`Content-Length`) && e.res.headers.set(`Content-Length`, n.size.toString()), Be(t));
505
512
  }), W = v((() => {
506
- B();
513
+ V();
507
514
  }));
508
- function Ke(e, t, n) {
515
+ function G(e, t, n) {
509
516
  let r = [];
510
517
  for (let i of e) r.push({
511
518
  entry: i,
512
519
  depth: t,
513
520
  filePath: n.get(i.path)
514
- }), i.children && r.push(...Ke(i.children, t + 1, n));
521
+ }), i.children && r.push(...G(i.children, t + 1, n));
515
522
  return r;
516
523
  }
517
524
  function qe(e, t) {
@@ -550,7 +557,7 @@ var Ye, Xe = v((() => {
550
557
  }
551
558
  async load() {
552
559
  let { tree: e, fileMap: t } = await this.source.load();
553
- this.tree = e, this._fileMap = t, this.flat = Ke(this.tree, 0, this._fileMap), this._contentCache.clear();
560
+ this.tree = e, this._fileMap = t, this.flat = G(this.tree, 0, this._fileMap), this._contentCache.clear();
554
561
  }
555
562
  async reload() {
556
563
  return this.load();
@@ -611,8 +618,8 @@ var Ye, Xe = v((() => {
611
618
  return [...n].sort((e, t) => e - t);
612
619
  }
613
620
  };
614
- })), G, K = v((() => {
615
- G = class {};
621
+ })), K, q = v((() => {
622
+ K = class {};
616
623
  }));
617
624
  function Ze(e) {
618
625
  let t = e.endsWith(`.md`) ? e.slice(0, -3) : e, n = t.endsWith(`.draft`);
@@ -755,8 +762,8 @@ function lt(e, t) {
755
762
  e?.children && lt(n.children, e.children);
756
763
  }
757
764
  }
758
- var q, J = v((() => {
759
- at(), K(), q = class extends G {
765
+ var J, Y = v((() => {
766
+ at(), q(), J = class extends K {
760
767
  dir;
761
768
  constructor(e) {
762
769
  super(), this.dir = e;
@@ -773,7 +780,7 @@ var q, J = v((() => {
773
780
  }
774
781
  };
775
782
  })), ut, dt = v((() => {
776
- K(), J(), ut = class extends G {
783
+ q(), Y(), ut = class extends K {
777
784
  src;
778
785
  options;
779
786
  _fs;
@@ -796,7 +803,7 @@ var q, J = v((() => {
796
803
  break;
797
804
  }
798
805
  }
799
- return this._fs = new q(i), this._fs.load();
806
+ return this._fs = new J(i), this._fs.load();
800
807
  }
801
808
  async readContent(e) {
802
809
  if (!this._fs) throw Error(`DocsSourceGit: call load() before readContent()`);
@@ -839,19 +846,14 @@ function mt(e) {
839
846
  if (r && !/^(package|settings|signup|login|org|search)$/.test(r[1])) return r[1];
840
847
  }
841
848
  var ht = v((() => {}));
842
- function gt(e, t) {
843
- if (e.includes(`text/html`) || e.includes(`application/xhtml`)) return !0;
844
- let n = t.trimStart();
845
- return n.startsWith(`<!`) || n.startsWith(`<html`);
846
- }
847
- function _t(e) {
849
+ function gt(e) {
848
850
  try {
849
851
  return new URL(e).hostname;
850
852
  } catch {
851
853
  return e;
852
854
  }
853
855
  }
854
- function vt(e, t, n, r) {
856
+ function _t(e, t, n, r) {
855
857
  let i = e.split(`
856
858
  `), a = [], o = ``, s = ``, c, l = 0, u = 0;
857
859
  for (let e of i) {
@@ -866,7 +868,7 @@ function vt(e, t, n, r) {
866
868
  }
867
869
  if (r.startsWith(`## `)) {
868
870
  c = {
869
- slug: yt(r.slice(3).trim()),
871
+ slug: vt(r.slice(3).trim()),
870
872
  path: `/_section/${l}`,
871
873
  title: r.slice(3).trim(),
872
874
  order: l++,
@@ -898,20 +900,20 @@ function vt(e, t, n, r) {
898
900
  let d = {
899
901
  slug: ``,
900
902
  path: `/`,
901
- title: o || _t(t),
903
+ title: o || gt(t),
902
904
  order: 0,
903
905
  ...s ? { description: s } : {},
904
906
  ...a.length > 0 ? { children: a } : {}
905
907
  };
906
908
  return n.set(`/`, `/`), r.set(`/`, e), [d];
907
909
  }
908
- function yt(e) {
910
+ function vt(e) {
909
911
  return e.toLowerCase().replace(/[^a-z\d]+/g, `-`).replace(/^-|-$/g, ``);
910
912
  }
911
- function bt(e, t) {
913
+ function yt(e, t) {
912
914
  let n = /* @__PURE__ */ new Set(), r = [], i = /* @__PURE__ */ new Set(), a = 0, o = /\[([^\]]+)]\(([^)]+)\)/g, s;
913
915
  for (; (s = o.exec(e)) !== null;) {
914
- let e = s[1], o = s[2], c = xt(o, t);
916
+ let e = s[1], o = s[2], c = bt(o, t);
915
917
  if (!c) continue;
916
918
  let l = c.pathname.replace(/\/+$/, ``) || `/`, u = /\/index\.md$/i.test(l) || l.endsWith(`/index`);
917
919
  if (l = l.replace(/\/index\.md$/i, ``).replace(/\/index$/, ``).replace(/\.md$/i, ``), l ||= `/`, l === `/` || n.has(l)) continue;
@@ -929,7 +931,7 @@ function bt(e, t) {
929
931
  tocPaths: i
930
932
  };
931
933
  }
932
- function xt(e, t) {
934
+ function bt(e, t) {
933
935
  try {
934
936
  let n = new URL(t), r = new URL(e, t);
935
937
  return r.origin !== n.origin || e.startsWith(`#`) || /\.(png|jpg|jpeg|gif|svg|css|js|ico|woff2?)$/i.test(r.pathname) ? void 0 : r;
@@ -937,8 +939,8 @@ function xt(e, t) {
937
939
  return;
938
940
  }
939
941
  }
940
- var St, Ct = v((() => {
941
- K(), ht(), St = class extends G {
942
+ var xt, St = v((() => {
943
+ q(), ht(), xt = class extends K {
942
944
  url;
943
945
  options;
944
946
  _contentCache = /* @__PURE__ */ new Map();
@@ -960,9 +962,9 @@ var St, Ct = v((() => {
960
962
  let n = {
961
963
  slug: ``,
962
964
  path: `/`,
963
- title: parseMeta(t).title || _t(this.url),
965
+ title: parseMeta(t).title || gt(this.url),
964
966
  order: 0
965
- }, { entries: r, tocPaths: i } = bt(t, this.url);
967
+ }, { entries: r, tocPaths: i } = yt(t, this.url);
966
968
  if (r.length > 0) {
967
969
  n.children = r;
968
970
  for (let e of r) this._fileMap.set(e.path, e.path);
@@ -990,7 +992,7 @@ var St, Ct = v((() => {
990
992
  } catch {
991
993
  return;
992
994
  }
993
- if (t.trimStart().startsWith(`#`)) return vt(t, e, this._fileMap, this._contentCache);
995
+ if (t.trimStart().startsWith(`#`)) return _t(t, e, this._fileMap, this._contentCache);
994
996
  }
995
997
  async readContent(e) {
996
998
  let t = this._contentCache.get(e);
@@ -1005,7 +1007,7 @@ var St, Ct = v((() => {
1005
1007
  if (!t.has(e.path)) return;
1006
1008
  let i = `${r}${e.path}`, a = await this._fetch(i);
1007
1009
  this._contentCache.set(e.path, a);
1008
- let { entries: o, tocPaths: s } = bt(a, i);
1010
+ let { entries: o, tocPaths: s } = yt(a, i);
1009
1011
  if (o.length > 0) {
1010
1012
  e.children = o;
1011
1013
  for (let e of o) this._fileMap.set(e.path, e.path);
@@ -1041,17 +1043,11 @@ var St, Ct = v((() => {
1041
1043
  } catch (t) {
1042
1044
  return `# Fetch Error\n\nFailed to fetch \`${e}\`\n\n> ${t instanceof Error ? t.message : String(t)}`;
1043
1045
  }
1044
- if (!t.ok) return `# ${t.status} ${t.statusText}\n\nFailed to fetch \`${e}\``;
1045
- let n = t.headers.get(`content-type`) || ``, r = await t.text();
1046
- if (gt(n, r)) {
1047
- let { htmlToMarkdown: t } = await import(`mdream`);
1048
- return t(r, { origin: e });
1049
- }
1050
- return r;
1046
+ return t.ok ? await t.text() : `# ${t.status} ${t.statusText}\n\nFailed to fetch \`${e}\``;
1051
1047
  }
1052
1048
  };
1053
1049
  }));
1054
- async function wt(e) {
1050
+ async function Ct(e) {
1055
1051
  let { name: t, version: n, subdir: r } = ft(e), i = await pt(t, n);
1056
1052
  return {
1057
1053
  name: i.name,
@@ -1060,8 +1056,8 @@ async function wt(e) {
1060
1056
  tar: i.dist.tarball
1061
1057
  };
1062
1058
  }
1063
- var Tt, Et = v((() => {
1064
- K(), J(), ht(), Tt = class extends G {
1059
+ var wt, Tt = v((() => {
1060
+ q(), Y(), ht(), wt = class extends K {
1065
1061
  src;
1066
1062
  options;
1067
1063
  _fs;
@@ -1074,7 +1070,7 @@ var Tt, Et = v((() => {
1074
1070
  dir: r,
1075
1071
  force: !0,
1076
1072
  install: !1,
1077
- providers: { npm: wt },
1073
+ providers: { npm: Ct },
1078
1074
  registry: !1
1079
1075
  });
1080
1076
  let a = r;
@@ -1085,21 +1081,21 @@ var Tt, Et = v((() => {
1085
1081
  break;
1086
1082
  }
1087
1083
  }
1088
- return this._fs = new q(a), this._fs.load();
1084
+ return this._fs = new J(a), this._fs.load();
1089
1085
  }
1090
1086
  async readContent(e) {
1091
1087
  if (!this._fs) throw Error(`DocsSourceNpm: call load() before readContent()`);
1092
1088
  return this._fs.readContent(e);
1093
1089
  }
1094
1090
  };
1095
- })), Dt = v((() => {
1096
- K(), J(), dt(), Ct(), Et();
1091
+ })), Et = v((() => {
1092
+ q(), Y(), dt(), St(), Tt();
1097
1093
  }));
1098
- async function Ot(t, n, r = {}) {
1094
+ async function Dt(t, n, r = {}) {
1099
1095
  let a = t.flat.find((e) => e.entry.path === `/`), s = [`# ${r.title ?? a?.entry.title ?? `Table of Contents`}`, ``], l = /* @__PURE__ */ new Set(), f = /* @__PURE__ */ new Set();
1100
- kt(t.tree, f);
1096
+ Ot(t.tree, f);
1101
1097
  for (let a of t.flat) {
1102
- if ((r.filter ? !r.filter(a) : a.entry.page === !1) || At.has(a.entry.path)) continue;
1098
+ if ((r.filter ? !r.filter(a) : a.entry.page === !1) || kt.has(a.entry.path)) continue;
1103
1099
  let p = await t.getContent(a);
1104
1100
  if (p === void 0) continue;
1105
1101
  let m = r.plainText ? renderToText(p) : renderToMarkdown(p), h = a.entry.path === `/` || f.has(a.entry.path) ? a.entry.path === `/` ? `/index.md` : `${a.entry.path}/index.md` : a.entry.path.endsWith(`.md`) ? a.entry.path : `${a.entry.path}.md`, g = join(n, h);
@@ -1113,40 +1109,40 @@ async function Ot(t, n, r = {}) {
1113
1109
  `, `utf8`), await writeFile(join(n, `_navigation.json`), JSON.stringify(t.tree, null, 2) + `
1114
1110
  `, `utf8`);
1115
1111
  }
1116
- function kt(e, t) {
1117
- for (let n of e) n.children?.length && (t.add(n.path), kt(n.children, t));
1112
+ function Ot(e, t) {
1113
+ for (let n of e) n.children?.length && (t.add(n.path), Ot(n.children, t));
1118
1114
  }
1119
- var At, jt = v((() => {
1120
- At = new Set([`/llms.txt`, `/llms-full.txt`]);
1121
- })), Mt = y({
1115
+ var kt, At = v((() => {
1116
+ kt = new Set([`/llms.txt`, `/llms-full.txt`]);
1117
+ })), jt = y({
1122
1118
  DocsManager: () => Ye,
1123
- DocsSource: () => G,
1124
- DocsSourceFS: () => q,
1119
+ DocsSource: () => K,
1120
+ DocsSourceFS: () => J,
1125
1121
  DocsSourceGit: () => ut,
1126
- DocsSourceHTTP: () => St,
1127
- DocsSourceNpm: () => Tt,
1128
- exportDocsToFS: () => Ot
1129
- }), Nt = v((() => {
1130
- Xe(), Dt(), jt();
1122
+ DocsSourceHTTP: () => xt,
1123
+ DocsSourceNpm: () => wt,
1124
+ exportDocsToFS: () => Dt
1125
+ }), Mt = v((() => {
1126
+ Xe(), Et(), At();
1131
1127
  }));
1132
- async function Y(e) {
1133
- if (X) return X;
1134
- if (!X) {
1135
- let { DocsManager: t, DocsSourceGit: n } = await Promise.resolve().then(() => (Nt(), Mt));
1136
- X = new t(e?.source || new n(`gh:nitrojs/nitro/docs`, { subdir: `docs` })), await X.load();
1128
+ async function X(e) {
1129
+ if (Z) return Z;
1130
+ if (!Z) {
1131
+ let { DocsManager: t, DocsSourceGit: n } = await Promise.resolve().then(() => (Mt(), jt));
1132
+ Z = new t(e?.source || new n(`gh:nitrojs/nitro/docs`, { subdir: `docs` })), await Z.load();
1137
1133
  }
1138
- return X;
1134
+ return Z;
1139
1135
  }
1140
- var X, Z = v((() => {})), Pt = y({ default: () => Ft }), Ft, It = v((() => {
1141
- W(), Z(), Ft = T(async () => ({
1136
+ var Z, Q = v((() => {})), Nt = y({ default: () => Pt }), Pt, Ft = v((() => {
1137
+ W(), Q(), Pt = T(async () => ({
1142
1138
  title: `Nitro`,
1143
- toc: (await Y()).tree
1139
+ toc: (await X()).tree
1144
1140
  }));
1145
- })), Lt = y({ default: () => Q });
1146
- async function Rt(e) {
1141
+ })), It = y({ default: () => Bt });
1142
+ async function Lt(e) {
1147
1143
  let t = /<pre><code class="language-(\w+)">([\s\S]*?)<\/code><\/pre>/g, n = [];
1148
1144
  for (let r of e.matchAll(t)) {
1149
- let [e, t, i] = r, a = Bt(i);
1145
+ let [e, t, i] = r, a = zt(i);
1150
1146
  n.push(highlightText(a, t, !1).then((n) => ({
1151
1147
  match: e,
1152
1148
  result: `<pre><code class="language-${t}">${n}</code></pre>`
@@ -1159,23 +1155,23 @@ async function Rt(e) {
1159
1155
  for (let { match: e, result: t } of await Promise.all(n)) r = r.replace(e, t);
1160
1156
  return r;
1161
1157
  }
1162
- function zt(e) {
1158
+ function Rt(e) {
1163
1159
  return e.replace(/<(h[1-6])>(.*?)<\/\1>/g, (e, t, n) => {
1164
1160
  let r = n.replace(/<[^>]+>/g, ``).trim().toLowerCase().replace(/[^\w\s-]/g, ``).replace(/\s+/g, `-`);
1165
1161
  return `<${t} id="${r}"><a href="#${r}">#</a>${n}</${t}>`;
1166
1162
  });
1167
1163
  }
1168
- function Bt(e) {
1164
+ function zt(e) {
1169
1165
  return e.replace(/&amp;/g, `&`).replace(/&lt;/g, `<`).replace(/&gt;/g, `>`).replace(/&quot;/g, `"`).replace(/&#39;/g, `'`);
1170
1166
  }
1171
- var Q, Vt = v((async () => {
1172
- W(), Z(), await init(), Q = T(async (e) => {
1167
+ var Bt, Vt = v((async () => {
1168
+ W(), Q(), await init(), Bt = T(async (e) => {
1173
1169
  let { path: t } = he(e);
1174
1170
  if (!t) return { error: `Missing ?path= query parameter` };
1175
- let n = await (await Y()).resolvePage(t);
1171
+ let n = await (await X()).resolvePage(t);
1176
1172
  return n.raw ? {
1177
1173
  path: t,
1178
- html: zt(await Rt(renderToHtml(n.raw)))
1174
+ html: Rt(await Lt(renderToHtml(n.raw)))
1179
1175
  } : {
1180
1176
  error: `Page not found`,
1181
1177
  path: t
@@ -1201,10 +1197,10 @@ function Ut(e, t, n = {}) {
1201
1197
  return s;
1202
1198
  }
1203
1199
  var Wt, Gt = v((() => {
1204
- W(), Z(), Wt = T(async (e) => {
1200
+ W(), Q(), Wt = T(async (e) => {
1205
1201
  let { q: t, limit: n } = he(e);
1206
1202
  if (!t || t.length < 2) return { results: [] };
1207
- let r = await Y(), i = Math.min(Number(n) || 20, 50), a = t.toLowerCase(), o = a.split(/\s+/).filter(Boolean), s = [], c = /* @__PURE__ */ new Set();
1203
+ let r = await X(), i = Math.min(Number(n) || 20, 50), a = t.toLowerCase(), o = a.split(/\s+/).filter(Boolean), s = [], c = /* @__PURE__ */ new Set();
1208
1204
  for (let e of r.pages) {
1209
1205
  let t = e.entry.title, n = t.toLowerCase();
1210
1206
  o.every((e) => n.includes(e)) && (c.add(e.entry.path), s.push({
@@ -1247,14 +1243,14 @@ var Wt, Gt = v((() => {
1247
1243
  return s.sort((e, t) => e.score - t.score), { results: s.slice(0, i).map(({ score: e, ...t }) => t) };
1248
1244
  });
1249
1245
  })), Kt, qt = v((() => {
1250
- B(), Kt = () => new P(`<!doctype html>
1246
+ V(), Kt = () => new F(`<!doctype html>
1251
1247
  <html lang="en">
1252
1248
  <head>
1253
1249
  <meta charset="UTF-8" />
1254
1250
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
1255
1251
  <link rel="icon" type="image/svg+xml" href="/assets/logo-BLkVGWak.svg" />
1256
1252
  <title></title>
1257
- <style>/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
1253
+ <style>/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
1258
1254
  @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-300:oklch(80.8% .114 19.571);--color-red-500:oklch(63.7% .237 25.331);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-300:oklch(87.1% .15 154.449);--color-green-500:oklch(72.3% .219 149.579);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-medium:500;--radius-md:.375rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.z-50{z-index:50}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.hidden{display:none}.inline{display:inline}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.h-screen{height:100vh}.max-h-80{max-height:calc(var(--spacing) * 80)}.w-4{width:calc(var(--spacing) * 4)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-full{width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-none{max-width:none}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.rotate-90{rotate:90deg}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}:where(.space-y-0\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-1\\.5{padding:calc(var(--spacing) * 1.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-8{padding:calc(var(--spacing) * 8)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-\\[15vh\\]{padding-top:15vh}.text-center{text-align:center}.text-left{text-align:left}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-900{color:var(--color-gray-900)}.text-red-500{color:var(--color-red-500)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:text-gray-500:hover{color:var(--color-gray-500)}.hover\\:text-gray-600:hover{color:var(--color-gray-600)}.hover\\:text-gray-900:hover{color:var(--color-gray-900)}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media (min-width:40rem){.sm\\:inline{display:inline}}.dark\\:border-gray-700:where(.dark,.dark *){border-color:var(--color-gray-700)}.dark\\:border-gray-800:where(.dark,.dark *){border-color:var(--color-gray-800)}.dark\\:bg-gray-800:where(.dark,.dark *){background-color:var(--color-gray-800)}.dark\\:bg-gray-900:where(.dark,.dark *){background-color:var(--color-gray-900)}.dark\\:bg-gray-950:where(.dark,.dark *){background-color:var(--color-gray-950)}.dark\\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\\:text-gray-200:where(.dark,.dark *){color:var(--color-gray-200)}.dark\\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\\:text-gray-500:where(.dark,.dark *),.dark\\:placeholder-gray-500:where(.dark,.dark *)::placeholder{color:var(--color-gray-500)}@media (hover:hover){.dark\\:hover\\:border-gray-600:where(.dark,.dark *):hover{border-color:var(--color-gray-600)}.dark\\:hover\\:bg-gray-800:where(.dark,.dark *):hover{background-color:var(--color-gray-800)}.dark\\:hover\\:text-gray-100:where(.dark,.dark *):hover{color:var(--color-gray-100)}.dark\\:hover\\:text-gray-300:where(.dark,.dark *):hover{color:var(--color-gray-300)}.dark\\:hover\\:text-gray-400:where(.dark,.dark *):hover{color:var(--color-gray-400)}}}#search-results::-webkit-scrollbar{width:6px}#search-results::-webkit-scrollbar-thumb{background:var(--color-gray-300);border-radius:3px}.dark #search-results::-webkit-scrollbar-thumb{background:var(--color-gray-600)}.line-clamp-2{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.nav-active{background:var(--color-gray-100)}.dark .nav-active{background:var(--color-gray-800)}.prose{color:var(--color-gray-700);line-height:1.75}.prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6{color:var(--color-gray-900);margin-top:2em;margin-bottom:.75em;font-weight:700;line-height:1.3;position:relative}:is(.prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6)>a[href^=\\#]{color:var(--color-gray-300);opacity:0;padding-right:.25em;font-weight:400;text-decoration:none;transition:opacity .15s;position:absolute;right:100%}:is(.prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6):hover>a[href^=\\#]{opacity:1}.prose h1{margin-top:0;font-size:2.25em}.prose h2{border-bottom:1px solid var(--color-gray-200);padding-bottom:.3em;font-size:1.5em}.prose h3{font-size:1.25em}.prose h4{font-size:1.1em}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose a{color:var(--color-blue-600);text-underline-offset:2px;text-decoration:underline}.prose a:hover{color:var(--color-blue-500)}.prose strong{color:var(--color-gray-900);font-weight:600}.prose code{color:var(--color-gray-800);background:var(--color-gray-100);border-radius:.25em;padding:.2em .4em;font-size:.875em}.prose pre{border:1px solid var(--color-gray-200);background:#f6f8fa;border-radius:.5em;margin-top:1.5em;margin-bottom:1.5em;padding:1em;overflow-x:auto}.prose pre code{background:0 0;border-radius:0;padding:0;font-size:.875em}.prose blockquote{border-left:3px solid var(--color-gray-300);color:var(--color-gray-500);margin-top:1.5em;margin-bottom:1.5em;padding-left:1em;font-style:italic}.prose blockquote.alert{border-left-width:4px;border-radius:.5em;padding:.75em 1em;font-style:normal}.prose blockquote.alert>p:first-child{margin-top:0}.prose blockquote.alert>p:last-child{margin-bottom:0}.prose blockquote.alert-tip{border-left-color:var(--color-green-500);background:#f0fdf499}@supports (color:color-mix(in lab, red, red)){.prose blockquote.alert-tip{background:color-mix(in srgb, var(--color-green-50) 60%, transparent)}}.prose blockquote.alert-tip{color:var(--color-green-800)}.prose blockquote.alert-note{border-left-color:var(--color-blue-500);background:#eff6ff99}@supports (color:color-mix(in lab, red, red)){.prose blockquote.alert-note{background:color-mix(in srgb, var(--color-blue-50) 60%, transparent)}}.prose blockquote.alert-note{color:var(--color-blue-800)}.prose blockquote.alert-important{border-left-color:var(--color-purple-500);background:#faf5ff99}@supports (color:color-mix(in lab, red, red)){.prose blockquote.alert-important{background:color-mix(in srgb, var(--color-purple-50) 60%, transparent)}}.prose blockquote.alert-important{color:var(--color-purple-800)}.prose blockquote.alert-warning{border-left-color:var(--color-yellow-500);background:#fefce899}@supports (color:color-mix(in lab, red, red)){.prose blockquote.alert-warning{background:color-mix(in srgb, var(--color-yellow-50) 60%, transparent)}}.prose blockquote.alert-warning{color:var(--color-yellow-800)}.prose blockquote.alert-caution{border-left-color:var(--color-red-500);background:#fef2f299}@supports (color:color-mix(in lab, red, red)){.prose blockquote.alert-caution{background:color-mix(in srgb, var(--color-red-50) 60%, transparent)}}.prose blockquote.alert-caution{color:var(--color-red-800)}.prose ul{margin-top:1.25em;margin-bottom:1.25em;padding-left:1.5em;list-style:outside}.prose ol{margin-top:1.25em;margin-bottom:1.25em;padding-left:1.5em;list-style:decimal}.prose li{margin-top:.5em;margin-bottom:.5em}.prose li>ul,.prose li>ol{margin-top:.25em;margin-bottom:.25em}.prose hr{border:none;border-top:1px solid var(--color-gray-200);margin-top:2em;margin-bottom:2em}.prose table{border-collapse:collapse;width:100%;margin-top:1.5em;margin-bottom:1.5em;font-size:.875em}.prose th,.prose td{border:1px solid var(--color-gray-200);text-align:left;padding:.5em .75em}.prose th{background:var(--color-gray-50);color:var(--color-gray-900);font-weight:600}.prose img,.prose video{border-radius:.5em;max-width:100%;margin-top:1.5em;margin-bottom:1.5em}.dark .prose{color:var(--color-gray-200)}.dark .prose h1,.dark .prose h2,.dark .prose h3,.dark .prose h4,.dark .prose h5,.dark .prose h6{color:var(--color-gray-50)}:is(.dark .prose h1,.dark .prose h2,.dark .prose h3,.dark .prose h4,.dark .prose h5,.dark .prose h6)>a[href^=\\#]{color:var(--color-gray-600)}.dark .prose h2{border-bottom-color:var(--color-gray-700)}.dark .prose a{color:var(--color-blue-400)}.dark .prose a:hover{color:var(--color-blue-300)}.dark .prose strong{color:var(--color-gray-50)}.dark .prose code{color:var(--color-gray-100);background:var(--color-gray-800)}.dark .prose pre{border-color:var(--color-gray-700);background:#161b22}.dark .prose pre code{color:var(--color-gray-100);background:0 0}.dark .prose blockquote{border-left-color:var(--color-gray-600);color:var(--color-gray-400)}.dark .prose blockquote.alert-tip{background:#0d542b4d}@supports (color:color-mix(in lab, red, red)){.dark .prose blockquote.alert-tip{background:color-mix(in srgb, var(--color-green-900) 30%, transparent)}}.dark .prose blockquote.alert-tip{color:var(--color-green-300);border-left-color:var(--color-green-500)}.dark .prose blockquote.alert-note{background:#1c398e4d}@supports (color:color-mix(in lab, red, red)){.dark .prose blockquote.alert-note{background:color-mix(in srgb, var(--color-blue-900) 30%, transparent)}}.dark .prose blockquote.alert-note{color:var(--color-blue-300);border-left-color:var(--color-blue-500)}.dark .prose blockquote.alert-important{background:#59168b4d}@supports (color:color-mix(in lab, red, red)){.dark .prose blockquote.alert-important{background:color-mix(in srgb, var(--color-purple-900) 30%, transparent)}}.dark .prose blockquote.alert-important{color:var(--color-purple-300);border-left-color:var(--color-purple-500)}.dark .prose blockquote.alert-warning{background:#733e0a4d}@supports (color:color-mix(in lab, red, red)){.dark .prose blockquote.alert-warning{background:color-mix(in srgb, var(--color-yellow-900) 30%, transparent)}}.dark .prose blockquote.alert-warning{color:var(--color-yellow-300);border-left-color:var(--color-yellow-500)}.dark .prose blockquote.alert-caution{background:#82181a4d}@supports (color:color-mix(in lab, red, red)){.dark .prose blockquote.alert-caution{background:color-mix(in srgb, var(--color-red-900) 30%, transparent)}}.dark .prose blockquote.alert-caution{color:var(--color-red-300);border-left-color:var(--color-red-500)}.dark .prose hr{border-top-color:var(--color-gray-700)}.dark .prose th,.dark .prose td{border-color:var(--color-gray-700)}.dark .prose th{background:var(--color-gray-800);color:var(--color-gray-50)}.shj-syn-cmnt{color:#6e7781;font-style:italic}.shj-syn-err,.shj-syn-kwd{color:#cf222e}.shj-syn-class{color:#953800}.shj-syn-type,.shj-syn-oper,.shj-syn-num,.shj-syn-section,.shj-syn-var,.shj-syn-bool{color:#0550ae}.shj-syn-str{color:#0a3069}.shj-syn-func{color:#8250df}.shj-syn-insert{color:#116329}.shj-syn-deleted{color:#cf222e}.shj-syn-esc{color:#0550ae}.dark .shj-syn-cmnt{color:#8b949e}.dark .shj-syn-err,.dark .shj-syn-kwd{color:#ff7b72}.dark .shj-syn-class{color:#ffa657}.dark .shj-syn-type,.dark .shj-syn-oper,.dark .shj-syn-num,.dark .shj-syn-section,.dark .shj-syn-var,.dark .shj-syn-bool{color:#79c0ff}.dark .shj-syn-str{color:#a5d6ff}.dark .shj-syn-func{color:#d2a8ff}.dark .shj-syn-insert{color:#98c379}.dark .shj-syn-deleted{color:#ff7b72}.dark .shj-syn-esc{color:#79c0ff}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}</style>
1259
1255
  <script type="module" crossorigin src="/assets/index-BC9qhYL0.js"><\/script>
1260
1256
  </head>
@@ -1390,12 +1386,12 @@ function Yt(e) {
1390
1386
  var Xt = v((() => {
1391
1387
  qt();
1392
1388
  }));
1393
- B();
1389
+ V();
1394
1390
  var Zt = (() => {
1395
1391
  let e = [{
1396
1392
  name: `headers`,
1397
1393
  route: `/assets/**`,
1398
- handler: Re,
1394
+ handler: ze,
1399
1395
  options: { "cache-control": `public, max-age=31536000, immutable` }
1400
1396
  }];
1401
1397
  return (t, n) => {
@@ -1407,7 +1403,7 @@ var Zt = (() => {
1407
1403
  params: { _: i.slice(2).join(`/`) }
1408
1404
  }), r;
1409
1405
  };
1410
- })(), Qt = E(() => Promise.resolve().then(() => (It(), Pt))), $t = E(() => Vt().then(() => Lt)), en = E(() => Promise.resolve().then(() => (Gt(), Ht))), tn = E(() => Promise.resolve().then(() => (Xt(), Jt))), nn = (() => {
1406
+ })(), Qt = E(() => Promise.resolve().then(() => (Ft(), Nt))), $t = E(() => Vt().then(() => It)), en = E(() => Promise.resolve().then(() => (Gt(), Ht))), tn = E(() => Promise.resolve().then(() => (Xt(), Jt))), nn = (() => {
1411
1407
  let e = {
1412
1408
  route: `/api/meta`,
1413
1409
  handler: Qt
@@ -1431,8 +1427,8 @@ var Zt = (() => {
1431
1427
  params: { _: o.slice(1).join(`/`) }
1432
1428
  };
1433
1429
  };
1434
- })(), rn = [D(Ge)].filter(Boolean);
1435
- B();
1430
+ })(), rn = [D(Ke)].filter(Boolean);
1431
+ V();
1436
1432
  var an = `default`;
1437
1433
  function $() {
1438
1434
  let e = $._instance;
@@ -1448,7 +1444,7 @@ function on() {
1448
1444
  });
1449
1445
  }
1450
1446
  }, t = sn({ onError(e, t) {
1451
- return Ee(e, t);
1447
+ return De(e, t);
1452
1448
  } });
1453
1449
  return {
1454
1450
  fetch: (e) => (e.context ||= {}, e.context.nitro = e.context.nitro || { errors: [] }, t.fetch(e)),
@@ -1498,9 +1494,9 @@ function cn(e, t) {
1498
1494
  routeRuleMiddleware: i
1499
1495
  };
1500
1496
  }
1501
- Z();
1497
+ Q();
1502
1498
  async function ln(e) {
1503
- let t = $(), n = await Y(e);
1499
+ let t = $(), n = await X(e);
1504
1500
  return {
1505
1501
  fetch: t.fetch,
1506
1502
  docs: n
package/dist/cli/main.mjs CHANGED
@@ -6,7 +6,7 @@ import { parseMeta, renderToAnsi, renderToText } from "md4x";
6
6
  import { parseArgs } from "node:util";
7
7
  import { isAgent } from "std-env";
8
8
  import { highlightText } from "@speed-highlight/core/terminal";
9
- import { exec, execSync } from "node:child_process";
9
+ import { exec, execFile } from "node:child_process";
10
10
  //#region src/cli/_ansi.ts
11
11
  const noColor = !!(process.env.NO_COLOR || process.env.TERM === "dumb" || !process.stdout.isTTY || isAgent);
12
12
  const ESC = "\x1B[";
@@ -273,8 +273,10 @@ async function pageMode(docs, pagePath, plain) {
273
273
  title: parseMeta(raw).title || slug,
274
274
  order: 0
275
275
  };
276
- if (plain) process.stdout.write(renderToText(raw) + "\n");
277
- else {
276
+ if (plain) {
277
+ process.stdout.write(renderToText(raw) + "\n");
278
+ if (isAgent) process.stdout.write(agentTrailer(docs, normalized));
279
+ } else {
278
280
  const lines = await renderContent(raw, navEntry, 0);
279
281
  process.stdout.write(lines.join("\n") + "\n");
280
282
  }
@@ -285,20 +287,54 @@ async function plainMode(docs, pagePath) {
285
287
  console.log("No pages found.");
286
288
  return;
287
289
  }
290
+ if (isAgent && pagePath) {
291
+ const normalized = pagePath.startsWith("/") ? pagePath : "/" + pagePath;
292
+ const resolved = await docs.resolvePage(normalized);
293
+ if (resolved.raw) process.stdout.write(renderToText(resolved.raw) + "\n");
294
+ else process.stdout.write(`Page not found: ${pagePath}\n`);
295
+ process.stdout.write(agentTrailer(docs, normalized));
296
+ return;
297
+ }
288
298
  const tocLines = ["Table of Contents", ""];
289
299
  for (const f of navigable) {
290
300
  const indent = " ".repeat(f.depth);
291
301
  tocLines.push(`${indent}- [${f.entry.title}](${f.entry.path})`);
292
302
  }
293
303
  process.stdout.write(tocLines.join("\n") + "\n");
294
- let targetEntry = navigable[0];
295
304
  if (pagePath) {
296
305
  const resolved = await docs.resolvePage(pagePath);
297
306
  if (resolved.raw) process.stdout.write(renderToText(resolved.raw) + "\n\n");
298
307
  } else {
299
- const raw = await docs.getContent(targetEntry);
308
+ const raw = await docs.getContent(navigable[0]);
300
309
  if (raw) process.stdout.write(renderToText(raw) + "\n\n");
301
310
  }
311
+ if (isAgent && navigable.length > 1) process.stdout.write("\n---\n\nTo read a specific page from the table of contents above, run this command again with `--page <path>`.\n");
312
+ }
313
+ function agentTrailer(docs, currentPath) {
314
+ const pages = docs.pages;
315
+ if (pages.length <= 1) return "";
316
+ const normalized = currentPath?.startsWith("/") ? currentPath : currentPath ? "/" + currentPath : void 0;
317
+ const otherPages = pages.filter((p) => p.entry.path !== normalized);
318
+ if (otherPages.length === 0) return "";
319
+ return "\n" + [
320
+ "---",
321
+ "",
322
+ "Other available pages:",
323
+ ...otherPages.map((p) => ` - [${p.entry.title}](${p.entry.path})`),
324
+ "",
325
+ "To read a specific page, run this command again with `--page <path>`.",
326
+ "To view the full table of contents, run this command without `--page`.",
327
+ ""
328
+ ].join("\n");
329
+ }
330
+ //#endregion
331
+ //#region src/cli/_utils.ts
332
+ function openInBrowser(url) {
333
+ const parsed = new URL(url);
334
+ if (parsed.hostname === "[::]" || parsed.hostname === "[::1]" || parsed.hostname === "127.0.0.1") parsed.hostname = "localhost";
335
+ url = parsed.href;
336
+ if (process.platform === "win32") exec(`start "" ${JSON.stringify(url)}`, () => {});
337
+ else execFile(process.platform === "darwin" ? "open" : "xdg-open", [url], () => {});
302
338
  }
303
339
  //#endregion
304
340
  //#region src/cli/interactive/nav.ts
@@ -603,9 +639,7 @@ async function interactiveMode(docs) {
603
639
  if (line < contentScroll || line >= contentScroll + rows - 2) contentScroll = Math.max(0, Math.min(line - Math.floor(rows / 3), contentLines.length - rows + 2));
604
640
  };
605
641
  const activateLink = (url) => {
606
- if (url.startsWith("http://") || url.startsWith("https://")) try {
607
- execSync(`open ${JSON.stringify(url)}`, { stdio: "ignore" });
608
- } catch {}
642
+ if (url.startsWith("http://") || url.startsWith("https://")) openInBrowser(url);
609
643
  else {
610
644
  const target = url.replace(/^\.\//, "/").replace(/\/$/, "");
611
645
  const idx = flat.indexOf(docs.findByPath(target));
@@ -730,14 +764,6 @@ async function interactiveMode(docs) {
730
764
  }
731
765
  }
732
766
  //#endregion
733
- //#region src/cli/_utils.ts
734
- function openInBrowser(url) {
735
- const parsed = new URL(url);
736
- if (parsed.hostname === "[::]" || parsed.hostname === "[::1]" || parsed.hostname === "127.0.0.1") parsed.hostname = "localhost";
737
- url = parsed.href;
738
- exec(process.platform === "win32" ? `start ${url}` : process.platform === "darwin" ? `open ${url}` : `xdg-open ${url}`, () => {});
739
- }
740
- //#endregion
741
767
  //#region src/cli/main.ts
742
768
  async function main() {
743
769
  process.stdout.on("error", (err) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mdzilla",
3
- "version": "0.0.6",
3
+ "version": "0.1.0",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "repository": "pi0/mdzilla",
@@ -30,24 +30,23 @@
30
30
  "typecheck": "tsgo --noEmit --skipLibCheck"
31
31
  },
32
32
  "dependencies": {
33
- "@speed-highlight/core": "^1.2.14",
33
+ "@speed-highlight/core": "^1.2.15",
34
34
  "giget": "^3.1.2",
35
35
  "md4x": "^0.0.25",
36
- "mdream": "^0.17.0",
37
- "srvx": "^0.11.9",
36
+ "srvx": "^0.11.13",
38
37
  "std-env": "^4.0.0"
39
38
  },
40
39
  "devDependencies": {
41
40
  "@types/node": "^25.5.0",
42
- "@typescript/native-preview": "^7.0.0-dev.20260314.1",
43
- "@vitest/coverage-v8": "^4.1.0",
41
+ "@typescript/native-preview": "^7.0.0-dev.20260324.1",
42
+ "@vitest/coverage-v8": "^4.1.1",
44
43
  "automd": "^0.4.3",
45
44
  "changelogen": "^0.6.2",
46
45
  "obuild": "^0.4.32",
47
- "oxfmt": "^0.40.0",
48
- "oxlint": "^1.55.0",
49
- "typescript": "^5.9.3",
50
- "vitest": "^4.1.0"
46
+ "oxfmt": "^0.41.0",
47
+ "oxlint": "^1.56.0",
48
+ "typescript": "^6.0.2",
49
+ "vitest": "^4.1.1"
51
50
  },
52
51
  "packageManager": "pnpm@10.32.1"
53
52
  }