@jeffreycao/copilot-api 1.8.0 → 1.9.0-beta.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/dist/GptEncoding-TiCgsNrQ.js +887 -0
- package/dist/GptEncoding-TiCgsNrQ.js.map +1 -0
- package/dist/{auth-C9jquVrb.js → auth-DCB53u05.js} +6 -6
- package/dist/{auth-C9jquVrb.js.map → auth-DCB53u05.js.map} +1 -1
- package/dist/{check-usage-Ct5MACB6.js → check-usage-iKUAIfc_.js} +6 -6
- package/dist/{check-usage-Ct5MACB6.js.map → check-usage-iKUAIfc_.js.map} +1 -1
- package/dist/chunk-BZ41Y9eH.js +39 -0
- package/dist/cl100k_base-kiDWemr-.js +101375 -0
- package/dist/cl100k_base-kiDWemr-.js.map +1 -0
- package/dist/{config-BQvWqYh_.js → config-D3dkAXQE.js} +3 -3
- package/dist/{config-BQvWqYh_.js.map → config-D3dkAXQE.js.map} +1 -1
- package/dist/{debug-DcC7ZPH0.js → debug-CUx-7_jF.js} +4 -4
- package/dist/{debug-DcC7ZPH0.js.map → debug-CUx-7_jF.js.map} +1 -1
- package/dist/dist-B3jIqeb6.js +961 -0
- package/dist/dist-B3jIqeb6.js.map +1 -0
- package/dist/dist-CSEoNgAt.js +334 -0
- package/dist/dist-CSEoNgAt.js.map +1 -0
- package/dist/main.js +26 -5
- package/dist/main.js.map +1 -1
- package/dist/o200k_base-BlrOP1Jc.js +204726 -0
- package/dist/o200k_base-BlrOP1Jc.js.map +1 -0
- package/dist/p50k_base-DA6KYT1Z.js +11 -0
- package/dist/p50k_base-DA6KYT1Z.js.map +1 -0
- package/dist/p50k_base-tS38LhIO.js +50483 -0
- package/dist/p50k_base-tS38LhIO.js.map +1 -0
- package/dist/p50k_edit-BlA1HcF4.js +11 -0
- package/dist/p50k_edit-BlA1HcF4.js.map +1 -0
- package/dist/{paths-Cla6y5eD.js → paths-DvrimVju.js} +2 -2
- package/dist/{paths-Cla6y5eD.js.map → paths-DvrimVju.js.map} +1 -1
- package/dist/prompt-CyV2d7YW.js +850 -0
- package/dist/prompt-CyV2d7YW.js.map +1 -0
- package/dist/r50k_base-CaCWe6-8.js +50466 -0
- package/dist/r50k_base-CaCWe6-8.js.map +1 -0
- package/dist/registry-B_2v83L7.js +797 -0
- package/dist/registry-B_2v83L7.js.map +1 -0
- package/dist/{server-CsVIHpFX.js → server-BGqhE4N_.js} +1647 -45
- package/dist/server-BGqhE4N_.js.map +1 -0
- package/dist/start-Cxl5pgll.js +27379 -0
- package/dist/start-Cxl5pgll.js.map +1 -0
- package/dist/{token-D1pIdFn1.js → token-BCdEIfN_.js} +12 -6
- package/dist/token-BCdEIfN_.js.map +1 -0
- package/dist/{utils-BOfWR1uT.js → utils-DXuuBUT_.js} +14 -6
- package/dist/utils-DXuuBUT_.js.map +1 -0
- package/package.json +1 -1
- package/dist/server-CsVIHpFX.js.map +0 -1
- package/dist/start-BpU8ZccW.js +0 -268
- package/dist/start-BpU8ZccW.js.map +0 -1
- package/dist/token-D1pIdFn1.js.map +0 -1
- package/dist/utils-BOfWR1uT.js.map +0 -1
|
@@ -1,16 +1,1368 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import { consola } from "./dist-B3jIqeb6.js";
|
|
2
|
+
import { PATHS } from "./paths-DvrimVju.js";
|
|
3
|
+
import { COMPACT_AUTO_CONTINUE, COMPACT_REQUEST, HTTPError, cacheModels, compactAutoContinuePromptStarts, compactMessageSections, compactSummaryPromptStart, compactSystemPromptStarts, compactTextOnlyGuard, copilotBaseUrl, copilotHeaders, forwardError, generateRequestIdFromPayload, getCopilotUsage, getRootSessionId, getUUID, isNullish, parseUserIdMetadata, prepareForCompact, prepareInteractionHeaders, prepareMessageProxyHeaders, requestContext, resolveTraceId, sleep, state } from "./utils-DXuuBUT_.js";
|
|
4
|
+
import { getAnthropicApiKey, getClaudeTokenMultiplier, getConfig, getExtraPromptForModel, getProviderConfig, getReasoningEffortForModel, getSmallModel, isMessagesApiEnabled, isResponsesApiContextManagementModel, isResponsesApiWebSearchEnabled } from "./config-D3dkAXQE.js";
|
|
5
|
+
import util from "node:util";
|
|
5
6
|
import path from "node:path";
|
|
6
|
-
import { Hono } from "hono";
|
|
7
|
-
import { cors } from "hono/cors";
|
|
8
|
-
import { logger } from "hono/logger";
|
|
9
7
|
import fs, { readFileSync } from "node:fs";
|
|
10
|
-
import { streamSSE } from "hono/streaming";
|
|
11
|
-
import util from "node:util";
|
|
12
|
-
import { events } from "fetch-event-stream";
|
|
13
8
|
|
|
9
|
+
//#region node_modules/hono/dist/compose.js
|
|
10
|
+
var compose = (middleware, onError, onNotFound) => {
|
|
11
|
+
return (context, next) => {
|
|
12
|
+
let index = -1;
|
|
13
|
+
return dispatch(0);
|
|
14
|
+
async function dispatch(i) {
|
|
15
|
+
if (i <= index) throw new Error("next() called multiple times");
|
|
16
|
+
index = i;
|
|
17
|
+
let res;
|
|
18
|
+
let isError = false;
|
|
19
|
+
let handler;
|
|
20
|
+
if (middleware[i]) {
|
|
21
|
+
handler = middleware[i][0][0];
|
|
22
|
+
context.req.routeIndex = i;
|
|
23
|
+
} else handler = i === middleware.length && next || void 0;
|
|
24
|
+
if (handler) try {
|
|
25
|
+
res = await handler(context, () => dispatch(i + 1));
|
|
26
|
+
} catch (err) {
|
|
27
|
+
if (err instanceof Error && onError) {
|
|
28
|
+
context.error = err;
|
|
29
|
+
res = await onError(err, context);
|
|
30
|
+
isError = true;
|
|
31
|
+
} else throw err;
|
|
32
|
+
}
|
|
33
|
+
else if (context.finalized === false && onNotFound) res = await onNotFound(context);
|
|
34
|
+
if (res && (context.finalized === false || isError)) context.res = res;
|
|
35
|
+
return context;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region node_modules/hono/dist/request/constants.js
|
|
42
|
+
var GET_MATCH_RESULT = Symbol();
|
|
43
|
+
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region node_modules/hono/dist/utils/body.js
|
|
46
|
+
var parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {
|
|
47
|
+
const { all = false, dot = false } = options;
|
|
48
|
+
const contentType = (request instanceof HonoRequest ? request.raw.headers : request.headers).get("Content-Type");
|
|
49
|
+
if (contentType?.startsWith("multipart/form-data") || contentType?.startsWith("application/x-www-form-urlencoded")) return parseFormData(request, {
|
|
50
|
+
all,
|
|
51
|
+
dot
|
|
52
|
+
});
|
|
53
|
+
return {};
|
|
54
|
+
};
|
|
55
|
+
async function parseFormData(request, options) {
|
|
56
|
+
const formData = await request.formData();
|
|
57
|
+
if (formData) return convertFormDataToBodyData(formData, options);
|
|
58
|
+
return {};
|
|
59
|
+
}
|
|
60
|
+
function convertFormDataToBodyData(formData, options) {
|
|
61
|
+
const form = /* @__PURE__ */ Object.create(null);
|
|
62
|
+
formData.forEach((value, key) => {
|
|
63
|
+
if (!(options.all || key.endsWith("[]"))) form[key] = value;
|
|
64
|
+
else handleParsingAllValues(form, key, value);
|
|
65
|
+
});
|
|
66
|
+
if (options.dot) Object.entries(form).forEach(([key, value]) => {
|
|
67
|
+
if (key.includes(".")) {
|
|
68
|
+
handleParsingNestedValues(form, key, value);
|
|
69
|
+
delete form[key];
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return form;
|
|
73
|
+
}
|
|
74
|
+
var handleParsingAllValues = (form, key, value) => {
|
|
75
|
+
if (form[key] !== void 0) if (Array.isArray(form[key])) form[key].push(value);
|
|
76
|
+
else form[key] = [form[key], value];
|
|
77
|
+
else if (!key.endsWith("[]")) form[key] = value;
|
|
78
|
+
else form[key] = [value];
|
|
79
|
+
};
|
|
80
|
+
var handleParsingNestedValues = (form, key, value) => {
|
|
81
|
+
let nestedForm = form;
|
|
82
|
+
const keys = key.split(".");
|
|
83
|
+
keys.forEach((key2, index) => {
|
|
84
|
+
if (index === keys.length - 1) nestedForm[key2] = value;
|
|
85
|
+
else {
|
|
86
|
+
if (!nestedForm[key2] || typeof nestedForm[key2] !== "object" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) nestedForm[key2] = /* @__PURE__ */ Object.create(null);
|
|
87
|
+
nestedForm = nestedForm[key2];
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
//#endregion
|
|
93
|
+
//#region node_modules/hono/dist/utils/url.js
|
|
94
|
+
var splitPath = (path$1) => {
|
|
95
|
+
const paths = path$1.split("/");
|
|
96
|
+
if (paths[0] === "") paths.shift();
|
|
97
|
+
return paths;
|
|
98
|
+
};
|
|
99
|
+
var splitRoutingPath = (routePath) => {
|
|
100
|
+
const { groups, path: path$1 } = extractGroupsFromPath(routePath);
|
|
101
|
+
const paths = splitPath(path$1);
|
|
102
|
+
return replaceGroupMarks(paths, groups);
|
|
103
|
+
};
|
|
104
|
+
var extractGroupsFromPath = (path$1) => {
|
|
105
|
+
const groups = [];
|
|
106
|
+
path$1 = path$1.replace(/\{[^}]+\}/g, (match, index) => {
|
|
107
|
+
const mark = `@${index}`;
|
|
108
|
+
groups.push([mark, match]);
|
|
109
|
+
return mark;
|
|
110
|
+
});
|
|
111
|
+
return {
|
|
112
|
+
groups,
|
|
113
|
+
path: path$1
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
var replaceGroupMarks = (paths, groups) => {
|
|
117
|
+
for (let i = groups.length - 1; i >= 0; i--) {
|
|
118
|
+
const [mark] = groups[i];
|
|
119
|
+
for (let j = paths.length - 1; j >= 0; j--) if (paths[j].includes(mark)) {
|
|
120
|
+
paths[j] = paths[j].replace(mark, groups[i][1]);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return paths;
|
|
125
|
+
};
|
|
126
|
+
var patternCache = {};
|
|
127
|
+
var getPattern = (label, next) => {
|
|
128
|
+
if (label === "*") return "*";
|
|
129
|
+
const match = label.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);
|
|
130
|
+
if (match) {
|
|
131
|
+
const cacheKey = `${label}#${next}`;
|
|
132
|
+
if (!patternCache[cacheKey]) if (match[2]) patternCache[cacheKey] = next && next[0] !== ":" && next[0] !== "*" ? [
|
|
133
|
+
cacheKey,
|
|
134
|
+
match[1],
|
|
135
|
+
/* @__PURE__ */ new RegExp(`^${match[2]}(?=/${next})`)
|
|
136
|
+
] : [
|
|
137
|
+
label,
|
|
138
|
+
match[1],
|
|
139
|
+
/* @__PURE__ */ new RegExp(`^${match[2]}$`)
|
|
140
|
+
];
|
|
141
|
+
else patternCache[cacheKey] = [
|
|
142
|
+
label,
|
|
143
|
+
match[1],
|
|
144
|
+
true
|
|
145
|
+
];
|
|
146
|
+
return patternCache[cacheKey];
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
};
|
|
150
|
+
var tryDecode = (str, decoder) => {
|
|
151
|
+
try {
|
|
152
|
+
return decoder(str);
|
|
153
|
+
} catch {
|
|
154
|
+
return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {
|
|
155
|
+
try {
|
|
156
|
+
return decoder(match);
|
|
157
|
+
} catch {
|
|
158
|
+
return match;
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
var tryDecodeURI = (str) => tryDecode(str, decodeURI);
|
|
164
|
+
var getPath = (request) => {
|
|
165
|
+
const url = request.url;
|
|
166
|
+
const start = url.indexOf("/", url.indexOf(":") + 4);
|
|
167
|
+
let i = start;
|
|
168
|
+
for (; i < url.length; i++) {
|
|
169
|
+
const charCode = url.charCodeAt(i);
|
|
170
|
+
if (charCode === 37) {
|
|
171
|
+
const queryIndex = url.indexOf("?", i);
|
|
172
|
+
const path$1 = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);
|
|
173
|
+
return tryDecodeURI(path$1.includes("%25") ? path$1.replace(/%25/g, "%2525") : path$1);
|
|
174
|
+
} else if (charCode === 63) break;
|
|
175
|
+
}
|
|
176
|
+
return url.slice(start, i);
|
|
177
|
+
};
|
|
178
|
+
var getPathNoStrict = (request) => {
|
|
179
|
+
const result = getPath(request);
|
|
180
|
+
return result.length > 1 && result.at(-1) === "/" ? result.slice(0, -1) : result;
|
|
181
|
+
};
|
|
182
|
+
var mergePath = (base, sub, ...rest) => {
|
|
183
|
+
if (rest.length) sub = mergePath(sub, ...rest);
|
|
184
|
+
return `${base?.[0] === "/" ? "" : "/"}${base}${sub === "/" ? "" : `${base?.at(-1) === "/" ? "" : "/"}${sub?.[0] === "/" ? sub.slice(1) : sub}`}`;
|
|
185
|
+
};
|
|
186
|
+
var checkOptionalParameter = (path$1) => {
|
|
187
|
+
if (path$1.charCodeAt(path$1.length - 1) !== 63 || !path$1.includes(":")) return null;
|
|
188
|
+
const segments = path$1.split("/");
|
|
189
|
+
const results = [];
|
|
190
|
+
let basePath = "";
|
|
191
|
+
segments.forEach((segment) => {
|
|
192
|
+
if (segment !== "" && !/\:/.test(segment)) basePath += "/" + segment;
|
|
193
|
+
else if (/\:/.test(segment)) if (/\?/.test(segment)) {
|
|
194
|
+
if (results.length === 0 && basePath === "") results.push("/");
|
|
195
|
+
else results.push(basePath);
|
|
196
|
+
const optionalSegment = segment.replace("?", "");
|
|
197
|
+
basePath += "/" + optionalSegment;
|
|
198
|
+
results.push(basePath);
|
|
199
|
+
} else basePath += "/" + segment;
|
|
200
|
+
});
|
|
201
|
+
return results.filter((v, i, a) => a.indexOf(v) === i);
|
|
202
|
+
};
|
|
203
|
+
var _decodeURI = (value) => {
|
|
204
|
+
if (!/[%+]/.test(value)) return value;
|
|
205
|
+
if (value.indexOf("+") !== -1) value = value.replace(/\+/g, " ");
|
|
206
|
+
return value.indexOf("%") !== -1 ? tryDecode(value, decodeURIComponent_) : value;
|
|
207
|
+
};
|
|
208
|
+
var _getQueryParam = (url, key, multiple) => {
|
|
209
|
+
let encoded;
|
|
210
|
+
if (!multiple && key && !/[%+]/.test(key)) {
|
|
211
|
+
let keyIndex2 = url.indexOf(`?${key}`, 8);
|
|
212
|
+
if (keyIndex2 === -1) keyIndex2 = url.indexOf(`&${key}`, 8);
|
|
213
|
+
while (keyIndex2 !== -1) {
|
|
214
|
+
const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);
|
|
215
|
+
if (trailingKeyCode === 61) {
|
|
216
|
+
const valueIndex = keyIndex2 + key.length + 2;
|
|
217
|
+
const endIndex = url.indexOf("&", valueIndex);
|
|
218
|
+
return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));
|
|
219
|
+
} else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) return "";
|
|
220
|
+
keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);
|
|
221
|
+
}
|
|
222
|
+
encoded = /[%+]/.test(url);
|
|
223
|
+
if (!encoded) return;
|
|
224
|
+
}
|
|
225
|
+
const results = {};
|
|
226
|
+
encoded ??= /[%+]/.test(url);
|
|
227
|
+
let keyIndex = url.indexOf("?", 8);
|
|
228
|
+
while (keyIndex !== -1) {
|
|
229
|
+
const nextKeyIndex = url.indexOf("&", keyIndex + 1);
|
|
230
|
+
let valueIndex = url.indexOf("=", keyIndex);
|
|
231
|
+
if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) valueIndex = -1;
|
|
232
|
+
let name = url.slice(keyIndex + 1, valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex);
|
|
233
|
+
if (encoded) name = _decodeURI(name);
|
|
234
|
+
keyIndex = nextKeyIndex;
|
|
235
|
+
if (name === "") continue;
|
|
236
|
+
let value;
|
|
237
|
+
if (valueIndex === -1) value = "";
|
|
238
|
+
else {
|
|
239
|
+
value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);
|
|
240
|
+
if (encoded) value = _decodeURI(value);
|
|
241
|
+
}
|
|
242
|
+
if (multiple) {
|
|
243
|
+
if (!(results[name] && Array.isArray(results[name]))) results[name] = [];
|
|
244
|
+
results[name].push(value);
|
|
245
|
+
} else results[name] ??= value;
|
|
246
|
+
}
|
|
247
|
+
return key ? results[key] : results;
|
|
248
|
+
};
|
|
249
|
+
var getQueryParam = _getQueryParam;
|
|
250
|
+
var getQueryParams = (url, key) => {
|
|
251
|
+
return _getQueryParam(url, key, true);
|
|
252
|
+
};
|
|
253
|
+
var decodeURIComponent_ = decodeURIComponent;
|
|
254
|
+
|
|
255
|
+
//#endregion
|
|
256
|
+
//#region node_modules/hono/dist/request.js
|
|
257
|
+
var tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);
|
|
258
|
+
var HonoRequest = class {
|
|
259
|
+
raw;
|
|
260
|
+
#validatedData;
|
|
261
|
+
#matchResult;
|
|
262
|
+
routeIndex = 0;
|
|
263
|
+
path;
|
|
264
|
+
bodyCache = {};
|
|
265
|
+
constructor(request, path$1 = "/", matchResult = [[]]) {
|
|
266
|
+
this.raw = request;
|
|
267
|
+
this.path = path$1;
|
|
268
|
+
this.#matchResult = matchResult;
|
|
269
|
+
this.#validatedData = {};
|
|
270
|
+
}
|
|
271
|
+
param(key) {
|
|
272
|
+
return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();
|
|
273
|
+
}
|
|
274
|
+
#getDecodedParam(key) {
|
|
275
|
+
const paramKey = this.#matchResult[0][this.routeIndex][1][key];
|
|
276
|
+
const param = this.#getParamValue(paramKey);
|
|
277
|
+
return param && /\%/.test(param) ? tryDecodeURIComponent(param) : param;
|
|
278
|
+
}
|
|
279
|
+
#getAllDecodedParams() {
|
|
280
|
+
const decoded = {};
|
|
281
|
+
const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);
|
|
282
|
+
for (const key of keys) {
|
|
283
|
+
const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);
|
|
284
|
+
if (value !== void 0) decoded[key] = /\%/.test(value) ? tryDecodeURIComponent(value) : value;
|
|
285
|
+
}
|
|
286
|
+
return decoded;
|
|
287
|
+
}
|
|
288
|
+
#getParamValue(paramKey) {
|
|
289
|
+
return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;
|
|
290
|
+
}
|
|
291
|
+
query(key) {
|
|
292
|
+
return getQueryParam(this.url, key);
|
|
293
|
+
}
|
|
294
|
+
queries(key) {
|
|
295
|
+
return getQueryParams(this.url, key);
|
|
296
|
+
}
|
|
297
|
+
header(name) {
|
|
298
|
+
if (name) return this.raw.headers.get(name) ?? void 0;
|
|
299
|
+
const headerData = {};
|
|
300
|
+
this.raw.headers.forEach((value, key) => {
|
|
301
|
+
headerData[key] = value;
|
|
302
|
+
});
|
|
303
|
+
return headerData;
|
|
304
|
+
}
|
|
305
|
+
async parseBody(options) {
|
|
306
|
+
return this.bodyCache.parsedBody ??= await parseBody(this, options);
|
|
307
|
+
}
|
|
308
|
+
#cachedBody = (key) => {
|
|
309
|
+
const { bodyCache, raw: raw$1 } = this;
|
|
310
|
+
const cachedBody = bodyCache[key];
|
|
311
|
+
if (cachedBody) return cachedBody;
|
|
312
|
+
const anyCachedKey = Object.keys(bodyCache)[0];
|
|
313
|
+
if (anyCachedKey) return bodyCache[anyCachedKey].then((body) => {
|
|
314
|
+
if (anyCachedKey === "json") body = JSON.stringify(body);
|
|
315
|
+
return new Response(body)[key]();
|
|
316
|
+
});
|
|
317
|
+
return bodyCache[key] = raw$1[key]();
|
|
318
|
+
};
|
|
319
|
+
json() {
|
|
320
|
+
return this.#cachedBody("text").then((text) => JSON.parse(text));
|
|
321
|
+
}
|
|
322
|
+
text() {
|
|
323
|
+
return this.#cachedBody("text");
|
|
324
|
+
}
|
|
325
|
+
arrayBuffer() {
|
|
326
|
+
return this.#cachedBody("arrayBuffer");
|
|
327
|
+
}
|
|
328
|
+
blob() {
|
|
329
|
+
return this.#cachedBody("blob");
|
|
330
|
+
}
|
|
331
|
+
formData() {
|
|
332
|
+
return this.#cachedBody("formData");
|
|
333
|
+
}
|
|
334
|
+
addValidatedData(target, data) {
|
|
335
|
+
this.#validatedData[target] = data;
|
|
336
|
+
}
|
|
337
|
+
valid(target) {
|
|
338
|
+
return this.#validatedData[target];
|
|
339
|
+
}
|
|
340
|
+
get url() {
|
|
341
|
+
return this.raw.url;
|
|
342
|
+
}
|
|
343
|
+
get method() {
|
|
344
|
+
return this.raw.method;
|
|
345
|
+
}
|
|
346
|
+
get [GET_MATCH_RESULT]() {
|
|
347
|
+
return this.#matchResult;
|
|
348
|
+
}
|
|
349
|
+
get matchedRoutes() {
|
|
350
|
+
return this.#matchResult[0].map(([[, route]]) => route);
|
|
351
|
+
}
|
|
352
|
+
get routePath() {
|
|
353
|
+
return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
//#endregion
|
|
358
|
+
//#region node_modules/hono/dist/utils/html.js
|
|
359
|
+
var HtmlEscapedCallbackPhase = {
|
|
360
|
+
Stringify: 1,
|
|
361
|
+
BeforeStream: 2,
|
|
362
|
+
Stream: 3
|
|
363
|
+
};
|
|
364
|
+
var raw = (value, callbacks) => {
|
|
365
|
+
const escapedString = new String(value);
|
|
366
|
+
escapedString.isEscaped = true;
|
|
367
|
+
escapedString.callbacks = callbacks;
|
|
368
|
+
return escapedString;
|
|
369
|
+
};
|
|
370
|
+
var resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {
|
|
371
|
+
if (typeof str === "object" && !(str instanceof String)) {
|
|
372
|
+
if (!(str instanceof Promise)) str = str.toString();
|
|
373
|
+
if (str instanceof Promise) str = await str;
|
|
374
|
+
}
|
|
375
|
+
const callbacks = str.callbacks;
|
|
376
|
+
if (!callbacks?.length) return Promise.resolve(str);
|
|
377
|
+
if (buffer) buffer[0] += str;
|
|
378
|
+
else buffer = [str];
|
|
379
|
+
const resStr = Promise.all(callbacks.map((c) => c({
|
|
380
|
+
phase,
|
|
381
|
+
buffer,
|
|
382
|
+
context
|
|
383
|
+
}))).then((res) => Promise.all(res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))).then(() => buffer[0]));
|
|
384
|
+
if (preserveCallbacks) return raw(await resStr, callbacks);
|
|
385
|
+
else return resStr;
|
|
386
|
+
};
|
|
387
|
+
|
|
388
|
+
//#endregion
|
|
389
|
+
//#region node_modules/hono/dist/context.js
|
|
390
|
+
var TEXT_PLAIN = "text/plain; charset=UTF-8";
|
|
391
|
+
var setDefaultContentType = (contentType, headers) => {
|
|
392
|
+
return {
|
|
393
|
+
"Content-Type": contentType,
|
|
394
|
+
...headers
|
|
395
|
+
};
|
|
396
|
+
};
|
|
397
|
+
var Context = class {
|
|
398
|
+
#rawRequest;
|
|
399
|
+
#req;
|
|
400
|
+
env = {};
|
|
401
|
+
#var;
|
|
402
|
+
finalized = false;
|
|
403
|
+
error;
|
|
404
|
+
#status;
|
|
405
|
+
#executionCtx;
|
|
406
|
+
#res;
|
|
407
|
+
#layout;
|
|
408
|
+
#renderer;
|
|
409
|
+
#notFoundHandler;
|
|
410
|
+
#preparedHeaders;
|
|
411
|
+
#matchResult;
|
|
412
|
+
#path;
|
|
413
|
+
constructor(req, options) {
|
|
414
|
+
this.#rawRequest = req;
|
|
415
|
+
if (options) {
|
|
416
|
+
this.#executionCtx = options.executionCtx;
|
|
417
|
+
this.env = options.env;
|
|
418
|
+
this.#notFoundHandler = options.notFoundHandler;
|
|
419
|
+
this.#path = options.path;
|
|
420
|
+
this.#matchResult = options.matchResult;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
get req() {
|
|
424
|
+
this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);
|
|
425
|
+
return this.#req;
|
|
426
|
+
}
|
|
427
|
+
get event() {
|
|
428
|
+
if (this.#executionCtx && "respondWith" in this.#executionCtx) return this.#executionCtx;
|
|
429
|
+
else throw Error("This context has no FetchEvent");
|
|
430
|
+
}
|
|
431
|
+
get executionCtx() {
|
|
432
|
+
if (this.#executionCtx) return this.#executionCtx;
|
|
433
|
+
else throw Error("This context has no ExecutionContext");
|
|
434
|
+
}
|
|
435
|
+
get res() {
|
|
436
|
+
return this.#res ||= new Response(null, { headers: this.#preparedHeaders ??= new Headers() });
|
|
437
|
+
}
|
|
438
|
+
set res(_res) {
|
|
439
|
+
if (this.#res && _res) {
|
|
440
|
+
_res = new Response(_res.body, _res);
|
|
441
|
+
for (const [k, v] of this.#res.headers.entries()) {
|
|
442
|
+
if (k === "content-type") continue;
|
|
443
|
+
if (k === "set-cookie") {
|
|
444
|
+
const cookies = this.#res.headers.getSetCookie();
|
|
445
|
+
_res.headers.delete("set-cookie");
|
|
446
|
+
for (const cookie of cookies) _res.headers.append("set-cookie", cookie);
|
|
447
|
+
} else _res.headers.set(k, v);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
this.#res = _res;
|
|
451
|
+
this.finalized = true;
|
|
452
|
+
}
|
|
453
|
+
render = (...args) => {
|
|
454
|
+
this.#renderer ??= (content) => this.html(content);
|
|
455
|
+
return this.#renderer(...args);
|
|
456
|
+
};
|
|
457
|
+
setLayout = (layout) => this.#layout = layout;
|
|
458
|
+
getLayout = () => this.#layout;
|
|
459
|
+
setRenderer = (renderer) => {
|
|
460
|
+
this.#renderer = renderer;
|
|
461
|
+
};
|
|
462
|
+
header = (name, value, options) => {
|
|
463
|
+
if (this.finalized) this.#res = new Response(this.#res.body, this.#res);
|
|
464
|
+
const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();
|
|
465
|
+
if (value === void 0) headers.delete(name);
|
|
466
|
+
else if (options?.append) headers.append(name, value);
|
|
467
|
+
else headers.set(name, value);
|
|
468
|
+
};
|
|
469
|
+
status = (status) => {
|
|
470
|
+
this.#status = status;
|
|
471
|
+
};
|
|
472
|
+
set = (key, value) => {
|
|
473
|
+
this.#var ??= /* @__PURE__ */ new Map();
|
|
474
|
+
this.#var.set(key, value);
|
|
475
|
+
};
|
|
476
|
+
get = (key) => {
|
|
477
|
+
return this.#var ? this.#var.get(key) : void 0;
|
|
478
|
+
};
|
|
479
|
+
get var() {
|
|
480
|
+
if (!this.#var) return {};
|
|
481
|
+
return Object.fromEntries(this.#var);
|
|
482
|
+
}
|
|
483
|
+
#newResponse(data, arg, headers) {
|
|
484
|
+
const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();
|
|
485
|
+
if (typeof arg === "object" && "headers" in arg) {
|
|
486
|
+
const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);
|
|
487
|
+
for (const [key, value] of argHeaders) if (key.toLowerCase() === "set-cookie") responseHeaders.append(key, value);
|
|
488
|
+
else responseHeaders.set(key, value);
|
|
489
|
+
}
|
|
490
|
+
if (headers) for (const [k, v] of Object.entries(headers)) if (typeof v === "string") responseHeaders.set(k, v);
|
|
491
|
+
else {
|
|
492
|
+
responseHeaders.delete(k);
|
|
493
|
+
for (const v2 of v) responseHeaders.append(k, v2);
|
|
494
|
+
}
|
|
495
|
+
const status = typeof arg === "number" ? arg : arg?.status ?? this.#status;
|
|
496
|
+
return new Response(data, {
|
|
497
|
+
status,
|
|
498
|
+
headers: responseHeaders
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
newResponse = (...args) => this.#newResponse(...args);
|
|
502
|
+
body = (data, arg, headers) => this.#newResponse(data, arg, headers);
|
|
503
|
+
text = (text, arg, headers) => {
|
|
504
|
+
return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(text, arg, setDefaultContentType(TEXT_PLAIN, headers));
|
|
505
|
+
};
|
|
506
|
+
json = (object, arg, headers) => {
|
|
507
|
+
return this.#newResponse(JSON.stringify(object), arg, setDefaultContentType("application/json", headers));
|
|
508
|
+
};
|
|
509
|
+
html = (html, arg, headers) => {
|
|
510
|
+
const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType("text/html; charset=UTF-8", headers));
|
|
511
|
+
return typeof html === "object" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);
|
|
512
|
+
};
|
|
513
|
+
redirect = (location, status) => {
|
|
514
|
+
const locationString = String(location);
|
|
515
|
+
this.header("Location", !/[^\x00-\xFF]/.test(locationString) ? locationString : encodeURI(locationString));
|
|
516
|
+
return this.newResponse(null, status ?? 302);
|
|
517
|
+
};
|
|
518
|
+
notFound = () => {
|
|
519
|
+
this.#notFoundHandler ??= () => new Response();
|
|
520
|
+
return this.#notFoundHandler(this);
|
|
521
|
+
};
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
//#endregion
|
|
525
|
+
//#region node_modules/hono/dist/router.js
|
|
526
|
+
var METHOD_NAME_ALL = "ALL";
|
|
527
|
+
var METHOD_NAME_ALL_LOWERCASE = "all";
|
|
528
|
+
var METHODS = [
|
|
529
|
+
"get",
|
|
530
|
+
"post",
|
|
531
|
+
"put",
|
|
532
|
+
"delete",
|
|
533
|
+
"options",
|
|
534
|
+
"patch"
|
|
535
|
+
];
|
|
536
|
+
var MESSAGE_MATCHER_IS_ALREADY_BUILT = "Can not add a route since the matcher is already built.";
|
|
537
|
+
var UnsupportedPathError = class extends Error {};
|
|
538
|
+
|
|
539
|
+
//#endregion
|
|
540
|
+
//#region node_modules/hono/dist/utils/constants.js
|
|
541
|
+
var COMPOSED_HANDLER = "__COMPOSED_HANDLER";
|
|
542
|
+
|
|
543
|
+
//#endregion
|
|
544
|
+
//#region node_modules/hono/dist/hono-base.js
|
|
545
|
+
var notFoundHandler = (c) => {
|
|
546
|
+
return c.text("404 Not Found", 404);
|
|
547
|
+
};
|
|
548
|
+
var errorHandler = (err, c) => {
|
|
549
|
+
if ("getResponse" in err) {
|
|
550
|
+
const res = err.getResponse();
|
|
551
|
+
return c.newResponse(res.body, res);
|
|
552
|
+
}
|
|
553
|
+
console.error(err);
|
|
554
|
+
return c.text("Internal Server Error", 500);
|
|
555
|
+
};
|
|
556
|
+
var Hono$1 = class {
|
|
557
|
+
get;
|
|
558
|
+
post;
|
|
559
|
+
put;
|
|
560
|
+
delete;
|
|
561
|
+
options;
|
|
562
|
+
patch;
|
|
563
|
+
all;
|
|
564
|
+
on;
|
|
565
|
+
use;
|
|
566
|
+
router;
|
|
567
|
+
getPath;
|
|
568
|
+
_basePath = "/";
|
|
569
|
+
#path = "/";
|
|
570
|
+
routes = [];
|
|
571
|
+
constructor(options = {}) {
|
|
572
|
+
[...METHODS, METHOD_NAME_ALL_LOWERCASE].forEach((method) => {
|
|
573
|
+
this[method] = (args1, ...args) => {
|
|
574
|
+
if (typeof args1 === "string") this.#path = args1;
|
|
575
|
+
else this.#addRoute(method, this.#path, args1);
|
|
576
|
+
args.forEach((handler) => {
|
|
577
|
+
this.#addRoute(method, this.#path, handler);
|
|
578
|
+
});
|
|
579
|
+
return this;
|
|
580
|
+
};
|
|
581
|
+
});
|
|
582
|
+
this.on = (method, path$1, ...handlers) => {
|
|
583
|
+
for (const p of [path$1].flat()) {
|
|
584
|
+
this.#path = p;
|
|
585
|
+
for (const m of [method].flat()) handlers.map((handler) => {
|
|
586
|
+
this.#addRoute(m.toUpperCase(), this.#path, handler);
|
|
587
|
+
});
|
|
588
|
+
}
|
|
589
|
+
return this;
|
|
590
|
+
};
|
|
591
|
+
this.use = (arg1, ...handlers) => {
|
|
592
|
+
if (typeof arg1 === "string") this.#path = arg1;
|
|
593
|
+
else {
|
|
594
|
+
this.#path = "*";
|
|
595
|
+
handlers.unshift(arg1);
|
|
596
|
+
}
|
|
597
|
+
handlers.forEach((handler) => {
|
|
598
|
+
this.#addRoute(METHOD_NAME_ALL, this.#path, handler);
|
|
599
|
+
});
|
|
600
|
+
return this;
|
|
601
|
+
};
|
|
602
|
+
const { strict,...optionsWithoutStrict } = options;
|
|
603
|
+
Object.assign(this, optionsWithoutStrict);
|
|
604
|
+
this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;
|
|
605
|
+
}
|
|
606
|
+
#clone() {
|
|
607
|
+
const clone = new Hono$1({
|
|
608
|
+
router: this.router,
|
|
609
|
+
getPath: this.getPath
|
|
610
|
+
});
|
|
611
|
+
clone.errorHandler = this.errorHandler;
|
|
612
|
+
clone.#notFoundHandler = this.#notFoundHandler;
|
|
613
|
+
clone.routes = this.routes;
|
|
614
|
+
return clone;
|
|
615
|
+
}
|
|
616
|
+
#notFoundHandler = notFoundHandler;
|
|
617
|
+
errorHandler = errorHandler;
|
|
618
|
+
route(path$1, app) {
|
|
619
|
+
const subApp = this.basePath(path$1);
|
|
620
|
+
app.routes.map((r) => {
|
|
621
|
+
let handler;
|
|
622
|
+
if (app.errorHandler === errorHandler) handler = r.handler;
|
|
623
|
+
else {
|
|
624
|
+
handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;
|
|
625
|
+
handler[COMPOSED_HANDLER] = r.handler;
|
|
626
|
+
}
|
|
627
|
+
subApp.#addRoute(r.method, r.path, handler);
|
|
628
|
+
});
|
|
629
|
+
return this;
|
|
630
|
+
}
|
|
631
|
+
basePath(path$1) {
|
|
632
|
+
const subApp = this.#clone();
|
|
633
|
+
subApp._basePath = mergePath(this._basePath, path$1);
|
|
634
|
+
return subApp;
|
|
635
|
+
}
|
|
636
|
+
onError = (handler) => {
|
|
637
|
+
this.errorHandler = handler;
|
|
638
|
+
return this;
|
|
639
|
+
};
|
|
640
|
+
notFound = (handler) => {
|
|
641
|
+
this.#notFoundHandler = handler;
|
|
642
|
+
return this;
|
|
643
|
+
};
|
|
644
|
+
mount(path$1, applicationHandler, options) {
|
|
645
|
+
let replaceRequest;
|
|
646
|
+
let optionHandler;
|
|
647
|
+
if (options) if (typeof options === "function") optionHandler = options;
|
|
648
|
+
else {
|
|
649
|
+
optionHandler = options.optionHandler;
|
|
650
|
+
if (options.replaceRequest === false) replaceRequest = (request) => request;
|
|
651
|
+
else replaceRequest = options.replaceRequest;
|
|
652
|
+
}
|
|
653
|
+
const getOptions = optionHandler ? (c) => {
|
|
654
|
+
const options2 = optionHandler(c);
|
|
655
|
+
return Array.isArray(options2) ? options2 : [options2];
|
|
656
|
+
} : (c) => {
|
|
657
|
+
let executionContext = void 0;
|
|
658
|
+
try {
|
|
659
|
+
executionContext = c.executionCtx;
|
|
660
|
+
} catch {}
|
|
661
|
+
return [c.env, executionContext];
|
|
662
|
+
};
|
|
663
|
+
replaceRequest ||= (() => {
|
|
664
|
+
const mergedPath = mergePath(this._basePath, path$1);
|
|
665
|
+
const pathPrefixLength = mergedPath === "/" ? 0 : mergedPath.length;
|
|
666
|
+
return (request) => {
|
|
667
|
+
const url = new URL(request.url);
|
|
668
|
+
url.pathname = url.pathname.slice(pathPrefixLength) || "/";
|
|
669
|
+
return new Request(url, request);
|
|
670
|
+
};
|
|
671
|
+
})();
|
|
672
|
+
const handler = async (c, next) => {
|
|
673
|
+
const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));
|
|
674
|
+
if (res) return res;
|
|
675
|
+
await next();
|
|
676
|
+
};
|
|
677
|
+
this.#addRoute(METHOD_NAME_ALL, mergePath(path$1, "*"), handler);
|
|
678
|
+
return this;
|
|
679
|
+
}
|
|
680
|
+
#addRoute(method, path$1, handler) {
|
|
681
|
+
method = method.toUpperCase();
|
|
682
|
+
path$1 = mergePath(this._basePath, path$1);
|
|
683
|
+
const r = {
|
|
684
|
+
basePath: this._basePath,
|
|
685
|
+
path: path$1,
|
|
686
|
+
method,
|
|
687
|
+
handler
|
|
688
|
+
};
|
|
689
|
+
this.router.add(method, path$1, [handler, r]);
|
|
690
|
+
this.routes.push(r);
|
|
691
|
+
}
|
|
692
|
+
#handleError(err, c) {
|
|
693
|
+
if (err instanceof Error) return this.errorHandler(err, c);
|
|
694
|
+
throw err;
|
|
695
|
+
}
|
|
696
|
+
#dispatch(request, executionCtx, env, method) {
|
|
697
|
+
if (method === "HEAD") return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, "GET")))();
|
|
698
|
+
const path$1 = this.getPath(request, { env });
|
|
699
|
+
const matchResult = this.router.match(method, path$1);
|
|
700
|
+
const c = new Context(request, {
|
|
701
|
+
path: path$1,
|
|
702
|
+
matchResult,
|
|
703
|
+
env,
|
|
704
|
+
executionCtx,
|
|
705
|
+
notFoundHandler: this.#notFoundHandler
|
|
706
|
+
});
|
|
707
|
+
if (matchResult[0].length === 1) {
|
|
708
|
+
let res;
|
|
709
|
+
try {
|
|
710
|
+
res = matchResult[0][0][0][0](c, async () => {
|
|
711
|
+
c.res = await this.#notFoundHandler(c);
|
|
712
|
+
});
|
|
713
|
+
} catch (err) {
|
|
714
|
+
return this.#handleError(err, c);
|
|
715
|
+
}
|
|
716
|
+
return res instanceof Promise ? res.then((resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);
|
|
717
|
+
}
|
|
718
|
+
const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);
|
|
719
|
+
return (async () => {
|
|
720
|
+
try {
|
|
721
|
+
const context = await composed(c);
|
|
722
|
+
if (!context.finalized) throw new Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");
|
|
723
|
+
return context.res;
|
|
724
|
+
} catch (err) {
|
|
725
|
+
return this.#handleError(err, c);
|
|
726
|
+
}
|
|
727
|
+
})();
|
|
728
|
+
}
|
|
729
|
+
fetch = (request, ...rest) => {
|
|
730
|
+
return this.#dispatch(request, rest[1], rest[0], request.method);
|
|
731
|
+
};
|
|
732
|
+
request = (input, requestInit, Env, executionCtx) => {
|
|
733
|
+
if (input instanceof Request) return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);
|
|
734
|
+
input = input.toString();
|
|
735
|
+
return this.fetch(new Request(/^https?:\/\//.test(input) ? input : `http://localhost${mergePath("/", input)}`, requestInit), Env, executionCtx);
|
|
736
|
+
};
|
|
737
|
+
fire = () => {
|
|
738
|
+
addEventListener("fetch", (event) => {
|
|
739
|
+
event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));
|
|
740
|
+
});
|
|
741
|
+
};
|
|
742
|
+
};
|
|
743
|
+
|
|
744
|
+
//#endregion
|
|
745
|
+
//#region node_modules/hono/dist/router/reg-exp-router/node.js
|
|
746
|
+
var LABEL_REG_EXP_STR = "[^/]+";
|
|
747
|
+
var ONLY_WILDCARD_REG_EXP_STR = ".*";
|
|
748
|
+
var TAIL_WILDCARD_REG_EXP_STR = "(?:|/.*)";
|
|
749
|
+
var PATH_ERROR = Symbol();
|
|
750
|
+
var regExpMetaChars = /* @__PURE__ */ new Set(".\\+*[^]$()");
|
|
751
|
+
function compareKey(a, b) {
|
|
752
|
+
if (a.length === 1) return b.length === 1 ? a < b ? -1 : 1 : -1;
|
|
753
|
+
if (b.length === 1) return 1;
|
|
754
|
+
if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) return 1;
|
|
755
|
+
else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) return -1;
|
|
756
|
+
if (a === LABEL_REG_EXP_STR) return 1;
|
|
757
|
+
else if (b === LABEL_REG_EXP_STR) return -1;
|
|
758
|
+
return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;
|
|
759
|
+
}
|
|
760
|
+
var Node$1 = class {
|
|
761
|
+
#index;
|
|
762
|
+
#varIndex;
|
|
763
|
+
#children = /* @__PURE__ */ Object.create(null);
|
|
764
|
+
insert(tokens, index, paramMap, context, pathErrorCheckOnly) {
|
|
765
|
+
if (tokens.length === 0) {
|
|
766
|
+
if (this.#index !== void 0) throw PATH_ERROR;
|
|
767
|
+
if (pathErrorCheckOnly) return;
|
|
768
|
+
this.#index = index;
|
|
769
|
+
return;
|
|
770
|
+
}
|
|
771
|
+
const [token, ...restTokens] = tokens;
|
|
772
|
+
const pattern = token === "*" ? restTokens.length === 0 ? [
|
|
773
|
+
"",
|
|
774
|
+
"",
|
|
775
|
+
ONLY_WILDCARD_REG_EXP_STR
|
|
776
|
+
] : [
|
|
777
|
+
"",
|
|
778
|
+
"",
|
|
779
|
+
LABEL_REG_EXP_STR
|
|
780
|
+
] : token === "/*" ? [
|
|
781
|
+
"",
|
|
782
|
+
"",
|
|
783
|
+
TAIL_WILDCARD_REG_EXP_STR
|
|
784
|
+
] : token.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);
|
|
785
|
+
let node;
|
|
786
|
+
if (pattern) {
|
|
787
|
+
const name = pattern[1];
|
|
788
|
+
let regexpStr = pattern[2] || LABEL_REG_EXP_STR;
|
|
789
|
+
if (name && pattern[2]) {
|
|
790
|
+
if (regexpStr === ".*") throw PATH_ERROR;
|
|
791
|
+
regexpStr = regexpStr.replace(/^\((?!\?:)(?=[^)]+\)$)/, "(?:");
|
|
792
|
+
if (/\((?!\?:)/.test(regexpStr)) throw PATH_ERROR;
|
|
793
|
+
}
|
|
794
|
+
node = this.#children[regexpStr];
|
|
795
|
+
if (!node) {
|
|
796
|
+
if (Object.keys(this.#children).some((k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR)) throw PATH_ERROR;
|
|
797
|
+
if (pathErrorCheckOnly) return;
|
|
798
|
+
node = this.#children[regexpStr] = new Node$1();
|
|
799
|
+
if (name !== "") node.#varIndex = context.varIndex++;
|
|
800
|
+
}
|
|
801
|
+
if (!pathErrorCheckOnly && name !== "") paramMap.push([name, node.#varIndex]);
|
|
802
|
+
} else {
|
|
803
|
+
node = this.#children[token];
|
|
804
|
+
if (!node) {
|
|
805
|
+
if (Object.keys(this.#children).some((k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR)) throw PATH_ERROR;
|
|
806
|
+
if (pathErrorCheckOnly) return;
|
|
807
|
+
node = this.#children[token] = new Node$1();
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);
|
|
811
|
+
}
|
|
812
|
+
buildRegExpStr() {
|
|
813
|
+
const strList = Object.keys(this.#children).sort(compareKey).map((k) => {
|
|
814
|
+
const c = this.#children[k];
|
|
815
|
+
return (typeof c.#varIndex === "number" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\${k}` : k) + c.buildRegExpStr();
|
|
816
|
+
});
|
|
817
|
+
if (typeof this.#index === "number") strList.unshift(`#${this.#index}`);
|
|
818
|
+
if (strList.length === 0) return "";
|
|
819
|
+
if (strList.length === 1) return strList[0];
|
|
820
|
+
return "(?:" + strList.join("|") + ")";
|
|
821
|
+
}
|
|
822
|
+
};
|
|
823
|
+
|
|
824
|
+
//#endregion
|
|
825
|
+
//#region node_modules/hono/dist/router/reg-exp-router/trie.js
|
|
826
|
+
var Trie = class {
|
|
827
|
+
#context = { varIndex: 0 };
|
|
828
|
+
#root = new Node$1();
|
|
829
|
+
insert(path$1, index, pathErrorCheckOnly) {
|
|
830
|
+
const paramAssoc = [];
|
|
831
|
+
const groups = [];
|
|
832
|
+
for (let i = 0;;) {
|
|
833
|
+
let replaced = false;
|
|
834
|
+
path$1 = path$1.replace(/\{[^}]+\}/g, (m) => {
|
|
835
|
+
const mark = `@\\${i}`;
|
|
836
|
+
groups[i] = [mark, m];
|
|
837
|
+
i++;
|
|
838
|
+
replaced = true;
|
|
839
|
+
return mark;
|
|
840
|
+
});
|
|
841
|
+
if (!replaced) break;
|
|
842
|
+
}
|
|
843
|
+
const tokens = path$1.match(/(?::[^\/]+)|(?:\/\*$)|./g) || [];
|
|
844
|
+
for (let i = groups.length - 1; i >= 0; i--) {
|
|
845
|
+
const [mark] = groups[i];
|
|
846
|
+
for (let j = tokens.length - 1; j >= 0; j--) if (tokens[j].indexOf(mark) !== -1) {
|
|
847
|
+
tokens[j] = tokens[j].replace(mark, groups[i][1]);
|
|
848
|
+
break;
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);
|
|
852
|
+
return paramAssoc;
|
|
853
|
+
}
|
|
854
|
+
buildRegExp() {
|
|
855
|
+
let regexp = this.#root.buildRegExpStr();
|
|
856
|
+
if (regexp === "") return [
|
|
857
|
+
/^$/,
|
|
858
|
+
[],
|
|
859
|
+
[]
|
|
860
|
+
];
|
|
861
|
+
let captureIndex = 0;
|
|
862
|
+
const indexReplacementMap = [];
|
|
863
|
+
const paramReplacementMap = [];
|
|
864
|
+
regexp = regexp.replace(/#(\d+)|@(\d+)|\.\*\$/g, (_, handlerIndex, paramIndex) => {
|
|
865
|
+
if (handlerIndex !== void 0) {
|
|
866
|
+
indexReplacementMap[++captureIndex] = Number(handlerIndex);
|
|
867
|
+
return "$()";
|
|
868
|
+
}
|
|
869
|
+
if (paramIndex !== void 0) {
|
|
870
|
+
paramReplacementMap[Number(paramIndex)] = ++captureIndex;
|
|
871
|
+
return "";
|
|
872
|
+
}
|
|
873
|
+
return "";
|
|
874
|
+
});
|
|
875
|
+
return [
|
|
876
|
+
/* @__PURE__ */ new RegExp(`^${regexp}`),
|
|
877
|
+
indexReplacementMap,
|
|
878
|
+
paramReplacementMap
|
|
879
|
+
];
|
|
880
|
+
}
|
|
881
|
+
};
|
|
882
|
+
|
|
883
|
+
//#endregion
|
|
884
|
+
//#region node_modules/hono/dist/router/reg-exp-router/router.js
|
|
885
|
+
var emptyParam = [];
|
|
886
|
+
var nullMatcher = [
|
|
887
|
+
/^$/,
|
|
888
|
+
[],
|
|
889
|
+
/* @__PURE__ */ Object.create(null)
|
|
890
|
+
];
|
|
891
|
+
var wildcardRegExpCache = /* @__PURE__ */ Object.create(null);
|
|
892
|
+
function buildWildcardRegExp(path$1) {
|
|
893
|
+
return wildcardRegExpCache[path$1] ??= /* @__PURE__ */ new RegExp(path$1 === "*" ? "" : `^${path$1.replace(/\/\*$|([.\\+*[^\]$()])/g, (_, metaChar) => metaChar ? `\\${metaChar}` : "(?:|/.*)")}$`);
|
|
894
|
+
}
|
|
895
|
+
function clearWildcardRegExpCache() {
|
|
896
|
+
wildcardRegExpCache = /* @__PURE__ */ Object.create(null);
|
|
897
|
+
}
|
|
898
|
+
function buildMatcherFromPreprocessedRoutes(routes) {
|
|
899
|
+
const trie = new Trie();
|
|
900
|
+
const handlerData = [];
|
|
901
|
+
if (routes.length === 0) return nullMatcher;
|
|
902
|
+
const routesWithStaticPathFlag = routes.map((route) => [!/\*|\/:/.test(route[0]), ...route]).sort(([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length);
|
|
903
|
+
const staticMap = /* @__PURE__ */ Object.create(null);
|
|
904
|
+
for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {
|
|
905
|
+
const [pathErrorCheckOnly, path$1, handlers] = routesWithStaticPathFlag[i];
|
|
906
|
+
if (pathErrorCheckOnly) staticMap[path$1] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];
|
|
907
|
+
else j++;
|
|
908
|
+
let paramAssoc;
|
|
909
|
+
try {
|
|
910
|
+
paramAssoc = trie.insert(path$1, j, pathErrorCheckOnly);
|
|
911
|
+
} catch (e) {
|
|
912
|
+
throw e === PATH_ERROR ? new UnsupportedPathError(path$1) : e;
|
|
913
|
+
}
|
|
914
|
+
if (pathErrorCheckOnly) continue;
|
|
915
|
+
handlerData[j] = handlers.map(([h, paramCount]) => {
|
|
916
|
+
const paramIndexMap = /* @__PURE__ */ Object.create(null);
|
|
917
|
+
paramCount -= 1;
|
|
918
|
+
for (; paramCount >= 0; paramCount--) {
|
|
919
|
+
const [key, value] = paramAssoc[paramCount];
|
|
920
|
+
paramIndexMap[key] = value;
|
|
921
|
+
}
|
|
922
|
+
return [h, paramIndexMap];
|
|
923
|
+
});
|
|
924
|
+
}
|
|
925
|
+
const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();
|
|
926
|
+
for (let i = 0, len = handlerData.length; i < len; i++) for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {
|
|
927
|
+
const map = handlerData[i][j]?.[1];
|
|
928
|
+
if (!map) continue;
|
|
929
|
+
const keys = Object.keys(map);
|
|
930
|
+
for (let k = 0, len3 = keys.length; k < len3; k++) map[keys[k]] = paramReplacementMap[map[keys[k]]];
|
|
931
|
+
}
|
|
932
|
+
const handlerMap = [];
|
|
933
|
+
for (const i in indexReplacementMap) handlerMap[i] = handlerData[indexReplacementMap[i]];
|
|
934
|
+
return [
|
|
935
|
+
regexp,
|
|
936
|
+
handlerMap,
|
|
937
|
+
staticMap
|
|
938
|
+
];
|
|
939
|
+
}
|
|
940
|
+
function findMiddleware(middleware, path$1) {
|
|
941
|
+
if (!middleware) return;
|
|
942
|
+
for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) if (buildWildcardRegExp(k).test(path$1)) return [...middleware[k]];
|
|
943
|
+
}
|
|
944
|
+
var RegExpRouter = class {
|
|
945
|
+
name = "RegExpRouter";
|
|
946
|
+
#middleware;
|
|
947
|
+
#routes;
|
|
948
|
+
constructor() {
|
|
949
|
+
this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };
|
|
950
|
+
this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };
|
|
951
|
+
}
|
|
952
|
+
add(method, path$1, handler) {
|
|
953
|
+
const middleware = this.#middleware;
|
|
954
|
+
const routes = this.#routes;
|
|
955
|
+
if (!middleware || !routes) throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);
|
|
956
|
+
if (!middleware[method]) [middleware, routes].forEach((handlerMap) => {
|
|
957
|
+
handlerMap[method] = /* @__PURE__ */ Object.create(null);
|
|
958
|
+
Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {
|
|
959
|
+
handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];
|
|
960
|
+
});
|
|
961
|
+
});
|
|
962
|
+
if (path$1 === "/*") path$1 = "*";
|
|
963
|
+
const paramCount = (path$1.match(/\/:/g) || []).length;
|
|
964
|
+
if (/\*$/.test(path$1)) {
|
|
965
|
+
const re = buildWildcardRegExp(path$1);
|
|
966
|
+
if (method === METHOD_NAME_ALL) Object.keys(middleware).forEach((m) => {
|
|
967
|
+
middleware[m][path$1] ||= findMiddleware(middleware[m], path$1) || findMiddleware(middleware[METHOD_NAME_ALL], path$1) || [];
|
|
968
|
+
});
|
|
969
|
+
else middleware[method][path$1] ||= findMiddleware(middleware[method], path$1) || findMiddleware(middleware[METHOD_NAME_ALL], path$1) || [];
|
|
970
|
+
Object.keys(middleware).forEach((m) => {
|
|
971
|
+
if (method === METHOD_NAME_ALL || method === m) Object.keys(middleware[m]).forEach((p) => {
|
|
972
|
+
re.test(p) && middleware[m][p].push([handler, paramCount]);
|
|
973
|
+
});
|
|
974
|
+
});
|
|
975
|
+
Object.keys(routes).forEach((m) => {
|
|
976
|
+
if (method === METHOD_NAME_ALL || method === m) Object.keys(routes[m]).forEach((p) => re.test(p) && routes[m][p].push([handler, paramCount]));
|
|
977
|
+
});
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
980
|
+
const paths = checkOptionalParameter(path$1) || [path$1];
|
|
981
|
+
for (let i = 0, len = paths.length; i < len; i++) {
|
|
982
|
+
const path2 = paths[i];
|
|
983
|
+
Object.keys(routes).forEach((m) => {
|
|
984
|
+
if (method === METHOD_NAME_ALL || method === m) {
|
|
985
|
+
routes[m][path2] ||= [...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []];
|
|
986
|
+
routes[m][path2].push([handler, paramCount - len + i + 1]);
|
|
987
|
+
}
|
|
988
|
+
});
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
match(method, path$1) {
|
|
992
|
+
clearWildcardRegExpCache();
|
|
993
|
+
const matchers = this.#buildAllMatchers();
|
|
994
|
+
this.match = (method2, path2) => {
|
|
995
|
+
const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];
|
|
996
|
+
const staticMatch = matcher[2][path2];
|
|
997
|
+
if (staticMatch) return staticMatch;
|
|
998
|
+
const match = path2.match(matcher[0]);
|
|
999
|
+
if (!match) return [[], emptyParam];
|
|
1000
|
+
const index = match.indexOf("", 1);
|
|
1001
|
+
return [matcher[1][index], match];
|
|
1002
|
+
};
|
|
1003
|
+
return this.match(method, path$1);
|
|
1004
|
+
}
|
|
1005
|
+
#buildAllMatchers() {
|
|
1006
|
+
const matchers = /* @__PURE__ */ Object.create(null);
|
|
1007
|
+
Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {
|
|
1008
|
+
matchers[method] ||= this.#buildMatcher(method);
|
|
1009
|
+
});
|
|
1010
|
+
this.#middleware = this.#routes = void 0;
|
|
1011
|
+
return matchers;
|
|
1012
|
+
}
|
|
1013
|
+
#buildMatcher(method) {
|
|
1014
|
+
const routes = [];
|
|
1015
|
+
let hasOwnRoute = method === METHOD_NAME_ALL;
|
|
1016
|
+
[this.#middleware, this.#routes].forEach((r) => {
|
|
1017
|
+
const ownRoute = r[method] ? Object.keys(r[method]).map((path$1) => [path$1, r[method][path$1]]) : [];
|
|
1018
|
+
if (ownRoute.length !== 0) {
|
|
1019
|
+
hasOwnRoute ||= true;
|
|
1020
|
+
routes.push(...ownRoute);
|
|
1021
|
+
} else if (method !== METHOD_NAME_ALL) routes.push(...Object.keys(r[METHOD_NAME_ALL]).map((path$1) => [path$1, r[METHOD_NAME_ALL][path$1]]));
|
|
1022
|
+
});
|
|
1023
|
+
if (!hasOwnRoute) return null;
|
|
1024
|
+
else return buildMatcherFromPreprocessedRoutes(routes);
|
|
1025
|
+
}
|
|
1026
|
+
};
|
|
1027
|
+
|
|
1028
|
+
//#endregion
|
|
1029
|
+
//#region node_modules/hono/dist/router/smart-router/router.js
|
|
1030
|
+
var SmartRouter = class {
|
|
1031
|
+
name = "SmartRouter";
|
|
1032
|
+
#routers = [];
|
|
1033
|
+
#routes = [];
|
|
1034
|
+
constructor(init) {
|
|
1035
|
+
this.#routers = init.routers;
|
|
1036
|
+
}
|
|
1037
|
+
add(method, path$1, handler) {
|
|
1038
|
+
if (!this.#routes) throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);
|
|
1039
|
+
this.#routes.push([
|
|
1040
|
+
method,
|
|
1041
|
+
path$1,
|
|
1042
|
+
handler
|
|
1043
|
+
]);
|
|
1044
|
+
}
|
|
1045
|
+
match(method, path$1) {
|
|
1046
|
+
if (!this.#routes) throw new Error("Fatal error");
|
|
1047
|
+
const routers = this.#routers;
|
|
1048
|
+
const routes = this.#routes;
|
|
1049
|
+
const len = routers.length;
|
|
1050
|
+
let i = 0;
|
|
1051
|
+
let res;
|
|
1052
|
+
for (; i < len; i++) {
|
|
1053
|
+
const router = routers[i];
|
|
1054
|
+
try {
|
|
1055
|
+
for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) router.add(...routes[i2]);
|
|
1056
|
+
res = router.match(method, path$1);
|
|
1057
|
+
} catch (e) {
|
|
1058
|
+
if (e instanceof UnsupportedPathError) continue;
|
|
1059
|
+
throw e;
|
|
1060
|
+
}
|
|
1061
|
+
this.match = router.match.bind(router);
|
|
1062
|
+
this.#routers = [router];
|
|
1063
|
+
this.#routes = void 0;
|
|
1064
|
+
break;
|
|
1065
|
+
}
|
|
1066
|
+
if (i === len) throw new Error("Fatal error");
|
|
1067
|
+
this.name = `SmartRouter + ${this.activeRouter.name}`;
|
|
1068
|
+
return res;
|
|
1069
|
+
}
|
|
1070
|
+
get activeRouter() {
|
|
1071
|
+
if (this.#routes || this.#routers.length !== 1) throw new Error("No active router has been determined yet.");
|
|
1072
|
+
return this.#routers[0];
|
|
1073
|
+
}
|
|
1074
|
+
};
|
|
1075
|
+
|
|
1076
|
+
//#endregion
|
|
1077
|
+
//#region node_modules/hono/dist/router/trie-router/node.js
|
|
1078
|
+
var emptyParams = /* @__PURE__ */ Object.create(null);
|
|
1079
|
+
var Node = class {
|
|
1080
|
+
#methods;
|
|
1081
|
+
#children;
|
|
1082
|
+
#patterns;
|
|
1083
|
+
#order = 0;
|
|
1084
|
+
#params = emptyParams;
|
|
1085
|
+
constructor(method, handler, children) {
|
|
1086
|
+
this.#children = children || /* @__PURE__ */ Object.create(null);
|
|
1087
|
+
this.#methods = [];
|
|
1088
|
+
if (method && handler) {
|
|
1089
|
+
const m = /* @__PURE__ */ Object.create(null);
|
|
1090
|
+
m[method] = {
|
|
1091
|
+
handler,
|
|
1092
|
+
possibleKeys: [],
|
|
1093
|
+
score: 0
|
|
1094
|
+
};
|
|
1095
|
+
this.#methods = [m];
|
|
1096
|
+
}
|
|
1097
|
+
this.#patterns = [];
|
|
1098
|
+
}
|
|
1099
|
+
insert(method, path$1, handler) {
|
|
1100
|
+
this.#order = ++this.#order;
|
|
1101
|
+
let curNode = this;
|
|
1102
|
+
const parts = splitRoutingPath(path$1);
|
|
1103
|
+
const possibleKeys = [];
|
|
1104
|
+
for (let i = 0, len = parts.length; i < len; i++) {
|
|
1105
|
+
const p = parts[i];
|
|
1106
|
+
const nextP = parts[i + 1];
|
|
1107
|
+
const pattern = getPattern(p, nextP);
|
|
1108
|
+
const key = Array.isArray(pattern) ? pattern[0] : p;
|
|
1109
|
+
if (key in curNode.#children) {
|
|
1110
|
+
curNode = curNode.#children[key];
|
|
1111
|
+
if (pattern) possibleKeys.push(pattern[1]);
|
|
1112
|
+
continue;
|
|
1113
|
+
}
|
|
1114
|
+
curNode.#children[key] = new Node();
|
|
1115
|
+
if (pattern) {
|
|
1116
|
+
curNode.#patterns.push(pattern);
|
|
1117
|
+
possibleKeys.push(pattern[1]);
|
|
1118
|
+
}
|
|
1119
|
+
curNode = curNode.#children[key];
|
|
1120
|
+
}
|
|
1121
|
+
curNode.#methods.push({ [method]: {
|
|
1122
|
+
handler,
|
|
1123
|
+
possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),
|
|
1124
|
+
score: this.#order
|
|
1125
|
+
} });
|
|
1126
|
+
return curNode;
|
|
1127
|
+
}
|
|
1128
|
+
#getHandlerSets(node, method, nodeParams, params) {
|
|
1129
|
+
const handlerSets = [];
|
|
1130
|
+
for (let i = 0, len = node.#methods.length; i < len; i++) {
|
|
1131
|
+
const m = node.#methods[i];
|
|
1132
|
+
const handlerSet = m[method] || m[METHOD_NAME_ALL];
|
|
1133
|
+
const processedSet = {};
|
|
1134
|
+
if (handlerSet !== void 0) {
|
|
1135
|
+
handlerSet.params = /* @__PURE__ */ Object.create(null);
|
|
1136
|
+
handlerSets.push(handlerSet);
|
|
1137
|
+
if (nodeParams !== emptyParams || params && params !== emptyParams) for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {
|
|
1138
|
+
const key = handlerSet.possibleKeys[i2];
|
|
1139
|
+
const processed = processedSet[handlerSet.score];
|
|
1140
|
+
handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];
|
|
1141
|
+
processedSet[handlerSet.score] = true;
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
return handlerSets;
|
|
1146
|
+
}
|
|
1147
|
+
search(method, path$1) {
|
|
1148
|
+
const handlerSets = [];
|
|
1149
|
+
this.#params = emptyParams;
|
|
1150
|
+
let curNodes = [this];
|
|
1151
|
+
const parts = splitPath(path$1);
|
|
1152
|
+
const curNodesQueue = [];
|
|
1153
|
+
for (let i = 0, len = parts.length; i < len; i++) {
|
|
1154
|
+
const part = parts[i];
|
|
1155
|
+
const isLast = i === len - 1;
|
|
1156
|
+
const tempNodes = [];
|
|
1157
|
+
for (let j = 0, len2 = curNodes.length; j < len2; j++) {
|
|
1158
|
+
const node = curNodes[j];
|
|
1159
|
+
const nextNode = node.#children[part];
|
|
1160
|
+
if (nextNode) {
|
|
1161
|
+
nextNode.#params = node.#params;
|
|
1162
|
+
if (isLast) {
|
|
1163
|
+
if (nextNode.#children["*"]) handlerSets.push(...this.#getHandlerSets(nextNode.#children["*"], method, node.#params));
|
|
1164
|
+
handlerSets.push(...this.#getHandlerSets(nextNode, method, node.#params));
|
|
1165
|
+
} else tempNodes.push(nextNode);
|
|
1166
|
+
}
|
|
1167
|
+
for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {
|
|
1168
|
+
const pattern = node.#patterns[k];
|
|
1169
|
+
const params = node.#params === emptyParams ? {} : { ...node.#params };
|
|
1170
|
+
if (pattern === "*") {
|
|
1171
|
+
const astNode = node.#children["*"];
|
|
1172
|
+
if (astNode) {
|
|
1173
|
+
handlerSets.push(...this.#getHandlerSets(astNode, method, node.#params));
|
|
1174
|
+
astNode.#params = params;
|
|
1175
|
+
tempNodes.push(astNode);
|
|
1176
|
+
}
|
|
1177
|
+
continue;
|
|
1178
|
+
}
|
|
1179
|
+
const [key, name, matcher] = pattern;
|
|
1180
|
+
if (!part && !(matcher instanceof RegExp)) continue;
|
|
1181
|
+
const child = node.#children[key];
|
|
1182
|
+
const restPathString = parts.slice(i).join("/");
|
|
1183
|
+
if (matcher instanceof RegExp) {
|
|
1184
|
+
const m = matcher.exec(restPathString);
|
|
1185
|
+
if (m) {
|
|
1186
|
+
params[name] = m[0];
|
|
1187
|
+
handlerSets.push(...this.#getHandlerSets(child, method, node.#params, params));
|
|
1188
|
+
if (Object.keys(child.#children).length) {
|
|
1189
|
+
child.#params = params;
|
|
1190
|
+
const componentCount = m[0].match(/\//)?.length ?? 0;
|
|
1191
|
+
(curNodesQueue[componentCount] ||= []).push(child);
|
|
1192
|
+
}
|
|
1193
|
+
continue;
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
if (matcher === true || matcher.test(part)) {
|
|
1197
|
+
params[name] = part;
|
|
1198
|
+
if (isLast) {
|
|
1199
|
+
handlerSets.push(...this.#getHandlerSets(child, method, params, node.#params));
|
|
1200
|
+
if (child.#children["*"]) handlerSets.push(...this.#getHandlerSets(child.#children["*"], method, params, node.#params));
|
|
1201
|
+
} else {
|
|
1202
|
+
child.#params = params;
|
|
1203
|
+
tempNodes.push(child);
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
curNodes = tempNodes.concat(curNodesQueue.shift() ?? []);
|
|
1209
|
+
}
|
|
1210
|
+
if (handlerSets.length > 1) handlerSets.sort((a, b) => {
|
|
1211
|
+
return a.score - b.score;
|
|
1212
|
+
});
|
|
1213
|
+
return [handlerSets.map(({ handler, params }) => [handler, params])];
|
|
1214
|
+
}
|
|
1215
|
+
};
|
|
1216
|
+
|
|
1217
|
+
//#endregion
|
|
1218
|
+
//#region node_modules/hono/dist/router/trie-router/router.js
|
|
1219
|
+
var TrieRouter = class {
|
|
1220
|
+
name = "TrieRouter";
|
|
1221
|
+
#node;
|
|
1222
|
+
constructor() {
|
|
1223
|
+
this.#node = new Node();
|
|
1224
|
+
}
|
|
1225
|
+
add(method, path$1, handler) {
|
|
1226
|
+
const results = checkOptionalParameter(path$1);
|
|
1227
|
+
if (results) {
|
|
1228
|
+
for (let i = 0, len = results.length; i < len; i++) this.#node.insert(method, results[i], handler);
|
|
1229
|
+
return;
|
|
1230
|
+
}
|
|
1231
|
+
this.#node.insert(method, path$1, handler);
|
|
1232
|
+
}
|
|
1233
|
+
match(method, path$1) {
|
|
1234
|
+
return this.#node.search(method, path$1);
|
|
1235
|
+
}
|
|
1236
|
+
};
|
|
1237
|
+
|
|
1238
|
+
//#endregion
|
|
1239
|
+
//#region node_modules/hono/dist/hono.js
|
|
1240
|
+
var Hono = class extends Hono$1 {
|
|
1241
|
+
constructor(options = {}) {
|
|
1242
|
+
super(options);
|
|
1243
|
+
this.router = options.router ?? new SmartRouter({ routers: [new RegExpRouter(), new TrieRouter()] });
|
|
1244
|
+
}
|
|
1245
|
+
};
|
|
1246
|
+
|
|
1247
|
+
//#endregion
|
|
1248
|
+
//#region node_modules/hono/dist/middleware/cors/index.js
|
|
1249
|
+
var cors = (options) => {
|
|
1250
|
+
const opts = {
|
|
1251
|
+
origin: "*",
|
|
1252
|
+
allowMethods: [
|
|
1253
|
+
"GET",
|
|
1254
|
+
"HEAD",
|
|
1255
|
+
"PUT",
|
|
1256
|
+
"POST",
|
|
1257
|
+
"DELETE",
|
|
1258
|
+
"PATCH"
|
|
1259
|
+
],
|
|
1260
|
+
allowHeaders: [],
|
|
1261
|
+
exposeHeaders: [],
|
|
1262
|
+
...options
|
|
1263
|
+
};
|
|
1264
|
+
const findAllowOrigin = ((optsOrigin) => {
|
|
1265
|
+
if (typeof optsOrigin === "string") if (optsOrigin === "*") return () => optsOrigin;
|
|
1266
|
+
else return (origin) => optsOrigin === origin ? origin : null;
|
|
1267
|
+
else if (typeof optsOrigin === "function") return optsOrigin;
|
|
1268
|
+
else return (origin) => optsOrigin.includes(origin) ? origin : null;
|
|
1269
|
+
})(opts.origin);
|
|
1270
|
+
const findAllowMethods = ((optsAllowMethods) => {
|
|
1271
|
+
if (typeof optsAllowMethods === "function") return optsAllowMethods;
|
|
1272
|
+
else if (Array.isArray(optsAllowMethods)) return () => optsAllowMethods;
|
|
1273
|
+
else return () => [];
|
|
1274
|
+
})(opts.allowMethods);
|
|
1275
|
+
return async function cors2(c, next) {
|
|
1276
|
+
function set(key, value) {
|
|
1277
|
+
c.res.headers.set(key, value);
|
|
1278
|
+
}
|
|
1279
|
+
const allowOrigin = await findAllowOrigin(c.req.header("origin") || "", c);
|
|
1280
|
+
if (allowOrigin) set("Access-Control-Allow-Origin", allowOrigin);
|
|
1281
|
+
if (opts.origin !== "*") {
|
|
1282
|
+
const existingVary = c.req.header("Vary");
|
|
1283
|
+
if (existingVary) set("Vary", existingVary);
|
|
1284
|
+
else set("Vary", "Origin");
|
|
1285
|
+
}
|
|
1286
|
+
if (opts.credentials) set("Access-Control-Allow-Credentials", "true");
|
|
1287
|
+
if (opts.exposeHeaders?.length) set("Access-Control-Expose-Headers", opts.exposeHeaders.join(","));
|
|
1288
|
+
if (c.req.method === "OPTIONS") {
|
|
1289
|
+
if (opts.maxAge != null) set("Access-Control-Max-Age", opts.maxAge.toString());
|
|
1290
|
+
const allowMethods = await findAllowMethods(c.req.header("origin") || "", c);
|
|
1291
|
+
if (allowMethods.length) set("Access-Control-Allow-Methods", allowMethods.join(","));
|
|
1292
|
+
let headers = opts.allowHeaders;
|
|
1293
|
+
if (!headers?.length) {
|
|
1294
|
+
const requestHeaders = c.req.header("Access-Control-Request-Headers");
|
|
1295
|
+
if (requestHeaders) headers = requestHeaders.split(/\s*,\s*/);
|
|
1296
|
+
}
|
|
1297
|
+
if (headers?.length) {
|
|
1298
|
+
set("Access-Control-Allow-Headers", headers.join(","));
|
|
1299
|
+
c.res.headers.append("Vary", "Access-Control-Request-Headers");
|
|
1300
|
+
}
|
|
1301
|
+
c.res.headers.delete("Content-Length");
|
|
1302
|
+
c.res.headers.delete("Content-Type");
|
|
1303
|
+
return new Response(null, {
|
|
1304
|
+
headers: c.res.headers,
|
|
1305
|
+
status: 204,
|
|
1306
|
+
statusText: "No Content"
|
|
1307
|
+
});
|
|
1308
|
+
}
|
|
1309
|
+
await next();
|
|
1310
|
+
};
|
|
1311
|
+
};
|
|
1312
|
+
|
|
1313
|
+
//#endregion
|
|
1314
|
+
//#region node_modules/hono/dist/utils/color.js
|
|
1315
|
+
function getColorEnabled() {
|
|
1316
|
+
const { process: process$1, Deno } = globalThis;
|
|
1317
|
+
return !(typeof Deno?.noColor === "boolean" ? Deno.noColor : process$1 !== void 0 ? "NO_COLOR" in process$1?.env : false);
|
|
1318
|
+
}
|
|
1319
|
+
async function getColorEnabledAsync() {
|
|
1320
|
+
const { navigator } = globalThis;
|
|
1321
|
+
const cfWorkers = "cloudflare:workers";
|
|
1322
|
+
return !(navigator !== void 0 && navigator.userAgent === "Cloudflare-Workers" ? await (async () => {
|
|
1323
|
+
try {
|
|
1324
|
+
return "NO_COLOR" in ((await import(cfWorkers)).env ?? {});
|
|
1325
|
+
} catch {
|
|
1326
|
+
return false;
|
|
1327
|
+
}
|
|
1328
|
+
})() : !getColorEnabled());
|
|
1329
|
+
}
|
|
1330
|
+
|
|
1331
|
+
//#endregion
|
|
1332
|
+
//#region node_modules/hono/dist/middleware/logger/index.js
|
|
1333
|
+
var humanize = (times) => {
|
|
1334
|
+
const [delimiter, separator] = [",", "."];
|
|
1335
|
+
return times.map((v) => v.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1" + delimiter)).join(separator);
|
|
1336
|
+
};
|
|
1337
|
+
var time = (start) => {
|
|
1338
|
+
const delta = Date.now() - start;
|
|
1339
|
+
return humanize([delta < 1e3 ? delta + "ms" : Math.round(delta / 1e3) + "s"]);
|
|
1340
|
+
};
|
|
1341
|
+
var colorStatus = async (status) => {
|
|
1342
|
+
if (await getColorEnabledAsync()) switch (status / 100 | 0) {
|
|
1343
|
+
case 5: return `\x1B[31m${status}\x1B[0m`;
|
|
1344
|
+
case 4: return `\x1B[33m${status}\x1B[0m`;
|
|
1345
|
+
case 3: return `\x1B[36m${status}\x1B[0m`;
|
|
1346
|
+
case 2: return `\x1B[32m${status}\x1B[0m`;
|
|
1347
|
+
}
|
|
1348
|
+
return `${status}`;
|
|
1349
|
+
};
|
|
1350
|
+
async function log(fn, prefix, method, path$1, status = 0, elapsed) {
|
|
1351
|
+
const out = prefix === "<--" ? `${prefix} ${method} ${path$1}` : `${prefix} ${method} ${path$1} ${await colorStatus(status)} ${elapsed}`;
|
|
1352
|
+
fn(out);
|
|
1353
|
+
}
|
|
1354
|
+
var logger = (fn = console.log) => {
|
|
1355
|
+
return async function logger2(c, next) {
|
|
1356
|
+
const { method, url } = c.req;
|
|
1357
|
+
const path$1 = url.slice(url.indexOf("/", 8));
|
|
1358
|
+
await log(fn, "<--", method, path$1);
|
|
1359
|
+
const start = Date.now();
|
|
1360
|
+
await next();
|
|
1361
|
+
await log(fn, "-->", method, path$1, c.res.status, time(start));
|
|
1362
|
+
};
|
|
1363
|
+
};
|
|
1364
|
+
|
|
1365
|
+
//#endregion
|
|
14
1366
|
//#region src/lib/request-auth.ts
|
|
15
1367
|
function normalizeApiKeys(apiKeys) {
|
|
16
1368
|
if (!Array.isArray(apiKeys)) {
|
|
@@ -73,6 +1425,130 @@ const traceIdMiddleware = async (c, next) => {
|
|
|
73
1425
|
});
|
|
74
1426
|
};
|
|
75
1427
|
|
|
1428
|
+
//#endregion
|
|
1429
|
+
//#region node_modules/hono/dist/utils/stream.js
|
|
1430
|
+
var StreamingApi = class {
|
|
1431
|
+
writer;
|
|
1432
|
+
encoder;
|
|
1433
|
+
writable;
|
|
1434
|
+
abortSubscribers = [];
|
|
1435
|
+
responseReadable;
|
|
1436
|
+
aborted = false;
|
|
1437
|
+
closed = false;
|
|
1438
|
+
constructor(writable, _readable) {
|
|
1439
|
+
this.writable = writable;
|
|
1440
|
+
this.writer = writable.getWriter();
|
|
1441
|
+
this.encoder = new TextEncoder();
|
|
1442
|
+
const reader = _readable.getReader();
|
|
1443
|
+
this.abortSubscribers.push(async () => {
|
|
1444
|
+
await reader.cancel();
|
|
1445
|
+
});
|
|
1446
|
+
this.responseReadable = new ReadableStream({
|
|
1447
|
+
async pull(controller) {
|
|
1448
|
+
const { done, value } = await reader.read();
|
|
1449
|
+
done ? controller.close() : controller.enqueue(value);
|
|
1450
|
+
},
|
|
1451
|
+
cancel: () => {
|
|
1452
|
+
this.abort();
|
|
1453
|
+
}
|
|
1454
|
+
});
|
|
1455
|
+
}
|
|
1456
|
+
async write(input) {
|
|
1457
|
+
try {
|
|
1458
|
+
if (typeof input === "string") input = this.encoder.encode(input);
|
|
1459
|
+
await this.writer.write(input);
|
|
1460
|
+
} catch {}
|
|
1461
|
+
return this;
|
|
1462
|
+
}
|
|
1463
|
+
async writeln(input) {
|
|
1464
|
+
await this.write(input + "\n");
|
|
1465
|
+
return this;
|
|
1466
|
+
}
|
|
1467
|
+
sleep(ms) {
|
|
1468
|
+
return new Promise((res) => setTimeout(res, ms));
|
|
1469
|
+
}
|
|
1470
|
+
async close() {
|
|
1471
|
+
try {
|
|
1472
|
+
await this.writer.close();
|
|
1473
|
+
} catch {}
|
|
1474
|
+
this.closed = true;
|
|
1475
|
+
}
|
|
1476
|
+
async pipe(body) {
|
|
1477
|
+
this.writer.releaseLock();
|
|
1478
|
+
await body.pipeTo(this.writable, { preventClose: true });
|
|
1479
|
+
this.writer = this.writable.getWriter();
|
|
1480
|
+
}
|
|
1481
|
+
onAbort(listener) {
|
|
1482
|
+
this.abortSubscribers.push(listener);
|
|
1483
|
+
}
|
|
1484
|
+
abort() {
|
|
1485
|
+
if (!this.aborted) {
|
|
1486
|
+
this.aborted = true;
|
|
1487
|
+
this.abortSubscribers.forEach((subscriber) => subscriber());
|
|
1488
|
+
}
|
|
1489
|
+
}
|
|
1490
|
+
};
|
|
1491
|
+
|
|
1492
|
+
//#endregion
|
|
1493
|
+
//#region node_modules/hono/dist/helper/streaming/utils.js
|
|
1494
|
+
var isOldBunVersion = () => {
|
|
1495
|
+
const version = typeof Bun !== "undefined" ? Bun.version : void 0;
|
|
1496
|
+
if (version === void 0) return false;
|
|
1497
|
+
const result = version.startsWith("1.1") || version.startsWith("1.0") || version.startsWith("0.");
|
|
1498
|
+
isOldBunVersion = () => result;
|
|
1499
|
+
return result;
|
|
1500
|
+
};
|
|
1501
|
+
|
|
1502
|
+
//#endregion
|
|
1503
|
+
//#region node_modules/hono/dist/helper/streaming/sse.js
|
|
1504
|
+
var SSEStreamingApi = class extends StreamingApi {
|
|
1505
|
+
constructor(writable, readable) {
|
|
1506
|
+
super(writable, readable);
|
|
1507
|
+
}
|
|
1508
|
+
async writeSSE(message) {
|
|
1509
|
+
const dataLines = (await resolveCallback(message.data, HtmlEscapedCallbackPhase.Stringify, false, {})).split("\n").map((line) => {
|
|
1510
|
+
return `data: ${line}`;
|
|
1511
|
+
}).join("\n");
|
|
1512
|
+
const sseData = [
|
|
1513
|
+
message.event && `event: ${message.event}`,
|
|
1514
|
+
dataLines,
|
|
1515
|
+
message.id && `id: ${message.id}`,
|
|
1516
|
+
message.retry && `retry: ${message.retry}`
|
|
1517
|
+
].filter(Boolean).join("\n") + "\n\n";
|
|
1518
|
+
await this.write(sseData);
|
|
1519
|
+
}
|
|
1520
|
+
};
|
|
1521
|
+
var run = async (stream$1, cb, onError) => {
|
|
1522
|
+
try {
|
|
1523
|
+
await cb(stream$1);
|
|
1524
|
+
} catch (e) {
|
|
1525
|
+
if (e instanceof Error && onError) {
|
|
1526
|
+
await onError(e, stream$1);
|
|
1527
|
+
await stream$1.writeSSE({
|
|
1528
|
+
event: "error",
|
|
1529
|
+
data: e.message
|
|
1530
|
+
});
|
|
1531
|
+
} else console.error(e);
|
|
1532
|
+
} finally {
|
|
1533
|
+
stream$1.close();
|
|
1534
|
+
}
|
|
1535
|
+
};
|
|
1536
|
+
var contextStash = /* @__PURE__ */ new WeakMap();
|
|
1537
|
+
var streamSSE = (c, cb, onError) => {
|
|
1538
|
+
const { readable, writable } = new TransformStream();
|
|
1539
|
+
const stream$1 = new SSEStreamingApi(writable, readable);
|
|
1540
|
+
if (isOldBunVersion()) c.req.raw.signal.addEventListener("abort", () => {
|
|
1541
|
+
if (!stream$1.closed) stream$1.abort();
|
|
1542
|
+
});
|
|
1543
|
+
contextStash.set(stream$1.responseReadable, c);
|
|
1544
|
+
c.header("Transfer-Encoding", "chunked");
|
|
1545
|
+
c.header("Content-Type", "text/event-stream");
|
|
1546
|
+
c.header("Cache-Control", "no-cache");
|
|
1547
|
+
c.header("Connection", "keep-alive");
|
|
1548
|
+
run(stream$1, cb, onError);
|
|
1549
|
+
return c.newResponse(stream$1.responseReadable);
|
|
1550
|
+
};
|
|
1551
|
+
|
|
76
1552
|
//#endregion
|
|
77
1553
|
//#region src/lib/approval.ts
|
|
78
1554
|
const awaitApproval = async () => {
|
|
@@ -127,9 +1603,9 @@ const maybeUnref = (timer) => {
|
|
|
127
1603
|
const flushBuffer = (filePath) => {
|
|
128
1604
|
const buffer = logBuffers.get(filePath);
|
|
129
1605
|
if (!buffer || buffer.length === 0) return;
|
|
130
|
-
const stream = getLogStream(filePath);
|
|
1606
|
+
const stream$1 = getLogStream(filePath);
|
|
131
1607
|
const content = buffer.join("\n") + "\n";
|
|
132
|
-
stream.write(content, (error) => {
|
|
1608
|
+
stream$1.write(content, (error) => {
|
|
133
1609
|
if (error) console.warn("Failed to write handler log", error);
|
|
134
1610
|
});
|
|
135
1611
|
logBuffers.set(filePath, []);
|
|
@@ -147,7 +1623,7 @@ const cleanup = () => {
|
|
|
147
1623
|
cleanupInterval = void 0;
|
|
148
1624
|
}
|
|
149
1625
|
flushAllBuffers();
|
|
150
|
-
for (const stream of logStreams.values()) stream.end();
|
|
1626
|
+
for (const stream$1 of logStreams.values()) stream$1.end();
|
|
151
1627
|
logStreams.clear();
|
|
152
1628
|
logBuffers.clear();
|
|
153
1629
|
};
|
|
@@ -172,16 +1648,16 @@ const initializeLoggerRuntime = () => {
|
|
|
172
1648
|
};
|
|
173
1649
|
const getLogStream = (filePath) => {
|
|
174
1650
|
initializeLoggerRuntime();
|
|
175
|
-
let stream = logStreams.get(filePath);
|
|
176
|
-
if (!stream || stream.destroyed) {
|
|
177
|
-
stream = fs.createWriteStream(filePath, { flags: "a" });
|
|
178
|
-
logStreams.set(filePath, stream);
|
|
179
|
-
stream.on("error", (error) => {
|
|
1651
|
+
let stream$1 = logStreams.get(filePath);
|
|
1652
|
+
if (!stream$1 || stream$1.destroyed) {
|
|
1653
|
+
stream$1 = fs.createWriteStream(filePath, { flags: "a" });
|
|
1654
|
+
logStreams.set(filePath, stream$1);
|
|
1655
|
+
stream$1.on("error", (error) => {
|
|
180
1656
|
console.warn("Log stream error", error);
|
|
181
1657
|
logStreams.delete(filePath);
|
|
182
1658
|
});
|
|
183
1659
|
}
|
|
184
|
-
return stream;
|
|
1660
|
+
return stream$1;
|
|
185
1661
|
};
|
|
186
1662
|
const appendLine = (filePath, line) => {
|
|
187
1663
|
let buffer = logBuffers.get(filePath);
|
|
@@ -248,6 +1724,132 @@ async function checkRateLimit(state$1) {
|
|
|
248
1724
|
consola.info("Rate limit wait completed, proceeding with request");
|
|
249
1725
|
}
|
|
250
1726
|
|
|
1727
|
+
//#endregion
|
|
1728
|
+
//#region node_modules/fetch-event-stream/esm/deps/jsr.io/@std/streams/0.221.0/text_line_stream.js
|
|
1729
|
+
/**
|
|
1730
|
+
* Transform a stream into a stream where each chunk is divided by a newline,
|
|
1731
|
+
* be it `\n` or `\r\n`. `\r` can be enabled via the `allowCR` option.
|
|
1732
|
+
*
|
|
1733
|
+
* @example
|
|
1734
|
+
* ```ts
|
|
1735
|
+
* import { TextLineStream } from "@std/streams/text-line-stream";
|
|
1736
|
+
*
|
|
1737
|
+
* const res = await fetch("https://example.com");
|
|
1738
|
+
* const lines = res.body!
|
|
1739
|
+
* .pipeThrough(new TextDecoderStream())
|
|
1740
|
+
* .pipeThrough(new TextLineStream());
|
|
1741
|
+
* ```
|
|
1742
|
+
*/
|
|
1743
|
+
var TextLineStream = class extends TransformStream {
|
|
1744
|
+
#currentLine = "";
|
|
1745
|
+
/** Constructs a new instance. */
|
|
1746
|
+
constructor(options = { allowCR: false }) {
|
|
1747
|
+
super({
|
|
1748
|
+
transform: (chars, controller) => {
|
|
1749
|
+
chars = this.#currentLine + chars;
|
|
1750
|
+
while (true) {
|
|
1751
|
+
const lfIndex = chars.indexOf("\n");
|
|
1752
|
+
const crIndex = options.allowCR ? chars.indexOf("\r") : -1;
|
|
1753
|
+
if (crIndex !== -1 && crIndex !== chars.length - 1 && (lfIndex === -1 || lfIndex - 1 > crIndex)) {
|
|
1754
|
+
controller.enqueue(chars.slice(0, crIndex));
|
|
1755
|
+
chars = chars.slice(crIndex + 1);
|
|
1756
|
+
continue;
|
|
1757
|
+
}
|
|
1758
|
+
if (lfIndex === -1) break;
|
|
1759
|
+
const endIndex = chars[lfIndex - 1] === "\r" ? lfIndex - 1 : lfIndex;
|
|
1760
|
+
controller.enqueue(chars.slice(0, endIndex));
|
|
1761
|
+
chars = chars.slice(lfIndex + 1);
|
|
1762
|
+
}
|
|
1763
|
+
this.#currentLine = chars;
|
|
1764
|
+
},
|
|
1765
|
+
flush: (controller) => {
|
|
1766
|
+
if (this.#currentLine === "") return;
|
|
1767
|
+
const currentLine = options.allowCR && this.#currentLine.endsWith("\r") ? this.#currentLine.slice(0, -1) : this.#currentLine;
|
|
1768
|
+
controller.enqueue(currentLine);
|
|
1769
|
+
}
|
|
1770
|
+
});
|
|
1771
|
+
}
|
|
1772
|
+
};
|
|
1773
|
+
|
|
1774
|
+
//#endregion
|
|
1775
|
+
//#region node_modules/fetch-event-stream/esm/utils.js
|
|
1776
|
+
function stream(input) {
|
|
1777
|
+
let decoder = new TextDecoderStream();
|
|
1778
|
+
let split$1 = new TextLineStream({ allowCR: true });
|
|
1779
|
+
return input.pipeThrough(decoder).pipeThrough(split$1);
|
|
1780
|
+
}
|
|
1781
|
+
function split(input) {
|
|
1782
|
+
let match = /[:]\s*/.exec(input);
|
|
1783
|
+
let idx = match && match.index;
|
|
1784
|
+
if (idx) return [input.substring(0, idx), input.substring(idx + match[0].length)];
|
|
1785
|
+
}
|
|
1786
|
+
|
|
1787
|
+
//#endregion
|
|
1788
|
+
//#region node_modules/fetch-event-stream/esm/mod.js
|
|
1789
|
+
/**
|
|
1790
|
+
* Convert a `Response` body containing Server Sent Events (SSE) into an Async Iterator that yields {@linkcode ServerSentEventMessage} objects.
|
|
1791
|
+
*
|
|
1792
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events}
|
|
1793
|
+
*
|
|
1794
|
+
* @example
|
|
1795
|
+
* ```js
|
|
1796
|
+
* // Optional
|
|
1797
|
+
* let abort = new AbortController;
|
|
1798
|
+
*
|
|
1799
|
+
* // Manually fetch a Response
|
|
1800
|
+
* let res = await fetch('https://...', {
|
|
1801
|
+
* method: 'POST',
|
|
1802
|
+
* signal: abort.signal,
|
|
1803
|
+
* headers: {
|
|
1804
|
+
* 'api-key': 'token <value>',
|
|
1805
|
+
* 'content-type': 'application/json',
|
|
1806
|
+
* },
|
|
1807
|
+
* body: JSON.stringify({
|
|
1808
|
+
* stream: true, // <- hypothetical
|
|
1809
|
+
* // ...
|
|
1810
|
+
* })
|
|
1811
|
+
* });
|
|
1812
|
+
*
|
|
1813
|
+
* if (res.ok) {
|
|
1814
|
+
* let stream = events(res, abort.signal);
|
|
1815
|
+
* for await (let event of stream) {
|
|
1816
|
+
* console.log('<<', event.data);
|
|
1817
|
+
* }
|
|
1818
|
+
* }
|
|
1819
|
+
* ```
|
|
1820
|
+
*/
|
|
1821
|
+
async function* events(res, signal) {
|
|
1822
|
+
if (!res.body) return;
|
|
1823
|
+
let iter = stream(res.body);
|
|
1824
|
+
let line, reader = iter.getReader();
|
|
1825
|
+
let event;
|
|
1826
|
+
for (;;) {
|
|
1827
|
+
if (signal && signal.aborted) return reader.cancel();
|
|
1828
|
+
line = await reader.read();
|
|
1829
|
+
if (line.done) return;
|
|
1830
|
+
if (!line.value) {
|
|
1831
|
+
if (event) yield event;
|
|
1832
|
+
event = void 0;
|
|
1833
|
+
continue;
|
|
1834
|
+
}
|
|
1835
|
+
let [field, value] = split(line.value) || [];
|
|
1836
|
+
if (!field) continue;
|
|
1837
|
+
if (field === "data") {
|
|
1838
|
+
event ||= {};
|
|
1839
|
+
event[field] = event[field] ? event[field] + "\n" + value : value;
|
|
1840
|
+
} else if (field === "event") {
|
|
1841
|
+
event ||= {};
|
|
1842
|
+
event[field] = value;
|
|
1843
|
+
} else if (field === "id") {
|
|
1844
|
+
event ||= {};
|
|
1845
|
+
event[field] = +value || value;
|
|
1846
|
+
} else if (field === "retry") {
|
|
1847
|
+
event ||= {};
|
|
1848
|
+
event[field] = +value || void 0;
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
}
|
|
1852
|
+
|
|
251
1853
|
//#endregion
|
|
252
1854
|
//#region src/lib/copilot-rate-limit.ts
|
|
253
1855
|
const copilotRateLimitTypes = ["session", "weekly"];
|
|
@@ -361,10 +1963,10 @@ async function handleCompletion$1(c) {
|
|
|
361
1963
|
return c.json(response);
|
|
362
1964
|
}
|
|
363
1965
|
logger$6.debug("Streaming response");
|
|
364
|
-
return streamSSE(c, async (stream) => {
|
|
1966
|
+
return streamSSE(c, async (stream$1) => {
|
|
365
1967
|
for await (const chunk of response) {
|
|
366
1968
|
debugJson(logger$6, "Streaming chunk:", chunk);
|
|
367
|
-
await stream.writeSSE(chunk);
|
|
1969
|
+
await stream$1.writeSSE(chunk);
|
|
368
1970
|
}
|
|
369
1971
|
});
|
|
370
1972
|
}
|
|
@@ -410,11 +2012,11 @@ embeddingRoutes.post("/", async (c) => {
|
|
|
410
2012
|
//#endregion
|
|
411
2013
|
//#region src/lib/tokenizer.ts
|
|
412
2014
|
const ENCODING_MAP = {
|
|
413
|
-
o200k_base: () => import("
|
|
414
|
-
cl100k_base: () => import("
|
|
415
|
-
p50k_base: () => import("
|
|
416
|
-
p50k_edit: () => import("
|
|
417
|
-
r50k_base: () => import("
|
|
2015
|
+
o200k_base: () => import("./o200k_base-BlrOP1Jc.js"),
|
|
2016
|
+
cl100k_base: () => import("./cl100k_base-kiDWemr-.js"),
|
|
2017
|
+
p50k_base: () => import("./p50k_base-DA6KYT1Z.js"),
|
|
2018
|
+
p50k_edit: () => import("./p50k_edit-BlA1HcF4.js"),
|
|
2019
|
+
r50k_base: () => import("./r50k_base-CaCWe6-8.js")
|
|
418
2020
|
};
|
|
419
2021
|
const encodingCache = /* @__PURE__ */ new Map();
|
|
420
2022
|
/**
|
|
@@ -1057,11 +2659,11 @@ const encodeCompactionCarrierSignature = (compaction) => {
|
|
|
1057
2659
|
};
|
|
1058
2660
|
const decodeCompactionCarrierSignature = (signature) => {
|
|
1059
2661
|
if (signature.startsWith(COMPACTION_SIGNATURE_PREFIX)) {
|
|
1060
|
-
const raw = signature.slice(4);
|
|
1061
|
-
const separatorIndex = raw.indexOf(COMPACTION_SIGNATURE_SEPARATOR);
|
|
1062
|
-
if (separatorIndex <= 0 || separatorIndex === raw.length - 1) return;
|
|
1063
|
-
const encrypted_content = raw.slice(0, separatorIndex);
|
|
1064
|
-
const id = raw.slice(separatorIndex + 1);
|
|
2662
|
+
const raw$1 = signature.slice(4);
|
|
2663
|
+
const separatorIndex = raw$1.indexOf(COMPACTION_SIGNATURE_SEPARATOR);
|
|
2664
|
+
if (separatorIndex <= 0 || separatorIndex === raw$1.length - 1) return;
|
|
2665
|
+
const encrypted_content = raw$1.slice(0, separatorIndex);
|
|
2666
|
+
const id = raw$1.slice(separatorIndex + 1);
|
|
1065
2667
|
if (!encrypted_content) return;
|
|
1066
2668
|
return {
|
|
1067
2669
|
id,
|
|
@@ -2506,7 +4108,7 @@ const handleWithChatCompletions = async (c, anthropicPayload, options) => {
|
|
|
2506
4108
|
return c.json(anthropicResponse);
|
|
2507
4109
|
}
|
|
2508
4110
|
logger$7.debug("Streaming response from Copilot");
|
|
2509
|
-
return streamSSE(c, async (stream) => {
|
|
4111
|
+
return streamSSE(c, async (stream$1) => {
|
|
2510
4112
|
const streamState = {
|
|
2511
4113
|
messageStartSent: false,
|
|
2512
4114
|
contentBlockIndex: 0,
|
|
@@ -2523,7 +4125,7 @@ const handleWithChatCompletions = async (c, anthropicPayload, options) => {
|
|
|
2523
4125
|
for (const event of events$1) {
|
|
2524
4126
|
const eventData = JSON.stringify(event);
|
|
2525
4127
|
debugLazy(logger$7, () => ["Translated Anthropic event:", eventData]);
|
|
2526
|
-
await stream.writeSSE({
|
|
4128
|
+
await stream$1.writeSSE({
|
|
2527
4129
|
event: event.type,
|
|
2528
4130
|
data: eventData
|
|
2529
4131
|
});
|
|
@@ -2548,11 +4150,11 @@ const handleWithResponsesApi = async (c, anthropicPayload, options) => {
|
|
|
2548
4150
|
});
|
|
2549
4151
|
if (responsesPayload.stream && isAsyncIterable$1(response)) {
|
|
2550
4152
|
logger$7.debug("Streaming response from Copilot (Responses API)");
|
|
2551
|
-
return streamSSE(c, async (stream) => {
|
|
4153
|
+
return streamSSE(c, async (stream$1) => {
|
|
2552
4154
|
const streamState = createResponsesStreamState();
|
|
2553
4155
|
for await (const chunk of response) {
|
|
2554
4156
|
if (chunk.event === "ping") {
|
|
2555
|
-
await stream.writeSSE({
|
|
4157
|
+
await stream$1.writeSSE({
|
|
2556
4158
|
event: "ping",
|
|
2557
4159
|
data: "{\"type\":\"ping\"}"
|
|
2558
4160
|
});
|
|
@@ -2565,7 +4167,7 @@ const handleWithResponsesApi = async (c, anthropicPayload, options) => {
|
|
|
2565
4167
|
for (const event of events$1) {
|
|
2566
4168
|
const eventData = JSON.stringify(event);
|
|
2567
4169
|
debugLazy(logger$7, () => ["Translated Anthropic event:", eventData]);
|
|
2568
|
-
await stream.writeSSE({
|
|
4170
|
+
await stream$1.writeSSE({
|
|
2569
4171
|
event: event.type,
|
|
2570
4172
|
data: eventData
|
|
2571
4173
|
});
|
|
@@ -2578,7 +4180,7 @@ const handleWithResponsesApi = async (c, anthropicPayload, options) => {
|
|
|
2578
4180
|
if (!streamState.messageCompleted) {
|
|
2579
4181
|
logger$7.warn("Responses stream ended without completion; sending error event");
|
|
2580
4182
|
const errorEvent = buildErrorEvent("Responses stream ended without completion");
|
|
2581
|
-
await stream.writeSSE({
|
|
4183
|
+
await stream$1.writeSSE({
|
|
2582
4184
|
event: errorEvent.type,
|
|
2583
4185
|
data: JSON.stringify(errorEvent)
|
|
2584
4186
|
});
|
|
@@ -2605,14 +4207,14 @@ const handleWithMessagesApi = async (c, anthropicPayload, options) => {
|
|
|
2605
4207
|
});
|
|
2606
4208
|
if (isAsyncIterable$1(response)) {
|
|
2607
4209
|
logger$7.debug("Streaming response from Copilot (Messages API)");
|
|
2608
|
-
return streamSSE(c, async (stream) => {
|
|
4210
|
+
return streamSSE(c, async (stream$1) => {
|
|
2609
4211
|
for await (const event of response) {
|
|
2610
4212
|
const eventName = event.event;
|
|
2611
4213
|
const data = event.data ?? "";
|
|
2612
4214
|
if (data === "[DONE]") break;
|
|
2613
4215
|
if (!data) continue;
|
|
2614
4216
|
debugLazy(logger$7, () => ["Messages raw stream event:", data]);
|
|
2615
|
-
await stream.writeSSE({
|
|
4217
|
+
await stream$1.writeSSE({
|
|
2616
4218
|
event: eventName,
|
|
2617
4219
|
data
|
|
2618
4220
|
});
|
|
@@ -2918,12 +4520,12 @@ async function handleProviderMessages(c) {
|
|
|
2918
4520
|
const contentType = upstreamResponse.headers.get("content-type") ?? "";
|
|
2919
4521
|
if (Boolean(payload.stream) && contentType.includes("text/event-stream")) {
|
|
2920
4522
|
logger$3.debug("provider.messages.streaming");
|
|
2921
|
-
return streamSSE(c, async (stream) => {
|
|
4523
|
+
return streamSSE(c, async (stream$1) => {
|
|
2922
4524
|
for await (const chunk of events(upstreamResponse)) {
|
|
2923
4525
|
logger$3.debug("provider.messages.raw_stream_event:", chunk.data);
|
|
2924
4526
|
const eventName = chunk.event;
|
|
2925
4527
|
if (eventName === "ping") {
|
|
2926
|
-
await stream.writeSSE({
|
|
4528
|
+
await stream$1.writeSSE({
|
|
2927
4529
|
event: "ping",
|
|
2928
4530
|
data: "{\"type\":\"ping\"}"
|
|
2929
4531
|
});
|
|
@@ -2943,7 +4545,7 @@ async function handleProviderMessages(c) {
|
|
|
2943
4545
|
originalData: data
|
|
2944
4546
|
});
|
|
2945
4547
|
}
|
|
2946
|
-
await stream.writeSSE({
|
|
4548
|
+
await stream$1.writeSSE({
|
|
2947
4549
|
event: eventName,
|
|
2948
4550
|
data
|
|
2949
4551
|
});
|
|
@@ -3083,12 +4685,12 @@ const handleResponses = async (c) => {
|
|
|
3083
4685
|
});
|
|
3084
4686
|
if (isStreamingRequested(payload) && isAsyncIterable(response)) {
|
|
3085
4687
|
logger$1.debug("Forwarding native Responses stream");
|
|
3086
|
-
return streamSSE(c, async (stream) => {
|
|
4688
|
+
return streamSSE(c, async (stream$1) => {
|
|
3087
4689
|
const idTracker = createStreamIdTracker();
|
|
3088
4690
|
for await (const chunk of response) {
|
|
3089
4691
|
debugJson(logger$1, "Responses stream chunk:", chunk);
|
|
3090
4692
|
const processedData = fixStreamIds(chunk.data ?? "", chunk.event, idTracker);
|
|
3091
|
-
await stream.writeSSE({
|
|
4693
|
+
await stream$1.writeSSE({
|
|
3092
4694
|
id: chunk.id,
|
|
3093
4695
|
event: chunk.event,
|
|
3094
4696
|
data: processedData
|
|
@@ -3222,4 +4824,4 @@ server.route("/:provider/v1/models", providerModelRoutes);
|
|
|
3222
4824
|
|
|
3223
4825
|
//#endregion
|
|
3224
4826
|
export { server };
|
|
3225
|
-
//# sourceMappingURL=server-
|
|
4827
|
+
//# sourceMappingURL=server-BGqhE4N_.js.map
|