mdzilla 0.0.5 → 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 +1 -1
- package/dist/_chunks/exporter.mjs +3 -15
- package/dist/_chunks/server.mjs +1142 -1518
- package/dist/cli/main.mjs +42 -16
- package/package.json +16 -17
package/dist/_chunks/server.mjs
CHANGED
|
@@ -7,305 +7,224 @@ import { init, parseMeta as parseMeta$1, renderToHtml, renderToText as renderToT
|
|
|
7
7
|
import { highlightText } from "@speed-highlight/core";
|
|
8
8
|
//#region web/.output/server/index.mjs
|
|
9
9
|
globalThis.__nitro_main__ = import.meta.url;
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
get: all[name],
|
|
16
|
-
enumerable: true
|
|
10
|
+
var te = Object.defineProperty, v = (e, t) => () => (e && (t = e(e = 0)), t), y = (e, t) => {
|
|
11
|
+
let n = {};
|
|
12
|
+
for (var r in e) te(n, r, {
|
|
13
|
+
get: e[r],
|
|
14
|
+
enumerable: !0
|
|
17
15
|
});
|
|
18
|
-
|
|
19
|
-
return target;
|
|
16
|
+
return t || te(n, Symbol.toStringTag, { value: `Module` }), n;
|
|
20
17
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
NullProtoObj = /* @__PURE__ */ (() => {
|
|
26
|
-
const e = function() {};
|
|
18
|
+
globalThis.__nitro_vite_envs__ = {};
|
|
19
|
+
var b, ne = v((() => {
|
|
20
|
+
b = (() => {
|
|
21
|
+
let e = function() {};
|
|
27
22
|
return e.prototype = Object.create(null), Object.freeze(e.prototype), e;
|
|
28
23
|
})();
|
|
24
|
+
})), re, x, ie = v((() => {
|
|
25
|
+
re = URL, x = Response;
|
|
29
26
|
}));
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (
|
|
41
|
-
if (
|
|
42
|
-
return
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (typeof
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (
|
|
58
|
-
const { onResponse } = config;
|
|
59
|
-
return onResponse ? Promise.resolve(onResponse(response, event)).then(() => response) : response;
|
|
60
|
-
}
|
|
61
|
-
function prepareResponse(val, event, config, nested) {
|
|
62
|
-
if (val === kHandled) return new FastResponse(null);
|
|
63
|
-
if (val === kNotFound) val = new HTTPError({
|
|
27
|
+
function ae(e) {
|
|
28
|
+
return decodeURI(e.includes(`%25`) ? e.replace(/%25/g, `%2525`) : e);
|
|
29
|
+
}
|
|
30
|
+
function oe(e = ``) {
|
|
31
|
+
return e.replace(ve, ``);
|
|
32
|
+
}
|
|
33
|
+
function se(e, t = 200) {
|
|
34
|
+
return !e || (typeof e == `string` && (e = +e), e < 100 || e > 599) ? t : e;
|
|
35
|
+
}
|
|
36
|
+
function ce(e, t) {
|
|
37
|
+
if (e == null) return !0;
|
|
38
|
+
if (t !== `object`) return t === `boolean` || t === `number` || t === `string`;
|
|
39
|
+
if (typeof e.toJSON == `function` || Array.isArray(e)) return !0;
|
|
40
|
+
if (typeof e.pipe == `function` || typeof e.pipeTo == `function`) return !1;
|
|
41
|
+
if (e instanceof b) return !0;
|
|
42
|
+
let n = Object.getPrototypeOf(e);
|
|
43
|
+
return n === Object.prototype || n === null;
|
|
44
|
+
}
|
|
45
|
+
function S(e, t, n = {}) {
|
|
46
|
+
if (typeof e?.then == `function`) return (e.catch?.((e) => e) || Promise.resolve(e)).then((e) => S(e, t, n));
|
|
47
|
+
let r = le(e, t, n);
|
|
48
|
+
if (typeof r?.then == `function`) return S(r, t, n);
|
|
49
|
+
let { onResponse: i } = n;
|
|
50
|
+
return i ? Promise.resolve(i(r, t)).then(() => r) : r;
|
|
51
|
+
}
|
|
52
|
+
function le(e, t, n, r) {
|
|
53
|
+
if (e === ye) return new x(null);
|
|
54
|
+
if (e === P && (e = new N({
|
|
64
55
|
status: 404,
|
|
65
|
-
message: `Cannot find any route matching [${
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
error.unhandled = true;
|
|
72
|
-
if (val?.stack) error.stack = val.stack;
|
|
73
|
-
}
|
|
74
|
-
if (error.unhandled && !config.silent) console.error(error);
|
|
75
|
-
const { onError } = config;
|
|
76
|
-
return onError && !nested ? Promise.resolve(onError(error, event)).catch((error) => error).then((newVal) => prepareResponse(newVal ?? val, event, config, true)) : errorResponse(error, config.debug);
|
|
56
|
+
message: `Cannot find any route matching [${t.req.method}] ${t.url}`
|
|
57
|
+
})), e && e instanceof Error) {
|
|
58
|
+
let i = N.isError(e), a = i ? e : new N(e);
|
|
59
|
+
i || (a.unhandled = !0, e?.stack && (a.stack = e.stack)), a.unhandled && !n.silent && console.error(a);
|
|
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);
|
|
77
62
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
status,
|
|
86
|
-
statusText: res.statusText || preparedRes?.statusText,
|
|
87
|
-
headers: res.headers && preparedHeaders ? mergeHeaders$1(res.headers, preparedHeaders) : res.headers || preparedHeaders
|
|
63
|
+
let i = t[k], a = i?.[A];
|
|
64
|
+
if (t[k] = void 0, !(e instanceof Response)) {
|
|
65
|
+
let r = ue(e, t, n), o = r.status || i?.status;
|
|
66
|
+
return new x(de(t.req.method, o) ? null : r.body, {
|
|
67
|
+
status: o,
|
|
68
|
+
statusText: r.statusText || i?.statusText,
|
|
69
|
+
headers: r.headers && a ? C(r.headers, a) : r.headers || a
|
|
88
70
|
});
|
|
89
71
|
}
|
|
90
|
-
if (!
|
|
72
|
+
if (!a || r || !e.ok) return e;
|
|
91
73
|
try {
|
|
92
|
-
|
|
93
|
-
return val;
|
|
74
|
+
return C(e.headers, a, e.headers), e;
|
|
94
75
|
} catch {
|
|
95
|
-
return new
|
|
96
|
-
status:
|
|
97
|
-
statusText:
|
|
98
|
-
headers:
|
|
76
|
+
return new x(de(t.req.method, e.status) ? null : e.body, {
|
|
77
|
+
status: e.status,
|
|
78
|
+
statusText: e.statusText,
|
|
79
|
+
headers: C(e.headers, a)
|
|
99
80
|
});
|
|
100
81
|
}
|
|
101
82
|
}
|
|
102
|
-
function
|
|
103
|
-
for (
|
|
104
|
-
|
|
105
|
-
return target;
|
|
83
|
+
function C(e, t, n = new Headers(e)) {
|
|
84
|
+
for (let [e, r] of t) e === `set-cookie` ? n.append(e, r) : n.set(e, r);
|
|
85
|
+
return n;
|
|
106
86
|
}
|
|
107
|
-
function
|
|
108
|
-
if (
|
|
109
|
-
body:
|
|
110
|
-
headers:
|
|
87
|
+
function ue(e, t, n) {
|
|
88
|
+
if (e == null) return {
|
|
89
|
+
body: ``,
|
|
90
|
+
headers: be
|
|
111
91
|
};
|
|
112
|
-
|
|
113
|
-
if (
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (isJSONSerializable(val, valType)) return {
|
|
120
|
-
body: JSON.stringify(val, void 0, config.debug ? 2 : void 0),
|
|
121
|
-
headers: jsonHeaders
|
|
92
|
+
let r = typeof e;
|
|
93
|
+
if (r === `string`) return { body: e };
|
|
94
|
+
if (e instanceof Uint8Array) return t.res.headers.set(`content-length`, e.byteLength.toString()), { body: e };
|
|
95
|
+
if (e instanceof F || e?.constructor?.name === `HTTPResponse`) return e;
|
|
96
|
+
if (ce(e, r)) return {
|
|
97
|
+
body: JSON.stringify(e, void 0, n.debug ? 2 : void 0),
|
|
98
|
+
headers: R
|
|
122
99
|
};
|
|
123
|
-
if (
|
|
124
|
-
body:
|
|
125
|
-
headers:
|
|
100
|
+
if (r === `bigint`) return {
|
|
101
|
+
body: e.toString(),
|
|
102
|
+
headers: R
|
|
126
103
|
};
|
|
127
|
-
if (
|
|
128
|
-
|
|
129
|
-
"content-type":
|
|
130
|
-
"content-length":
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
headers.set("content-disposition", `filename="${filename}"; filename*=UTF-8''${filename}`);
|
|
136
|
-
}
|
|
137
|
-
return {
|
|
138
|
-
body: val.stream(),
|
|
139
|
-
headers
|
|
104
|
+
if (e instanceof Blob) {
|
|
105
|
+
let t = new Headers({
|
|
106
|
+
"content-type": e.type,
|
|
107
|
+
"content-length": e.size.toString()
|
|
108
|
+
}), n = e.name;
|
|
109
|
+
return n && (n = encodeURIComponent(n), t.set(`content-disposition`, `filename="${n}"; filename*=UTF-8''${n}`)), {
|
|
110
|
+
body: e.stream(),
|
|
111
|
+
headers: t
|
|
140
112
|
};
|
|
141
113
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}, void 0,
|
|
154
|
-
status:
|
|
155
|
-
statusText:
|
|
156
|
-
headers:
|
|
114
|
+
return r === `symbol` ? { body: e.toString() } : r === `function` ? { body: `${e.name}()` } : { body: e };
|
|
115
|
+
}
|
|
116
|
+
function de(e, t) {
|
|
117
|
+
return e === `HEAD` || t === 100 || t === 101 || t === 102 || t === 204 || t === 205 || t === 304;
|
|
118
|
+
}
|
|
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({
|
|
122
|
+
...e.toJSON(),
|
|
123
|
+
stack: t && e.stack ? e.stack.split(`
|
|
124
|
+
`).map((e) => e.trim()) : void 0
|
|
125
|
+
}, void 0, t ? 2 : void 0), {
|
|
126
|
+
status: e.status,
|
|
127
|
+
statusText: e.statusText,
|
|
128
|
+
headers: r
|
|
157
129
|
});
|
|
158
130
|
}
|
|
159
|
-
function
|
|
160
|
-
if (
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
hasBothKeyValuePair = equalityIndex > startingIndex;
|
|
195
|
-
if (!hasBothKeyValuePair) equalityIndex = i;
|
|
196
|
-
key = input.slice(startingIndex + 1, equalityIndex);
|
|
197
|
-
if (hasBothKeyValuePair || key.length > 0) {
|
|
198
|
-
if (keyHasPlus) key = key.replace(plusRegex, " ");
|
|
199
|
-
if (shouldDecodeKey) try {
|
|
200
|
-
key = decodeURIComponent(key);
|
|
201
|
-
} catch {}
|
|
202
|
-
if (hasBothKeyValuePair) {
|
|
203
|
-
value = input.slice(equalityIndex + 1, i);
|
|
204
|
-
if (valueHasPlus) value = value.replace(plusRegex, " ");
|
|
205
|
-
if (shouldDecodeValue) try {
|
|
206
|
-
value = decodeURIComponent(value);
|
|
207
|
-
} catch {}
|
|
208
|
-
}
|
|
209
|
-
const currentValue = params[key];
|
|
210
|
-
if (currentValue === void 0) params[key] = value;
|
|
211
|
-
else if (Array.isArray(currentValue)) currentValue.push(value);
|
|
212
|
-
else params[key] = [currentValue, value];
|
|
213
|
-
}
|
|
214
|
-
value = "";
|
|
215
|
-
startingIndex = i;
|
|
216
|
-
equalityIndex = i;
|
|
217
|
-
shouldDecodeKey = false;
|
|
218
|
-
shouldDecodeValue = false;
|
|
219
|
-
keyHasPlus = false;
|
|
220
|
-
valueHasPlus = false;
|
|
221
|
-
break;
|
|
222
|
-
case 61:
|
|
223
|
-
if (equalityIndex <= startingIndex) equalityIndex = i;
|
|
224
|
-
else shouldDecodeValue = true;
|
|
225
|
-
break;
|
|
226
|
-
case 43:
|
|
227
|
-
if (equalityIndex > startingIndex) valueHasPlus = true;
|
|
228
|
-
else keyHasPlus = true;
|
|
229
|
-
break;
|
|
230
|
-
case 37:
|
|
231
|
-
if (equalityIndex > startingIndex) shouldDecodeValue = true;
|
|
232
|
-
else shouldDecodeKey = true;
|
|
233
|
-
break;
|
|
234
|
-
}
|
|
131
|
+
function w(e, t, n, r = 0) {
|
|
132
|
+
if (r === t.length) return n(e);
|
|
133
|
+
let i = t[r], a, o, s = () => a ? o : (a = !0, o = w(e, t, n, r + 1), o), c = i(e, s);
|
|
134
|
+
return pe(c) ? s() : typeof c?.then == `function` ? c.then((e) => pe(e) ? s() : e) : c;
|
|
135
|
+
}
|
|
136
|
+
function pe(e) {
|
|
137
|
+
return e === void 0 || e === P;
|
|
138
|
+
}
|
|
139
|
+
function me(e) {
|
|
140
|
+
let t = new b();
|
|
141
|
+
if (!e || e === `?`) return t;
|
|
142
|
+
let n = e.length, r = ``, i = ``, a = -1, o = -1, s = !1, c = !1, l = !1, u = !1, d = !1, f = 0;
|
|
143
|
+
for (let p = 0; p < n + 1; p++) switch (f = p === n ? 38 : e.charCodeAt(p), f) {
|
|
144
|
+
case 38:
|
|
145
|
+
if (d = o > a, d || (o = p), r = e.slice(a + 1, o), d || r.length > 0) {
|
|
146
|
+
if (l && (r = r.replace(z, ` `)), s) try {
|
|
147
|
+
r = decodeURIComponent(r);
|
|
148
|
+
} catch {}
|
|
149
|
+
if (d && (i = e.slice(o + 1, p), u && (i = i.replace(z, ` `)), c)) try {
|
|
150
|
+
i = decodeURIComponent(i);
|
|
151
|
+
} catch {}
|
|
152
|
+
let n = t[r];
|
|
153
|
+
n === void 0 ? t[r] = i : Array.isArray(n) ? n.push(i) : t[r] = [n, i];
|
|
154
|
+
}
|
|
155
|
+
i = ``, a = p, o = p, s = !1, c = !1, l = !1, u = !1;
|
|
156
|
+
break;
|
|
157
|
+
case 61:
|
|
158
|
+
o <= a ? o = p : c = !0;
|
|
159
|
+
break;
|
|
160
|
+
case 43:
|
|
161
|
+
o > a ? u = !0 : l = !0;
|
|
162
|
+
break;
|
|
163
|
+
case 37:
|
|
164
|
+
o > a ? c = !0 : s = !0;
|
|
165
|
+
break;
|
|
235
166
|
}
|
|
236
|
-
return
|
|
237
|
-
}
|
|
238
|
-
function
|
|
239
|
-
return
|
|
240
|
-
}
|
|
241
|
-
function
|
|
242
|
-
if (typeof
|
|
243
|
-
|
|
244
|
-
return
|
|
245
|
-
} :
|
|
246
|
-
return Object.assign(
|
|
247
|
-
return
|
|
248
|
-
} :
|
|
249
|
-
}
|
|
250
|
-
function
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
if (req instanceof URL) req = new Request(req);
|
|
255
|
-
const event = new H3Event(req);
|
|
167
|
+
return t;
|
|
168
|
+
}
|
|
169
|
+
function he(e) {
|
|
170
|
+
return me((e.url || new URL(e.req.url)).search.slice(1));
|
|
171
|
+
}
|
|
172
|
+
function T(e) {
|
|
173
|
+
if (typeof e == `function`) return ge(e);
|
|
174
|
+
let t = e.handler || (e.fetch ? function(t) {
|
|
175
|
+
return e.fetch(t.req);
|
|
176
|
+
} : B);
|
|
177
|
+
return Object.assign(ge(e.middleware?.length ? function(n) {
|
|
178
|
+
return w(n, e.middleware, t);
|
|
179
|
+
} : t), e);
|
|
180
|
+
}
|
|
181
|
+
function ge(e) {
|
|
182
|
+
return `fetch` in e ? e : Object.assign(e, { fetch: (t) => {
|
|
183
|
+
typeof t == `string` && (t = new URL(t, `http://_`)), t instanceof URL && (t = new Request(t));
|
|
184
|
+
let n = new M(t);
|
|
256
185
|
try {
|
|
257
|
-
return Promise.resolve(
|
|
258
|
-
} catch (
|
|
259
|
-
return Promise.resolve(
|
|
186
|
+
return Promise.resolve(S(e(n), n));
|
|
187
|
+
} catch (e) {
|
|
188
|
+
return Promise.resolve(S(e, n));
|
|
260
189
|
}
|
|
261
190
|
} });
|
|
262
191
|
}
|
|
263
|
-
function
|
|
264
|
-
let
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
return handler;
|
|
271
|
-
})).then((r) => r(event));
|
|
192
|
+
function E(e) {
|
|
193
|
+
let t, n;
|
|
194
|
+
return T(function(r) {
|
|
195
|
+
return t ? t(r) : (n ??= Promise.resolve(e()).then(function(e) {
|
|
196
|
+
if (t = D(e) || D(e.default), typeof t != `function`) throw TypeError(`Invalid lazy handler`, { cause: { resolved: e } });
|
|
197
|
+
return t;
|
|
198
|
+
})).then((e) => e(r));
|
|
272
199
|
});
|
|
273
200
|
}
|
|
274
|
-
function
|
|
275
|
-
if (typeof
|
|
276
|
-
if (typeof
|
|
277
|
-
if (typeof
|
|
278
|
-
return
|
|
201
|
+
function D(e) {
|
|
202
|
+
if (typeof e == `function`) return e;
|
|
203
|
+
if (typeof e?.handler == `function`) return e.handler;
|
|
204
|
+
if (typeof e?.fetch == `function`) return function(t) {
|
|
205
|
+
return e.fetch(t.req);
|
|
279
206
|
};
|
|
280
207
|
}
|
|
281
|
-
var
|
|
282
|
-
|
|
283
|
-
init_dist();
|
|
284
|
-
init_generic();
|
|
285
|
-
kEventNS = "h3.internal.event.";
|
|
286
|
-
kEventRes = /* @__PURE__ */ Symbol.for(`${kEventNS}res`);
|
|
287
|
-
kEventResHeaders = /* @__PURE__ */ Symbol.for(`${kEventNS}res.headers`);
|
|
288
|
-
H3Event = 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 {
|
|
289
210
|
app;
|
|
290
211
|
req;
|
|
291
212
|
url;
|
|
292
213
|
context;
|
|
293
|
-
static __is_event__ =
|
|
294
|
-
constructor(
|
|
295
|
-
this.context =
|
|
296
|
-
|
|
297
|
-
this.
|
|
298
|
-
const _url = req._url;
|
|
299
|
-
this.url = _url && _url instanceof URL ? _url : new FastURL(req.url);
|
|
214
|
+
static __is_event__ = !0;
|
|
215
|
+
constructor(e, t, n) {
|
|
216
|
+
this.context = t || e.context || new b(), this.req = e, this.app = n;
|
|
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;
|
|
300
219
|
}
|
|
301
220
|
get res() {
|
|
302
|
-
return this[
|
|
221
|
+
return this[k] ||= new _e();
|
|
303
222
|
}
|
|
304
223
|
get runtime() {
|
|
305
224
|
return this.req.runtime;
|
|
306
225
|
}
|
|
307
|
-
waitUntil(
|
|
308
|
-
this.req.waitUntil?.(
|
|
226
|
+
waitUntil(e) {
|
|
227
|
+
this.req.waitUntil?.(e);
|
|
309
228
|
}
|
|
310
229
|
toString() {
|
|
311
230
|
return `[${this.req.method}] ${this.req.url}`;
|
|
@@ -325,18 +244,18 @@ var init_h3_ByfIX5Jk = __esmMin((() => {
|
|
|
325
244
|
get method() {
|
|
326
245
|
return this.req.method;
|
|
327
246
|
}
|
|
328
|
-
}
|
|
329
|
-
H3EventResponse = class {
|
|
247
|
+
}, _e = class {
|
|
330
248
|
status;
|
|
331
249
|
statusText;
|
|
332
250
|
get headers() {
|
|
333
|
-
return this[
|
|
251
|
+
return this[A] ||= new Headers();
|
|
334
252
|
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
253
|
+
get errHeaders() {
|
|
254
|
+
return this[j] ||= new Headers();
|
|
255
|
+
}
|
|
256
|
+
}, ve = /[^\u0009\u0020-\u007E]/g, N = class e extends Error {
|
|
338
257
|
get name() {
|
|
339
|
-
return
|
|
258
|
+
return `HTTPError`;
|
|
340
259
|
}
|
|
341
260
|
status;
|
|
342
261
|
statusText;
|
|
@@ -345,39 +264,27 @@ var init_h3_ByfIX5Jk = __esmMin((() => {
|
|
|
345
264
|
data;
|
|
346
265
|
body;
|
|
347
266
|
unhandled;
|
|
348
|
-
static isError(
|
|
349
|
-
return
|
|
350
|
-
}
|
|
351
|
-
static status(
|
|
352
|
-
return new
|
|
353
|
-
...
|
|
354
|
-
statusText,
|
|
355
|
-
status
|
|
267
|
+
static isError(e) {
|
|
268
|
+
return e instanceof Error && e?.name === `HTTPError`;
|
|
269
|
+
}
|
|
270
|
+
static status(t, n, r) {
|
|
271
|
+
return new e({
|
|
272
|
+
...r,
|
|
273
|
+
statusText: n,
|
|
274
|
+
status: t
|
|
356
275
|
});
|
|
357
276
|
}
|
|
358
|
-
constructor(
|
|
359
|
-
let
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
status,
|
|
370
|
-
statusText
|
|
371
|
-
].filter(Boolean).join(" ");
|
|
372
|
-
super(message, { cause: details });
|
|
373
|
-
this.cause = details;
|
|
374
|
-
this.status = status;
|
|
375
|
-
this.statusText = statusText || void 0;
|
|
376
|
-
const rawHeaders = details?.headers || (details?.cause)?.headers;
|
|
377
|
-
this.headers = rawHeaders ? new Headers(rawHeaders) : void 0;
|
|
378
|
-
this.unhandled = details?.unhandled ?? (details?.cause)?.unhandled ?? void 0;
|
|
379
|
-
this.data = details?.data;
|
|
380
|
-
this.body = details?.body;
|
|
277
|
+
constructor(e, t) {
|
|
278
|
+
let n, r;
|
|
279
|
+
typeof e == `string` ? (n = e, r = t) : r = e;
|
|
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 || [
|
|
281
|
+
`HTTPError`,
|
|
282
|
+
i,
|
|
283
|
+
a
|
|
284
|
+
].filter(Boolean).join(` `);
|
|
285
|
+
super(o, { cause: r }), this.cause = r, this.status = i, this.statusText = a || void 0;
|
|
286
|
+
let s = r?.headers || r?.cause?.headers;
|
|
287
|
+
this.headers = s ? new Headers(s) : void 0, this.unhandled = r?.unhandled ?? r?.cause?.unhandled ?? void 0, this.data = r?.data, this.body = r?.body;
|
|
381
288
|
}
|
|
382
289
|
get statusCode() {
|
|
383
290
|
return this.status;
|
|
@@ -386,1497 +293,1214 @@ var init_h3_ByfIX5Jk = __esmMin((() => {
|
|
|
386
293
|
return this.statusText;
|
|
387
294
|
}
|
|
388
295
|
toJSON() {
|
|
389
|
-
|
|
296
|
+
let e = this.unhandled;
|
|
390
297
|
return {
|
|
391
298
|
status: this.status,
|
|
392
299
|
statusText: this.statusText,
|
|
393
|
-
unhandled,
|
|
394
|
-
message:
|
|
395
|
-
data:
|
|
396
|
-
...
|
|
300
|
+
unhandled: e,
|
|
301
|
+
message: e ? `HTTPError` : this.message,
|
|
302
|
+
data: e ? void 0 : this.data,
|
|
303
|
+
...e ? void 0 : this.body
|
|
397
304
|
};
|
|
398
305
|
}
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
HTTPResponse = class {
|
|
403
|
-
#headers;
|
|
404
|
-
#init;
|
|
306
|
+
}, P = Symbol.for(`h3.notFound`), ye = Symbol.for(`h3.handled`), F = class {
|
|
307
|
+
#e;
|
|
308
|
+
#t;
|
|
405
309
|
body;
|
|
406
|
-
constructor(
|
|
407
|
-
this.body =
|
|
408
|
-
this.#init = init;
|
|
310
|
+
constructor(e, t) {
|
|
311
|
+
this.body = e, this.#t = t;
|
|
409
312
|
}
|
|
410
313
|
get status() {
|
|
411
|
-
return this.#
|
|
314
|
+
return this.#t?.status || 200;
|
|
412
315
|
}
|
|
413
316
|
get statusText() {
|
|
414
|
-
return this.#
|
|
317
|
+
return this.#t?.statusText || `OK`;
|
|
415
318
|
}
|
|
416
319
|
get headers() {
|
|
417
|
-
return this.#
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
delete = frozen("delete");
|
|
427
|
-
};
|
|
428
|
-
emptyHeaders = /* @__PURE__ */ new FrozenHeaders({ "content-length": "0" });
|
|
429
|
-
jsonHeaders = /* @__PURE__ */ new FrozenHeaders({ "content-type": "application/json;charset=UTF-8" });
|
|
430
|
-
plusRegex = /\+/g;
|
|
431
|
-
NoHandler = () => kNotFound;
|
|
432
|
-
H3Core = class {
|
|
320
|
+
return this.#e ||= new Headers(this.#t?.headers);
|
|
321
|
+
}
|
|
322
|
+
}, I = (e) => (...t) => {
|
|
323
|
+
throw Error(`Headers are frozen (${e} ${t.join(`, `)})`);
|
|
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 {
|
|
433
329
|
config;
|
|
434
330
|
"~middleware";
|
|
435
331
|
"~routes" = [];
|
|
436
|
-
constructor(
|
|
437
|
-
this[
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
if (route) {
|
|
448
|
-
event.context.params = route.params;
|
|
449
|
-
event.context.matchedRoute = route.data;
|
|
450
|
-
}
|
|
451
|
-
const routeHandler = route?.data.handler || NoHandler;
|
|
452
|
-
const middleware = this["~getMiddleware"](event, route);
|
|
453
|
-
return middleware.length > 0 ? callMiddleware(event, middleware, routeHandler) : routeHandler(event);
|
|
332
|
+
constructor(e = {}) {
|
|
333
|
+
this[`~middleware`] = [], this.config = e, this.fetch = this.fetch.bind(this), this.handler = this.handler.bind(this);
|
|
334
|
+
}
|
|
335
|
+
fetch(e) {
|
|
336
|
+
return this[`~request`](e);
|
|
337
|
+
}
|
|
338
|
+
handler(e) {
|
|
339
|
+
let t = this[`~findRoute`](e);
|
|
340
|
+
t && (e.context.params = t.params, e.context.matchedRoute = t.data);
|
|
341
|
+
let n = t?.data.handler || B, r = this[`~getMiddleware`](e, t);
|
|
342
|
+
return r.length > 0 ? w(e, r, n) : n(e);
|
|
454
343
|
}
|
|
455
|
-
"~request"(
|
|
456
|
-
|
|
457
|
-
let handlerRes;
|
|
344
|
+
"~request"(e, t) {
|
|
345
|
+
let n = new M(e, t, this), r;
|
|
458
346
|
try {
|
|
459
347
|
if (this.config.onRequest) {
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
} else
|
|
463
|
-
} catch (
|
|
464
|
-
|
|
348
|
+
let e = this.config.onRequest(n);
|
|
349
|
+
r = typeof e?.then == `function` ? e.then(() => this.handler(n)) : this.handler(n);
|
|
350
|
+
} else r = this.handler(n);
|
|
351
|
+
} catch (e) {
|
|
352
|
+
r = Promise.reject(e);
|
|
465
353
|
}
|
|
466
|
-
return
|
|
354
|
+
return S(r, n, this.config);
|
|
467
355
|
}
|
|
468
|
-
"~findRoute"(
|
|
469
|
-
"~addRoute"(
|
|
470
|
-
this[
|
|
356
|
+
"~findRoute"(e) {}
|
|
357
|
+
"~addRoute"(e) {
|
|
358
|
+
this[`~routes`].push(e);
|
|
471
359
|
}
|
|
472
|
-
"~getMiddleware"(
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
return routeMiddleware ? [...globalMiddleware, ...routeMiddleware] : globalMiddleware;
|
|
360
|
+
"~getMiddleware"(e, t) {
|
|
361
|
+
let n = t?.data.middleware, r = this[`~middleware`];
|
|
362
|
+
return n ? [...r, ...n] : r;
|
|
476
363
|
}
|
|
477
|
-
};
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
var init_node = __esmMin((() => {
|
|
481
|
-
init_h3_ByfIX5Jk();
|
|
364
|
+
}, new TextEncoder();
|
|
365
|
+
})), V = v((() => {
|
|
366
|
+
Se();
|
|
482
367
|
}));
|
|
483
|
-
|
|
484
|
-
var
|
|
485
|
-
|
|
486
|
-
return new
|
|
368
|
+
V(), ie();
|
|
369
|
+
var we = (e, t) => {
|
|
370
|
+
let n = Te(e, t);
|
|
371
|
+
return new x(typeof n.body == `string` ? n.body : JSON.stringify(n.body, null, 2), n);
|
|
487
372
|
};
|
|
488
|
-
function
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
const baseURL = "/";
|
|
494
|
-
if (/^\/[^/]/.test(baseURL) && !url.pathname.startsWith(baseURL)) return {
|
|
373
|
+
function Te(e, t) {
|
|
374
|
+
let n = e.unhandled ?? !N.isError(e), { status: r = 500, statusText: i = `` } = n ? {} : e;
|
|
375
|
+
if (r === 404) {
|
|
376
|
+
let e = t.url || new URL(t.req.url);
|
|
377
|
+
if (/^\/[^/]/.test(`/`) && !e.pathname.startsWith(`/`)) return {
|
|
495
378
|
status: 302,
|
|
496
|
-
|
|
497
|
-
headers: { location: `${baseURL}${url.pathname.slice(1)}${url.search}` },
|
|
498
|
-
body: `Redirecting...`
|
|
379
|
+
headers: new Headers({ location: `/${e.pathname.slice(1)}${e.search}` })
|
|
499
380
|
};
|
|
500
381
|
}
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
statusText: error.statusText,
|
|
518
|
-
message: isSensitive ? "Server Error" : error.message,
|
|
519
|
-
data: isSensitive ? void 0 : error.data
|
|
520
|
-
};
|
|
521
|
-
return {
|
|
522
|
-
status,
|
|
523
|
-
statusText: error.statusText,
|
|
524
|
-
headers,
|
|
525
|
-
body
|
|
382
|
+
let a = new Headers(n ? {} : e.headers);
|
|
383
|
+
return a.set(`content-type`, `application/json; charset=utf-8`), {
|
|
384
|
+
status: r,
|
|
385
|
+
statusText: i,
|
|
386
|
+
headers: a,
|
|
387
|
+
body: {
|
|
388
|
+
error: !0,
|
|
389
|
+
...n ? {
|
|
390
|
+
status: r,
|
|
391
|
+
unhandled: !0
|
|
392
|
+
} : typeof e.toJSON == `function` ? e.toJSON() : {
|
|
393
|
+
status: r,
|
|
394
|
+
statusText: i,
|
|
395
|
+
message: e.message
|
|
396
|
+
}
|
|
397
|
+
}
|
|
526
398
|
};
|
|
527
399
|
}
|
|
528
|
-
var
|
|
529
|
-
async function
|
|
530
|
-
for (
|
|
531
|
-
|
|
532
|
-
if (
|
|
533
|
-
} catch (
|
|
534
|
-
console.error(
|
|
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 });
|
|
404
|
+
if (r) return r;
|
|
405
|
+
} catch (e) {
|
|
406
|
+
console.error(e);
|
|
535
407
|
}
|
|
536
408
|
}
|
|
537
409
|
String.fromCharCode;
|
|
538
|
-
var
|
|
539
|
-
function
|
|
410
|
+
var Oe = /%2f/gi;
|
|
411
|
+
function ke(e = ``) {
|
|
540
412
|
try {
|
|
541
|
-
return decodeURIComponent(
|
|
413
|
+
return decodeURIComponent(`` + e);
|
|
542
414
|
} catch {
|
|
543
|
-
return
|
|
415
|
+
return `` + e;
|
|
544
416
|
}
|
|
545
417
|
}
|
|
546
|
-
function
|
|
547
|
-
return
|
|
548
|
-
}
|
|
549
|
-
var
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
let
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
return url && url !== "/";
|
|
590
|
-
}
|
|
591
|
-
function joinURL(base, ...input) {
|
|
592
|
-
let url = base || "";
|
|
593
|
-
for (const segment of input.filter((url2) => isNonEmptyURL(url2))) if (url) {
|
|
594
|
-
const _segment = segment.replace(JOIN_LEADING_SLASH_RE, "");
|
|
595
|
-
url = withTrailingSlash(url) + _segment;
|
|
596
|
-
} else url = segment;
|
|
597
|
-
return url;
|
|
598
|
-
}
|
|
599
|
-
var headers = ((m) => function headersRouteRule(event) {
|
|
600
|
-
for (const [key, value] of Object.entries(m.options || {})) event.res.headers.set(key, value);
|
|
601
|
-
});
|
|
602
|
-
var public_assets_data_default = {
|
|
418
|
+
function Ae(e) {
|
|
419
|
+
return ke(e.replace(Oe, `%252F`));
|
|
420
|
+
}
|
|
421
|
+
var je = /\/$|\/\?|\/#/, Me = /^\.?\//;
|
|
422
|
+
function H(e = ``, t) {
|
|
423
|
+
return t ? je.test(e) : e.endsWith(`/`);
|
|
424
|
+
}
|
|
425
|
+
function Ne(e = ``, t) {
|
|
426
|
+
if (!t) return (H(e) ? e.slice(0, -1) : e) || `/`;
|
|
427
|
+
if (!H(e, !0)) return e || `/`;
|
|
428
|
+
let n = e, r = ``, i = e.indexOf(`#`);
|
|
429
|
+
i !== -1 && (n = e.slice(0, i), r = e.slice(i));
|
|
430
|
+
let [a, ...o] = n.split(`?`);
|
|
431
|
+
return ((a.endsWith(`/`) ? a.slice(0, -1) : a) || `/`) + (o.length > 0 ? `?${o.join(`?`)}` : ``) + r;
|
|
432
|
+
}
|
|
433
|
+
function Pe(e = ``, t) {
|
|
434
|
+
if (!t) return e.endsWith(`/`) ? e : e + `/`;
|
|
435
|
+
if (H(e, !0)) return e || `/`;
|
|
436
|
+
let n = e, r = ``, i = e.indexOf(`#`);
|
|
437
|
+
if (i !== -1 && (n = e.slice(0, i), r = e.slice(i), !n)) return r;
|
|
438
|
+
let [a, ...o] = n.split(`?`);
|
|
439
|
+
return a + `/` + (o.length > 0 ? `?${o.join(`?`)}` : ``) + r;
|
|
440
|
+
}
|
|
441
|
+
function Fe(e = ``) {
|
|
442
|
+
return e.startsWith(`/`);
|
|
443
|
+
}
|
|
444
|
+
function Ie(e = ``) {
|
|
445
|
+
return Fe(e) ? e : `/` + e;
|
|
446
|
+
}
|
|
447
|
+
function Le(e) {
|
|
448
|
+
return e && e !== `/`;
|
|
449
|
+
}
|
|
450
|
+
function Re(e, ...t) {
|
|
451
|
+
let n = e || ``;
|
|
452
|
+
for (let e of t.filter((e) => Le(e))) if (n) {
|
|
453
|
+
let t = e.replace(Me, ``);
|
|
454
|
+
n = Pe(n) + t;
|
|
455
|
+
} else n = e;
|
|
456
|
+
return n;
|
|
457
|
+
}
|
|
458
|
+
var ze = ((e) => function(t) {
|
|
459
|
+
for (let [n, r] of Object.entries(e.options || {})) t.res.headers.set(n, r);
|
|
460
|
+
}), U = {
|
|
603
461
|
"/assets/index-BC9qhYL0.js": {
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
"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
|
+
type: `text/javascript; charset=utf-8`,
|
|
463
|
+
etag: `"2c32-P9M3yJbjRmzrrPeoaEqQI2KbS4E"`,
|
|
464
|
+
mtime: `2026-03-24T10:49:38.806Z`,
|
|
465
|
+
size: 11314,
|
|
466
|
+
path: `../public/assets/index-BC9qhYL0.js`,
|
|
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==`
|
|
610
468
|
},
|
|
611
469
|
"/assets/logo-BLkVGWak.svg": {
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
470
|
+
type: `image/svg+xml`,
|
|
471
|
+
etag: `"557-HYXN/qI1kFu3DGsCSw4J8HIDoeU"`,
|
|
472
|
+
mtime: `2026-03-24T10:49:38.807Z`,
|
|
473
|
+
size: 1367,
|
|
474
|
+
path: `../public/assets/logo-BLkVGWak.svg`,
|
|
475
|
+
data: `PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+CiAgPCEtLSBCb2R5OiByb3VuZGVkIHJlY3RhbmdsZSAoZG9jdW1lbnQgc2hhcGUpIC0tPgogIDxyZWN0IHg9IjQwIiB5PSIzMCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIxNTAiIHJ4PSIxOCIgcnk9IjE4IiBmaWxsPSIjMkIyRDQyIi8+CgogIDwhLS0gRG9jdW1lbnQgbGluZXMgKG1hcmtkb3duIGZlZWwpIC0tPgogIDxyZWN0IHg9IjYyIiB5PSI3MCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjYiIHJ4PSIzIiBmaWxsPSIjOEQ5OUFFIi8+CiAgPHJlY3QgeD0iNjIiIHk9Ijg2IiB3aWR0aD0iNzYiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTAyIiB3aWR0aD0iNjIiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTE4IiB3aWR0aD0iNzAiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTM0IiB3aWR0aD0iNDAiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KCiAgPCEtLSBIZWFkaW5nIGhhc2ggbWFyayAobWFya2Rvd24gIykgLS0+CiAgPHRleHQgeD0iNjIiIHk9IjYwIiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1zaXplPSIxOCIgZmlsbD0iI0VERjJGNCI+IzwvdGV4dD4KCiAgPCEtLSBFeWVzIC0tPgogIDxjaXJjbGUgY3g9Ijc4IiBjeT0iMTcyIiByPSI1IiBmaWxsPSIjRUYyMzNDIi8+CiAgPGNpcmNsZSBjeD0iMTIyIiBjeT0iMTcyIiByPSI1IiBmaWxsPSIjRUYyMzNDIi8+CgogIDwhLS0gVGVldGggKHppbGxhIGJpdGUgb24gYm90dG9tKSAtLT4KICA8cG9seWdvbiBwb2ludHM9IjY4LDE4MCA3NCwxOTIgODAsMTgwIiBmaWxsPSIjRURGMkY0Ii8+CiAgPHBvbHlnb24gcG9pbnRzPSI4OCwxODAgOTQsMTkyIDEwMCwxODAiIGZpbGw9IiNFREYyRjQiLz4KICA8cG9seWdvbiBwb2ludHM9IjEwOCwxODAgMTE0LDE5MiAxMjAsMTgwIiBmaWxsPSIjRURGMkY0Ii8+CiAgPHBvbHlnb24gcG9pbnRzPSIxMjgsMTgwIDEzNCwxOTIgMTQwLDE4MCIgZmlsbD0iI0VERjJGNCIvPgoKICA8IS0tIFNwaWtlcyBvbiB0b3AgKHppbGxhIGhvcm5zKSAtLT4KICA8cG9seWdvbiBwb2ludHM9IjcwLDMwIDc4LDEwIDg2LDMwIiBmaWxsPSIjMkIyRDQyIi8+CiAgPHBvbHlnb24gcG9pbnRzPSI5MiwzMCAxMDAsNiAxMDgsMzAiIGZpbGw9IiMyQjJENDIiLz4KICA8cG9seWdvbiBwb2ludHM9IjExNCwzMCAxMjIsMTAgMTMwLDMwIiBmaWxsPSIjMkIyRDQyIi8+Cjwvc3ZnPgo=`
|
|
618
476
|
}
|
|
619
477
|
};
|
|
620
|
-
function
|
|
621
|
-
if (
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
if (event.req.method && !METHODS.has(event.req.method)) return;
|
|
645
|
-
let id = decodePath(withLeadingSlash(withoutTrailingSlash(event.url.pathname)));
|
|
646
|
-
let asset;
|
|
647
|
-
const encodings = [...(event.req.headers.get("accept-encoding") || "").split(",").map((e) => EncodingMap[e.trim()]).filter(Boolean).sort(), ""];
|
|
648
|
-
if (encodings.length > 1) event.res.headers.append("Vary", "Accept-Encoding");
|
|
649
|
-
for (const encoding of encodings) for (const _id of [id + encoding, joinURL(id, "index.html" + encoding)]) {
|
|
650
|
-
const _asset = getAsset(_id);
|
|
651
|
-
if (_asset) {
|
|
652
|
-
asset = _asset;
|
|
653
|
-
id = _id;
|
|
478
|
+
function Be(e) {
|
|
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;
|
|
480
|
+
}
|
|
481
|
+
var Ve = {};
|
|
482
|
+
function He(e = ``) {
|
|
483
|
+
if (U[e]) return !0;
|
|
484
|
+
for (let t in Ve) if (e.startsWith(t)) return !0;
|
|
485
|
+
return !1;
|
|
486
|
+
}
|
|
487
|
+
function Ue(e) {
|
|
488
|
+
return U[e];
|
|
489
|
+
}
|
|
490
|
+
V();
|
|
491
|
+
var We = new Set([`HEAD`, `GET`]), Ge = {
|
|
492
|
+
gzip: `.gz`,
|
|
493
|
+
br: `.br`,
|
|
494
|
+
zstd: `.zst`
|
|
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);
|
|
500
|
+
if (e) {
|
|
501
|
+
n = e, t = r;
|
|
654
502
|
break;
|
|
655
503
|
}
|
|
656
504
|
}
|
|
657
|
-
if (!
|
|
658
|
-
if (
|
|
659
|
-
event.res.headers.delete("Cache-Control");
|
|
660
|
-
throw new HTTPError({ status: 404 });
|
|
661
|
-
}
|
|
505
|
+
if (!n) {
|
|
506
|
+
if (He(t)) throw e.res.headers.delete(`Cache-Control`), new N({ status: 404 });
|
|
662
507
|
return;
|
|
663
508
|
}
|
|
664
|
-
if (
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
const ifModifiedSinceH = event.req.headers.get("if-modified-since");
|
|
670
|
-
const mtimeDate = new Date(asset.mtime);
|
|
671
|
-
if (ifModifiedSinceH && asset.mtime && new Date(ifModifiedSinceH) >= mtimeDate) {
|
|
672
|
-
event.res.status = 304;
|
|
673
|
-
event.res.statusText = "Not Modified";
|
|
674
|
-
return "";
|
|
675
|
-
}
|
|
676
|
-
if (asset.type) event.res.headers.set("Content-Type", asset.type);
|
|
677
|
-
if (asset.etag && !event.res.headers.has("ETag")) event.res.headers.set("ETag", asset.etag);
|
|
678
|
-
if (asset.mtime && !event.res.headers.has("Last-Modified")) event.res.headers.set("Last-Modified", mtimeDate.toUTCString());
|
|
679
|
-
if (asset.encoding && !event.res.headers.has("Content-Encoding")) event.res.headers.set("Content-Encoding", asset.encoding);
|
|
680
|
-
if (asset.size > 0 && !event.res.headers.has("Content-Length")) event.res.headers.set("Content-Length", asset.size.toString());
|
|
681
|
-
return readAsset(id);
|
|
682
|
-
});
|
|
683
|
-
var init_h3 = __esmMin((() => {
|
|
684
|
-
init_node();
|
|
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`, ``;
|
|
510
|
+
let i = e.req.headers.get(`if-modified-since`), a = new Date(n.mtime);
|
|
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));
|
|
512
|
+
}), W = v((() => {
|
|
513
|
+
V();
|
|
685
514
|
}));
|
|
686
|
-
function
|
|
687
|
-
|
|
688
|
-
for (
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
qi++;
|
|
716
|
-
}
|
|
717
|
-
if (qi < q.length) return -1;
|
|
718
|
-
score += t.length * .1;
|
|
719
|
-
return score;
|
|
720
|
-
}
|
|
721
|
-
/**
|
|
722
|
-
* Fuzzy filter + sort a list of items.
|
|
723
|
-
* Returns items that match, sorted by best score (lowest first).
|
|
724
|
-
*/
|
|
725
|
-
function fuzzyFilter(items, query, getText) {
|
|
726
|
-
if (!query) return items;
|
|
727
|
-
const scored = [];
|
|
728
|
-
for (const item of items) {
|
|
729
|
-
let best = Infinity;
|
|
730
|
-
for (const text of getText(item)) {
|
|
731
|
-
const s = fuzzyMatch(query, text);
|
|
732
|
-
if (s >= 0 && s < best) best = s;
|
|
733
|
-
}
|
|
734
|
-
if (best < Infinity) scored.push({
|
|
735
|
-
item,
|
|
736
|
-
score: best
|
|
515
|
+
function G(e, t, n) {
|
|
516
|
+
let r = [];
|
|
517
|
+
for (let i of e) r.push({
|
|
518
|
+
entry: i,
|
|
519
|
+
depth: t,
|
|
520
|
+
filePath: n.get(i.path)
|
|
521
|
+
}), i.children && r.push(...G(i.children, t + 1, n));
|
|
522
|
+
return r;
|
|
523
|
+
}
|
|
524
|
+
function qe(e, t) {
|
|
525
|
+
let n = e.toLowerCase(), r = t.toLowerCase();
|
|
526
|
+
if (n.length === 0) return 0;
|
|
527
|
+
if (n.length > r.length) return -1;
|
|
528
|
+
let i = 0, a = 0, o = -1;
|
|
529
|
+
for (let e = 0; e < r.length && a < n.length; e++) r[e] === n[a] && (o === e - 1 && (i -= 5), (e === 0 || `/\\-_. `.includes(r[e - 1])) && (i -= 10), o >= 0 && (i += e - o - 1), o = e, a++);
|
|
530
|
+
return a < n.length ? -1 : (i += r.length * .1, i);
|
|
531
|
+
}
|
|
532
|
+
function Je(e, t, n) {
|
|
533
|
+
if (!t) return e;
|
|
534
|
+
let r = [];
|
|
535
|
+
for (let i of e) {
|
|
536
|
+
let e = Infinity;
|
|
537
|
+
for (let r of n(i)) {
|
|
538
|
+
let n = qe(t, r);
|
|
539
|
+
n >= 0 && n < e && (e = n);
|
|
540
|
+
}
|
|
541
|
+
e < Infinity && r.push({
|
|
542
|
+
item: i,
|
|
543
|
+
score: e
|
|
737
544
|
});
|
|
738
545
|
}
|
|
739
|
-
|
|
740
|
-
return scored.map((s) => s.item);
|
|
546
|
+
return r.sort((e, t) => e.score - t.score), r.map((e) => e.item);
|
|
741
547
|
}
|
|
742
|
-
var
|
|
743
|
-
|
|
744
|
-
DocsManager = class {
|
|
548
|
+
var Ye, Xe = v((() => {
|
|
549
|
+
Ye = class {
|
|
745
550
|
source;
|
|
746
551
|
tree = [];
|
|
747
552
|
flat = [];
|
|
748
553
|
_fileMap = /* @__PURE__ */ new Map();
|
|
749
554
|
_contentCache = /* @__PURE__ */ new Map();
|
|
750
|
-
constructor(
|
|
751
|
-
this.source =
|
|
555
|
+
constructor(e) {
|
|
556
|
+
this.source = e;
|
|
752
557
|
}
|
|
753
558
|
async load() {
|
|
754
|
-
|
|
755
|
-
this.tree = tree;
|
|
756
|
-
this._fileMap = fileMap;
|
|
757
|
-
this.flat = flattenTree(this.tree, 0, this._fileMap);
|
|
758
|
-
this._contentCache.clear();
|
|
559
|
+
let { tree: e, fileMap: t } = await this.source.load();
|
|
560
|
+
this.tree = e, this._fileMap = t, this.flat = G(this.tree, 0, this._fileMap), this._contentCache.clear();
|
|
759
561
|
}
|
|
760
562
|
async reload() {
|
|
761
563
|
return this.load();
|
|
762
564
|
}
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
this._contentCache.set(entry.filePath, raw);
|
|
770
|
-
return raw;
|
|
565
|
+
async getContent(e) {
|
|
566
|
+
if (!e.filePath || e.entry.page === !1) return;
|
|
567
|
+
let t = this._contentCache.get(e.filePath);
|
|
568
|
+
if (t !== void 0) return t;
|
|
569
|
+
let n = await this.source.readContent(e.filePath);
|
|
570
|
+
return this._contentCache.set(e.filePath, n), n;
|
|
771
571
|
}
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
this._contentCache.delete(filePath);
|
|
572
|
+
invalidate(e) {
|
|
573
|
+
this._contentCache.delete(e);
|
|
775
574
|
}
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
return fuzzyFilter(this.flat, query, ({ entry }) => [entry.title, entry.path]);
|
|
575
|
+
filter(e) {
|
|
576
|
+
return Je(this.flat, e, ({ entry: e }) => [e.title, e.path]);
|
|
779
577
|
}
|
|
780
|
-
/** Flat entries that are navigable pages (excludes directory stubs). */
|
|
781
578
|
get pages() {
|
|
782
|
-
return this.flat.filter((
|
|
783
|
-
}
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
async resolvePage(path) {
|
|
795
|
-
const normalized = path.startsWith("/") ? path : "/" + path;
|
|
796
|
-
const entry = this.findByPath(normalized);
|
|
797
|
-
if (entry) {
|
|
798
|
-
const raw = await this.getContent(entry);
|
|
799
|
-
if (raw) return {
|
|
800
|
-
entry,
|
|
801
|
-
raw
|
|
579
|
+
return this.flat.filter((e) => e.entry.page !== !1);
|
|
580
|
+
}
|
|
581
|
+
findByPath(e) {
|
|
582
|
+
return this.flat.find((t) => t.entry.page !== !1 && (t.entry.path === e || t.entry.path === e + `/`));
|
|
583
|
+
}
|
|
584
|
+
async resolvePage(e) {
|
|
585
|
+
let t = e.startsWith(`/`) ? e : `/` + e, n = this.findByPath(t);
|
|
586
|
+
if (n) {
|
|
587
|
+
let e = await this.getContent(n);
|
|
588
|
+
if (e) return {
|
|
589
|
+
entry: n,
|
|
590
|
+
raw: e
|
|
802
591
|
};
|
|
803
592
|
}
|
|
804
|
-
|
|
805
|
-
if (
|
|
806
|
-
|
|
807
|
-
if (
|
|
808
|
-
|
|
809
|
-
if (
|
|
810
|
-
entry:
|
|
811
|
-
raw
|
|
593
|
+
let r = t.match(/^\/[^/]+(\/.+)$/);
|
|
594
|
+
if (r) {
|
|
595
|
+
let e = this.findByPath(r[1]);
|
|
596
|
+
if (e) {
|
|
597
|
+
let t = await this.getContent(e);
|
|
598
|
+
if (t) return {
|
|
599
|
+
entry: e,
|
|
600
|
+
raw: t
|
|
812
601
|
};
|
|
813
602
|
}
|
|
814
603
|
}
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
matched.add(i);
|
|
828
|
-
const parentDepth = this.flat[i].depth;
|
|
829
|
-
for (let j = i + 1; j < this.flat.length; j++) {
|
|
830
|
-
if (this.flat[j].depth <= parentDepth) break;
|
|
831
|
-
matched.add(j);
|
|
832
|
-
}
|
|
604
|
+
let i = await this.source.readContent(t).catch(() => void 0);
|
|
605
|
+
return i ? { raw: i } : {};
|
|
606
|
+
}
|
|
607
|
+
matchIndices(e) {
|
|
608
|
+
if (!e) return [];
|
|
609
|
+
let t = e.toLowerCase(), n = /* @__PURE__ */ new Set();
|
|
610
|
+
for (let e = 0; e < this.flat.length; e++) {
|
|
611
|
+
let { entry: r } = this.flat[e];
|
|
612
|
+
if (r.title.toLowerCase().includes(t) || r.path.toLowerCase().includes(t)) {
|
|
613
|
+
n.add(e);
|
|
614
|
+
let t = this.flat[e].depth;
|
|
615
|
+
for (let r = e + 1; r < this.flat.length && !(this.flat[r].depth <= t); r++) n.add(r);
|
|
833
616
|
}
|
|
834
617
|
}
|
|
835
|
-
return [...
|
|
618
|
+
return [...n].sort((e, t) => e - t);
|
|
836
619
|
}
|
|
837
620
|
};
|
|
621
|
+
})), K, q = v((() => {
|
|
622
|
+
K = class {};
|
|
838
623
|
}));
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
let base = name.endsWith(".md") ? name.slice(0, -3) : name;
|
|
849
|
-
const draft = base.endsWith(".draft");
|
|
850
|
-
if (draft) base = base.slice(0, -6);
|
|
851
|
-
const match = base.match(/^(\d+)\.(.+)$/);
|
|
852
|
-
if (match) return {
|
|
853
|
-
order: Number(match[1]),
|
|
854
|
-
slug: match[2],
|
|
855
|
-
draft
|
|
856
|
-
};
|
|
857
|
-
return {
|
|
624
|
+
function Ze(e) {
|
|
625
|
+
let t = e.endsWith(`.md`) ? e.slice(0, -3) : e, n = t.endsWith(`.draft`);
|
|
626
|
+
n && (t = t.slice(0, -6));
|
|
627
|
+
let r = t.match(/^(\d+)\.(.+)$/);
|
|
628
|
+
return r ? {
|
|
629
|
+
order: Number(r[1]),
|
|
630
|
+
slug: r[2],
|
|
631
|
+
draft: n
|
|
632
|
+
} : {
|
|
858
633
|
order: Infinity,
|
|
859
|
-
slug:
|
|
860
|
-
draft
|
|
634
|
+
slug: t,
|
|
635
|
+
draft: n
|
|
861
636
|
};
|
|
862
637
|
}
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
*/
|
|
866
|
-
function humanizeSlug(slug) {
|
|
867
|
-
return slug.split("-").map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
|
|
638
|
+
function Qe(e) {
|
|
639
|
+
return e.split(`-`).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(` `);
|
|
868
640
|
}
|
|
869
|
-
|
|
870
|
-
* Read and parse a .navigation.yml file as simple key: value pairs.
|
|
871
|
-
*/
|
|
872
|
-
async function readNavigation(dirPath) {
|
|
641
|
+
async function $e(e) {
|
|
873
642
|
try {
|
|
874
|
-
|
|
875
|
-
return
|
|
643
|
+
let { headings: n, ...r } = parseMeta(`---\n${await readFile(join(e, `.navigation.yml`), `utf8`)}\n---\n`);
|
|
644
|
+
return r;
|
|
876
645
|
} catch {
|
|
877
646
|
return {};
|
|
878
647
|
}
|
|
879
648
|
}
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
const nav = meta.navigation;
|
|
886
|
-
if (nav === false) return {
|
|
887
|
-
...meta,
|
|
888
|
-
navigation: false
|
|
649
|
+
function et(e) {
|
|
650
|
+
let t = e.navigation;
|
|
651
|
+
if (t === !1) return {
|
|
652
|
+
...e,
|
|
653
|
+
navigation: !1
|
|
889
654
|
};
|
|
890
|
-
if (typeof
|
|
891
|
-
|
|
655
|
+
if (typeof t == `object` && t) {
|
|
656
|
+
let { navigation: n, ...r } = e;
|
|
892
657
|
return {
|
|
893
|
-
...
|
|
894
|
-
...
|
|
658
|
+
...r,
|
|
659
|
+
...t
|
|
895
660
|
};
|
|
896
661
|
}
|
|
897
|
-
return
|
|
898
|
-
}
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
* Scan a docs directory and build a navigation tree
|
|
913
|
-
* using md4x parseMeta for extracting markdown metadata.
|
|
914
|
-
*/
|
|
915
|
-
async function scanNav(dirPath, options) {
|
|
916
|
-
return _scanNav(dirPath, "/", options || {});
|
|
917
|
-
}
|
|
918
|
-
async function _scanNav(dirPath, parentPath, options) {
|
|
919
|
-
const dirEntries = await readdir(dirPath);
|
|
920
|
-
const entries = [];
|
|
921
|
-
for (const entry of dirEntries) {
|
|
922
|
-
if (entry.startsWith(".") || entry.startsWith("_") || entry === "package.json" || entry === "pnpm-lock.yaml" || entry === "pnpm-workspace.yaml") continue;
|
|
923
|
-
const fullPath = join(dirPath, entry);
|
|
924
|
-
let stats;
|
|
662
|
+
return e;
|
|
663
|
+
}
|
|
664
|
+
function tt(e) {
|
|
665
|
+
let t = {}, n = !1;
|
|
666
|
+
for (let [r, i] of Object.entries(e)) !it.has(r) && r !== `navigation` && (t[r] = i, n = !0);
|
|
667
|
+
return n ? t : void 0;
|
|
668
|
+
}
|
|
669
|
+
async function nt(e, t) {
|
|
670
|
+
return rt(e, `/`, t || {});
|
|
671
|
+
}
|
|
672
|
+
async function rt(e, i, o) {
|
|
673
|
+
let u = await readdir(e), d = [];
|
|
674
|
+
for (let n of u) {
|
|
675
|
+
if (n.startsWith(`.`) || n.startsWith(`_`) || n === `node_modules` || n === `dist` || n === `package.json` || n === `pnpm-lock.yaml` || n === `pnpm-workspace.yaml`) continue;
|
|
676
|
+
let u = join(e, n), f;
|
|
925
677
|
try {
|
|
926
|
-
|
|
678
|
+
f = await stat(u);
|
|
927
679
|
} catch {
|
|
928
680
|
continue;
|
|
929
681
|
}
|
|
930
|
-
if (
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
...
|
|
942
|
-
...nav.description ? { description: nav.description } : {},
|
|
943
|
-
...!hasIndex ? { page: false } : {},
|
|
944
|
-
...children.length > 0 ? { children } : {}
|
|
682
|
+
if (f.isDirectory()) {
|
|
683
|
+
let { order: e, slug: t } = Ze(n), r = await $e(u);
|
|
684
|
+
if (r.navigation === !1) continue;
|
|
685
|
+
let a = await rt(u, i === `/` ? `/${t}` : `${i}/${t}`, o), s = a.some((e) => e.slug === ``), c = {
|
|
686
|
+
slug: t,
|
|
687
|
+
path: i === `/` ? `/${t}` : `${i}/${t}`,
|
|
688
|
+
title: r.title || Qe(t),
|
|
689
|
+
order: e,
|
|
690
|
+
...r.icon ? { icon: r.icon } : {},
|
|
691
|
+
...r.description ? { description: r.description } : {},
|
|
692
|
+
...s ? {} : { page: !1 },
|
|
693
|
+
...a.length > 0 ? { children: a } : {}
|
|
945
694
|
};
|
|
946
|
-
|
|
947
|
-
} else if (extname(
|
|
948
|
-
|
|
949
|
-
if (
|
|
950
|
-
|
|
951
|
-
if (
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
order: resolvedOrder,
|
|
962
|
-
...meta.icon ? { icon: meta.icon } : {},
|
|
963
|
-
...meta.description ? { description: meta.description } : {},
|
|
964
|
-
...draft ? { draft: true } : {},
|
|
965
|
-
...extra
|
|
695
|
+
d.push(c);
|
|
696
|
+
} else if (extname(n) === `.md`) {
|
|
697
|
+
let { order: e, slug: r, draft: s } = Ze(basename(n));
|
|
698
|
+
if (s && !o.drafts) continue;
|
|
699
|
+
let c = et(parseMeta(await readFile(u, `utf8`)));
|
|
700
|
+
if (c.navigation === !1) continue;
|
|
701
|
+
let f = typeof c.order == `number` ? c.order : e, p = r === `index` ? `` : r, m = c.title || Qe(r) || `index`, h = p === `` ? i === `/` ? `/` : i : i === `/` ? `/${p}` : `${i}/${p}`, g = tt(c), _ = {
|
|
702
|
+
slug: p,
|
|
703
|
+
path: h,
|
|
704
|
+
title: m,
|
|
705
|
+
order: f,
|
|
706
|
+
...c.icon ? { icon: c.icon } : {},
|
|
707
|
+
...c.description ? { description: c.description } : {},
|
|
708
|
+
...s ? { draft: !0 } : {},
|
|
709
|
+
...g
|
|
966
710
|
};
|
|
967
|
-
|
|
711
|
+
d.push(_);
|
|
968
712
|
}
|
|
969
713
|
}
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
"children",
|
|
984
|
-
"headings"
|
|
714
|
+
return d.sort((e, t) => e.order - t.order || e.slug.localeCompare(t.slug)), d;
|
|
715
|
+
}
|
|
716
|
+
var it, at = v((() => {
|
|
717
|
+
it = new Set([
|
|
718
|
+
`slug`,
|
|
719
|
+
`path`,
|
|
720
|
+
`title`,
|
|
721
|
+
`order`,
|
|
722
|
+
`icon`,
|
|
723
|
+
`description`,
|
|
724
|
+
`page`,
|
|
725
|
+
`children`,
|
|
726
|
+
`headings`
|
|
985
727
|
]);
|
|
986
728
|
}));
|
|
987
|
-
function
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
if (
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
} else if (extname(entry.name) === ".md") {
|
|
1003
|
-
const slug = parseSlug(entry.name.replace(/\.md$/, ""));
|
|
1004
|
-
const resolvedSlug = slug === "index" ? "" : slug;
|
|
1005
|
-
const entryPath = resolvedSlug === "" ? parentPath === "/" ? "/" : parentPath : parentPath === "/" ? `/${resolvedSlug}` : `${parentPath}/${resolvedSlug}`;
|
|
1006
|
-
map.set(entryPath, fullPath);
|
|
729
|
+
function ot(e) {
|
|
730
|
+
let t = e.endsWith(`.draft`) ? e.slice(0, -6) : e, n = t.match(/^(\d+)\.(.+)$/);
|
|
731
|
+
return n ? n[2] : t;
|
|
732
|
+
}
|
|
733
|
+
async function st(e, t) {
|
|
734
|
+
let r = /* @__PURE__ */ new Map(), i = await readdir(t, { withFileTypes: !0 });
|
|
735
|
+
for (let n of i) {
|
|
736
|
+
if (n.name.startsWith(`.`) || n.name.startsWith(`_`) || n.name === `node_modules` || n.name === `dist`) continue;
|
|
737
|
+
let i = join(t, n.name);
|
|
738
|
+
if (n.isDirectory()) {
|
|
739
|
+
let t = ot(n.name), a = await st(e === `/` ? `/${t}` : `${e}/${t}`, i);
|
|
740
|
+
for (let [e, t] of a) r.set(e, t);
|
|
741
|
+
} else if (extname(n.name) === `.md`) {
|
|
742
|
+
let t = ot(n.name.replace(/\.md$/, ``)), a = t === `index` ? `` : t, o = a === `` ? e === `/` ? `/` : e : e === `/` ? `/${a}` : `${e}/${a}`;
|
|
743
|
+
r.set(o, i);
|
|
1007
744
|
}
|
|
1008
745
|
}
|
|
1009
|
-
return
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
* ordering to the scanned nav tree. Only reorders; does not add/remove entries.
|
|
1014
|
-
*/
|
|
1015
|
-
async function applyNavManifest(tree, dir) {
|
|
1016
|
-
let manifest;
|
|
746
|
+
return r;
|
|
747
|
+
}
|
|
748
|
+
async function ct(e, n) {
|
|
749
|
+
let r;
|
|
1017
750
|
try {
|
|
1018
|
-
|
|
751
|
+
r = JSON.parse(await readFile(join(n, `_navigation.json`), `utf8`));
|
|
1019
752
|
} catch {
|
|
1020
753
|
return;
|
|
1021
754
|
}
|
|
1022
|
-
|
|
1023
|
-
}
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
for (const entry of entries) if (entry.children?.length) {
|
|
1031
|
-
const manifestEntry = manifest.find((m) => m.path === entry.path);
|
|
1032
|
-
if (manifestEntry?.children) reorderTree(entry.children, manifestEntry.children);
|
|
755
|
+
lt(e, r);
|
|
756
|
+
}
|
|
757
|
+
function lt(e, t) {
|
|
758
|
+
let n = new Map(t.map((e, t) => [e.path, t]));
|
|
759
|
+
e.sort((e, t) => (n.get(e.path) ?? Infinity) - (n.get(t.path) ?? Infinity));
|
|
760
|
+
for (let n of e) if (n.children?.length) {
|
|
761
|
+
let e = t.find((e) => e.path === n.path);
|
|
762
|
+
e?.children && lt(n.children, e.children);
|
|
1033
763
|
}
|
|
1034
764
|
}
|
|
1035
|
-
var
|
|
1036
|
-
|
|
1037
|
-
init_nav();
|
|
1038
|
-
init__base();
|
|
1039
|
-
DocsSourceFS = class extends DocsSource {
|
|
765
|
+
var J, Y = v((() => {
|
|
766
|
+
at(), q(), J = class extends K {
|
|
1040
767
|
dir;
|
|
1041
|
-
constructor(
|
|
1042
|
-
super();
|
|
1043
|
-
this.dir = dir;
|
|
768
|
+
constructor(e) {
|
|
769
|
+
super(), this.dir = e;
|
|
1044
770
|
}
|
|
1045
771
|
async load() {
|
|
1046
|
-
|
|
1047
|
-
await
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
fileMap: await buildFileMap("/", this.dir)
|
|
772
|
+
let e = await nt(this.dir);
|
|
773
|
+
return await ct(e, this.dir), {
|
|
774
|
+
tree: e,
|
|
775
|
+
fileMap: await st(`/`, this.dir)
|
|
1051
776
|
};
|
|
1052
777
|
}
|
|
1053
|
-
async readContent(
|
|
1054
|
-
return readFile(
|
|
778
|
+
async readContent(e) {
|
|
779
|
+
return readFile(e, `utf8`);
|
|
1055
780
|
}
|
|
1056
781
|
};
|
|
1057
|
-
}))
|
|
1058
|
-
|
|
1059
|
-
var init_git = __esmMin((() => {
|
|
1060
|
-
init__base();
|
|
1061
|
-
init_fs();
|
|
1062
|
-
DocsSourceGit = class extends DocsSource {
|
|
782
|
+
})), ut, dt = v((() => {
|
|
783
|
+
q(), Y(), ut = class extends K {
|
|
1063
784
|
src;
|
|
1064
785
|
options;
|
|
1065
786
|
_fs;
|
|
1066
|
-
constructor(
|
|
1067
|
-
super();
|
|
1068
|
-
this.src = src;
|
|
1069
|
-
this.options = options;
|
|
787
|
+
constructor(e, t = {}) {
|
|
788
|
+
super(), this.src = e, this.options = t;
|
|
1070
789
|
}
|
|
1071
790
|
async load() {
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
const { downloadTemplate } = await import("giget");
|
|
1076
|
-
await downloadTemplate(source, {
|
|
1077
|
-
dir,
|
|
791
|
+
let e = this.options.subdir ? `${this.src}/${this.options.subdir}` : this.src, t = e.replace(/[/#:]/g, `_`), n = join(tmpdir(), `mdzilla`, `gh`, t), { downloadTemplate: r } = await import(`giget`);
|
|
792
|
+
await r(e, {
|
|
793
|
+
dir: n,
|
|
1078
794
|
auth: this.options.auth,
|
|
1079
|
-
force:
|
|
1080
|
-
install:
|
|
795
|
+
force: !0,
|
|
796
|
+
install: !1
|
|
1081
797
|
});
|
|
1082
|
-
let
|
|
1083
|
-
for (
|
|
1084
|
-
|
|
1085
|
-
if (existsSync(
|
|
1086
|
-
|
|
798
|
+
let i = n;
|
|
799
|
+
for (let e of [`docs/content`, `docs`]) {
|
|
800
|
+
let t = join(n, e);
|
|
801
|
+
if (existsSync(t)) {
|
|
802
|
+
i = t;
|
|
1087
803
|
break;
|
|
1088
804
|
}
|
|
1089
805
|
}
|
|
1090
|
-
this._fs = new
|
|
1091
|
-
return this._fs.load();
|
|
806
|
+
return this._fs = new J(i), this._fs.load();
|
|
1092
807
|
}
|
|
1093
|
-
async readContent(
|
|
1094
|
-
if (!this._fs) throw
|
|
1095
|
-
return this._fs.readContent(
|
|
808
|
+
async readContent(e) {
|
|
809
|
+
if (!this._fs) throw Error(`DocsSourceGit: call load() before readContent()`);
|
|
810
|
+
return this._fs.readContent(e);
|
|
1096
811
|
}
|
|
1097
812
|
};
|
|
1098
813
|
}));
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
let subdir = "";
|
|
1105
|
-
if (rest.startsWith("@")) {
|
|
1106
|
-
const secondSlash = rest.indexOf("/", rest.indexOf("/") + 1);
|
|
1107
|
-
if (secondSlash > 0) {
|
|
1108
|
-
subdir = rest.slice(secondSlash);
|
|
1109
|
-
rest = rest.slice(0, secondSlash);
|
|
1110
|
-
}
|
|
814
|
+
function ft(e) {
|
|
815
|
+
let t = e, n = ``;
|
|
816
|
+
if (t.startsWith(`@`)) {
|
|
817
|
+
let e = t.indexOf(`/`, t.indexOf(`/`) + 1);
|
|
818
|
+
e > 0 && (n = t.slice(e), t = t.slice(0, e));
|
|
1111
819
|
} else {
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
subdir = rest.slice(firstSlash);
|
|
1115
|
-
rest = rest.slice(0, firstSlash);
|
|
1116
|
-
}
|
|
820
|
+
let e = t.indexOf(`/`);
|
|
821
|
+
e > 0 && (n = t.slice(e), t = t.slice(0, e));
|
|
1117
822
|
}
|
|
1118
|
-
|
|
1119
|
-
const hasVersion = versionSep > 0;
|
|
823
|
+
let r = t.startsWith(`@`) ? t.indexOf(`@`, 1) : t.indexOf(`@`), i = r > 0;
|
|
1120
824
|
return {
|
|
1121
|
-
name:
|
|
1122
|
-
version:
|
|
1123
|
-
subdir
|
|
825
|
+
name: i ? t.slice(0, r) : t,
|
|
826
|
+
version: i ? t.slice(r + 1) : `latest`,
|
|
827
|
+
subdir: n
|
|
1124
828
|
};
|
|
1125
829
|
}
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
const res = await fetch(registryURL);
|
|
1134
|
-
if (!res.ok) throw new Error(`Failed to fetch package info for ${name}${version ? `@${version}` : ""}: ${res.status} ${res.statusText}`);
|
|
1135
|
-
return res.json();
|
|
1136
|
-
}
|
|
1137
|
-
/**
|
|
1138
|
-
* Detect npmjs.com URLs and extract the package name.
|
|
1139
|
-
* Supports: npmjs.com/\<pkg\>, npmjs.com/package/\<pkg\>, www.npmjs.com/package/\<pkg\>
|
|
1140
|
-
* Also handles scoped packages: npmjs.com/package/@scope/name
|
|
1141
|
-
*/
|
|
1142
|
-
function parseNpmURL(url) {
|
|
1143
|
-
let parsed;
|
|
830
|
+
async function pt(e, t) {
|
|
831
|
+
let n = t ? `https://registry.npmjs.org/${e}/${t}` : `https://registry.npmjs.org/${e}`, r = await fetch(n);
|
|
832
|
+
if (!r.ok) throw Error(`Failed to fetch package info for ${e}${t ? `@${t}` : ``}: ${r.status} ${r.statusText}`);
|
|
833
|
+
return r.json();
|
|
834
|
+
}
|
|
835
|
+
function mt(e) {
|
|
836
|
+
let t;
|
|
1144
837
|
try {
|
|
1145
|
-
|
|
838
|
+
t = new URL(e);
|
|
1146
839
|
} catch {
|
|
1147
840
|
return;
|
|
1148
841
|
}
|
|
1149
|
-
if (
|
|
1150
|
-
|
|
1151
|
-
if (
|
|
1152
|
-
|
|
1153
|
-
if (
|
|
1154
|
-
}
|
|
1155
|
-
var
|
|
1156
|
-
|
|
1157
|
-
function _isHTML(contentType, body) {
|
|
1158
|
-
if (contentType.includes("text/html") || contentType.includes("application/xhtml")) return true;
|
|
1159
|
-
const trimmed = body.trimStart();
|
|
1160
|
-
return trimmed.startsWith("<!") || trimmed.startsWith("<html");
|
|
1161
|
-
}
|
|
1162
|
-
/** Extract a readable title from a URL */
|
|
1163
|
-
function _titleFromURL(url) {
|
|
842
|
+
if (t.hostname !== `www.npmjs.com` && t.hostname !== `npmjs.com`) return;
|
|
843
|
+
let n = t.pathname.match(/^\/package\/((?:@[^/]+\/)?[^/]+)\/?$/);
|
|
844
|
+
if (n) return n[1];
|
|
845
|
+
let r = t.pathname.match(/^\/((?:@[^/]+\/)?[^/]+)\/?$/);
|
|
846
|
+
if (r && !/^(package|settings|signup|login|org|search)$/.test(r[1])) return r[1];
|
|
847
|
+
}
|
|
848
|
+
var ht = v((() => {}));
|
|
849
|
+
function gt(e) {
|
|
1164
850
|
try {
|
|
1165
|
-
return new URL(
|
|
851
|
+
return new URL(e).hostname;
|
|
1166
852
|
} catch {
|
|
1167
|
-
return
|
|
853
|
+
return e;
|
|
1168
854
|
}
|
|
1169
855
|
}
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
let siteTitle = "";
|
|
1178
|
-
let siteDescription = "";
|
|
1179
|
-
let currentSection;
|
|
1180
|
-
let order = 0;
|
|
1181
|
-
let childOrder = 0;
|
|
1182
|
-
for (const line of lines) {
|
|
1183
|
-
const trimmed = line.trim();
|
|
1184
|
-
if (!siteTitle && trimmed.startsWith("# ") && !trimmed.startsWith("## ")) {
|
|
1185
|
-
siteTitle = trimmed.slice(2).trim();
|
|
856
|
+
function _t(e, t, n, r) {
|
|
857
|
+
let i = e.split(`
|
|
858
|
+
`), a = [], o = ``, s = ``, c, l = 0, u = 0;
|
|
859
|
+
for (let e of i) {
|
|
860
|
+
let r = e.trim();
|
|
861
|
+
if (!o && r.startsWith(`# `) && !r.startsWith(`## `)) {
|
|
862
|
+
o = r.slice(2).trim();
|
|
1186
863
|
continue;
|
|
1187
864
|
}
|
|
1188
|
-
if (!
|
|
1189
|
-
|
|
865
|
+
if (!s && r.startsWith(`> `)) {
|
|
866
|
+
s = r.slice(2).trim();
|
|
1190
867
|
continue;
|
|
1191
868
|
}
|
|
1192
|
-
if (
|
|
1193
|
-
|
|
1194
|
-
slug:
|
|
1195
|
-
path: `/_section/${
|
|
1196
|
-
title:
|
|
1197
|
-
order:
|
|
1198
|
-
page:
|
|
869
|
+
if (r.startsWith(`## `)) {
|
|
870
|
+
c = {
|
|
871
|
+
slug: vt(r.slice(3).trim()),
|
|
872
|
+
path: `/_section/${l}`,
|
|
873
|
+
title: r.slice(3).trim(),
|
|
874
|
+
order: l++,
|
|
875
|
+
page: !1,
|
|
1199
876
|
children: []
|
|
1200
|
-
};
|
|
1201
|
-
childOrder = 0;
|
|
1202
|
-
tree.push(currentSection);
|
|
877
|
+
}, u = 0, a.push(c);
|
|
1203
878
|
continue;
|
|
1204
879
|
}
|
|
1205
|
-
|
|
1206
|
-
if (
|
|
1207
|
-
|
|
1208
|
-
const href = linkMatch[2];
|
|
1209
|
-
const description = linkMatch[3]?.trim();
|
|
1210
|
-
let resolved;
|
|
880
|
+
let i = r.match(/^-\s*\[([^\]]+)]\(([^)]+)\)(?::\s*(.+))?$/);
|
|
881
|
+
if (i) {
|
|
882
|
+
let e = i[1], r = i[2], o = i[3]?.trim(), s;
|
|
1211
883
|
try {
|
|
1212
|
-
|
|
1213
|
-
if (resolved.origin !== origin) continue;
|
|
884
|
+
if (s = new URL(r, t), s.origin !== t) continue;
|
|
1214
885
|
} catch {
|
|
1215
886
|
continue;
|
|
1216
887
|
}
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
...description ? { description } : {}
|
|
888
|
+
let l = s.pathname.replace(/\/+$/, ``) || `/`, d = {
|
|
889
|
+
slug: l.split(`/`).pop() || l,
|
|
890
|
+
path: l,
|
|
891
|
+
title: e,
|
|
892
|
+
order: u++,
|
|
893
|
+
...o ? { description: o } : {}
|
|
1224
894
|
};
|
|
1225
|
-
|
|
1226
|
-
if (currentSection) currentSection.children.push(entry);
|
|
1227
|
-
else tree.push(entry);
|
|
895
|
+
n.set(l, l), c ? c.children.push(d) : a.push(d);
|
|
1228
896
|
continue;
|
|
1229
897
|
}
|
|
1230
898
|
}
|
|
1231
|
-
if (
|
|
1232
|
-
|
|
1233
|
-
slug:
|
|
1234
|
-
path:
|
|
1235
|
-
title:
|
|
899
|
+
if (a.length === 0) return [];
|
|
900
|
+
let d = {
|
|
901
|
+
slug: ``,
|
|
902
|
+
path: `/`,
|
|
903
|
+
title: o || gt(t),
|
|
1236
904
|
order: 0,
|
|
1237
|
-
...
|
|
1238
|
-
...
|
|
905
|
+
...s ? { description: s } : {},
|
|
906
|
+
...a.length > 0 ? { children: a } : {}
|
|
1239
907
|
};
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
if (!resolved) continue;
|
|
1260
|
-
let path = resolved.pathname.replace(/\/+$/, "") || "/";
|
|
1261
|
-
const isToc = /\/index\.md$/i.test(path) || path.endsWith("/index");
|
|
1262
|
-
path = path.replace(/\/index\.md$/i, "").replace(/\/index$/, "").replace(/\.md$/i, "");
|
|
1263
|
-
path = path || "/";
|
|
1264
|
-
if (path === "/") continue;
|
|
1265
|
-
if (seen.has(path)) continue;
|
|
1266
|
-
seen.add(path);
|
|
1267
|
-
if (isToc) tocPaths.add(path);
|
|
1268
|
-
const slug = path.split("/").pop() || path;
|
|
1269
|
-
entries.push({
|
|
1270
|
-
slug,
|
|
1271
|
-
path,
|
|
1272
|
-
title,
|
|
1273
|
-
order: order++
|
|
908
|
+
return n.set(`/`, `/`), r.set(`/`, e), [d];
|
|
909
|
+
}
|
|
910
|
+
function vt(e) {
|
|
911
|
+
return e.toLowerCase().replace(/[^a-z\d]+/g, `-`).replace(/^-|-$/g, ``);
|
|
912
|
+
}
|
|
913
|
+
function yt(e, t) {
|
|
914
|
+
let n = /* @__PURE__ */ new Set(), r = [], i = /* @__PURE__ */ new Set(), a = 0, o = /\[([^\]]+)]\(([^)]+)\)/g, s;
|
|
915
|
+
for (; (s = o.exec(e)) !== null;) {
|
|
916
|
+
let e = s[1], o = s[2], c = bt(o, t);
|
|
917
|
+
if (!c) continue;
|
|
918
|
+
let l = c.pathname.replace(/\/+$/, ``) || `/`, u = /\/index\.md$/i.test(l) || l.endsWith(`/index`);
|
|
919
|
+
if (l = l.replace(/\/index\.md$/i, ``).replace(/\/index$/, ``).replace(/\.md$/i, ``), l ||= `/`, l === `/` || n.has(l)) continue;
|
|
920
|
+
n.add(l), u && i.add(l);
|
|
921
|
+
let d = l.split(`/`).pop() || l;
|
|
922
|
+
r.push({
|
|
923
|
+
slug: d,
|
|
924
|
+
path: l,
|
|
925
|
+
title: e,
|
|
926
|
+
order: a++
|
|
1274
927
|
});
|
|
1275
928
|
}
|
|
1276
929
|
return {
|
|
1277
|
-
entries,
|
|
1278
|
-
tocPaths
|
|
930
|
+
entries: r,
|
|
931
|
+
tocPaths: i
|
|
1279
932
|
};
|
|
1280
933
|
}
|
|
1281
|
-
|
|
1282
|
-
function _resolveHref(href, baseURL) {
|
|
934
|
+
function bt(e, t) {
|
|
1283
935
|
try {
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
if (resolved.origin !== base.origin) return void 0;
|
|
1287
|
-
if (href.startsWith("#")) return void 0;
|
|
1288
|
-
if (/\.(png|jpg|jpeg|gif|svg|css|js|ico|woff2?)$/i.test(resolved.pathname)) return void 0;
|
|
1289
|
-
return resolved;
|
|
936
|
+
let n = new URL(t), r = new URL(e, t);
|
|
937
|
+
return r.origin !== n.origin || e.startsWith(`#`) || /\.(png|jpg|jpeg|gif|svg|css|js|ico|woff2?)$/i.test(r.pathname) ? void 0 : r;
|
|
1290
938
|
} catch {
|
|
1291
939
|
return;
|
|
1292
940
|
}
|
|
1293
941
|
}
|
|
1294
|
-
var
|
|
1295
|
-
|
|
1296
|
-
init__base();
|
|
1297
|
-
init__npm();
|
|
1298
|
-
DocsSourceHTTP = class extends DocsSource {
|
|
942
|
+
var xt, St = v((() => {
|
|
943
|
+
q(), ht(), xt = class extends K {
|
|
1299
944
|
url;
|
|
1300
945
|
options;
|
|
1301
946
|
_contentCache = /* @__PURE__ */ new Map();
|
|
1302
947
|
_tree = [];
|
|
1303
948
|
_fileMap = /* @__PURE__ */ new Map();
|
|
1304
949
|
_npmPackage;
|
|
1305
|
-
constructor(
|
|
1306
|
-
super();
|
|
1307
|
-
this.url = url.replace(/\/+$/, "");
|
|
1308
|
-
this._npmPackage = parseNpmURL(this.url);
|
|
1309
|
-
this.options = options;
|
|
950
|
+
constructor(e, t = {}) {
|
|
951
|
+
super(), this.url = e.replace(/\/+$/, ``), this._npmPackage = mt(this.url), this.options = t;
|
|
1310
952
|
}
|
|
1311
953
|
async load() {
|
|
1312
954
|
if (this._npmPackage) return this._loadNpm(this._npmPackage);
|
|
1313
|
-
|
|
1314
|
-
if (
|
|
1315
|
-
this._tree
|
|
1316
|
-
|
|
1317
|
-
tree: this._tree,
|
|
1318
|
-
fileMap: this._fileMap
|
|
1319
|
-
};
|
|
1320
|
-
}
|
|
1321
|
-
const markdown = await this._fetch(this.url);
|
|
1322
|
-
this._contentCache.set("/", markdown);
|
|
1323
|
-
const rootEntry = {
|
|
1324
|
-
slug: "",
|
|
1325
|
-
path: "/",
|
|
1326
|
-
title: parseMeta(markdown).title || _titleFromURL(this.url),
|
|
1327
|
-
order: 0
|
|
955
|
+
let e = await this._tryLlmsTxt();
|
|
956
|
+
if (e) return this._tree = e, {
|
|
957
|
+
tree: this._tree,
|
|
958
|
+
fileMap: this._fileMap
|
|
1328
959
|
};
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
960
|
+
let t = await this._fetch(this.url);
|
|
961
|
+
this._contentCache.set(`/`, t);
|
|
962
|
+
let n = {
|
|
963
|
+
slug: ``,
|
|
964
|
+
path: `/`,
|
|
965
|
+
title: parseMeta(t).title || gt(this.url),
|
|
966
|
+
order: 0
|
|
967
|
+
}, { entries: r, tocPaths: i } = yt(t, this.url);
|
|
968
|
+
if (r.length > 0) {
|
|
969
|
+
n.children = r;
|
|
970
|
+
for (let e of r) this._fileMap.set(e.path, e.path);
|
|
1333
971
|
}
|
|
1334
|
-
this._tree = [
|
|
1335
|
-
this._fileMap.set("/", "/");
|
|
1336
|
-
if (tocPaths.size > 0) await this._crawlTocPages(children, tocPaths);
|
|
1337
|
-
return {
|
|
972
|
+
return this._tree = [n], this._fileMap.set(`/`, `/`), i.size > 0 && await this._crawlTocPages(r, i), {
|
|
1338
973
|
tree: this._tree,
|
|
1339
974
|
fileMap: this._fileMap
|
|
1340
975
|
};
|
|
1341
976
|
}
|
|
1342
|
-
/** Try fetching /llms.txt and parse it into a nav tree */
|
|
1343
977
|
async _tryLlmsTxt() {
|
|
1344
|
-
let
|
|
978
|
+
let e;
|
|
1345
979
|
try {
|
|
1346
|
-
|
|
980
|
+
e = new URL(this.url).origin;
|
|
1347
981
|
} catch {
|
|
1348
982
|
return;
|
|
1349
983
|
}
|
|
1350
|
-
let
|
|
984
|
+
let t;
|
|
1351
985
|
try {
|
|
1352
|
-
|
|
1353
|
-
accept:
|
|
986
|
+
let n = await fetch(`${e}/llms.txt`, { headers: {
|
|
987
|
+
accept: `text/plain`,
|
|
1354
988
|
...this.options.headers
|
|
1355
989
|
} });
|
|
1356
|
-
if (!
|
|
1357
|
-
|
|
990
|
+
if (!n.ok) return;
|
|
991
|
+
t = await n.text();
|
|
1358
992
|
} catch {
|
|
1359
993
|
return;
|
|
1360
994
|
}
|
|
1361
|
-
if (
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
this._contentCache.set(entry.path, markdown);
|
|
1382
|
-
const { entries: children, tocPaths: subTocPaths } = _extractLinks(markdown, url);
|
|
1383
|
-
if (children.length > 0) {
|
|
1384
|
-
entry.children = children;
|
|
1385
|
-
for (const child of children) this._fileMap.set(child.path, child.path);
|
|
1386
|
-
if (subTocPaths.size > 0) await this._crawlTocPages(children, subTocPaths, depth + 1);
|
|
995
|
+
if (t.trimStart().startsWith(`#`)) return _t(t, e, this._fileMap, this._contentCache);
|
|
996
|
+
}
|
|
997
|
+
async readContent(e) {
|
|
998
|
+
let t = this._contentCache.get(e);
|
|
999
|
+
if (t !== void 0) return t;
|
|
1000
|
+
let n = new URL(this.url).origin, r = e === `/` ? this.url : `${n}${e}`, i = await this._fetch(r);
|
|
1001
|
+
return this._contentCache.set(e, i), i;
|
|
1002
|
+
}
|
|
1003
|
+
async _crawlTocPages(e, t, n = 0) {
|
|
1004
|
+
if (n > 3) return;
|
|
1005
|
+
let r = new URL(this.url).origin;
|
|
1006
|
+
await Promise.all(e.map(async (e) => {
|
|
1007
|
+
if (!t.has(e.path)) return;
|
|
1008
|
+
let i = `${r}${e.path}`, a = await this._fetch(i);
|
|
1009
|
+
this._contentCache.set(e.path, a);
|
|
1010
|
+
let { entries: o, tocPaths: s } = yt(a, i);
|
|
1011
|
+
if (o.length > 0) {
|
|
1012
|
+
e.children = o;
|
|
1013
|
+
for (let e of o) this._fileMap.set(e.path, e.path);
|
|
1014
|
+
s.size > 0 && await this._crawlTocPages(o, s, n + 1);
|
|
1387
1015
|
}
|
|
1388
1016
|
}));
|
|
1389
1017
|
}
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
let markdown;
|
|
1018
|
+
async _loadNpm(e) {
|
|
1019
|
+
let t;
|
|
1393
1020
|
try {
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
} catch (
|
|
1397
|
-
|
|
1021
|
+
let n = await pt(e);
|
|
1022
|
+
t = n.readme || `# ${n.name || e}\n\n${n.description || `No README available.`}`;
|
|
1023
|
+
} catch (n) {
|
|
1024
|
+
t = `# Fetch Error\n\nFailed to fetch package \`${e}\`\n\n> ${n instanceof Error ? n.message : String(n)}`;
|
|
1398
1025
|
}
|
|
1399
|
-
this._contentCache.set(
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
path: "/",
|
|
1404
|
-
title: parseMeta(markdown).title || pkg,
|
|
1026
|
+
return this._contentCache.set(`/`, t), this._fileMap.set(`/`, `/`), this._tree = [{
|
|
1027
|
+
slug: ``,
|
|
1028
|
+
path: `/`,
|
|
1029
|
+
title: parseMeta(t).title || e,
|
|
1405
1030
|
order: 0
|
|
1406
|
-
}]
|
|
1407
|
-
return {
|
|
1031
|
+
}], {
|
|
1408
1032
|
tree: this._tree,
|
|
1409
1033
|
fileMap: this._fileMap
|
|
1410
1034
|
};
|
|
1411
1035
|
}
|
|
1412
|
-
async _fetch(
|
|
1413
|
-
let
|
|
1036
|
+
async _fetch(e) {
|
|
1037
|
+
let t;
|
|
1414
1038
|
try {
|
|
1415
|
-
|
|
1416
|
-
accept:
|
|
1039
|
+
t = await fetch(e, { headers: {
|
|
1040
|
+
accept: `text/markdown, text/plain;q=0.9, text/html;q=0.8`,
|
|
1417
1041
|
...this.options.headers
|
|
1418
1042
|
} });
|
|
1419
|
-
} catch (
|
|
1420
|
-
return `# Fetch Error\n\nFailed to fetch \`${
|
|
1043
|
+
} catch (t) {
|
|
1044
|
+
return `# Fetch Error\n\nFailed to fetch \`${e}\`\n\n> ${t instanceof Error ? t.message : String(t)}`;
|
|
1421
1045
|
}
|
|
1422
|
-
|
|
1423
|
-
const contentType = res.headers.get("content-type") || "";
|
|
1424
|
-
const text = await res.text();
|
|
1425
|
-
if (_isHTML(contentType, text)) {
|
|
1426
|
-
const { htmlToMarkdown } = await import("mdream");
|
|
1427
|
-
return htmlToMarkdown(text, { origin: url });
|
|
1428
|
-
}
|
|
1429
|
-
return text;
|
|
1046
|
+
return t.ok ? await t.text() : `# ${t.status} ${t.statusText}\n\nFailed to fetch \`${e}\``;
|
|
1430
1047
|
}
|
|
1431
1048
|
};
|
|
1432
1049
|
}));
|
|
1433
|
-
async function
|
|
1434
|
-
|
|
1435
|
-
const info = await fetchNpmInfo(name, version);
|
|
1050
|
+
async function Ct(e) {
|
|
1051
|
+
let { name: t, version: n, subdir: r } = ft(e), i = await pt(t, n);
|
|
1436
1052
|
return {
|
|
1437
|
-
name:
|
|
1438
|
-
version:
|
|
1439
|
-
subdir,
|
|
1440
|
-
tar:
|
|
1053
|
+
name: i.name,
|
|
1054
|
+
version: i.version,
|
|
1055
|
+
subdir: r,
|
|
1056
|
+
tar: i.dist.tarball
|
|
1441
1057
|
};
|
|
1442
1058
|
}
|
|
1443
|
-
var
|
|
1444
|
-
|
|
1445
|
-
init__base();
|
|
1446
|
-
init_fs();
|
|
1447
|
-
init__npm();
|
|
1448
|
-
DocsSourceNpm = class extends DocsSource {
|
|
1059
|
+
var wt, Tt = v((() => {
|
|
1060
|
+
q(), Y(), ht(), wt = class extends K {
|
|
1449
1061
|
src;
|
|
1450
1062
|
options;
|
|
1451
1063
|
_fs;
|
|
1452
|
-
constructor(
|
|
1453
|
-
super();
|
|
1454
|
-
this.src = src;
|
|
1455
|
-
this.options = options;
|
|
1064
|
+
constructor(e, t = {}) {
|
|
1065
|
+
super(), this.src = e, this.options = t;
|
|
1456
1066
|
}
|
|
1457
1067
|
async load() {
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
force: true,
|
|
1466
|
-
install: false,
|
|
1467
|
-
providers: { npm: npmProvider },
|
|
1468
|
-
registry: false
|
|
1068
|
+
let e = this.src.startsWith(`npm:`) ? this.src : `npm:${this.src}`, t = this.options.subdir ? `${e}/${this.options.subdir}` : e, n = t.replace(/[/#:@]/g, `_`), r = join(tmpdir(), `mdzilla`, `npm`, n), { downloadTemplate: i } = await import(`giget`);
|
|
1069
|
+
await i(t, {
|
|
1070
|
+
dir: r,
|
|
1071
|
+
force: !0,
|
|
1072
|
+
install: !1,
|
|
1073
|
+
providers: { npm: Ct },
|
|
1074
|
+
registry: !1
|
|
1469
1075
|
});
|
|
1470
|
-
let
|
|
1471
|
-
for (
|
|
1472
|
-
|
|
1473
|
-
if (existsSync(
|
|
1474
|
-
|
|
1076
|
+
let a = r;
|
|
1077
|
+
for (let e of [`docs/content`, `docs`]) {
|
|
1078
|
+
let t = join(r, e);
|
|
1079
|
+
if (existsSync(t)) {
|
|
1080
|
+
a = t;
|
|
1475
1081
|
break;
|
|
1476
1082
|
}
|
|
1477
1083
|
}
|
|
1478
|
-
this._fs = new
|
|
1479
|
-
return this._fs.load();
|
|
1084
|
+
return this._fs = new J(a), this._fs.load();
|
|
1480
1085
|
}
|
|
1481
|
-
async readContent(
|
|
1482
|
-
if (!this._fs) throw
|
|
1483
|
-
return this._fs.readContent(
|
|
1086
|
+
async readContent(e) {
|
|
1087
|
+
if (!this._fs) throw Error(`DocsSourceNpm: call load() before readContent()`);
|
|
1088
|
+
return this._fs.readContent(e);
|
|
1484
1089
|
}
|
|
1485
1090
|
};
|
|
1091
|
+
})), Et = v((() => {
|
|
1092
|
+
q(), Y(), dt(), St(), Tt();
|
|
1486
1093
|
}));
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
* index pages). Navigation order is preserved via `order` frontmatter in pages and
|
|
1499
|
-
* `.navigation.yml` files in directories.
|
|
1500
|
-
*
|
|
1501
|
-
* A `README.md` table of contents is generated at the root of the output directory.
|
|
1502
|
-
*/
|
|
1503
|
-
async function exportDocsToFS(manager, dir, options = {}) {
|
|
1504
|
-
const rootEntry = manager.flat.find((f) => f.entry.path === "/");
|
|
1505
|
-
const tocLines = [`# ${options.title ?? rootEntry?.entry.title ?? "Table of Contents"}`, ""];
|
|
1506
|
-
const writtenFiles = /* @__PURE__ */ new Set();
|
|
1507
|
-
const dirPaths = /* @__PURE__ */ new Set();
|
|
1508
|
-
collectDirPaths(manager.tree, dirPaths);
|
|
1509
|
-
for (const flat of manager.flat) {
|
|
1510
|
-
if (options.filter ? !options.filter(flat) : flat.entry.page === false) continue;
|
|
1511
|
-
if (IGNORED_PATHS.has(flat.entry.path)) continue;
|
|
1512
|
-
let content = await manager.getContent(flat);
|
|
1513
|
-
if (content === void 0) continue;
|
|
1514
|
-
const cleanContent = options.plainText ? renderToText(content) : renderToMarkdown(content);
|
|
1515
|
-
const filePath = flat.entry.path === "/" || dirPaths.has(flat.entry.path) ? flat.entry.path === "/" ? "/index.md" : `${flat.entry.path}/index.md` : flat.entry.path.endsWith(".md") ? flat.entry.path : `${flat.entry.path}.md`;
|
|
1516
|
-
const dest = join(dir, filePath);
|
|
1517
|
-
await mkdir(dirname(dest), { recursive: true });
|
|
1518
|
-
await writeFile(dest, cleanContent, "utf8");
|
|
1519
|
-
writtenFiles.add(filePath.slice(1));
|
|
1520
|
-
const indent = " ".repeat(flat.depth);
|
|
1521
|
-
const desc = flat.entry.description ? `: ${flat.entry.description}` : "";
|
|
1522
|
-
tocLines.push(`${indent}- [${flat.entry.title}](.${filePath})${desc}`);
|
|
1523
|
-
}
|
|
1524
|
-
let tocFile = options.tocFile ?? "README.md";
|
|
1525
|
-
if (writtenFiles.has(tocFile)) tocFile = `_${tocFile}`;
|
|
1526
|
-
await writeFile(join(dir, tocFile), tocLines.join("\n") + "\n", "utf8");
|
|
1527
|
-
await writeFile(join(dir, "_navigation.json"), JSON.stringify(manager.tree, null, 2) + "\n", "utf8");
|
|
1528
|
-
}
|
|
1529
|
-
/** Collect all paths that are directories (have children in the tree). */
|
|
1530
|
-
function collectDirPaths(entries, set) {
|
|
1531
|
-
for (const entry of entries) if (entry.children?.length) {
|
|
1532
|
-
set.add(entry.path);
|
|
1533
|
-
collectDirPaths(entry.children, set);
|
|
1094
|
+
async function Dt(t, n, r = {}) {
|
|
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();
|
|
1096
|
+
Ot(t.tree, f);
|
|
1097
|
+
for (let a of t.flat) {
|
|
1098
|
+
if ((r.filter ? !r.filter(a) : a.entry.page === !1) || kt.has(a.entry.path)) continue;
|
|
1099
|
+
let p = await t.getContent(a);
|
|
1100
|
+
if (p === void 0) continue;
|
|
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);
|
|
1102
|
+
await mkdir(dirname(g), { recursive: !0 }), await writeFile(g, m, `utf8`), l.add(h.slice(1));
|
|
1103
|
+
let _ = ` `.repeat(a.depth), ee = a.entry.description ? `: ${a.entry.description}` : ``;
|
|
1104
|
+
s.push(`${_}- [${a.entry.title}](.${h})${ee}`);
|
|
1534
1105
|
}
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1106
|
+
let p = r.tocFile ?? `README.md`;
|
|
1107
|
+
l.has(p) && (p = `_${p}`), await writeFile(join(n, p), s.join(`
|
|
1108
|
+
`) + `
|
|
1109
|
+
`, `utf8`), await writeFile(join(n, `_navigation.json`), JSON.stringify(t.tree, null, 2) + `
|
|
1110
|
+
`, `utf8`);
|
|
1111
|
+
}
|
|
1112
|
+
function Ot(e, t) {
|
|
1113
|
+
for (let n of e) n.children?.length && (t.add(n.path), Ot(n.children, t));
|
|
1114
|
+
}
|
|
1115
|
+
var kt, At = v((() => {
|
|
1116
|
+
kt = new Set([`/llms.txt`, `/llms-full.txt`]);
|
|
1117
|
+
})), jt = y({
|
|
1118
|
+
DocsManager: () => Ye,
|
|
1119
|
+
DocsSource: () => K,
|
|
1120
|
+
DocsSourceFS: () => J,
|
|
1121
|
+
DocsSourceGit: () => ut,
|
|
1122
|
+
DocsSourceHTTP: () => xt,
|
|
1123
|
+
DocsSourceNpm: () => wt,
|
|
1124
|
+
exportDocsToFS: () => Dt
|
|
1125
|
+
}), Mt = v((() => {
|
|
1126
|
+
Xe(), Et(), At();
|
|
1553
1127
|
}));
|
|
1554
|
-
async function
|
|
1555
|
-
if (
|
|
1556
|
-
if (!
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
await _docs.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();
|
|
1560
1133
|
}
|
|
1561
|
-
return
|
|
1562
|
-
}
|
|
1563
|
-
var
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
}));
|
|
1577
|
-
var page_exports = /* @__PURE__ */ __exportAll({ default: () => page_default });
|
|
1578
|
-
async function highlightCodeBlocks(html) {
|
|
1579
|
-
const codeBlockRe = /<pre><code class="language-(\w+)">([\s\S]*?)<\/code><\/pre>/g;
|
|
1580
|
-
const replacements = [];
|
|
1581
|
-
for (const m of html.matchAll(codeBlockRe)) {
|
|
1582
|
-
const [match, lang, encoded] = m;
|
|
1583
|
-
const text = decodeHtmlEntities(encoded);
|
|
1584
|
-
replacements.push(highlightText(text, lang, false).then((highlighted) => ({
|
|
1585
|
-
match,
|
|
1586
|
-
result: `<pre><code class="language-${lang}">${highlighted}</code></pre>`
|
|
1134
|
+
return Z;
|
|
1135
|
+
}
|
|
1136
|
+
var Z, Q = v((() => {})), Nt = y({ default: () => Pt }), Pt, Ft = v((() => {
|
|
1137
|
+
W(), Q(), Pt = T(async () => ({
|
|
1138
|
+
title: `Nitro`,
|
|
1139
|
+
toc: (await X()).tree
|
|
1140
|
+
}));
|
|
1141
|
+
})), It = y({ default: () => Bt });
|
|
1142
|
+
async function Lt(e) {
|
|
1143
|
+
let t = /<pre><code class="language-(\w+)">([\s\S]*?)<\/code><\/pre>/g, n = [];
|
|
1144
|
+
for (let r of e.matchAll(t)) {
|
|
1145
|
+
let [e, t, i] = r, a = zt(i);
|
|
1146
|
+
n.push(highlightText(a, t, !1).then((n) => ({
|
|
1147
|
+
match: e,
|
|
1148
|
+
result: `<pre><code class="language-${t}">${n}</code></pre>`
|
|
1587
1149
|
})).catch(() => ({
|
|
1588
|
-
match,
|
|
1589
|
-
result:
|
|
1150
|
+
match: e,
|
|
1151
|
+
result: e
|
|
1590
1152
|
})));
|
|
1591
1153
|
}
|
|
1592
|
-
let
|
|
1593
|
-
for (
|
|
1594
|
-
return
|
|
1595
|
-
}
|
|
1596
|
-
function
|
|
1597
|
-
return
|
|
1598
|
-
|
|
1599
|
-
return `<${
|
|
1154
|
+
let r = e;
|
|
1155
|
+
for (let { match: e, result: t } of await Promise.all(n)) r = r.replace(e, t);
|
|
1156
|
+
return r;
|
|
1157
|
+
}
|
|
1158
|
+
function Rt(e) {
|
|
1159
|
+
return e.replace(/<(h[1-6])>(.*?)<\/\1>/g, (e, t, n) => {
|
|
1160
|
+
let r = n.replace(/<[^>]+>/g, ``).trim().toLowerCase().replace(/[^\w\s-]/g, ``).replace(/\s+/g, `-`);
|
|
1161
|
+
return `<${t} id="${r}"><a href="#${r}">#</a>${n}</${t}>`;
|
|
1600
1162
|
});
|
|
1601
1163
|
}
|
|
1602
|
-
function
|
|
1603
|
-
return
|
|
1604
|
-
}
|
|
1605
|
-
var
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
path
|
|
1617
|
-
};
|
|
1618
|
-
return {
|
|
1619
|
-
path,
|
|
1620
|
-
html: addHeadingAnchors(await highlightCodeBlocks(renderToHtml(result.raw)))
|
|
1164
|
+
function zt(e) {
|
|
1165
|
+
return e.replace(/&/g, `&`).replace(/</g, `<`).replace(/>/g, `>`).replace(/"/g, `"`).replace(/'/g, `'`);
|
|
1166
|
+
}
|
|
1167
|
+
var Bt, Vt = v((async () => {
|
|
1168
|
+
W(), Q(), await init(), Bt = T(async (e) => {
|
|
1169
|
+
let { path: t } = he(e);
|
|
1170
|
+
if (!t) return { error: `Missing ?path= query parameter` };
|
|
1171
|
+
let n = await (await X()).resolvePage(t);
|
|
1172
|
+
return n.raw ? {
|
|
1173
|
+
path: t,
|
|
1174
|
+
html: Rt(await Lt(renderToHtml(n.raw)))
|
|
1175
|
+
} : {
|
|
1176
|
+
error: `Page not found`,
|
|
1177
|
+
path: t
|
|
1621
1178
|
};
|
|
1622
1179
|
});
|
|
1623
|
-
}));
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
const positions = [];
|
|
1630
|
-
for (const term of terms) {
|
|
1631
|
-
let idx = lower.indexOf(term);
|
|
1632
|
-
while (idx !== -1 && positions.length < maxSnippets * 2) {
|
|
1633
|
-
positions.push(idx);
|
|
1634
|
-
idx = lower.indexOf(term, idx + term.length);
|
|
1635
|
-
}
|
|
1180
|
+
})), Ht = y({ default: () => Wt });
|
|
1181
|
+
function Ut(e, t, n = {}) {
|
|
1182
|
+
let { maxSnippets: r = 3, radius: i = 80 } = n, a = e.toLowerCase(), o = [];
|
|
1183
|
+
for (let e of t) {
|
|
1184
|
+
let t = a.indexOf(e);
|
|
1185
|
+
for (; t !== -1 && o.length < r * 2;) o.push(t), t = a.indexOf(e, t + e.length);
|
|
1636
1186
|
}
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
let
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
let snippet = content.slice(start, end).trim().replaceAll(/\s+/g, " ");
|
|
1647
|
-
if (start > 0) snippet = "…" + snippet;
|
|
1648
|
-
if (end < content.length) snippet = snippet + "…";
|
|
1649
|
-
snippets.push(snippet);
|
|
1187
|
+
o.sort((e, t) => e - t);
|
|
1188
|
+
let s = [], c = -1;
|
|
1189
|
+
for (let t of o) {
|
|
1190
|
+
if (s.length >= r) break;
|
|
1191
|
+
let n = Math.max(0, t - i), a = Math.min(e.length, t + i);
|
|
1192
|
+
if (n <= c) continue;
|
|
1193
|
+
c = a;
|
|
1194
|
+
let o = e.slice(n, a).trim().replaceAll(/\s+/g, ` `);
|
|
1195
|
+
n > 0 && (o = `…` + o), a < e.length && (o += `…`), s.push(o);
|
|
1650
1196
|
}
|
|
1651
|
-
return
|
|
1652
|
-
}
|
|
1653
|
-
var
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
const scored = [];
|
|
1665
|
-
const titleMatched = /* @__PURE__ */ new Set();
|
|
1666
|
-
for (const flat of docs.pages) {
|
|
1667
|
-
const title = flat.entry.title;
|
|
1668
|
-
const titleLower = title.toLowerCase();
|
|
1669
|
-
if (!terms.every((t) => titleLower.includes(t))) continue;
|
|
1670
|
-
titleMatched.add(flat.entry.path);
|
|
1671
|
-
scored.push({
|
|
1672
|
-
path: flat.entry.path,
|
|
1673
|
-
title,
|
|
1674
|
-
score: titleLower === query ? 0 : 100,
|
|
1197
|
+
return s;
|
|
1198
|
+
}
|
|
1199
|
+
var Wt, Gt = v((() => {
|
|
1200
|
+
W(), Q(), Wt = T(async (e) => {
|
|
1201
|
+
let { q: t, limit: n } = he(e);
|
|
1202
|
+
if (!t || t.length < 2) return { results: [] };
|
|
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();
|
|
1204
|
+
for (let e of r.pages) {
|
|
1205
|
+
let t = e.entry.title, n = t.toLowerCase();
|
|
1206
|
+
o.every((e) => n.includes(e)) && (c.add(e.entry.path), s.push({
|
|
1207
|
+
path: e.entry.path,
|
|
1208
|
+
title: t,
|
|
1209
|
+
score: n === a ? 0 : 100,
|
|
1675
1210
|
snippets: []
|
|
1676
|
-
});
|
|
1211
|
+
}));
|
|
1677
1212
|
}
|
|
1678
|
-
for (
|
|
1679
|
-
if (
|
|
1680
|
-
|
|
1681
|
-
if (!
|
|
1682
|
-
|
|
1683
|
-
if (!
|
|
1684
|
-
let
|
|
1685
|
-
let
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
if (terms.every((t) => hLower.includes(t))) {
|
|
1690
|
-
score = hLower === query ? 150 : 200;
|
|
1691
|
-
matchedHeading = h.text;
|
|
1213
|
+
for (let e of r.pages) {
|
|
1214
|
+
if (c.has(e.entry.path)) continue;
|
|
1215
|
+
let t = await r.getContent(e);
|
|
1216
|
+
if (!t) continue;
|
|
1217
|
+
let n = t.toLowerCase();
|
|
1218
|
+
if (!o.every((e) => n.includes(e))) continue;
|
|
1219
|
+
let i = 300, l, u = parseMeta$1(t);
|
|
1220
|
+
for (let e of u.headings || []) {
|
|
1221
|
+
let t = e.text.toLowerCase();
|
|
1222
|
+
if (o.every((e) => t.includes(e))) {
|
|
1223
|
+
i = t === a ? 150 : 200, l = e.text;
|
|
1692
1224
|
break;
|
|
1693
1225
|
}
|
|
1694
1226
|
}
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
path:
|
|
1698
|
-
title:
|
|
1699
|
-
heading:
|
|
1700
|
-
snippets,
|
|
1701
|
-
score
|
|
1227
|
+
let d = Ut(renderToText$1(t), o);
|
|
1228
|
+
s.push({
|
|
1229
|
+
path: e.entry.path,
|
|
1230
|
+
title: e.entry.title,
|
|
1231
|
+
heading: l,
|
|
1232
|
+
snippets: d,
|
|
1233
|
+
score: i
|
|
1702
1234
|
});
|
|
1703
1235
|
}
|
|
1704
|
-
for (
|
|
1705
|
-
if (
|
|
1706
|
-
|
|
1707
|
-
if (!
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
result.snippets = extractSnippets(renderToText$1(raw), terms);
|
|
1236
|
+
for (let e of s) {
|
|
1237
|
+
if (e.snippets.length > 0) continue;
|
|
1238
|
+
let t = r.pages.find((t) => t.entry.path === e.path);
|
|
1239
|
+
if (!t) continue;
|
|
1240
|
+
let n = await r.getContent(t);
|
|
1241
|
+
n && (e.snippets = Ut(renderToText$1(n), o));
|
|
1711
1242
|
}
|
|
1712
|
-
|
|
1713
|
-
return { results: scored.slice(0, maxResults).map(({ score: _, ...r }) => r) };
|
|
1243
|
+
return s.sort((e, t) => e.score - t.score), { results: s.slice(0, i).map(({ score: e, ...t }) => t) };
|
|
1714
1244
|
});
|
|
1245
|
+
})), Kt, qt = v((() => {
|
|
1246
|
+
V(), Kt = () => new F(`<!doctype html>
|
|
1247
|
+
<html lang="en">
|
|
1248
|
+
<head>
|
|
1249
|
+
<meta charset="UTF-8" />
|
|
1250
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
1251
|
+
<link rel="icon" type="image/svg+xml" href="/assets/logo-BLkVGWak.svg" />
|
|
1252
|
+
<title></title>
|
|
1253
|
+
<style>/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
|
|
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>
|
|
1255
|
+
<script type="module" crossorigin src="/assets/index-BC9qhYL0.js"><\/script>
|
|
1256
|
+
</head>
|
|
1257
|
+
<body class="h-screen flex flex-col bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-200">
|
|
1258
|
+
<!-- Header -->
|
|
1259
|
+
<header
|
|
1260
|
+
class="flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-800"
|
|
1261
|
+
>
|
|
1262
|
+
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+CiAgPCEtLSBCb2R5OiByb3VuZGVkIHJlY3RhbmdsZSAoZG9jdW1lbnQgc2hhcGUpIC0tPgogIDxyZWN0IHg9IjQwIiB5PSIzMCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIxNTAiIHJ4PSIxOCIgcnk9IjE4IiBmaWxsPSIjMkIyRDQyIi8+CgogIDwhLS0gRG9jdW1lbnQgbGluZXMgKG1hcmtkb3duIGZlZWwpIC0tPgogIDxyZWN0IHg9IjYyIiB5PSI3MCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjYiIHJ4PSIzIiBmaWxsPSIjOEQ5OUFFIi8+CiAgPHJlY3QgeD0iNjIiIHk9Ijg2IiB3aWR0aD0iNzYiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTAyIiB3aWR0aD0iNjIiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTE4IiB3aWR0aD0iNzAiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTM0IiB3aWR0aD0iNDAiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KCiAgPCEtLSBIZWFkaW5nIGhhc2ggbWFyayAobWFya2Rvd24gIykgLS0+CiAgPHRleHQgeD0iNjIiIHk9IjYwIiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1zaXplPSIxOCIgZmlsbD0iI0VERjJGNCI+IzwvdGV4dD4KCiAgPCEtLSBFeWVzIC0tPgogIDxjaXJjbGUgY3g9Ijc4IiBjeT0iMTcyIiByPSI1IiBmaWxsPSIjRUYyMzNDIi8+CiAgPGNpcmNsZSBjeD0iMTIyIiBjeT0iMTcyIiByPSI1IiBmaWxsPSIjRUYyMzNDIi8+CgogIDwhLS0gVGVldGggKHppbGxhIGJpdGUgb24gYm90dG9tKSAtLT4KICA8cG9seWdvbiBwb2ludHM9IjY4LDE4MCA3NCwxOTIgODAsMTgwIiBmaWxsPSIjRURGMkY0Ii8+CiAgPHBvbHlnb24gcG9pbnRzPSI4OCwxODAgOTQsMTkyIDEwMCwxODAiIGZpbGw9IiNFREYyRjQiLz4KICA8cG9seWdvbiBwb2ludHM9IjEwOCwxODAgMTE0LDE5MiAxMjAsMTgwIiBmaWxsPSIjRURGMkY0Ii8+CiAgPHBvbHlnb24gcG9pbnRzPSIxMjgsMTgwIDEzNCwxOTIgMTQwLDE4MCIgZmlsbD0iI0VERjJGNCIvPgoKICA8IS0tIFNwaWtlcyBvbiB0b3AgKHppbGxhIGhvcm5zKSAtLT4KICA8cG9seWdvbiBwb2ludHM9IjcwLDMwIDc4LDEwIDg2LDMwIiBmaWxsPSIjMkIyRDQyIi8+CiAgPHBvbHlnb24gcG9pbnRzPSI5MiwzMCAxMDAsNiAxMDgsMzAiIGZpbGw9IiMyQjJENDIiLz4KICA8cG9seWdvbiBwb2ludHM9IjExNCwzMCAxMjIsMTAgMTMwLDMwIiBmaWxsPSIjMkIyRDQyIi8+Cjwvc3ZnPgo=" alt="mdzilla" class="h-8" />
|
|
1263
|
+
<div class="flex items-center gap-3">
|
|
1264
|
+
<button
|
|
1265
|
+
id="search-trigger"
|
|
1266
|
+
type="button"
|
|
1267
|
+
class="flex items-center gap-2 w-56 px-3 py-1.5 text-sm border rounded-md bg-white text-gray-400 border-gray-200 hover:border-gray-300 hover:text-gray-500 dark:bg-gray-900 dark:text-gray-500 dark:border-gray-700 dark:hover:border-gray-600 dark:hover:text-gray-400 transition-colors cursor-pointer"
|
|
1268
|
+
>
|
|
1269
|
+
<svg
|
|
1270
|
+
class="size-4 shrink-0"
|
|
1271
|
+
fill="none"
|
|
1272
|
+
viewBox="0 0 24 24"
|
|
1273
|
+
stroke-width="1.5"
|
|
1274
|
+
stroke="currentColor"
|
|
1275
|
+
>
|
|
1276
|
+
<path
|
|
1277
|
+
stroke-linecap="round"
|
|
1278
|
+
stroke-linejoin="round"
|
|
1279
|
+
d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"
|
|
1280
|
+
/>
|
|
1281
|
+
</svg>
|
|
1282
|
+
<span class="flex-1 text-left">Search…</span>
|
|
1283
|
+
<kbd
|
|
1284
|
+
class="hidden sm:inline text-xs text-gray-400 dark:text-gray-500 border border-gray-200 dark:border-gray-700 rounded px-1.5 py-0.5"
|
|
1285
|
+
>⌘K</kbd
|
|
1286
|
+
>
|
|
1287
|
+
</button>
|
|
1288
|
+
<button
|
|
1289
|
+
id="theme-toggle"
|
|
1290
|
+
type="button"
|
|
1291
|
+
class="p-1.5 rounded-md text-gray-500 hover:text-gray-900 hover:bg-gray-100 dark:text-gray-400 dark:hover:text-gray-100 dark:hover:bg-gray-800 transition-colors"
|
|
1292
|
+
title="Toggle theme"
|
|
1293
|
+
>
|
|
1294
|
+
<svg
|
|
1295
|
+
id="icon-sun"
|
|
1296
|
+
class="hidden size-5"
|
|
1297
|
+
fill="none"
|
|
1298
|
+
viewBox="0 0 24 24"
|
|
1299
|
+
stroke-width="1.5"
|
|
1300
|
+
stroke="currentColor"
|
|
1301
|
+
>
|
|
1302
|
+
<path
|
|
1303
|
+
stroke-linecap="round"
|
|
1304
|
+
stroke-linejoin="round"
|
|
1305
|
+
d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"
|
|
1306
|
+
/>
|
|
1307
|
+
</svg>
|
|
1308
|
+
<svg
|
|
1309
|
+
id="icon-moon"
|
|
1310
|
+
class="hidden size-5"
|
|
1311
|
+
fill="none"
|
|
1312
|
+
viewBox="0 0 24 24"
|
|
1313
|
+
stroke-width="1.5"
|
|
1314
|
+
stroke="currentColor"
|
|
1315
|
+
>
|
|
1316
|
+
<path
|
|
1317
|
+
stroke-linecap="round"
|
|
1318
|
+
stroke-linejoin="round"
|
|
1319
|
+
d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z"
|
|
1320
|
+
/>
|
|
1321
|
+
</svg>
|
|
1322
|
+
</button>
|
|
1323
|
+
</div>
|
|
1324
|
+
</header>
|
|
1325
|
+
|
|
1326
|
+
<!-- Main layout -->
|
|
1327
|
+
<div class="flex flex-1 overflow-hidden">
|
|
1328
|
+
<!-- Sidebar -->
|
|
1329
|
+
<nav
|
|
1330
|
+
id="sidebar"
|
|
1331
|
+
class="w-64 shrink-0 overflow-y-auto border-r border-gray-200 dark:border-gray-800 p-3"
|
|
1332
|
+
></nav>
|
|
1333
|
+
|
|
1334
|
+
<!-- Content -->
|
|
1335
|
+
<main id="content" class="flex-1 overflow-y-auto p-8"></main>
|
|
1336
|
+
</div>
|
|
1337
|
+
|
|
1338
|
+
<!-- Search modal -->
|
|
1339
|
+
<div id="search-modal" class="hidden fixed inset-0 z-50">
|
|
1340
|
+
<div id="search-backdrop" class="absolute inset-0 bg-black/50"></div>
|
|
1341
|
+
<div class="relative flex justify-center pt-[15vh] px-4">
|
|
1342
|
+
<div
|
|
1343
|
+
class="w-full max-w-lg bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-700 shadow-2xl overflow-hidden"
|
|
1344
|
+
>
|
|
1345
|
+
<div
|
|
1346
|
+
class="flex items-center gap-3 px-4 py-3 border-b border-gray-200 dark:border-gray-700"
|
|
1347
|
+
>
|
|
1348
|
+
<svg
|
|
1349
|
+
class="size-5 text-gray-400 shrink-0"
|
|
1350
|
+
fill="none"
|
|
1351
|
+
viewBox="0 0 24 24"
|
|
1352
|
+
stroke-width="1.5"
|
|
1353
|
+
stroke="currentColor"
|
|
1354
|
+
>
|
|
1355
|
+
<path
|
|
1356
|
+
stroke-linecap="round"
|
|
1357
|
+
stroke-linejoin="round"
|
|
1358
|
+
d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"
|
|
1359
|
+
/>
|
|
1360
|
+
</svg>
|
|
1361
|
+
<input
|
|
1362
|
+
id="search-input"
|
|
1363
|
+
type="text"
|
|
1364
|
+
placeholder="Search documentation…"
|
|
1365
|
+
class="flex-1 bg-transparent text-sm text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none"
|
|
1366
|
+
/>
|
|
1367
|
+
<kbd
|
|
1368
|
+
class="text-xs text-gray-400 dark:text-gray-500 border border-gray-200 dark:border-gray-700 rounded px-1.5 py-0.5"
|
|
1369
|
+
>esc</kbd
|
|
1370
|
+
>
|
|
1371
|
+
</div>
|
|
1372
|
+
<div id="search-results" class="max-h-80 overflow-y-auto">
|
|
1373
|
+
<p class="px-4 py-8 text-sm text-gray-400 text-center">Type to search…</p>
|
|
1374
|
+
</div>
|
|
1375
|
+
</div>
|
|
1376
|
+
</div>
|
|
1377
|
+
</div>
|
|
1378
|
+
|
|
1379
|
+
</body>
|
|
1380
|
+
</html>
|
|
1381
|
+
`, { headers: { "content-type": `text/html; charset=utf-8` } });
|
|
1382
|
+
})), Jt = y({ default: () => Yt });
|
|
1383
|
+
function Yt(e) {
|
|
1384
|
+
return Kt(e.req);
|
|
1385
|
+
}
|
|
1386
|
+
var Xt = v((() => {
|
|
1387
|
+
qt();
|
|
1715
1388
|
}));
|
|
1716
|
-
|
|
1717
|
-
var
|
|
1718
|
-
|
|
1719
|
-
rendererTemplate = () => new HTTPResponse("<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <link rel=\"icon\" type=\"image/svg+xml\" href=\"/assets/logo-BLkVGWak.svg\" />\n <title></title>\n <style>/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */\n@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>\n <script type=\"module\" crossorigin src=\"/assets/index-BC9qhYL0.js\"><\/script>\n </head>\n <body class=\"h-screen flex flex-col bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-200\">\n <!-- Header -->\n <header\n class=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-800\"\n >\n <img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+CiAgPCEtLSBCb2R5OiByb3VuZGVkIHJlY3RhbmdsZSAoZG9jdW1lbnQgc2hhcGUpIC0tPgogIDxyZWN0IHg9IjQwIiB5PSIzMCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIxNTAiIHJ4PSIxOCIgcnk9IjE4IiBmaWxsPSIjMkIyRDQyIi8+CgogIDwhLS0gRG9jdW1lbnQgbGluZXMgKG1hcmtkb3duIGZlZWwpIC0tPgogIDxyZWN0IHg9IjYyIiB5PSI3MCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjYiIHJ4PSIzIiBmaWxsPSIjOEQ5OUFFIi8+CiAgPHJlY3QgeD0iNjIiIHk9Ijg2IiB3aWR0aD0iNzYiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTAyIiB3aWR0aD0iNjIiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTE4IiB3aWR0aD0iNzAiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KICA8cmVjdCB4PSI2MiIgeT0iMTM0IiB3aWR0aD0iNDAiIGhlaWdodD0iNiIgcng9IjMiIGZpbGw9IiM4RDk5QUUiLz4KCiAgPCEtLSBIZWFkaW5nIGhhc2ggbWFyayAobWFya2Rvd24gIykgLS0+CiAgPHRleHQgeD0iNjIiIHk9IjYwIiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1zaXplPSIxOCIgZmlsbD0iI0VERjJGNCI+IzwvdGV4dD4KCiAgPCEtLSBFeWVzIC0tPgogIDxjaXJjbGUgY3g9Ijc4IiBjeT0iMTcyIiByPSI1IiBmaWxsPSIjRUYyMzNDIi8+CiAgPGNpcmNsZSBjeD0iMTIyIiBjeT0iMTcyIiByPSI1IiBmaWxsPSIjRUYyMzNDIi8+CgogIDwhLS0gVGVldGggKHppbGxhIGJpdGUgb24gYm90dG9tKSAtLT4KICA8cG9seWdvbiBwb2ludHM9IjY4LDE4MCA3NCwxOTIgODAsMTgwIiBmaWxsPSIjRURGMkY0Ii8+CiAgPHBvbHlnb24gcG9pbnRzPSI4OCwxODAgOTQsMTkyIDEwMCwxODAiIGZpbGw9IiNFREYyRjQiLz4KICA8cG9seWdvbiBwb2ludHM9IjEwOCwxODAgMTE0LDE5MiAxMjAsMTgwIiBmaWxsPSIjRURGMkY0Ii8+CiAgPHBvbHlnb24gcG9pbnRzPSIxMjgsMTgwIDEzNCwxOTIgMTQwLDE4MCIgZmlsbD0iI0VERjJGNCIvPgoKICA8IS0tIFNwaWtlcyBvbiB0b3AgKHppbGxhIGhvcm5zKSAtLT4KICA8cG9seWdvbiBwb2ludHM9IjcwLDMwIDc4LDEwIDg2LDMwIiBmaWxsPSIjMkIyRDQyIi8+CiAgPHBvbHlnb24gcG9pbnRzPSI5MiwzMCAxMDAsNiAxMDgsMzAiIGZpbGw9IiMyQjJENDIiLz4KICA8cG9seWdvbiBwb2ludHM9IjExNCwzMCAxMjIsMTAgMTMwLDMwIiBmaWxsPSIjMkIyRDQyIi8+Cjwvc3ZnPgo=\" alt=\"mdzilla\" class=\"h-8\" />\n <div class=\"flex items-center gap-3\">\n <button\n id=\"search-trigger\"\n type=\"button\"\n class=\"flex items-center gap-2 w-56 px-3 py-1.5 text-sm border rounded-md bg-white text-gray-400 border-gray-200 hover:border-gray-300 hover:text-gray-500 dark:bg-gray-900 dark:text-gray-500 dark:border-gray-700 dark:hover:border-gray-600 dark:hover:text-gray-400 transition-colors cursor-pointer\"\n >\n <svg\n class=\"size-4 shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\"\n />\n </svg>\n <span class=\"flex-1 text-left\">Search…</span>\n <kbd\n class=\"hidden sm:inline text-xs text-gray-400 dark:text-gray-500 border border-gray-200 dark:border-gray-700 rounded px-1.5 py-0.5\"\n >⌘K</kbd\n >\n </button>\n <button\n id=\"theme-toggle\"\n type=\"button\"\n class=\"p-1.5 rounded-md text-gray-500 hover:text-gray-900 hover:bg-gray-100 dark:text-gray-400 dark:hover:text-gray-100 dark:hover:bg-gray-800 transition-colors\"\n title=\"Toggle theme\"\n >\n <svg\n id=\"icon-sun\"\n class=\"hidden size-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z\"\n />\n </svg>\n <svg\n id=\"icon-moon\"\n class=\"hidden size-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z\"\n />\n </svg>\n </button>\n </div>\n </header>\n\n <!-- Main layout -->\n <div class=\"flex flex-1 overflow-hidden\">\n <!-- Sidebar -->\n <nav\n id=\"sidebar\"\n class=\"w-64 shrink-0 overflow-y-auto border-r border-gray-200 dark:border-gray-800 p-3\"\n ></nav>\n\n <!-- Content -->\n <main id=\"content\" class=\"flex-1 overflow-y-auto p-8\"></main>\n </div>\n\n <!-- Search modal -->\n <div id=\"search-modal\" class=\"hidden fixed inset-0 z-50\">\n <div id=\"search-backdrop\" class=\"absolute inset-0 bg-black/50\"></div>\n <div class=\"relative flex justify-center pt-[15vh] px-4\">\n <div\n class=\"w-full max-w-lg bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-700 shadow-2xl overflow-hidden\"\n >\n <div\n class=\"flex items-center gap-3 px-4 py-3 border-b border-gray-200 dark:border-gray-700\"\n >\n <svg\n class=\"size-5 text-gray-400 shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\"\n />\n </svg>\n <input\n id=\"search-input\"\n type=\"text\"\n placeholder=\"Search documentation…\"\n class=\"flex-1 bg-transparent text-sm text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none\"\n />\n <kbd\n class=\"text-xs text-gray-400 dark:text-gray-500 border border-gray-200 dark:border-gray-700 rounded px-1.5 py-0.5\"\n >esc</kbd\n >\n </div>\n <div id=\"search-results\" class=\"max-h-80 overflow-y-auto\">\n <p class=\"px-4 py-8 text-sm text-gray-400 text-center\">Type to search…</p>\n </div>\n </div>\n </div>\n </div>\n\n </body>\n</html>\n", { headers: { "content-type": "text/html; charset=utf-8" } });
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
return rendererTemplate(event.req);
|
|
1724
|
-
}
|
|
1725
|
-
var init_renderer_template = __esmMin((() => {
|
|
1726
|
-
init_renderer_template$1();
|
|
1727
|
-
}));
|
|
1728
|
-
init_node();
|
|
1729
|
-
var findRouteRules = /* @__PURE__ */ (() => {
|
|
1730
|
-
const $0 = [{
|
|
1731
|
-
name: "headers",
|
|
1732
|
-
route: "/assets/**",
|
|
1733
|
-
handler: headers,
|
|
1734
|
-
options: { "cache-control": "public, max-age=31536000, immutable" }
|
|
1389
|
+
V();
|
|
1390
|
+
var Zt = (() => {
|
|
1391
|
+
let e = [{
|
|
1392
|
+
name: `headers`,
|
|
1393
|
+
route: `/assets/**`,
|
|
1394
|
+
handler: ze,
|
|
1395
|
+
options: { "cache-control": `public, max-age=31536000, immutable` }
|
|
1735
1396
|
}];
|
|
1736
|
-
return (
|
|
1397
|
+
return (t, n) => {
|
|
1737
1398
|
let r = [];
|
|
1738
|
-
|
|
1739
|
-
let
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
});
|
|
1745
|
-
}
|
|
1746
|
-
return r;
|
|
1399
|
+
n.charCodeAt(n.length - 1) === 47 && (n = n.slice(0, -1) || `/`);
|
|
1400
|
+
let i = n.split(`/`);
|
|
1401
|
+
return i.length > 1 && i[1] === `assets` && r.unshift({
|
|
1402
|
+
data: e,
|
|
1403
|
+
params: { _: i.slice(2).join(`/`) }
|
|
1404
|
+
}), r;
|
|
1747
1405
|
};
|
|
1748
|
-
})()
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
route: "/api/search",
|
|
1762
|
-
handler: _lazy_hRSBx2
|
|
1763
|
-
}, $3 = {
|
|
1764
|
-
route: "/**",
|
|
1765
|
-
handler: _lazy_KzK1H2
|
|
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 = (() => {
|
|
1407
|
+
let e = {
|
|
1408
|
+
route: `/api/meta`,
|
|
1409
|
+
handler: Qt
|
|
1410
|
+
}, t = {
|
|
1411
|
+
route: `/api/page`,
|
|
1412
|
+
handler: $t
|
|
1413
|
+
}, n = {
|
|
1414
|
+
route: `/api/search`,
|
|
1415
|
+
handler: en
|
|
1416
|
+
}, r = {
|
|
1417
|
+
route: `/**`,
|
|
1418
|
+
handler: tn
|
|
1766
1419
|
};
|
|
1767
|
-
return (
|
|
1768
|
-
if (
|
|
1769
|
-
if (
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
data: $3,
|
|
1776
|
-
params: { "_": s.slice(1).join("/") }
|
|
1420
|
+
return (i, a) => {
|
|
1421
|
+
if (a.charCodeAt(a.length - 1) === 47 && (a = a.slice(0, -1) || `/`), a === `/api/meta`) return { data: e };
|
|
1422
|
+
if (a === `/api/page`) return { data: t };
|
|
1423
|
+
if (a === `/api/search`) return { data: n };
|
|
1424
|
+
let o = a.split(`/`);
|
|
1425
|
+
return o.length, {
|
|
1426
|
+
data: r,
|
|
1427
|
+
params: { _: o.slice(1).join(`/`) }
|
|
1777
1428
|
};
|
|
1778
1429
|
};
|
|
1779
|
-
})();
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
const captureError = (error, errorCtx) => {
|
|
1794
|
-
if (errorCtx?.event) {
|
|
1795
|
-
const errors = errorCtx.event.req.context?.nitro?.errors;
|
|
1796
|
-
if (errors) errors.push({
|
|
1797
|
-
error,
|
|
1798
|
-
context: errorCtx
|
|
1430
|
+
})(), rn = [D(Ke)].filter(Boolean);
|
|
1431
|
+
V();
|
|
1432
|
+
var an = `default`;
|
|
1433
|
+
function $() {
|
|
1434
|
+
let e = $._instance;
|
|
1435
|
+
return e || (e = $._instance = on(), globalThis.__nitro__ = globalThis.__nitro__ || {}, globalThis.__nitro__[an] = e, e);
|
|
1436
|
+
}
|
|
1437
|
+
function on() {
|
|
1438
|
+
let e = (e, t) => {
|
|
1439
|
+
if (t?.event) {
|
|
1440
|
+
let n = t.event.req.context?.nitro?.errors;
|
|
1441
|
+
n && n.push({
|
|
1442
|
+
error: e,
|
|
1443
|
+
context: t
|
|
1799
1444
|
});
|
|
1800
1445
|
}
|
|
1801
|
-
}
|
|
1802
|
-
|
|
1803
|
-
return error_handler_default(error, event);
|
|
1446
|
+
}, t = sn({ onError(e, t) {
|
|
1447
|
+
return De(e, t);
|
|
1804
1448
|
} });
|
|
1805
|
-
let appHandler = (req) => {
|
|
1806
|
-
req.context ||= {};
|
|
1807
|
-
req.context.nitro = req.context.nitro || { errors: [] };
|
|
1808
|
-
return h3App.fetch(req);
|
|
1809
|
-
};
|
|
1810
1449
|
return {
|
|
1811
|
-
fetch:
|
|
1812
|
-
h3:
|
|
1813
|
-
hooks,
|
|
1814
|
-
captureError
|
|
1450
|
+
fetch: (e) => (e.context ||= {}, e.context.nitro = e.context.nitro || { errors: [] }, t.fetch(e)),
|
|
1451
|
+
h3: t,
|
|
1452
|
+
hooks: void 0,
|
|
1453
|
+
captureError: e
|
|
1815
1454
|
};
|
|
1816
1455
|
}
|
|
1817
|
-
function
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
h3App["~getMiddleware"] = (event, route) => {
|
|
1822
|
-
const pathname = event.url.pathname;
|
|
1823
|
-
const method = event.req.method;
|
|
1824
|
-
const middleware = [];
|
|
1456
|
+
function sn(e) {
|
|
1457
|
+
let t = new xe(e);
|
|
1458
|
+
return t[`~findRoute`] = (e) => nn(e.req.method, e.url.pathname), t[`~middleware`].push(...rn), t[`~getMiddleware`] = (e, n) => {
|
|
1459
|
+
let r = e.url.pathname, i = e.req.method, a = [];
|
|
1825
1460
|
{
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
return
|
|
1835
|
-
}
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
const currentRule = routeRules[rule.name];
|
|
1842
|
-
if (currentRule) {
|
|
1843
|
-
if (rule.options === false) {
|
|
1844
|
-
delete routeRules[rule.name];
|
|
1461
|
+
let t = cn(i, r);
|
|
1462
|
+
e.context.routeRules = t?.routeRules, t?.routeRuleMiddleware.length && a.push(...t.routeRuleMiddleware);
|
|
1463
|
+
}
|
|
1464
|
+
return a.push(...t[`~middleware`]), n?.data?.middleware?.length && a.push(...n.data.middleware), a;
|
|
1465
|
+
}, t;
|
|
1466
|
+
}
|
|
1467
|
+
function cn(e, t) {
|
|
1468
|
+
let n = Zt(e, t);
|
|
1469
|
+
if (!n?.length) return { routeRuleMiddleware: [] };
|
|
1470
|
+
let r = {};
|
|
1471
|
+
for (let e of n) for (let t of e.data) {
|
|
1472
|
+
let n = r[t.name];
|
|
1473
|
+
if (n) {
|
|
1474
|
+
if (t.options === !1) {
|
|
1475
|
+
delete r[t.name];
|
|
1845
1476
|
continue;
|
|
1846
1477
|
}
|
|
1847
|
-
|
|
1848
|
-
...
|
|
1849
|
-
...
|
|
1850
|
-
}
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
currentRule.params = {
|
|
1854
|
-
...currentRule.params,
|
|
1855
|
-
...layer.params
|
|
1478
|
+
typeof n.options == `object` && typeof t.options == `object` ? n.options = {
|
|
1479
|
+
...n.options,
|
|
1480
|
+
...t.options
|
|
1481
|
+
} : n.options = t.options, n.route = t.route, n.params = {
|
|
1482
|
+
...n.params,
|
|
1483
|
+
...e.params
|
|
1856
1484
|
};
|
|
1857
|
-
} else
|
|
1858
|
-
...
|
|
1859
|
-
params:
|
|
1860
|
-
};
|
|
1861
|
-
}
|
|
1862
|
-
const middleware = [];
|
|
1863
|
-
for (const rule of Object.values(routeRules)) {
|
|
1864
|
-
if (rule.options === false || !rule.handler) continue;
|
|
1865
|
-
middleware.push(rule.handler(rule));
|
|
1485
|
+
} else t.options !== !1 && (r[t.name] = {
|
|
1486
|
+
...t,
|
|
1487
|
+
params: e.params
|
|
1488
|
+
});
|
|
1866
1489
|
}
|
|
1490
|
+
let i = [];
|
|
1491
|
+
for (let e of Object.values(r)) e.options === !1 || !e.handler || i.push(e.handler(e));
|
|
1867
1492
|
return {
|
|
1868
|
-
routeRules,
|
|
1869
|
-
routeRuleMiddleware:
|
|
1493
|
+
routeRules: r,
|
|
1494
|
+
routeRuleMiddleware: i
|
|
1870
1495
|
};
|
|
1871
1496
|
}
|
|
1872
|
-
|
|
1873
|
-
async function
|
|
1874
|
-
|
|
1875
|
-
const docs = await useDocs(initOpts);
|
|
1497
|
+
Q();
|
|
1498
|
+
async function ln(e) {
|
|
1499
|
+
let t = $(), n = await X(e);
|
|
1876
1500
|
return {
|
|
1877
|
-
fetch:
|
|
1878
|
-
docs
|
|
1501
|
+
fetch: t.fetch,
|
|
1502
|
+
docs: n
|
|
1879
1503
|
};
|
|
1880
1504
|
}
|
|
1881
1505
|
//#endregion
|
|
1882
|
-
export { createDocsServer };
|
|
1506
|
+
export { ln as createDocsServer };
|