elysia 2.0.0-exp.41 → 2.0.0-exp.42
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/adapter/bun/index.js +16 -4
- package/dist/adapter/bun/index.mjs +16 -4
- package/dist/adapter/utils.d.ts +2 -1
- package/dist/adapter/utils.js +37 -15
- package/dist/adapter/utils.mjs +37 -15
- package/dist/adapter/web-standard/handler.js +4 -3
- package/dist/adapter/web-standard/handler.mjs +4 -3
- package/dist/adapter/web-standard/index.js +10 -2
- package/dist/adapter/web-standard/index.mjs +10 -2
- package/dist/adapter/web-standard/utils.js +8 -2
- package/dist/adapter/web-standard/utils.mjs +8 -2
- package/dist/base.d.ts +5 -4
- package/dist/base.js +294 -120
- package/dist/base.mjs +297 -123
- package/dist/compile/aot-capture.js +1 -1
- package/dist/compile/aot-capture.mjs +1 -1
- package/dist/compile/aot.d.ts +2 -42
- package/dist/compile/aot.js +6 -18
- package/dist/compile/aot.mjs +6 -17
- package/dist/compile/handler/frozen-validator.js +1 -1
- package/dist/compile/handler/frozen-validator.mjs +1 -1
- package/dist/compile/handler/index.d.ts +1 -5
- package/dist/compile/handler/index.js +20 -12
- package/dist/compile/handler/index.mjs +22 -12
- package/dist/compile/handler/jit.js +86 -11
- package/dist/compile/handler/jit.mjs +87 -12
- package/dist/compile/handler/params.js +3 -1
- package/dist/compile/handler/params.mjs +4 -2
- package/dist/compile/handler/utils.d.ts +8 -3
- package/dist/compile/handler/utils.js +37 -3
- package/dist/compile/handler/utils.mjs +35 -3
- package/dist/compile/lexer.d.ts +1 -1
- package/dist/compile/utils.js +1 -1
- package/dist/compile/utils.mjs +1 -1
- package/dist/cookie/cookie.d.ts +1 -1
- package/dist/cookie/utils.js +1 -1
- package/dist/cookie/utils.mjs +1 -1
- package/dist/handler/error.js +2 -1
- package/dist/handler/error.mjs +2 -1
- package/dist/handler/fetch.js +2 -1
- package/dist/handler/fetch.mjs +2 -1
- package/dist/handler/utils.js +1 -1
- package/dist/handler/utils.mjs +2 -2
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/parse-query.js +2 -2
- package/dist/parse-query.mjs +2 -2
- package/dist/plugin/{bun.d.ts → aot/bun.d.ts} +2 -2
- package/dist/plugin/{bun.js → aot/bun.js} +6 -6
- package/dist/plugin/{bun.mjs → aot/bun.mjs} +2 -2
- package/dist/plugin/{core.d.ts → aot/core.d.ts} +46 -14
- package/dist/plugin/{core.js → aot/core.js} +105 -28
- package/dist/plugin/{core.mjs → aot/core.mjs} +100 -25
- package/dist/plugin/{esbuild.d.ts → aot/esbuild.d.ts} +3 -3
- package/dist/plugin/aot/esbuild.js +79 -0
- package/dist/plugin/aot/esbuild.mjs +77 -0
- package/dist/plugin/{source.d.ts → aot/source.d.ts} +5 -16
- package/dist/plugin/{source.js → aot/source.js} +13 -184
- package/dist/plugin/{source.mjs → aot/source.mjs} +14 -183
- package/dist/plugin/{treeshake.d.ts → aot/treeshake.d.ts} +1 -1
- package/dist/plugin/{treeshake.mjs → aot/treeshake.js} +8 -4
- package/dist/plugin/{treeshake.js → aot/treeshake.mjs} +6 -6
- package/dist/plugin/{vite.d.ts → aot/vite.d.ts} +2 -2
- package/dist/plugin/{vite.js → aot/vite.js} +19 -18
- package/dist/plugin/{vite.mjs → aot/vite.mjs} +7 -6
- package/dist/plugin/aot/worker.d.ts +1 -0
- package/dist/plugin/aot/worker.js +28 -0
- package/dist/plugin/aot/worker.mjs +27 -0
- package/dist/plugin/auto-head.d.ts +6 -0
- package/dist/plugin/auto-head.js +38 -0
- package/dist/plugin/auto-head.mjs +36 -0
- package/dist/trace.d.ts +1 -1
- package/dist/type/bridge-live.js +1 -1
- package/dist/type/bridge-live.mjs +1 -1
- package/dist/type/bridge.d.ts +6 -6
- package/dist/type/coerce-plan.d.ts +5 -1
- package/dist/type/coerce-plan.js +13 -0
- package/dist/type/coerce-plan.mjs +12 -1
- package/dist/type/coerce.js +15 -0
- package/dist/type/coerce.mjs +15 -0
- package/dist/type/compat.js +1 -1
- package/dist/type/compat.mjs +1 -1
- package/dist/type/constants.d.ts +1 -1
- package/dist/type/elysia/accelerate.js +2 -1
- package/dist/type/elysia/accelerate.mjs +2 -1
- package/dist/type/elysia/array-buffer.js +2 -2
- package/dist/type/elysia/array-buffer.mjs +2 -2
- package/dist/type/elysia/cookie.d.ts +2 -5
- package/dist/type/elysia/file-type.js +3 -2
- package/dist/type/elysia/file-type.mjs +3 -2
- package/dist/type/elysia/file.js +2 -2
- package/dist/type/elysia/file.mjs +2 -2
- package/dist/type/elysia/files.js +5 -5
- package/dist/type/elysia/files.mjs +5 -5
- package/dist/type/elysia/integer-string.js +3 -3
- package/dist/type/elysia/integer-string.mjs +3 -3
- package/dist/type/elysia/uint8-array.js +3 -3
- package/dist/type/elysia/uint8-array.mjs +3 -3
- package/dist/type/elysia/utils.d.ts +5 -1
- package/dist/type/elysia/utils.js +30 -5
- package/dist/type/elysia/utils.mjs +29 -6
- package/dist/type/types.d.ts +20 -8
- package/dist/type/validator/custom-error.js +126 -41
- package/dist/type/validator/custom-error.mjs +126 -41
- package/dist/type/validator/default-precompute.js +30 -16
- package/dist/type/validator/default-precompute.mjs +30 -16
- package/dist/type/validator/index.d.ts +1 -1
- package/dist/type/validator/index.js +3 -3
- package/dist/type/validator/index.mjs +3 -3
- package/dist/type/validator/validator-cache.d.ts +1 -2
- package/dist/type/validator/validator-cache.js +3 -13
- package/dist/type/validator/validator-cache.mjs +3 -13
- package/dist/types.d.ts +9 -19
- package/dist/universal/env.d.ts +3 -2
- package/dist/universal/env.js +6 -2
- package/dist/universal/env.mjs +5 -2
- package/dist/universal/file.d.ts +7 -4
- package/dist/universal/file.js +42 -26
- package/dist/universal/file.mjs +42 -26
- package/dist/universal/is-production.d.ts +2 -1
- package/dist/universal/is-production.js +3 -1
- package/dist/universal/is-production.mjs +4 -3
- package/dist/utils.d.ts +14 -1
- package/dist/utils.js +110 -6
- package/dist/utils.mjs +108 -7
- package/dist/validator/index.js +83 -13
- package/dist/validator/index.mjs +84 -14
- package/dist/validator/route.js +2 -1
- package/dist/validator/route.mjs +2 -1
- package/dist/ws/route.js +32 -10
- package/dist/ws/route.mjs +32 -10
- package/package.json +21 -13
- package/dist/compile/build-router.d.ts +0 -14
- package/dist/compile/build-router.js +0 -212
- package/dist/compile/build-router.mjs +0 -208
- package/dist/plugin/esbuild.js +0 -46
- package/dist/plugin/esbuild.mjs +0 -44
|
@@ -13,7 +13,7 @@ function collectStaticRoutes(app) {
|
|
|
13
13
|
app.fetch;
|
|
14
14
|
const fetchLevelHook = require_utils.flattenChain(app["~hookChain"]);
|
|
15
15
|
if (fetchLevelHook?.request?.length || fetchLevelHook?.trace?.length || app["~ext"]?.hoc?.length) return;
|
|
16
|
-
const history = app
|
|
16
|
+
const history = app["~routes"];
|
|
17
17
|
if (!history?.length) return;
|
|
18
18
|
const ready = require_utils.nullObject();
|
|
19
19
|
const pending = [];
|
|
@@ -86,9 +86,20 @@ const BunAdapter = require_adapter_index.createAdapter({
|
|
|
86
86
|
} : _options;
|
|
87
87
|
const server = app.server = Bun.serve(serve);
|
|
88
88
|
const onSetup = app["~ext"]?.setup;
|
|
89
|
-
|
|
89
|
+
let setupReady;
|
|
90
|
+
if (onSetup) {
|
|
91
|
+
let pendingSetups;
|
|
92
|
+
for (let i = 0; i < onSetup.length; i++) {
|
|
93
|
+
const result = onSetup[i](app);
|
|
94
|
+
if (result && typeof result.then === "function") (pendingSetups ??= []).push(result);
|
|
95
|
+
}
|
|
96
|
+
if (pendingSetups) setupReady = Promise.all(pendingSetups);
|
|
97
|
+
}
|
|
90
98
|
const hasWs = app["~hasWS"];
|
|
91
|
-
if (!hasWs)
|
|
99
|
+
if (!hasWs) {
|
|
100
|
+
if (callback) if (setupReady) setupReady.then(() => callback(app.server));
|
|
101
|
+
else callback(app.server);
|
|
102
|
+
}
|
|
92
103
|
queueMicrotask(() => {
|
|
93
104
|
if (app.server !== server) return;
|
|
94
105
|
if (!app.pending) serve.fetch = app.fetch;
|
|
@@ -122,7 +133,8 @@ const BunAdapter = require_adapter_index.createAdapter({
|
|
|
122
133
|
app.server.reload(serve);
|
|
123
134
|
}
|
|
124
135
|
require_memory.flushMemory();
|
|
125
|
-
if (hasWs) callback
|
|
136
|
+
if (hasWs && callback) if (setupReady) setupReady.then(() => callback(app.server));
|
|
137
|
+
else callback(app.server);
|
|
126
138
|
});
|
|
127
139
|
}
|
|
128
140
|
});
|
|
@@ -12,7 +12,7 @@ function collectStaticRoutes(app) {
|
|
|
12
12
|
app.fetch;
|
|
13
13
|
const fetchLevelHook = flattenChain(app["~hookChain"]);
|
|
14
14
|
if (fetchLevelHook?.request?.length || fetchLevelHook?.trace?.length || app["~ext"]?.hoc?.length) return;
|
|
15
|
-
const history = app
|
|
15
|
+
const history = app["~routes"];
|
|
16
16
|
if (!history?.length) return;
|
|
17
17
|
const ready = nullObject();
|
|
18
18
|
const pending = [];
|
|
@@ -85,9 +85,20 @@ const BunAdapter = createAdapter({
|
|
|
85
85
|
} : _options;
|
|
86
86
|
const server = app.server = Bun.serve(serve);
|
|
87
87
|
const onSetup = app["~ext"]?.setup;
|
|
88
|
-
|
|
88
|
+
let setupReady;
|
|
89
|
+
if (onSetup) {
|
|
90
|
+
let pendingSetups;
|
|
91
|
+
for (let i = 0; i < onSetup.length; i++) {
|
|
92
|
+
const result = onSetup[i](app);
|
|
93
|
+
if (result && typeof result.then === "function") (pendingSetups ??= []).push(result);
|
|
94
|
+
}
|
|
95
|
+
if (pendingSetups) setupReady = Promise.all(pendingSetups);
|
|
96
|
+
}
|
|
89
97
|
const hasWs = app["~hasWS"];
|
|
90
|
-
if (!hasWs)
|
|
98
|
+
if (!hasWs) {
|
|
99
|
+
if (callback) if (setupReady) setupReady.then(() => callback(app.server));
|
|
100
|
+
else callback(app.server);
|
|
101
|
+
}
|
|
91
102
|
queueMicrotask(() => {
|
|
92
103
|
if (app.server !== server) return;
|
|
93
104
|
if (!app.pending) serve.fetch = app.fetch;
|
|
@@ -121,7 +132,8 @@ const BunAdapter = createAdapter({
|
|
|
121
132
|
app.server.reload(serve);
|
|
122
133
|
}
|
|
123
134
|
flushMemory();
|
|
124
|
-
if (hasWs) callback
|
|
135
|
+
if (hasWs && callback) if (setupReady) setupReady.then(() => callback(app.server));
|
|
136
|
+
else callback(app.server);
|
|
125
137
|
});
|
|
126
138
|
}
|
|
127
139
|
});
|
package/dist/adapter/utils.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { StatusMap } from "../constants.js";
|
|
2
|
+
import { ElysiaFile } from "../universal/file.js";
|
|
2
3
|
import { BaseCookie } from "../cookie/types.js";
|
|
3
4
|
import { HTTPHeaders } from "../types.js";
|
|
4
5
|
import { Context } from "../context.js";
|
|
5
6
|
//#region src/adapter/utils.d.ts
|
|
6
|
-
declare function handleFile(response: File | Blob, set?: Context['set'], request?: Request): Response;
|
|
7
|
+
declare function handleFile(response: File | Blob | ElysiaFile, set?: Context['set'], request?: Request, size?: number): Response;
|
|
7
8
|
declare function parseSetCookies(headers: Headers, setCookie: string[]): Headers;
|
|
8
9
|
declare function responseToSetHeaders(response: Response, set?: Context['set']): {
|
|
9
10
|
headers: HTTPHeaders;
|
package/dist/adapter/utils.js
CHANGED
|
@@ -11,9 +11,8 @@ const sseFormat = (data) => `data: ${data}\n\n`;
|
|
|
11
11
|
const identityFormat = (data) => data;
|
|
12
12
|
const textEncoder = new TextEncoder();
|
|
13
13
|
const encodeChunk = (s) => textEncoder.encode(s);
|
|
14
|
-
function handleFile(response, set, request) {
|
|
15
|
-
if (!require_universal_constants.isBun && response instanceof Promise) return response.then((res) => handleFile(res, set, request));
|
|
16
|
-
const size = response.size;
|
|
14
|
+
function handleFile(response, set, request, size = response.size) {
|
|
15
|
+
if (!require_universal_constants.isBun && response instanceof Promise) return response.then((res) => handleFile(res, set, request, size));
|
|
17
16
|
const rangeHeader = request?.headers.get("range");
|
|
18
17
|
if (rangeHeader) {
|
|
19
18
|
const match = /bytes=(\d*)-(\d*)/.exec(rangeHeader);
|
|
@@ -48,26 +47,27 @@ function handleFile(response, set, request) {
|
|
|
48
47
|
});
|
|
49
48
|
}
|
|
50
49
|
}
|
|
50
|
+
const body = "value" in response ? response.value : response;
|
|
51
51
|
const immutable = set && (set.status === 206 || set.status === 304 || set.status === 412 || set.status === 416);
|
|
52
52
|
const defaultHeader = immutable ? require_utils.nullObject() : {
|
|
53
53
|
"accept-ranges": "bytes",
|
|
54
54
|
"content-range": size ? `bytes 0-${size - 1}/${size}` : void 0
|
|
55
55
|
};
|
|
56
|
-
if (!set && !size) return new Response(
|
|
57
|
-
if (!set) return new Response(
|
|
56
|
+
if (!set && !size) return new Response(body);
|
|
57
|
+
if (!set) return new Response(body, { headers: defaultHeader });
|
|
58
58
|
if (set.headers instanceof Headers) {
|
|
59
59
|
for (const key of Object.keys(defaultHeader)) if (!set.headers.has(key)) set.headers.append(key, defaultHeader[key]);
|
|
60
60
|
if (immutable) {
|
|
61
61
|
set.headers.delete("content-length");
|
|
62
62
|
set.headers.delete("accept-ranges");
|
|
63
63
|
}
|
|
64
|
-
return new Response(
|
|
64
|
+
return new Response(body, set);
|
|
65
65
|
}
|
|
66
|
-
if (require_utils.isNotEmpty(set.headers)) return new Response(
|
|
66
|
+
if (require_utils.isNotEmpty(set.headers)) return new Response(body, {
|
|
67
67
|
status: set.status,
|
|
68
68
|
headers: Object.assign(defaultHeader, set.headers)
|
|
69
69
|
});
|
|
70
|
-
return new Response(
|
|
70
|
+
return new Response(body, {
|
|
71
71
|
status: set.status,
|
|
72
72
|
headers: defaultHeader
|
|
73
73
|
});
|
|
@@ -270,12 +270,26 @@ function handleSet(set) {
|
|
|
270
270
|
}
|
|
271
271
|
function applySetHeaders(target, setHeaders, present) {
|
|
272
272
|
if (setHeaders instanceof Headers) {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
273
|
+
const incoming = setHeaders.getSetCookie();
|
|
274
|
+
if (incoming.length) {
|
|
275
|
+
const cookies = target.getSetCookie();
|
|
276
|
+
for (const cookie of incoming) if (!cookies.includes(cookie)) {
|
|
277
|
+
target.append(setCookie, cookie);
|
|
278
|
+
cookies.push(cookie);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
for (const key of setHeaders.keys()) if (key !== setCookie && !present.has(key)) target.set(key, setHeaders.get(key) ?? "");
|
|
282
|
+
} else {
|
|
283
|
+
let cookies;
|
|
284
|
+
for (const key in setHeaders) if (key === setCookie) {
|
|
285
|
+
const cookie = setHeaders[key];
|
|
286
|
+
cookies ??= target.getSetCookie();
|
|
287
|
+
if (!cookies.includes(cookie)) {
|
|
288
|
+
target.append(key, cookie);
|
|
289
|
+
cookies.push(cookie);
|
|
290
|
+
}
|
|
291
|
+
} else if (!present.has(key)) target.set(key, setHeaders[key]);
|
|
292
|
+
}
|
|
279
293
|
}
|
|
280
294
|
function mergeHeaders(responseHeaders, setHeaders) {
|
|
281
295
|
const headers = new Headers(responseHeaders);
|
|
@@ -327,7 +341,15 @@ function createResponseHandler(handler) {
|
|
|
327
341
|
return newResponse;
|
|
328
342
|
};
|
|
329
343
|
}
|
|
330
|
-
|
|
344
|
+
function teeChunkCost(chunk) {
|
|
345
|
+
if (typeof chunk === "string") return chunk.length;
|
|
346
|
+
if (typeof chunk !== "object" || chunk === null) return 64;
|
|
347
|
+
const byteLength = chunk.byteLength;
|
|
348
|
+
if (typeof byteLength === "number") return byteLength;
|
|
349
|
+
const size = chunk.size;
|
|
350
|
+
if (typeof size === "number") return size;
|
|
351
|
+
return 64;
|
|
352
|
+
}
|
|
331
353
|
const doneResult = {
|
|
332
354
|
done: true,
|
|
333
355
|
value: void 0
|
package/dist/adapter/utils.mjs
CHANGED
|
@@ -10,9 +10,8 @@ const sseFormat = (data) => `data: ${data}\n\n`;
|
|
|
10
10
|
const identityFormat = (data) => data;
|
|
11
11
|
const textEncoder = new TextEncoder();
|
|
12
12
|
const encodeChunk = (s) => textEncoder.encode(s);
|
|
13
|
-
function handleFile(response, set, request) {
|
|
14
|
-
if (!isBun && response instanceof Promise) return response.then((res) => handleFile(res, set, request));
|
|
15
|
-
const size = response.size;
|
|
13
|
+
function handleFile(response, set, request, size = response.size) {
|
|
14
|
+
if (!isBun && response instanceof Promise) return response.then((res) => handleFile(res, set, request, size));
|
|
16
15
|
const rangeHeader = request?.headers.get("range");
|
|
17
16
|
if (rangeHeader) {
|
|
18
17
|
const match = /bytes=(\d*)-(\d*)/.exec(rangeHeader);
|
|
@@ -47,26 +46,27 @@ function handleFile(response, set, request) {
|
|
|
47
46
|
});
|
|
48
47
|
}
|
|
49
48
|
}
|
|
49
|
+
const body = "value" in response ? response.value : response;
|
|
50
50
|
const immutable = set && (set.status === 206 || set.status === 304 || set.status === 412 || set.status === 416);
|
|
51
51
|
const defaultHeader = immutable ? nullObject() : {
|
|
52
52
|
"accept-ranges": "bytes",
|
|
53
53
|
"content-range": size ? `bytes 0-${size - 1}/${size}` : void 0
|
|
54
54
|
};
|
|
55
|
-
if (!set && !size) return new Response(
|
|
56
|
-
if (!set) return new Response(
|
|
55
|
+
if (!set && !size) return new Response(body);
|
|
56
|
+
if (!set) return new Response(body, { headers: defaultHeader });
|
|
57
57
|
if (set.headers instanceof Headers) {
|
|
58
58
|
for (const key of Object.keys(defaultHeader)) if (!set.headers.has(key)) set.headers.append(key, defaultHeader[key]);
|
|
59
59
|
if (immutable) {
|
|
60
60
|
set.headers.delete("content-length");
|
|
61
61
|
set.headers.delete("accept-ranges");
|
|
62
62
|
}
|
|
63
|
-
return new Response(
|
|
63
|
+
return new Response(body, set);
|
|
64
64
|
}
|
|
65
|
-
if (isNotEmpty(set.headers)) return new Response(
|
|
65
|
+
if (isNotEmpty(set.headers)) return new Response(body, {
|
|
66
66
|
status: set.status,
|
|
67
67
|
headers: Object.assign(defaultHeader, set.headers)
|
|
68
68
|
});
|
|
69
|
-
return new Response(
|
|
69
|
+
return new Response(body, {
|
|
70
70
|
status: set.status,
|
|
71
71
|
headers: defaultHeader
|
|
72
72
|
});
|
|
@@ -269,12 +269,26 @@ function handleSet(set) {
|
|
|
269
269
|
}
|
|
270
270
|
function applySetHeaders(target, setHeaders, present) {
|
|
271
271
|
if (setHeaders instanceof Headers) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
272
|
+
const incoming = setHeaders.getSetCookie();
|
|
273
|
+
if (incoming.length) {
|
|
274
|
+
const cookies = target.getSetCookie();
|
|
275
|
+
for (const cookie of incoming) if (!cookies.includes(cookie)) {
|
|
276
|
+
target.append(setCookie, cookie);
|
|
277
|
+
cookies.push(cookie);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
for (const key of setHeaders.keys()) if (key !== setCookie && !present.has(key)) target.set(key, setHeaders.get(key) ?? "");
|
|
281
|
+
} else {
|
|
282
|
+
let cookies;
|
|
283
|
+
for (const key in setHeaders) if (key === setCookie) {
|
|
284
|
+
const cookie = setHeaders[key];
|
|
285
|
+
cookies ??= target.getSetCookie();
|
|
286
|
+
if (!cookies.includes(cookie)) {
|
|
287
|
+
target.append(key, cookie);
|
|
288
|
+
cookies.push(cookie);
|
|
289
|
+
}
|
|
290
|
+
} else if (!present.has(key)) target.set(key, setHeaders[key]);
|
|
291
|
+
}
|
|
278
292
|
}
|
|
279
293
|
function mergeHeaders(responseHeaders, setHeaders) {
|
|
280
294
|
const headers = new Headers(responseHeaders);
|
|
@@ -326,7 +340,15 @@ function createResponseHandler(handler) {
|
|
|
326
340
|
return newResponse;
|
|
327
341
|
};
|
|
328
342
|
}
|
|
329
|
-
|
|
343
|
+
function teeChunkCost(chunk) {
|
|
344
|
+
if (typeof chunk === "string") return chunk.length;
|
|
345
|
+
if (typeof chunk !== "object" || chunk === null) return 64;
|
|
346
|
+
const byteLength = chunk.byteLength;
|
|
347
|
+
if (typeof byteLength === "number") return byteLength;
|
|
348
|
+
const size = chunk.size;
|
|
349
|
+
if (typeof size === "number") return size;
|
|
350
|
+
return 64;
|
|
351
|
+
}
|
|
330
352
|
const doneResult = {
|
|
331
353
|
done: true,
|
|
332
354
|
value: void 0
|
|
@@ -11,13 +11,14 @@ function handleElysiaFile(file, set = { headers: require_utils.nullObject() }, r
|
|
|
11
11
|
const contentType = require_universal_file.mime[path.slice(path.lastIndexOf(".") + 1).toLowerCase()];
|
|
12
12
|
const headers = set.headers;
|
|
13
13
|
if (contentType) headers["content-type"] = contentType;
|
|
14
|
-
|
|
14
|
+
const stats = file.stats;
|
|
15
|
+
if (stats) return stats.then((stat) => {
|
|
15
16
|
const size = stat.size;
|
|
16
|
-
if (size !== void 0) {
|
|
17
|
+
if (size !== void 0 && set.status !== 206 && set.status !== 304 && set.status !== 412 && set.status !== 416) {
|
|
17
18
|
headers["content-range"] = `bytes 0-${size - 1}/${size}`;
|
|
18
19
|
headers["content-length"] = size;
|
|
19
20
|
}
|
|
20
|
-
return require_adapter_utils.handleFile(file
|
|
21
|
+
return require_adapter_utils.handleFile(file, set, request, size);
|
|
21
22
|
});
|
|
22
23
|
return require_adapter_utils.handleFile(file.value, set, request);
|
|
23
24
|
}
|
|
@@ -10,13 +10,14 @@ function handleElysiaFile(file, set = { headers: nullObject() }, request) {
|
|
|
10
10
|
const contentType = mime[path.slice(path.lastIndexOf(".") + 1).toLowerCase()];
|
|
11
11
|
const headers = set.headers;
|
|
12
12
|
if (contentType) headers["content-type"] = contentType;
|
|
13
|
-
|
|
13
|
+
const stats = file.stats;
|
|
14
|
+
if (stats) return stats.then((stat) => {
|
|
14
15
|
const size = stat.size;
|
|
15
|
-
if (size !== void 0) {
|
|
16
|
+
if (size !== void 0 && set.status !== 206 && set.status !== 304 && set.status !== 412 && set.status !== 416) {
|
|
16
17
|
headers["content-range"] = `bytes 0-${size - 1}/${size}`;
|
|
17
18
|
headers["content-length"] = size;
|
|
18
19
|
}
|
|
19
|
-
return handleFile(file
|
|
20
|
+
return handleFile(file, set, request, size);
|
|
20
21
|
});
|
|
21
22
|
return handleFile(file.value, set, request);
|
|
22
23
|
}
|
|
@@ -22,7 +22,12 @@ function parseFormData(context, contentType) {
|
|
|
22
22
|
const fixedCt = semi === -1 ? lowercaseContentType(fullCt) : lowercaseContentType(fullCt.slice(0, semi)) + fullCt.slice(semi);
|
|
23
23
|
const headers = new Headers(context.request.headers);
|
|
24
24
|
headers.set("content-type", fixedCt);
|
|
25
|
-
return new Request(context.request, {
|
|
25
|
+
return new Request(context.request.url, {
|
|
26
|
+
method: context.request.method,
|
|
27
|
+
headers,
|
|
28
|
+
body: context.request.body,
|
|
29
|
+
duplex: "half"
|
|
30
|
+
}).formData().then(require_adapter_web_standard_utils.formDataToObject);
|
|
26
31
|
}
|
|
27
32
|
return context.request.formData().then(require_adapter_web_standard_utils.formDataToObject);
|
|
28
33
|
}
|
|
@@ -45,7 +50,10 @@ const WebStandardAdapter = require_adapter_index.createAdapter({
|
|
|
45
50
|
break;
|
|
46
51
|
case 111: return context.request.arrayBuffer();
|
|
47
52
|
case 114: return parseFormData(context, contentType);
|
|
48
|
-
default:
|
|
53
|
+
default:
|
|
54
|
+
if (ct.charCodeAt(0) === 116) return context.request.text();
|
|
55
|
+
const semi = ct.indexOf(";");
|
|
56
|
+
if ((semi === -1 ? ct : ct.slice(0, semi)).endsWith("+json")) return context.request.json();
|
|
49
57
|
}
|
|
50
58
|
}
|
|
51
59
|
},
|
|
@@ -21,7 +21,12 @@ function parseFormData(context, contentType) {
|
|
|
21
21
|
const fixedCt = semi === -1 ? lowercaseContentType(fullCt) : lowercaseContentType(fullCt.slice(0, semi)) + fullCt.slice(semi);
|
|
22
22
|
const headers = new Headers(context.request.headers);
|
|
23
23
|
headers.set("content-type", fixedCt);
|
|
24
|
-
return new Request(context.request, {
|
|
24
|
+
return new Request(context.request.url, {
|
|
25
|
+
method: context.request.method,
|
|
26
|
+
headers,
|
|
27
|
+
body: context.request.body,
|
|
28
|
+
duplex: "half"
|
|
29
|
+
}).formData().then(formDataToObject);
|
|
25
30
|
}
|
|
26
31
|
return context.request.formData().then(formDataToObject);
|
|
27
32
|
}
|
|
@@ -44,7 +49,10 @@ const WebStandardAdapter = createAdapter({
|
|
|
44
49
|
break;
|
|
45
50
|
case 111: return context.request.arrayBuffer();
|
|
46
51
|
case 114: return parseFormData(context, contentType);
|
|
47
|
-
default:
|
|
52
|
+
default:
|
|
53
|
+
if (ct.charCodeAt(0) === 116) return context.request.text();
|
|
54
|
+
const semi = ct.indexOf(";");
|
|
55
|
+
if ((semi === -1 ? ct : ct.slice(0, semi)).endsWith("+json")) return context.request.json();
|
|
48
56
|
}
|
|
49
57
|
}
|
|
50
58
|
},
|
|
@@ -83,8 +83,14 @@ function setNested(body, path, value, budget) {
|
|
|
83
83
|
i += 2;
|
|
84
84
|
} else {
|
|
85
85
|
const start = i;
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
let allDigits = i < len;
|
|
87
|
+
while (i < len && path.charCodeAt(i) !== BRACKET_C) {
|
|
88
|
+
const c = path.charCodeAt(i);
|
|
89
|
+
if (c < ZERO || c > NINE) allDigits = false;
|
|
90
|
+
i++;
|
|
91
|
+
}
|
|
92
|
+
const segment = path.slice(start, i);
|
|
93
|
+
key = allDigits ? +segment : segment;
|
|
88
94
|
i++;
|
|
89
95
|
}
|
|
90
96
|
} else {
|
|
@@ -82,8 +82,14 @@ function setNested(body, path, value, budget) {
|
|
|
82
82
|
i += 2;
|
|
83
83
|
} else {
|
|
84
84
|
const start = i;
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
let allDigits = i < len;
|
|
86
|
+
while (i < len && path.charCodeAt(i) !== BRACKET_C) {
|
|
87
|
+
const c = path.charCodeAt(i);
|
|
88
|
+
if (c < ZERO || c > NINE) allDigits = false;
|
|
89
|
+
i++;
|
|
90
|
+
}
|
|
91
|
+
const segment = path.slice(start, i);
|
|
92
|
+
key = allDigits ? +segment : segment;
|
|
87
93
|
i++;
|
|
88
94
|
}
|
|
89
95
|
} else {
|
package/dist/base.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { ElysiaStatus } from "./error.js";
|
|
|
2
2
|
import { TraceHandler } from "./trace.js";
|
|
3
3
|
import { AnySchema } from "./type/types.js";
|
|
4
4
|
import { ListenCallback, Serve, Server } from "./universal/server.js";
|
|
5
|
-
import { AddRoute, AddWSRoute, AfterHandler, AfterResponseHandler, AnyErrorConstructor, AnyLocalHook, BodyHandler, CompiledHandler, CreateEden, DefaultEphemeral, DefaultMetadata, DefaultSingleton, DefinitionBase, DocumentDecoration, ElysiaConfig, ElysiaHandlerToResponseSchemaAmbiguous, EphemeralType, ErrorDefinitionEntry, ErrorHandler, EventScope, ExcludeElysiaResponse, ExtractErrorFromHandle, GlobalHookReturn, GracefulHandler, GuardHookSingleton, GuardLocalHook, HTTPMethod, HookContextSchema, HookContextSingleton, InlineHandler, InlineHandlerNonMacro, InputSchema, InputSchemaKey, InternalRoute, IntersectIfObjectSchema, JoinPath, LocalHook, LocalHookReturn, Macro, MacroSchemaChannel, MacroToContext, MacroToProperty, MapResponse, MaybeArray, MaybePromise, MergeElysiaInstances, MergeSchema, MergeScopedSchemas, MetadataBase, NonResolvableMacroKey, ObjectMacroDefs, OptionalHandler, PluginHookReturn, PreHandler, Prettify, PublicRoute, ResolveRouteErrors, RouteBase, SingletonBase, TransformHandler, UnionResponseStatus, UnwrapRoute, WrapFn } from "./types.js";
|
|
5
|
+
import { AddRoute, AddWSRoute, AfterHandler, AfterResponseHandler, AnyErrorConstructor, AnyLocalHook, BodyHandler, CompiledHandler, CreateEden, DefaultEphemeral, DefaultMetadata, DefaultSingleton, DefinitionBase, DocumentDecoration, ElysiaConfig, ElysiaHandlerToResponseSchemaAmbiguous, EphemeralType, ErrorDefinitionEntry, ErrorHandler, EventScope, ExcludeElysiaResponse, ExtractErrorFromHandle, GlobalHookReturn, GracefulHandler, GuardHookSingleton, GuardLocalHook, HTTPMethod, HistoryEntry, HookContextSchema, HookContextSingleton, InlineHandler, InlineHandlerNonMacro, InputSchema, InputSchemaKey, InternalRoute, IntersectIfObjectSchema, JoinPath, LocalHook, LocalHookReturn, Macro, MacroSchemaChannel, MacroToContext, MacroToProperty, MapResponse, MaybeArray, MaybePromise, MergeElysiaInstances, MergeSchema, MergeScopedSchemas, MetadataBase, NonResolvableMacroKey, ObjectMacroDefs, OptionalHandler, PluginHookReturn, PreHandler, Prettify, PublicRoute, ResolveRouteErrors, RouteBase, SingletonBase, TransformHandler, UnionResponseStatus, UnwrapRoute, WrapFn } from "./types.js";
|
|
6
6
|
import { ChainNode } from "./utils.js";
|
|
7
7
|
import { Context, ErrorContext, LifecycleContext } from "./context.js";
|
|
8
8
|
import { WSHandlerResponse, WSLocalHook, WSMessageHandler } from "./ws/types.js";
|
|
@@ -14,7 +14,6 @@ type AnyElysia = Elysia<any, any, any, any, any, any, any, any>;
|
|
|
14
14
|
interface StaticMapAliases {
|
|
15
15
|
method: string;
|
|
16
16
|
paths: string[];
|
|
17
|
-
head: boolean;
|
|
18
17
|
}
|
|
19
18
|
declare class Elysia<const in out BasePath extends string = '', const in out Scope extends EventScope = 'local', const in out Singleton extends SingletonBase = DefaultSingleton, const in out Definitions extends DefinitionBase = {
|
|
20
19
|
typebox: {};
|
|
@@ -44,7 +43,9 @@ declare class Elysia<const in out BasePath extends string = '', const in out Sco
|
|
|
44
43
|
};
|
|
45
44
|
'~hookChain'?: ChainNode;
|
|
46
45
|
server?: Server;
|
|
47
|
-
get history():
|
|
46
|
+
get history(): readonly HistoryEntry[];
|
|
47
|
+
get ['~routes'](): readonly InternalRoute[];
|
|
48
|
+
['~addRoute'](route: InternalRoute): this;
|
|
48
49
|
'~router'?: Memoirist<CompiledHandler>;
|
|
49
50
|
'~map'?: {
|
|
50
51
|
[method: string]: {
|
|
@@ -860,4 +861,4 @@ declare class Elysia<const in out BasePath extends string = '', const in out Sco
|
|
|
860
861
|
stop(closeActiveConnections?: boolean): Promise<void> | void;
|
|
861
862
|
}
|
|
862
863
|
//#endregion
|
|
863
|
-
export { AnyElysia, Elysia
|
|
864
|
+
export { AnyElysia, Elysia };
|