elysia 2.0.0-exp.46 → 2.0.0-exp.49
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 -5
- package/dist/adapter/bun/index.mjs +17 -6
- package/dist/adapter/index.d.ts +1 -1
- package/dist/adapter/index.js +1 -3
- package/dist/adapter/index.mjs +1 -3
- package/dist/adapter/response-ownership.d.ts +5 -0
- package/dist/adapter/response-ownership.js +13 -0
- package/dist/adapter/response-ownership.mjs +10 -0
- package/dist/adapter/utils.d.ts +4 -4
- package/dist/adapter/utils.js +57 -17
- package/dist/adapter/utils.mjs +58 -18
- package/dist/adapter/web-standard/handler.d.ts +3 -3
- package/dist/adapter/web-standard/handler.js +39 -43
- package/dist/adapter/web-standard/handler.mjs +39 -43
- package/dist/base.d.ts +27 -2
- package/dist/base.js +191 -59
- package/dist/base.mjs +191 -59
- package/dist/compile/analysis-cache.d.ts +6 -0
- package/dist/compile/analysis-cache.js +14 -0
- package/dist/compile/analysis-cache.mjs +13 -0
- package/dist/compile/aot-capture.js +15 -1
- package/dist/compile/aot-capture.mjs +15 -1
- package/dist/compile/aot.d.ts +5 -0
- package/dist/compile/aot.js +8 -0
- package/dist/compile/aot.mjs +8 -0
- package/dist/compile/handler/descriptor.d.ts +3 -3
- package/dist/compile/handler/descriptor.js +4 -3
- package/dist/compile/handler/descriptor.mjs +5 -4
- package/dist/compile/handler/index.d.ts +6 -3
- package/dist/compile/handler/index.js +11 -43
- package/dist/compile/handler/index.mjs +11 -43
- package/dist/compile/handler/jit.d.ts +1 -1
- package/dist/compile/handler/jit.js +26 -18
- package/dist/compile/handler/jit.mjs +27 -19
- package/dist/compile/handler/params.js +1 -0
- package/dist/compile/handler/params.mjs +2 -1
- package/dist/compile/handler/reconstruct.d.ts +2 -2
- package/dist/compile/handler/reconstruct.js +12 -3
- package/dist/compile/handler/reconstruct.mjs +13 -4
- package/dist/compile/handler/utils.js +1 -1
- package/dist/compile/handler/utils.mjs +1 -1
- package/dist/compile/jit-probe.d.ts +0 -2
- package/dist/compile/jit-probe.js +1 -3
- package/dist/compile/jit-probe.mjs +1 -3
- package/dist/compile/lexer.d.ts +1 -1
- package/dist/cookie/crypto.d.ts +4 -1
- package/dist/cookie/crypto.js +26 -4
- package/dist/cookie/crypto.mjs +24 -5
- package/dist/cookie/utils.d.ts +10 -3
- package/dist/cookie/utils.js +30 -5
- package/dist/cookie/utils.mjs +30 -6
- package/dist/generation.d.ts +11 -1
- package/dist/generation.js +17 -1
- package/dist/generation.mjs +13 -1
- package/dist/handler/fetch.js +13 -11
- package/dist/handler/fetch.mjs +13 -11
- package/dist/index.d.ts +5 -4
- package/dist/index.js +3 -0
- package/dist/index.mjs +3 -2
- package/dist/package.js +1 -1
- package/dist/package.mjs +1 -1
- package/dist/plugin/aot/core.d.ts +23 -4
- package/dist/plugin/aot/core.js +22 -26
- package/dist/plugin/aot/core.mjs +21 -25
- package/dist/plugin/aot/rspack.js +1 -2
- package/dist/plugin/aot/rspack.mjs +2 -3
- package/dist/plugin/aot/source.d.ts +3 -33
- package/dist/plugin/aot/source.js +29 -31
- package/dist/plugin/aot/source.mjs +30 -31
- package/dist/plugin/aot/treeshake.d.ts +2 -8
- package/dist/plugin/aot/treeshake.js +3 -3
- package/dist/plugin/aot/treeshake.mjs +3 -3
- package/dist/plugin/trace.d.ts +10 -0
- package/dist/plugin/trace.js +39 -0
- package/dist/plugin/trace.mjs +36 -0
- package/dist/plugin/websocket.d.ts +6 -0
- package/dist/plugin/websocket.js +61 -0
- package/dist/plugin/websocket.mjs +60 -0
- package/dist/route-table.d.ts +1 -2
- package/dist/route-table.js +2 -6
- package/dist/route-table.mjs +2 -6
- package/dist/sucrose.d.ts +1 -7
- package/dist/sucrose.js +444 -231
- package/dist/sucrose.mjs +445 -229
- package/dist/trace.d.ts +6 -1
- package/dist/type/bridge-live.d.ts +4 -3
- package/dist/type/bridge-live.js +2 -0
- package/dist/type/bridge-live.mjs +2 -1
- package/dist/type/bridge.d.ts +4 -3
- package/dist/type/bridge.js +2 -0
- package/dist/type/bridge.mjs +2 -1
- package/dist/type/constants.d.ts +1 -1
- package/dist/type/exports.d.ts +1 -1
- package/dist/type/index.d.ts +1 -1
- package/dist/type/validator/index.d.ts +2 -2
- package/dist/type/validator/validator-cache.js +7 -3
- package/dist/type/validator/validator-cache.mjs +7 -3
- package/dist/types.d.ts +1 -31
- package/dist/utils.d.ts +12 -1
- package/dist/utils.js +20 -0
- package/dist/utils.mjs +18 -1
- package/dist/validator/index.d.ts +1 -1
- package/dist/validator/route.d.ts +1 -1
- package/dist/ws/context.d.ts +1 -1
- package/dist/ws/route.d.ts +4 -2
- package/dist/ws/route.js +37 -3
- package/dist/ws/route.mjs +36 -4
- package/dist/ws/types.d.ts +46 -2
- package/package.json +9 -10
- package/dist/compile/plan/emit.d.ts +0 -18
- package/dist/compile/plan/emit.js +0 -434
- package/dist/compile/plan/emit.mjs +0 -433
- package/dist/compile/plan/plan.d.ts +0 -53
- package/dist/compile/plan/plan.js +0 -96
- package/dist/compile/plan/plan.mjs +0 -94
- package/dist/experimental/resume.d.ts +0 -11
- package/dist/experimental/resume.js +0 -12
- package/dist/experimental/resume.mjs +0 -11
|
@@ -7,6 +7,7 @@ const require_adapter_default_headers = require('../default-headers.js');
|
|
|
7
7
|
const require_adapter_utils = require('../utils.js');
|
|
8
8
|
|
|
9
9
|
//#region src/adapter/web-standard/handler.ts
|
|
10
|
+
const textPlainInit = { headers: { "content-type": "text/plain" } };
|
|
10
11
|
function handleElysiaFile(file, set = { headers: require_utils.nullObject() }, request) {
|
|
11
12
|
const path = file.path;
|
|
12
13
|
const contentType = require_universal_file.mime[path.slice(path.lastIndexOf(".") + 1).toLowerCase()];
|
|
@@ -20,23 +21,17 @@ function handleElysiaFile(file, set = { headers: require_utils.nullObject() }, r
|
|
|
20
21
|
});
|
|
21
22
|
return require_adapter_utils.handleFile(file.value, set, request);
|
|
22
23
|
}
|
|
23
|
-
function
|
|
24
|
-
if (response === null || response === void 0) return void 0;
|
|
25
|
-
const proto = Object.getPrototypeOf(response);
|
|
26
|
-
if (proto === null) return "Object";
|
|
27
|
-
return proto.constructor?.name;
|
|
28
|
-
}
|
|
29
|
-
function mapResponseWithSet(response, set, request) {
|
|
24
|
+
function mapResponseWithSet(response, set, request, owned) {
|
|
30
25
|
require_adapter_utils.handleSet(set);
|
|
31
26
|
const headers = set.headers;
|
|
32
|
-
switch (
|
|
27
|
+
switch (response?.constructor?.name) {
|
|
33
28
|
case "String":
|
|
34
29
|
if (!require_universal_constants.isBun && !headers["content-type"]) require_adapter_utils.materializeSetHeaders(set)["content-type"] = "text/plain";
|
|
35
30
|
return new Response(response, set);
|
|
36
31
|
case "Array": return Response.json(response, set);
|
|
37
32
|
case "Object":
|
|
38
33
|
if (response["~ely-form"]) return new Response(require_utils.formToFormData(response), set);
|
|
39
|
-
if (typeof response?.next === "function") return handleStream(response, set, request);
|
|
34
|
+
if (typeof response?.next === "function") return handleStream(response, set, request, void 0, owned);
|
|
40
35
|
return Response.json(response, set);
|
|
41
36
|
case "Number":
|
|
42
37
|
case "Boolean": return new Response(response.toString(), set);
|
|
@@ -46,32 +41,33 @@ function mapResponseWithSet(response, set, request) {
|
|
|
46
41
|
case "ElysiaStatus":
|
|
47
42
|
set.status = response.code;
|
|
48
43
|
if (response.headers) Object.assign(require_adapter_utils.materializeSetHeaders(set), response.headers);
|
|
49
|
-
return mapResponseWithSet(response.response, set, request);
|
|
44
|
+
return mapResponseWithSet(response.response, set, request, owned);
|
|
50
45
|
case void 0: return response ? Response.json(response, set) : new Response(null, set);
|
|
51
|
-
case "Response": return handleResponse(response, set, request);
|
|
52
|
-
case "Error": return errorToResponse(response, set);
|
|
53
|
-
case "Promise": return response.then((x) => mapResponseWithSet(x, set, request));
|
|
54
|
-
case "Function": return mapResponseWithSet(response(), set, request);
|
|
46
|
+
case "Response": return handleResponse(response, set, request, owned);
|
|
47
|
+
case "Error": return errorToResponse(response, set, request, owned);
|
|
48
|
+
case "Promise": return response.then((x) => mapResponseWithSet(x, set, request, owned));
|
|
49
|
+
case "Function": return mapResponseWithSet(response(), set, request, owned);
|
|
55
50
|
case "FormData": return new Response(response, set);
|
|
56
|
-
default: return mapResponseFallback(response, set, request);
|
|
51
|
+
default: return mapResponseFallback(response, set, request, owned);
|
|
57
52
|
}
|
|
58
53
|
}
|
|
59
|
-
function mapResponse(response, set, request) {
|
|
54
|
+
function mapResponse(response, set, request, owned) {
|
|
60
55
|
const headers = set.headers;
|
|
61
|
-
if (set.status !== void 0 || set.cookie || headers["\0"] === headers || require_utils.isNotEmpty(headers)) return mapResponseWithSet(response, set, request);
|
|
56
|
+
if (set.status !== void 0 || set.cookie || headers["\0"] === headers || require_utils.isNotEmpty(headers)) return mapResponseWithSet(response, set, request, owned);
|
|
62
57
|
if (response instanceof require_error.ElysiaStatus) {
|
|
63
58
|
set.status = response.code;
|
|
64
59
|
if (response.headers) Object.assign(set.headers, response.headers);
|
|
65
|
-
return mapResponse(response.response, set, request);
|
|
60
|
+
return mapResponse(response.response, set, request, owned);
|
|
66
61
|
}
|
|
67
|
-
if (response instanceof Response) return response;
|
|
68
|
-
if (response instanceof Promise) return response.then((x) => mapResponse(x, set, request));
|
|
69
|
-
if (typeof response?.next === "function" || response instanceof ReadableStream) return handleStream(response, set, request);
|
|
70
|
-
return mapCompactResponse(response, request);
|
|
62
|
+
if (response instanceof Response) return owned ? handleResponse(response, void 0, request, true) : response;
|
|
63
|
+
if (response instanceof Promise) return response.then((x) => mapResponse(x, set, request, owned));
|
|
64
|
+
if (typeof response?.next === "function" || response instanceof ReadableStream) return handleStream(response, set, request, void 0, owned);
|
|
65
|
+
return mapCompactResponse(response, request, owned);
|
|
71
66
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
67
|
+
const textHeaders = require_universal_constants.isBun ? void 0 : textPlainInit;
|
|
68
|
+
function mapCompactResponse(response, request, owned) {
|
|
69
|
+
switch (response?.constructor?.name) {
|
|
70
|
+
case "String": return new Response(response, textHeaders);
|
|
75
71
|
case "Array": return Response.json(response);
|
|
76
72
|
case "Object":
|
|
77
73
|
if (response["~ely-form"]) return new Response(require_utils.formToFormData(response));
|
|
@@ -84,22 +80,22 @@ function mapCompactResponse(response, request) {
|
|
|
84
80
|
case "ElysiaStatus": return mapResponse(response.response, {
|
|
85
81
|
status: response.code,
|
|
86
82
|
headers: response.headers ? Object.assign(require_utils.nullObject(), response.headers) : require_utils.nullObject()
|
|
87
|
-
});
|
|
83
|
+
}, request, owned);
|
|
88
84
|
case void 0: return response ? Response.json(response) : new Response("");
|
|
89
|
-
case "Response": return response;
|
|
90
|
-
case "Error": return errorToResponse(response);
|
|
91
|
-
case "Promise": return response.then((x) => mapCompactResponse(x, request));
|
|
92
|
-
case "Function": return mapCompactResponse(response(), request);
|
|
85
|
+
case "Response": return owned ? handleResponse(response, void 0, request, true) : response;
|
|
86
|
+
case "Error": return errorToResponse(response, void 0, request, owned);
|
|
87
|
+
case "Promise": return response.then((x) => mapCompactResponse(x, request, owned));
|
|
88
|
+
case "Function": return mapCompactResponse(response(), request, owned);
|
|
93
89
|
case "FormData": return new Response(response);
|
|
94
|
-
default: return mapCompactResponseFallback(response, void 0, request);
|
|
90
|
+
default: return mapCompactResponseFallback(response, void 0, request, owned);
|
|
95
91
|
}
|
|
96
92
|
}
|
|
97
|
-
function errorToResponse(error, set) {
|
|
93
|
+
function errorToResponse(error, set, request, owned = false) {
|
|
98
94
|
if (error?.toResponse) {
|
|
99
95
|
const targetSet = set ?? { headers: require_utils.nullObject() };
|
|
100
96
|
const apply = (resolved) => {
|
|
101
97
|
if (resolved instanceof Response) targetSet.status = resolved.status;
|
|
102
|
-
return mapResponse(resolved, targetSet);
|
|
98
|
+
return mapResponse(resolved, targetSet, request, owned);
|
|
103
99
|
};
|
|
104
100
|
const raw = error.toResponse();
|
|
105
101
|
return typeof raw?.then === "function" ? raw.then(apply) : apply(raw);
|
|
@@ -115,31 +111,31 @@ function errorToResponse(error, set) {
|
|
|
115
111
|
});
|
|
116
112
|
}
|
|
117
113
|
function mapFallback(map) {
|
|
118
|
-
return (response, set, request) => {
|
|
119
|
-
if (response instanceof Response) return handleResponse(response, set, request);
|
|
120
|
-
if (response instanceof Promise) return response.then((x) => map(x, set, request));
|
|
121
|
-
if (response instanceof Error) return errorToResponse(response, set);
|
|
114
|
+
return (response, set, request, owned = false) => {
|
|
115
|
+
if (response instanceof Response) return handleResponse(response, set, request, owned);
|
|
116
|
+
if (response instanceof Promise) return response.then((x) => map(x, set, request, owned));
|
|
117
|
+
if (response instanceof Error) return errorToResponse(response, set, request, owned);
|
|
122
118
|
if (response instanceof require_error.ElysiaStatus) if (set) {
|
|
123
119
|
set.status = response.code;
|
|
124
120
|
if (response.headers) set.headers = {
|
|
125
121
|
...set.headers,
|
|
126
122
|
...response.headers
|
|
127
123
|
};
|
|
128
|
-
return map(response.response, set, request);
|
|
124
|
+
return map(response.response, set, request, owned);
|
|
129
125
|
} else return mapResponse(response.response, {
|
|
130
126
|
status: response.code,
|
|
131
127
|
headers: response.headers ? { ...response.headers } : {}
|
|
132
|
-
});
|
|
133
|
-
if (typeof response?.next === "function" || response instanceof ReadableStream) return handleStream(response, set, request);
|
|
134
|
-
if (typeof response?.then === "function") return response.then((x) => map(x, set, request));
|
|
128
|
+
}, request, owned);
|
|
129
|
+
if (typeof response?.next === "function" || response instanceof ReadableStream) return handleStream(response, set, request, void 0, owned);
|
|
130
|
+
if (typeof response?.then === "function") return response.then((x) => map(x, set, request, owned));
|
|
135
131
|
if (Array.isArray(response)) return Response.json(response);
|
|
136
|
-
if (typeof response?.toResponse === "function") return map(response.toResponse(), set, request);
|
|
132
|
+
if (typeof response?.toResponse === "function") return map(response.toResponse(), set, request, owned);
|
|
137
133
|
if (response?.constructor?.name === "Cookie" && response.jar) return new Response(response.value, set);
|
|
138
134
|
return new Response(response, set);
|
|
139
135
|
};
|
|
140
136
|
}
|
|
141
137
|
const mapResponseFallback = mapFallback(mapResponse);
|
|
142
|
-
const mapCompactResponseFallback = mapFallback((response, _, request) => mapCompactResponse(response, request));
|
|
138
|
+
const mapCompactResponseFallback = mapFallback((response, _, request, owned) => mapCompactResponse(response, request, owned));
|
|
143
139
|
const handleResponse = require_adapter_utils.createResponseHandler({
|
|
144
140
|
mapResponse,
|
|
145
141
|
mapCompactResponse
|
|
@@ -6,6 +6,7 @@ import { defaultHeaders } from "../default-headers.mjs";
|
|
|
6
6
|
import { createResponseHandler, createStreamHandler, handleFile, handleSet, materializeSetHeaders } from "../utils.mjs";
|
|
7
7
|
|
|
8
8
|
//#region src/adapter/web-standard/handler.ts
|
|
9
|
+
const textPlainInit = { headers: { "content-type": "text/plain" } };
|
|
9
10
|
function handleElysiaFile(file, set = { headers: nullObject() }, request) {
|
|
10
11
|
const path = file.path;
|
|
11
12
|
const contentType = mime[path.slice(path.lastIndexOf(".") + 1).toLowerCase()];
|
|
@@ -19,23 +20,17 @@ function handleElysiaFile(file, set = { headers: nullObject() }, request) {
|
|
|
19
20
|
});
|
|
20
21
|
return handleFile(file.value, set, request);
|
|
21
22
|
}
|
|
22
|
-
function
|
|
23
|
-
if (response === null || response === void 0) return void 0;
|
|
24
|
-
const proto = Object.getPrototypeOf(response);
|
|
25
|
-
if (proto === null) return "Object";
|
|
26
|
-
return proto.constructor?.name;
|
|
27
|
-
}
|
|
28
|
-
function mapResponseWithSet(response, set, request) {
|
|
23
|
+
function mapResponseWithSet(response, set, request, owned) {
|
|
29
24
|
handleSet(set);
|
|
30
25
|
const headers = set.headers;
|
|
31
|
-
switch (
|
|
26
|
+
switch (response?.constructor?.name) {
|
|
32
27
|
case "String":
|
|
33
28
|
if (!isBun && !headers["content-type"]) materializeSetHeaders(set)["content-type"] = "text/plain";
|
|
34
29
|
return new Response(response, set);
|
|
35
30
|
case "Array": return Response.json(response, set);
|
|
36
31
|
case "Object":
|
|
37
32
|
if (response["~ely-form"]) return new Response(formToFormData(response), set);
|
|
38
|
-
if (typeof response?.next === "function") return handleStream(response, set, request);
|
|
33
|
+
if (typeof response?.next === "function") return handleStream(response, set, request, void 0, owned);
|
|
39
34
|
return Response.json(response, set);
|
|
40
35
|
case "Number":
|
|
41
36
|
case "Boolean": return new Response(response.toString(), set);
|
|
@@ -45,32 +40,33 @@ function mapResponseWithSet(response, set, request) {
|
|
|
45
40
|
case "ElysiaStatus":
|
|
46
41
|
set.status = response.code;
|
|
47
42
|
if (response.headers) Object.assign(materializeSetHeaders(set), response.headers);
|
|
48
|
-
return mapResponseWithSet(response.response, set, request);
|
|
43
|
+
return mapResponseWithSet(response.response, set, request, owned);
|
|
49
44
|
case void 0: return response ? Response.json(response, set) : new Response(null, set);
|
|
50
|
-
case "Response": return handleResponse(response, set, request);
|
|
51
|
-
case "Error": return errorToResponse(response, set);
|
|
52
|
-
case "Promise": return response.then((x) => mapResponseWithSet(x, set, request));
|
|
53
|
-
case "Function": return mapResponseWithSet(response(), set, request);
|
|
45
|
+
case "Response": return handleResponse(response, set, request, owned);
|
|
46
|
+
case "Error": return errorToResponse(response, set, request, owned);
|
|
47
|
+
case "Promise": return response.then((x) => mapResponseWithSet(x, set, request, owned));
|
|
48
|
+
case "Function": return mapResponseWithSet(response(), set, request, owned);
|
|
54
49
|
case "FormData": return new Response(response, set);
|
|
55
|
-
default: return mapResponseFallback(response, set, request);
|
|
50
|
+
default: return mapResponseFallback(response, set, request, owned);
|
|
56
51
|
}
|
|
57
52
|
}
|
|
58
|
-
function mapResponse(response, set, request) {
|
|
53
|
+
function mapResponse(response, set, request, owned) {
|
|
59
54
|
const headers = set.headers;
|
|
60
|
-
if (set.status !== void 0 || set.cookie || headers["\0"] === headers || isNotEmpty(headers)) return mapResponseWithSet(response, set, request);
|
|
55
|
+
if (set.status !== void 0 || set.cookie || headers["\0"] === headers || isNotEmpty(headers)) return mapResponseWithSet(response, set, request, owned);
|
|
61
56
|
if (response instanceof ElysiaStatus) {
|
|
62
57
|
set.status = response.code;
|
|
63
58
|
if (response.headers) Object.assign(set.headers, response.headers);
|
|
64
|
-
return mapResponse(response.response, set, request);
|
|
59
|
+
return mapResponse(response.response, set, request, owned);
|
|
65
60
|
}
|
|
66
|
-
if (response instanceof Response) return response;
|
|
67
|
-
if (response instanceof Promise) return response.then((x) => mapResponse(x, set, request));
|
|
68
|
-
if (typeof response?.next === "function" || response instanceof ReadableStream) return handleStream(response, set, request);
|
|
69
|
-
return mapCompactResponse(response, request);
|
|
61
|
+
if (response instanceof Response) return owned ? handleResponse(response, void 0, request, true) : response;
|
|
62
|
+
if (response instanceof Promise) return response.then((x) => mapResponse(x, set, request, owned));
|
|
63
|
+
if (typeof response?.next === "function" || response instanceof ReadableStream) return handleStream(response, set, request, void 0, owned);
|
|
64
|
+
return mapCompactResponse(response, request, owned);
|
|
70
65
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
const textHeaders = isBun ? void 0 : textPlainInit;
|
|
67
|
+
function mapCompactResponse(response, request, owned) {
|
|
68
|
+
switch (response?.constructor?.name) {
|
|
69
|
+
case "String": return new Response(response, textHeaders);
|
|
74
70
|
case "Array": return Response.json(response);
|
|
75
71
|
case "Object":
|
|
76
72
|
if (response["~ely-form"]) return new Response(formToFormData(response));
|
|
@@ -83,22 +79,22 @@ function mapCompactResponse(response, request) {
|
|
|
83
79
|
case "ElysiaStatus": return mapResponse(response.response, {
|
|
84
80
|
status: response.code,
|
|
85
81
|
headers: response.headers ? Object.assign(nullObject(), response.headers) : nullObject()
|
|
86
|
-
});
|
|
82
|
+
}, request, owned);
|
|
87
83
|
case void 0: return response ? Response.json(response) : new Response("");
|
|
88
|
-
case "Response": return response;
|
|
89
|
-
case "Error": return errorToResponse(response);
|
|
90
|
-
case "Promise": return response.then((x) => mapCompactResponse(x, request));
|
|
91
|
-
case "Function": return mapCompactResponse(response(), request);
|
|
84
|
+
case "Response": return owned ? handleResponse(response, void 0, request, true) : response;
|
|
85
|
+
case "Error": return errorToResponse(response, void 0, request, owned);
|
|
86
|
+
case "Promise": return response.then((x) => mapCompactResponse(x, request, owned));
|
|
87
|
+
case "Function": return mapCompactResponse(response(), request, owned);
|
|
92
88
|
case "FormData": return new Response(response);
|
|
93
|
-
default: return mapCompactResponseFallback(response, void 0, request);
|
|
89
|
+
default: return mapCompactResponseFallback(response, void 0, request, owned);
|
|
94
90
|
}
|
|
95
91
|
}
|
|
96
|
-
function errorToResponse(error, set) {
|
|
92
|
+
function errorToResponse(error, set, request, owned = false) {
|
|
97
93
|
if (error?.toResponse) {
|
|
98
94
|
const targetSet = set ?? { headers: nullObject() };
|
|
99
95
|
const apply = (resolved) => {
|
|
100
96
|
if (resolved instanceof Response) targetSet.status = resolved.status;
|
|
101
|
-
return mapResponse(resolved, targetSet);
|
|
97
|
+
return mapResponse(resolved, targetSet, request, owned);
|
|
102
98
|
};
|
|
103
99
|
const raw = error.toResponse();
|
|
104
100
|
return typeof raw?.then === "function" ? raw.then(apply) : apply(raw);
|
|
@@ -114,31 +110,31 @@ function errorToResponse(error, set) {
|
|
|
114
110
|
});
|
|
115
111
|
}
|
|
116
112
|
function mapFallback(map) {
|
|
117
|
-
return (response, set, request) => {
|
|
118
|
-
if (response instanceof Response) return handleResponse(response, set, request);
|
|
119
|
-
if (response instanceof Promise) return response.then((x) => map(x, set, request));
|
|
120
|
-
if (response instanceof Error) return errorToResponse(response, set);
|
|
113
|
+
return (response, set, request, owned = false) => {
|
|
114
|
+
if (response instanceof Response) return handleResponse(response, set, request, owned);
|
|
115
|
+
if (response instanceof Promise) return response.then((x) => map(x, set, request, owned));
|
|
116
|
+
if (response instanceof Error) return errorToResponse(response, set, request, owned);
|
|
121
117
|
if (response instanceof ElysiaStatus) if (set) {
|
|
122
118
|
set.status = response.code;
|
|
123
119
|
if (response.headers) set.headers = {
|
|
124
120
|
...set.headers,
|
|
125
121
|
...response.headers
|
|
126
122
|
};
|
|
127
|
-
return map(response.response, set, request);
|
|
123
|
+
return map(response.response, set, request, owned);
|
|
128
124
|
} else return mapResponse(response.response, {
|
|
129
125
|
status: response.code,
|
|
130
126
|
headers: response.headers ? { ...response.headers } : {}
|
|
131
|
-
});
|
|
132
|
-
if (typeof response?.next === "function" || response instanceof ReadableStream) return handleStream(response, set, request);
|
|
133
|
-
if (typeof response?.then === "function") return response.then((x) => map(x, set, request));
|
|
127
|
+
}, request, owned);
|
|
128
|
+
if (typeof response?.next === "function" || response instanceof ReadableStream) return handleStream(response, set, request, void 0, owned);
|
|
129
|
+
if (typeof response?.then === "function") return response.then((x) => map(x, set, request, owned));
|
|
134
130
|
if (Array.isArray(response)) return Response.json(response);
|
|
135
|
-
if (typeof response?.toResponse === "function") return map(response.toResponse(), set, request);
|
|
131
|
+
if (typeof response?.toResponse === "function") return map(response.toResponse(), set, request, owned);
|
|
136
132
|
if (response?.constructor?.name === "Cookie" && response.jar) return new Response(response.value, set);
|
|
137
133
|
return new Response(response, set);
|
|
138
134
|
};
|
|
139
135
|
}
|
|
140
136
|
const mapResponseFallback = mapFallback(mapResponse);
|
|
141
|
-
const mapCompactResponseFallback = mapFallback((response, _, request) => mapCompactResponse(response, request));
|
|
137
|
+
const mapCompactResponseFallback = mapFallback((response, _, request, owned) => mapCompactResponse(response, request, owned));
|
|
142
138
|
const handleResponse = createResponseHandler({
|
|
143
139
|
mapResponse,
|
|
144
140
|
mapCompactResponse
|
package/dist/base.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ElysiaStatus } from "./error.js";
|
|
2
|
-
import {
|
|
3
|
-
import { TraceHandler } from "./trace.js";
|
|
2
|
+
import { TraceCapability, TraceHandler } from "./trace.js";
|
|
4
3
|
import { ListenCallback, Serve, Server } from "./universal/server.js";
|
|
5
4
|
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, ScopedHookReturn, ScopedMapDeriveReturn, SingletonBase, StaticMapAliases, TransformHandler, UnionResponseStatus, UnwrapRoute, WrapFn } from "./types.js";
|
|
6
5
|
import { ChainNode } from "./utils.js";
|
|
7
6
|
import { Context, ErrorContext, LifecycleContext } from "./context.js";
|
|
8
7
|
import { AnySchema } from "./type/types.js";
|
|
9
8
|
import { AotFingerprint, CompilerSession, ProgramId } from "./compile/aot.js";
|
|
9
|
+
import { WSCapability, WSHandlerResponse, WSLocalHook, WSMessageHandler, WSOptions, WSOptionsEntry } from "./ws/types.js";
|
|
10
10
|
import { RouteTable } from "./route-table.js";
|
|
11
11
|
import { Generation } from "./generation.js";
|
|
12
12
|
import Memoirist from "memoirist";
|
|
@@ -39,8 +39,18 @@ declare class Elysia<const in out BasePath extends string = '', const in out Sco
|
|
|
39
39
|
hoc?: WrapFn<any>[];
|
|
40
40
|
setup?: GracefulHandler<any>[];
|
|
41
41
|
cleanup?: GracefulHandler<any>[];
|
|
42
|
+
capability?: {
|
|
43
|
+
trace?: {
|
|
44
|
+
provider: TraceCapability;
|
|
45
|
+
};
|
|
46
|
+
ws?: {
|
|
47
|
+
provider: WSCapability;
|
|
48
|
+
options?: WSOptionsEntry[];
|
|
49
|
+
};
|
|
50
|
+
};
|
|
42
51
|
};
|
|
43
52
|
'~hookChain'?: ChainNode;
|
|
53
|
+
'~wsConfig'?: WSOptions;
|
|
44
54
|
server?: Server;
|
|
45
55
|
get history(): readonly HistoryEntry[];
|
|
46
56
|
get ['~routes'](): readonly InternalRoute[];
|
|
@@ -514,6 +524,21 @@ declare class Elysia<const in out BasePath extends string = '', const in out Sco
|
|
|
514
524
|
parser: Metadata['parser'];
|
|
515
525
|
response: Metadata['response'] & MacroContext['response'] & ElysiaHandlerToResponseSchemaAmbiguous<BeforeHandle> & ElysiaHandlerToResponseSchemaAmbiguous<AfterHandle> & ElysiaHandlerToResponseSchemaAmbiguous<ErrorHandle>;
|
|
516
526
|
}, {}, Ephemeral, Volatile>) => NewElysia): Elysia<BasePath, Scope, Singleton, Definitions, Metadata, Routes & NewElysia['~Routes'], Ephemeral, Volatile>;
|
|
527
|
+
/**
|
|
528
|
+
* Single idempotent capability resolver-accessor (README rev 2.1). Reads
|
|
529
|
+
* the merged `~ext.capability` channel — never mutated during a build — and
|
|
530
|
+
* throws when a capability is used but its provider was never registered.
|
|
531
|
+
* For `trace` the resolved view IS the nearest-root provider (merge already
|
|
532
|
+
* keeps it); for `ws` it additionally resolves the depth-precedence base
|
|
533
|
+
* options. Called at the start of every router build and by `compileHandler`
|
|
534
|
+
* before it reads the frozen root, so direct-compiler paths resolve without
|
|
535
|
+
* a prior seal.
|
|
536
|
+
*/
|
|
537
|
+
['~resolvedCapability'](kind: 'trace'): TraceCapability | undefined;
|
|
538
|
+
['~resolvedCapability'](kind: 'ws'): {
|
|
539
|
+
provider: WSCapability;
|
|
540
|
+
options: WSOptions | undefined;
|
|
541
|
+
} | undefined;
|
|
517
542
|
/**
|
|
518
543
|
* ### macro
|
|
519
544
|
* Declare a custom route property: applying it on a route or guard folds
|