elysia 2.0.0-exp.33 → 2.0.0-exp.34
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/compile/handler/jit.js +23 -10
- package/dist/compile/handler/jit.mjs +24 -11
- package/dist/compile/handler/params.js +1 -0
- package/dist/compile/handler/params.mjs +2 -1
- package/dist/compile/handler/utils.d.ts +9 -7
- package/dist/compile/handler/utils.js +18 -8
- package/dist/compile/handler/utils.mjs +18 -9
- package/dist/handler/fetch.js +21 -0
- package/dist/handler/fetch.mjs +22 -1
- package/dist/handler/index.d.ts +1 -1
- package/dist/handler/utils.d.ts +4 -1
- package/dist/handler/utils.js +2 -0
- package/dist/handler/utils.mjs +2 -1
- package/dist/type/constants.d.ts +1 -1
- package/dist/type/types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -165,6 +165,8 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
165
165
|
const traceHandlers = hook?.trace ?? void 0;
|
|
166
166
|
const hasTrace = !!traceHandlers?.length;
|
|
167
167
|
const traceCount = hasTrace ? traceHandlers.length : 0;
|
|
168
|
+
const hasLifecycleHook = parseLength > 0 || !!hook?.transform?.length || hasBeforeHandle || hasAfterHandle || hasMapResponse || hasErrorHook || hasAfterResponse;
|
|
169
|
+
const abortCheck = hasLifecycleHook ? `if(aborted)return emp.clone()\n` : "";
|
|
168
170
|
const tracePhases = hasTrace ? require_trace.unionTracePhases(traceHandlers) : /* @__PURE__ */ new Set();
|
|
169
171
|
const phaseOn = (phase) => hasTrace && (tracePhases === null || tracePhases.has(phase));
|
|
170
172
|
const hasAnyPhase = hasTrace && (tracePhases === null || tracePhases.size > 0);
|
|
@@ -217,6 +219,10 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
217
219
|
const syncAfterResponse = hasAfterResponse && !isAsync && !hasTrace && !hasErrorHook;
|
|
218
220
|
const callHandler = isHandleFunction ? callHandlerSyncOnAsync ? `_r=h(c)\nif(_r instanceof Promise)_r=await _r\n` : `_r=${isAsync ? "await " : ""}h(c)\n` : isStaticResponse ? `_r=cr(h)\n` : isPromiseHandler ? `_r=h.then(cr)\n` : `_r=h\n`;
|
|
219
221
|
let code = `${isAsync ? "async " : ""}function route(c){\n`;
|
|
222
|
+
if (hasLifecycleHook) {
|
|
223
|
+
link(require_handler_utils.emptyResponse, "emp");
|
|
224
|
+
code += "let aborted=c.request.signal.aborted\nif(!aborted)c.request.signal.addEventListener('abort',()=>{aborted=true},{once:true})\n" + abortCheck;
|
|
225
|
+
}
|
|
220
226
|
if ((hasAfterResponse || hasTrace) && !syncAfterResponse) code += "let _stl\n";
|
|
221
227
|
if (asyncCookieSign) code += "let _sg\n";
|
|
222
228
|
if (hasTrace) {
|
|
@@ -265,6 +271,7 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
265
271
|
link(require_error.ParseError, "pe");
|
|
266
272
|
code += "try{\n" + parseCode + "}catch(e){throw new pe(e)}\n";
|
|
267
273
|
if (hasTrace) code += endTrace("parse");
|
|
274
|
+
if (hasLifecycleHook) code += abortCheck;
|
|
268
275
|
} else if (hasTrace) code += beginTrace("parse", 0) + endTrace("parse");
|
|
269
276
|
if (hook?.transform?.length || hasTrace) {
|
|
270
277
|
const transformLen = hook?.transform?.length ?? 0;
|
|
@@ -272,9 +279,10 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
272
279
|
if (transformLen) {
|
|
273
280
|
link(hook.transform, "tf");
|
|
274
281
|
if (isAsync) code += "let _tf\n";
|
|
275
|
-
code += require_compile_handler_utils.mapTransform(hook.transform, [isAsync, buildReport("transform")]);
|
|
282
|
+
code += require_compile_handler_utils.mapTransform(hook.transform, [isAsync, buildReport("transform")], "aborted");
|
|
276
283
|
}
|
|
277
284
|
code += endTrace("transform");
|
|
285
|
+
if (transformLen) code += abortCheck;
|
|
278
286
|
}
|
|
279
287
|
if (vali?.body) {
|
|
280
288
|
link(vali, "va");
|
|
@@ -344,9 +352,10 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
344
352
|
if (hasBeforeHandle) {
|
|
345
353
|
link(hook.beforeHandle, "bf");
|
|
346
354
|
const deriveEntries = hook["~deriveEntries"];
|
|
347
|
-
code += require_compile_handler_utils.mapBeforeHandle(hook.beforeHandle, deriveEntries?.length ? new Set(deriveEntries) : void 0, link, isAsync, buildReport("beforeHandle"));
|
|
355
|
+
code += require_compile_handler_utils.mapBeforeHandle(hook.beforeHandle, deriveEntries?.length ? new Set(deriveEntries) : void 0, link, isAsync, buildReport("beforeHandle"), "aborted");
|
|
348
356
|
}
|
|
349
357
|
code += endTrace("beforeHandle");
|
|
358
|
+
if (hasBeforeHandle) code += abortCheck;
|
|
350
359
|
}
|
|
351
360
|
if (hasAfterResponse || traceHandleOn) link(require_adapter_utils.tee, "tee");
|
|
352
361
|
const teeConsumers = (hasAfterResponse ? 1 : 0) + (traceHandleOn ? 1 : 0);
|
|
@@ -367,6 +376,7 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
367
376
|
code += `}\n`;
|
|
368
377
|
} else if (hasBeforeHandle) code += `if(_r===undefined){\n${callHandler}${teeBlock}}\n`;
|
|
369
378
|
else code += callHandler + teeBlock;
|
|
379
|
+
if (hasLifecycleHook) code += abortCheck;
|
|
370
380
|
if (syncAfterResponse) {
|
|
371
381
|
link(require_handler_utils.forwardError, "fe");
|
|
372
382
|
factoryHelpers += `function _fin(c,_r){
|
|
@@ -386,18 +396,20 @@ const _s=tee(_r,${teeCount})\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,
|
|
|
386
396
|
code += beginTrace("afterHandle", afLen);
|
|
387
397
|
if (hasAfterHandle) {
|
|
388
398
|
link(hook.afterHandle, "af");
|
|
389
|
-
code += require_compile_handler_utils.mapAfterHandle(hook.afterHandle, isAsync, buildReport("afterHandle"));
|
|
399
|
+
code += require_compile_handler_utils.mapAfterHandle(hook.afterHandle, isAsync, buildReport("afterHandle"), "aborted");
|
|
390
400
|
}
|
|
391
401
|
code += endTrace("afterHandle");
|
|
402
|
+
if (hasAfterHandle) code += abortCheck;
|
|
392
403
|
}
|
|
393
404
|
if (hasMapResponse || hasTrace) {
|
|
394
405
|
const mrLen = hook?.mapResponse?.length ?? 0;
|
|
395
406
|
code += beginTrace("mapResponse", mrLen);
|
|
396
407
|
if (hasMapResponse) {
|
|
397
408
|
link(hook.mapResponse, "mr");
|
|
398
|
-
code += require_compile_handler_utils.mapMapResponse(hook.mapResponse, isAsync, buildReport("mapResponse"));
|
|
409
|
+
code += require_compile_handler_utils.mapMapResponse(hook.mapResponse, isAsync, buildReport("mapResponse"), "aborted");
|
|
399
410
|
}
|
|
400
411
|
code += endTrace("mapResponse");
|
|
412
|
+
if (hasMapResponse) code += abortCheck;
|
|
401
413
|
}
|
|
402
414
|
if (hasResponseValidator) {
|
|
403
415
|
link(vali, "va");
|
|
@@ -406,17 +418,18 @@ const _s=tee(_r,${teeCount})\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,
|
|
|
406
418
|
code += `if(_r instanceof es){
|
|
407
419
|
const _vr=va.response[_r.code]
|
|
408
420
|
if(_vr)_r.response=${awaitStr}_vr.EncodeFrom(_r.response,'response')\n}else if(!(_r instanceof Response)&&!(_r instanceof ReadableStream)&&typeof _r?.next!=='function'){\nconst _vr=va.response[c.set.status??200]\nif(_vr)_r=${awaitStr}_vr.EncodeFrom(_r,'response')\n}\n`;
|
|
421
|
+
if (hasLifecycleHook) code += abortCheck;
|
|
409
422
|
}
|
|
410
423
|
code += schedule;
|
|
411
424
|
code += signPrefix;
|
|
412
425
|
const finalMap = hasSet ? `${map}(_r,c.set,c.request)` : `${map}(_r,c.request)`;
|
|
413
|
-
if (syncErrorHook) code += `if(_r instanceof Promise)return ${finalMap}.catch((_e)=>_ce(_e,c))\n`;
|
|
426
|
+
if (syncErrorHook) code += `if(_r instanceof Promise)return ${finalMap}.catch((_e)=>_ce(_e,c,aborted))\n`;
|
|
414
427
|
code += `return ${finalMap}\n`;
|
|
415
428
|
}
|
|
416
429
|
} else if (isHandleFunction) {
|
|
417
430
|
if (!isAsync) link(require_handler_utils.forwardError, "fe");
|
|
418
431
|
const mapArgs = hasSet ? "c.set,c.request" : "c.request";
|
|
419
|
-
code += (callHandlerSyncOnAsync ? `let _r=h(c)\nif(_r instanceof Promise)_r=await _r\n` : `let _r=${isAsync ? "await " : ""}h(c)\n`) + `if(_r instanceof Error)throw _r\n` + (isAsync ? `return ${map}(_r,${mapArgs})\n` : syncErrorHook ? `if(_r instanceof Promise)return ${map}(_r.then(fe),${mapArgs}).catch((_e)=>_ce(_e,c))\nreturn ${map}(_r,${mapArgs})\n` : `if(_r instanceof Promise)_r=_r.then(fe)\nreturn ${map}(_r,${mapArgs})\n`);
|
|
432
|
+
code += (callHandlerSyncOnAsync ? `let _r=h(c)\nif(_r instanceof Promise)_r=await _r\n` : `let _r=${isAsync ? "await " : ""}h(c)\n`) + abortCheck + `if(_r instanceof Error)throw _r\n` + (isAsync ? `return ${map}(_r,${mapArgs})\n` : syncErrorHook ? `if(_r instanceof Promise)return ${map}(_r.then(fe),${mapArgs}).catch((_e)=>_ce(_e,c,aborted))\nreturn ${map}(_r,${mapArgs})\n` : `if(_r instanceof Promise)_r=_r.then(fe)\nreturn ${map}(_r,${mapArgs})\n`);
|
|
420
433
|
} else code += `return ${mapReturn}`;
|
|
421
434
|
if (hasErrorHook || hasTrace) {
|
|
422
435
|
let body = "";
|
|
@@ -438,9 +451,9 @@ let _r${hasMapResponse ? ",tmp" : ""}\n` + require_compile_handler_utils.mapErro
|
|
|
438
451
|
map,
|
|
439
452
|
link,
|
|
440
453
|
res.map,
|
|
441
|
-
(hasMapResponse ? `c.responseValue=_r\n` + require_compile_handler_utils.mapMapResponse(hook.mapResponse, isAsync, void 0) : "") + endTrace("error") + schedule,
|
|
454
|
+
(hasMapResponse ? `c.responseValue=_r\n` + require_compile_handler_utils.mapMapResponse(hook.mapResponse, isAsync, void 0, "aborted") : "") + endTrace("error") + abortCheck + schedule,
|
|
442
455
|
signPrefix
|
|
443
|
-
]) + endTrace("error") + schedule + `if(typeof e?.toResponse==='function')try{
|
|
456
|
+
], "aborted") + endTrace("error") + abortCheck + schedule + `if(typeof e?.toResponse==='function')try{
|
|
444
457
|
const _er=e.toResponse()
|
|
445
458
|
if(_er instanceof Promise)return _er.then(${asyncCookieSign ? "async " : ""}(_v)=>{if(_v instanceof Response){${signPrefix}return ${map}(_v,c.set,c.request)}return _efb(e,c)},()=>_efb(e,c))\nif(_er instanceof Response){${signPrefix}return ${map}(_er,c.set,c.request)}\n}catch{}\nreturn _efb(e,c)\n`;
|
|
446
459
|
} else {
|
|
@@ -448,8 +461,8 @@ if(_er instanceof Promise)return _er.then(${asyncCookieSign ? "async " : ""}(_v)
|
|
|
448
461
|
body += `throw e\n`;
|
|
449
462
|
}
|
|
450
463
|
if (syncErrorHook) {
|
|
451
|
-
factoryHelpers += `function _ce(e,c){\n${body}}\n`;
|
|
452
|
-
code += `}catch(e){return _ce(e,c)}\n`;
|
|
464
|
+
factoryHelpers += `function _ce(e,c,aborted){\n${body}}\n`;
|
|
465
|
+
code += `}catch(e){return _ce(e,c,aborted)}\n`;
|
|
453
466
|
} else code += `}catch(e){\n${body}}\n`;
|
|
454
467
|
}
|
|
455
468
|
code += "}";
|
|
@@ -8,7 +8,7 @@ import { Capture } from "../aot.mjs";
|
|
|
8
8
|
import { compileCookieConfig } from "../../cookie/config.mjs";
|
|
9
9
|
import { buildCookieJar, hasSyncHmac, parseCookieRaw, parseCookieRawSigned, parseCookieRawSync, signCookieValues, signCookieValuesSync } from "../../cookie/utils.mjs";
|
|
10
10
|
import { isAsyncFunction, isAsyncLifecycle, mayReturnPromise } from "../utils.mjs";
|
|
11
|
-
import { forwardError } from "../../handler/utils.mjs";
|
|
11
|
+
import { emptyResponse, forwardError } from "../../handler/utils.mjs";
|
|
12
12
|
import { cloneResponse, getQueryParseChannels, hasRequestBody, mapAfterHandle, mapAfterResponse, mapBeforeHandle, mapError, mapMapResponse, mapTransform } from "./utils.mjs";
|
|
13
13
|
import { sucrose } from "../../sucrose.mjs";
|
|
14
14
|
import { createTracer, unionTracePhases } from "../../trace.mjs";
|
|
@@ -164,6 +164,8 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
164
164
|
const traceHandlers = hook?.trace ?? void 0;
|
|
165
165
|
const hasTrace = !!traceHandlers?.length;
|
|
166
166
|
const traceCount = hasTrace ? traceHandlers.length : 0;
|
|
167
|
+
const hasLifecycleHook = parseLength > 0 || !!hook?.transform?.length || hasBeforeHandle || hasAfterHandle || hasMapResponse || hasErrorHook || hasAfterResponse;
|
|
168
|
+
const abortCheck = hasLifecycleHook ? `if(aborted)return emp.clone()\n` : "";
|
|
167
169
|
const tracePhases = hasTrace ? unionTracePhases(traceHandlers) : /* @__PURE__ */ new Set();
|
|
168
170
|
const phaseOn = (phase) => hasTrace && (tracePhases === null || tracePhases.has(phase));
|
|
169
171
|
const hasAnyPhase = hasTrace && (tracePhases === null || tracePhases.size > 0);
|
|
@@ -216,6 +218,10 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
216
218
|
const syncAfterResponse = hasAfterResponse && !isAsync && !hasTrace && !hasErrorHook;
|
|
217
219
|
const callHandler = isHandleFunction ? callHandlerSyncOnAsync ? `_r=h(c)\nif(_r instanceof Promise)_r=await _r\n` : `_r=${isAsync ? "await " : ""}h(c)\n` : isStaticResponse ? `_r=cr(h)\n` : isPromiseHandler ? `_r=h.then(cr)\n` : `_r=h\n`;
|
|
218
220
|
let code = `${isAsync ? "async " : ""}function route(c){\n`;
|
|
221
|
+
if (hasLifecycleHook) {
|
|
222
|
+
link(emptyResponse, "emp");
|
|
223
|
+
code += "let aborted=c.request.signal.aborted\nif(!aborted)c.request.signal.addEventListener('abort',()=>{aborted=true},{once:true})\n" + abortCheck;
|
|
224
|
+
}
|
|
219
225
|
if ((hasAfterResponse || hasTrace) && !syncAfterResponse) code += "let _stl\n";
|
|
220
226
|
if (asyncCookieSign) code += "let _sg\n";
|
|
221
227
|
if (hasTrace) {
|
|
@@ -264,6 +270,7 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
264
270
|
link(ParseError, "pe");
|
|
265
271
|
code += "try{\n" + parseCode + "}catch(e){throw new pe(e)}\n";
|
|
266
272
|
if (hasTrace) code += endTrace("parse");
|
|
273
|
+
if (hasLifecycleHook) code += abortCheck;
|
|
267
274
|
} else if (hasTrace) code += beginTrace("parse", 0) + endTrace("parse");
|
|
268
275
|
if (hook?.transform?.length || hasTrace) {
|
|
269
276
|
const transformLen = hook?.transform?.length ?? 0;
|
|
@@ -271,9 +278,10 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
271
278
|
if (transformLen) {
|
|
272
279
|
link(hook.transform, "tf");
|
|
273
280
|
if (isAsync) code += "let _tf\n";
|
|
274
|
-
code += mapTransform(hook.transform, [isAsync, buildReport("transform")]);
|
|
281
|
+
code += mapTransform(hook.transform, [isAsync, buildReport("transform")], "aborted");
|
|
275
282
|
}
|
|
276
283
|
code += endTrace("transform");
|
|
284
|
+
if (transformLen) code += abortCheck;
|
|
277
285
|
}
|
|
278
286
|
if (vali?.body) {
|
|
279
287
|
link(vali, "va");
|
|
@@ -343,9 +351,10 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
343
351
|
if (hasBeforeHandle) {
|
|
344
352
|
link(hook.beforeHandle, "bf");
|
|
345
353
|
const deriveEntries = hook["~deriveEntries"];
|
|
346
|
-
code += mapBeforeHandle(hook.beforeHandle, deriveEntries?.length ? new Set(deriveEntries) : void 0, link, isAsync, buildReport("beforeHandle"));
|
|
354
|
+
code += mapBeforeHandle(hook.beforeHandle, deriveEntries?.length ? new Set(deriveEntries) : void 0, link, isAsync, buildReport("beforeHandle"), "aborted");
|
|
347
355
|
}
|
|
348
356
|
code += endTrace("beforeHandle");
|
|
357
|
+
if (hasBeforeHandle) code += abortCheck;
|
|
349
358
|
}
|
|
350
359
|
if (hasAfterResponse || traceHandleOn) link(tee, "tee");
|
|
351
360
|
const teeConsumers = (hasAfterResponse ? 1 : 0) + (traceHandleOn ? 1 : 0);
|
|
@@ -366,6 +375,7 @@ function compileHandlerJit({ method, path, handler, root, hook, adapter, buildVa
|
|
|
366
375
|
code += `}\n`;
|
|
367
376
|
} else if (hasBeforeHandle) code += `if(_r===undefined){\n${callHandler}${teeBlock}}\n`;
|
|
368
377
|
else code += callHandler + teeBlock;
|
|
378
|
+
if (hasLifecycleHook) code += abortCheck;
|
|
369
379
|
if (syncAfterResponse) {
|
|
370
380
|
link(forwardError, "fe");
|
|
371
381
|
factoryHelpers += `function _fin(c,_r){
|
|
@@ -385,18 +395,20 @@ const _s=tee(_r,${teeCount})\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,
|
|
|
385
395
|
code += beginTrace("afterHandle", afLen);
|
|
386
396
|
if (hasAfterHandle) {
|
|
387
397
|
link(hook.afterHandle, "af");
|
|
388
|
-
code += mapAfterHandle(hook.afterHandle, isAsync, buildReport("afterHandle"));
|
|
398
|
+
code += mapAfterHandle(hook.afterHandle, isAsync, buildReport("afterHandle"), "aborted");
|
|
389
399
|
}
|
|
390
400
|
code += endTrace("afterHandle");
|
|
401
|
+
if (hasAfterHandle) code += abortCheck;
|
|
391
402
|
}
|
|
392
403
|
if (hasMapResponse || hasTrace) {
|
|
393
404
|
const mrLen = hook?.mapResponse?.length ?? 0;
|
|
394
405
|
code += beginTrace("mapResponse", mrLen);
|
|
395
406
|
if (hasMapResponse) {
|
|
396
407
|
link(hook.mapResponse, "mr");
|
|
397
|
-
code += mapMapResponse(hook.mapResponse, isAsync, buildReport("mapResponse"));
|
|
408
|
+
code += mapMapResponse(hook.mapResponse, isAsync, buildReport("mapResponse"), "aborted");
|
|
398
409
|
}
|
|
399
410
|
code += endTrace("mapResponse");
|
|
411
|
+
if (hasMapResponse) code += abortCheck;
|
|
400
412
|
}
|
|
401
413
|
if (hasResponseValidator) {
|
|
402
414
|
link(vali, "va");
|
|
@@ -405,17 +417,18 @@ const _s=tee(_r,${teeCount})\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,
|
|
|
405
417
|
code += `if(_r instanceof es){
|
|
406
418
|
const _vr=va.response[_r.code]
|
|
407
419
|
if(_vr)_r.response=${awaitStr}_vr.EncodeFrom(_r.response,'response')\n}else if(!(_r instanceof Response)&&!(_r instanceof ReadableStream)&&typeof _r?.next!=='function'){\nconst _vr=va.response[c.set.status??200]\nif(_vr)_r=${awaitStr}_vr.EncodeFrom(_r,'response')\n}\n`;
|
|
420
|
+
if (hasLifecycleHook) code += abortCheck;
|
|
408
421
|
}
|
|
409
422
|
code += schedule;
|
|
410
423
|
code += signPrefix;
|
|
411
424
|
const finalMap = hasSet ? `${map}(_r,c.set,c.request)` : `${map}(_r,c.request)`;
|
|
412
|
-
if (syncErrorHook) code += `if(_r instanceof Promise)return ${finalMap}.catch((_e)=>_ce(_e,c))\n`;
|
|
425
|
+
if (syncErrorHook) code += `if(_r instanceof Promise)return ${finalMap}.catch((_e)=>_ce(_e,c,aborted))\n`;
|
|
413
426
|
code += `return ${finalMap}\n`;
|
|
414
427
|
}
|
|
415
428
|
} else if (isHandleFunction) {
|
|
416
429
|
if (!isAsync) link(forwardError, "fe");
|
|
417
430
|
const mapArgs = hasSet ? "c.set,c.request" : "c.request";
|
|
418
|
-
code += (callHandlerSyncOnAsync ? `let _r=h(c)\nif(_r instanceof Promise)_r=await _r\n` : `let _r=${isAsync ? "await " : ""}h(c)\n`) + `if(_r instanceof Error)throw _r\n` + (isAsync ? `return ${map}(_r,${mapArgs})\n` : syncErrorHook ? `if(_r instanceof Promise)return ${map}(_r.then(fe),${mapArgs}).catch((_e)=>_ce(_e,c))\nreturn ${map}(_r,${mapArgs})\n` : `if(_r instanceof Promise)_r=_r.then(fe)\nreturn ${map}(_r,${mapArgs})\n`);
|
|
431
|
+
code += (callHandlerSyncOnAsync ? `let _r=h(c)\nif(_r instanceof Promise)_r=await _r\n` : `let _r=${isAsync ? "await " : ""}h(c)\n`) + abortCheck + `if(_r instanceof Error)throw _r\n` + (isAsync ? `return ${map}(_r,${mapArgs})\n` : syncErrorHook ? `if(_r instanceof Promise)return ${map}(_r.then(fe),${mapArgs}).catch((_e)=>_ce(_e,c,aborted))\nreturn ${map}(_r,${mapArgs})\n` : `if(_r instanceof Promise)_r=_r.then(fe)\nreturn ${map}(_r,${mapArgs})\n`);
|
|
419
432
|
} else code += `return ${mapReturn}`;
|
|
420
433
|
if (hasErrorHook || hasTrace) {
|
|
421
434
|
let body = "";
|
|
@@ -437,9 +450,9 @@ let _r${hasMapResponse ? ",tmp" : ""}\n` + mapError(hook.error, [
|
|
|
437
450
|
map,
|
|
438
451
|
link,
|
|
439
452
|
res.map,
|
|
440
|
-
(hasMapResponse ? `c.responseValue=_r\n` + mapMapResponse(hook.mapResponse, isAsync, void 0) : "") + endTrace("error") + schedule,
|
|
453
|
+
(hasMapResponse ? `c.responseValue=_r\n` + mapMapResponse(hook.mapResponse, isAsync, void 0, "aborted") : "") + endTrace("error") + abortCheck + schedule,
|
|
441
454
|
signPrefix
|
|
442
|
-
]) + endTrace("error") + schedule + `if(typeof e?.toResponse==='function')try{
|
|
455
|
+
], "aborted") + endTrace("error") + abortCheck + schedule + `if(typeof e?.toResponse==='function')try{
|
|
443
456
|
const _er=e.toResponse()
|
|
444
457
|
if(_er instanceof Promise)return _er.then(${asyncCookieSign ? "async " : ""}(_v)=>{if(_v instanceof Response){${signPrefix}return ${map}(_v,c.set,c.request)}return _efb(e,c)},()=>_efb(e,c))\nif(_er instanceof Response){${signPrefix}return ${map}(_er,c.set,c.request)}\n}catch{}\nreturn _efb(e,c)\n`;
|
|
445
458
|
} else {
|
|
@@ -447,8 +460,8 @@ if(_er instanceof Promise)return _er.then(${asyncCookieSign ? "async " : ""}(_v)
|
|
|
447
460
|
body += `throw e\n`;
|
|
448
461
|
}
|
|
449
462
|
if (syncErrorHook) {
|
|
450
|
-
factoryHelpers += `function _ce(e,c){\n${body}}\n`;
|
|
451
|
-
code += `}catch(e){return _ce(e,c)}\n`;
|
|
463
|
+
factoryHelpers += `function _ce(e,c,aborted){\n${body}}\n`;
|
|
464
|
+
code += `}catch(e){return _ce(e,c,aborted)}\n`;
|
|
452
465
|
} else code += `}catch(e){\n${body}}\n`;
|
|
453
466
|
}
|
|
454
467
|
code += "}";
|
|
@@ -25,6 +25,7 @@ const HANDLER_PARAMS = {
|
|
|
25
25
|
pe: () => require_error.ParseError,
|
|
26
26
|
es: () => require_error.ElysiaStatus,
|
|
27
27
|
ise: () => require_error.internalServerErrorResponse,
|
|
28
|
+
emp: () => require_handler_utils.emptyResponse,
|
|
28
29
|
isprod: () => require_error.isProduction,
|
|
29
30
|
verr: () => require_error.ValidationError,
|
|
30
31
|
tee: () => require_adapter_utils.tee,
|
|
@@ -3,7 +3,7 @@ import { ElysiaStatus, ParseError, ValidationError, internalServerErrorResponse,
|
|
|
3
3
|
import { tee } from "../../adapter/utils.mjs";
|
|
4
4
|
import { parseQueryFromURL } from "../../parse-query.mjs";
|
|
5
5
|
import { buildCookieJar, parseCookieRaw, parseCookieRawSigned, parseCookieRawSync, signCookieValues, signCookieValuesSync } from "../../cookie/utils.mjs";
|
|
6
|
-
import { forwardError } from "../../handler/utils.mjs";
|
|
6
|
+
import { emptyResponse, forwardError } from "../../handler/utils.mjs";
|
|
7
7
|
import { cloneResponse, getQueryParseChannels, hasRequestBody } from "./utils.mjs";
|
|
8
8
|
|
|
9
9
|
//#region src/compile/handler/params.ts
|
|
@@ -24,6 +24,7 @@ const HANDLER_PARAMS = {
|
|
|
24
24
|
pe: () => ParseError,
|
|
25
25
|
es: () => ElysiaStatus,
|
|
26
26
|
ise: () => internalServerErrorResponse,
|
|
27
|
+
emp: () => emptyResponse,
|
|
27
28
|
isprod: () => isProduction,
|
|
28
29
|
verr: () => ValidationError,
|
|
29
30
|
tee: () => tee,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { AfterResponseHandler, AppHook, ErrorHandler, MaybeArray, TransformHandler } from "../../types.js";
|
|
2
2
|
import { Context } from "../../context.js";
|
|
3
|
+
import { emptyResponse } from "../../handler/utils.js";
|
|
4
|
+
|
|
3
5
|
//#region src/compile/handler/utils.d.ts
|
|
4
6
|
type Link = (v: unknown, key: string) => void;
|
|
5
7
|
interface TraceReporter {
|
|
@@ -10,17 +12,17 @@ interface TraceReporter {
|
|
|
10
12
|
}
|
|
11
13
|
declare function cloneResponse(r: unknown): unknown;
|
|
12
14
|
declare function hasRequestBody(request: Request): boolean;
|
|
13
|
-
declare const mapTransform: (event: MaybeArray<TransformHandler<any, any, undefined, "local">>, rest?: [isAsync: boolean, report?: TraceReporter | undefined] | undefined) => string;
|
|
15
|
+
declare const mapTransform: (event: MaybeArray<TransformHandler<any, any, undefined, "local">>, rest?: [isAsync: boolean, report?: TraceReporter | undefined] | undefined, abortGuard?: string) => string;
|
|
14
16
|
declare function extractDeriveKeys(fn: Function): string[] | null;
|
|
15
|
-
declare function mapBeforeHandle(_hooks: AppHook['beforeHandle'] | AppHook['beforeHandle'][0], derive: Set<Function> | undefined, link: Link, isAsync: boolean, report?: TraceReporter): string;
|
|
16
|
-
declare const mapAfterHandle: (_hooks: AppHook["afterHandle"] | AppHook["afterHandle"][0], isAsync: boolean, report?: TraceReporter) => string;
|
|
17
|
-
declare const mapMapResponse: (_hooks: AppHook["mapResponse"] | AppHook["mapResponse"][0], isAsync: boolean, report?: TraceReporter) => string;
|
|
18
|
-
declare const mapAfterResponse: (event: MaybeArray<AfterResponseHandler<any, any, undefined, "local">>, rest?: [report?: TraceReporter | undefined] | undefined) => string;
|
|
19
|
-
declare const mapError: (event: MaybeArray<ErrorHandler<any, any, any>>, rest?: [map: string, link: Link, mapResponse: (response: unknown, set: Context["set"], ...params: unknown[]) => unknown, schedule: string, sign: string] | undefined) => string;
|
|
17
|
+
declare function mapBeforeHandle(_hooks: AppHook['beforeHandle'] | AppHook['beforeHandle'][0], derive: Set<Function> | undefined, link: Link, isAsync: boolean, report?: TraceReporter, abortGuard?: string): string;
|
|
18
|
+
declare const mapAfterHandle: (_hooks: AppHook["afterHandle"] | AppHook["afterHandle"][0], isAsync: boolean, report?: TraceReporter, abortGuard?: string) => string;
|
|
19
|
+
declare const mapMapResponse: (_hooks: AppHook["mapResponse"] | AppHook["mapResponse"][0], isAsync: boolean, report?: TraceReporter, abortGuard?: string) => string;
|
|
20
|
+
declare const mapAfterResponse: (event: MaybeArray<AfterResponseHandler<any, any, undefined, "local">>, rest?: [report?: TraceReporter | undefined] | undefined, abortGuard?: string) => string;
|
|
21
|
+
declare const mapError: (event: MaybeArray<ErrorHandler<any, any, any>>, rest?: [map: string, link: Link, mapResponse: (response: unknown, set: Context["set"], ...params: unknown[]) => unknown, schedule: string, sign: string] | undefined, abortGuard?: string) => string;
|
|
20
22
|
interface QueryWalkState {
|
|
21
23
|
array: Record<string, 1> | undefined;
|
|
22
24
|
object: Record<string, 1> | undefined;
|
|
23
25
|
}
|
|
24
26
|
declare function getQueryParseChannels(querySchema: any): QueryWalkState | undefined;
|
|
25
27
|
//#endregion
|
|
26
|
-
export { Link, TraceReporter, cloneResponse, extractDeriveKeys, getQueryParseChannels, hasRequestBody, mapAfterHandle, mapAfterResponse, mapBeforeHandle, mapError, mapMapResponse, mapTransform };
|
|
28
|
+
export { Link, TraceReporter, cloneResponse, emptyResponse, extractDeriveKeys, getQueryParseChannels, hasRequestBody, mapAfterHandle, mapAfterResponse, mapBeforeHandle, mapError, mapMapResponse, mapTransform };
|
|
@@ -3,6 +3,7 @@ const require_type_constants = require('../../type/constants.js');
|
|
|
3
3
|
const require_adapter_skip_clone = require('../../adapter/skip-clone.js');
|
|
4
4
|
const require_error = require('../../error.js');
|
|
5
5
|
const require_compile_utils = require('../utils.js');
|
|
6
|
+
const require_handler_utils = require('../../handler/utils.js');
|
|
6
7
|
const require_compile_lexer = require('../lexer.js');
|
|
7
8
|
|
|
8
9
|
//#region src/compile/handler/utils.ts
|
|
@@ -242,7 +243,7 @@ function skipValue(src, i) {
|
|
|
242
243
|
}
|
|
243
244
|
return -1;
|
|
244
245
|
}
|
|
245
|
-
function mapBeforeHandle(_hooks, derive, link, isAsync, report) {
|
|
246
|
+
function mapBeforeHandle(_hooks, derive, link, isAsync, report, abortGuard) {
|
|
246
247
|
const hooks = toArray(_hooks);
|
|
247
248
|
let code = "";
|
|
248
249
|
let depth = 0;
|
|
@@ -250,7 +251,7 @@ function mapBeforeHandle(_hooks, derive, link, isAsync, report) {
|
|
|
250
251
|
for (let i = 0; i < hooks.length; i++) {
|
|
251
252
|
const fn = hooks[i];
|
|
252
253
|
if (i > 0) {
|
|
253
|
-
code += `if(_r===undefined){\n`;
|
|
254
|
+
code += `if(${abortGuard ? `!${abortGuard}&&` : ""}_r===undefined){\n`;
|
|
254
255
|
depth++;
|
|
255
256
|
}
|
|
256
257
|
const t = trace(report, fn);
|
|
@@ -270,13 +271,13 @@ else if(tmp){${merge};tmp=undefined}\n`;
|
|
|
270
271
|
if (needsEs) link(require_error.ElysiaStatus, "es");
|
|
271
272
|
return code;
|
|
272
273
|
}
|
|
273
|
-
function mapChainHook(hooks, prefix, isAsync, report) {
|
|
274
|
+
function mapChainHook(hooks, prefix, isAsync, report, abortGuard) {
|
|
274
275
|
let code = "";
|
|
275
276
|
let depth = 0;
|
|
276
277
|
for (let i = 0; i < hooks.length; i++) {
|
|
277
278
|
const fn = hooks[i];
|
|
278
279
|
if (i > 0) {
|
|
279
|
-
code += `if(tmp===undefined){\n`;
|
|
280
|
+
code += `if(${abortGuard ? `!${abortGuard}&&` : ""}tmp===undefined){\n`;
|
|
280
281
|
depth++;
|
|
281
282
|
}
|
|
282
283
|
const t = trace(report, fn);
|
|
@@ -289,8 +290,8 @@ function mapChainHook(hooks, prefix, isAsync, report) {
|
|
|
289
290
|
code += `if(tmp!==undefined)_r=c.responseValue=tmp\n`;
|
|
290
291
|
return code;
|
|
291
292
|
}
|
|
292
|
-
const mapAfterHandle = (_hooks, isAsync, report) => mapChainHook(toArray(_hooks), "af", isAsync, report);
|
|
293
|
-
const mapMapResponse = (_hooks, isAsync, report) => mapChainHook(toArray(_hooks), "mr", isAsync, report);
|
|
293
|
+
const mapAfterHandle = (_hooks, isAsync, report, abortGuard) => mapChainHook(toArray(_hooks), "af", isAsync, report, abortGuard);
|
|
294
|
+
const mapMapResponse = (_hooks, isAsync, report, abortGuard) => mapChainHook(toArray(_hooks), "mr", isAsync, report, abortGuard);
|
|
294
295
|
const mapAfterResponse = /* @__PURE__ */ map((i, fn, [report]) => {
|
|
295
296
|
const t = trace(report, fn);
|
|
296
297
|
return `try{` + t.begin + `${Await(fn)}ar${at(i)}(c)\n` + t.end() + `}catch(_e){` + t.end("_e") + `}\n`;
|
|
@@ -300,10 +301,18 @@ const mapError = /* @__PURE__ */ map((i, fn, [map, link, mapResponse, schedule,
|
|
|
300
301
|
return `_r=${Await(fn)}er${at(i)}(c)\nif(_r!==undefined){\nif(_r instanceof Response)c.set.status=_r.status\nelse if(c.set.status===undefined||c.set.status===200)c.set.status=500\n` + schedule + sign + `return ${map}(_r,c.set,c.request)\n}\n`;
|
|
301
302
|
});
|
|
302
303
|
function map(map) {
|
|
303
|
-
return function(event, rest) {
|
|
304
|
+
return function(event, rest, abortGuard) {
|
|
304
305
|
if (Array.isArray(event)) {
|
|
305
306
|
let code = "";
|
|
306
|
-
|
|
307
|
+
let depth = 0;
|
|
308
|
+
for (let i = 0; i < event.length; i++) {
|
|
309
|
+
if (i > 0 && abortGuard) {
|
|
310
|
+
code += `if(!${abortGuard}){\n`;
|
|
311
|
+
depth++;
|
|
312
|
+
}
|
|
313
|
+
code += map(i, event[i], rest);
|
|
314
|
+
}
|
|
315
|
+
code += "}".repeat(depth);
|
|
307
316
|
return code;
|
|
308
317
|
} else return map(void 0, event, rest);
|
|
309
318
|
};
|
|
@@ -376,6 +385,7 @@ const awaitGuard = (fn, isAsync, target) => isAsync && !require_compile_utils.is
|
|
|
376
385
|
|
|
377
386
|
//#endregion
|
|
378
387
|
exports.cloneResponse = cloneResponse;
|
|
388
|
+
exports.emptyResponse = require_handler_utils.emptyResponse;
|
|
379
389
|
exports.extractDeriveKeys = extractDeriveKeys;
|
|
380
390
|
exports.getQueryParseChannels = getQueryParseChannels;
|
|
381
391
|
exports.hasRequestBody = hasRequestBody;
|
|
@@ -2,6 +2,7 @@ import { ELYSIA_TYPES } from "../../type/constants.mjs";
|
|
|
2
2
|
import { skipClone } from "../../adapter/skip-clone.mjs";
|
|
3
3
|
import { ElysiaStatus } from "../../error.mjs";
|
|
4
4
|
import { isAsyncFunction } from "../utils.mjs";
|
|
5
|
+
import { emptyResponse } from "../../handler/utils.mjs";
|
|
5
6
|
import { isIdentChar, isSpace, skipString } from "../lexer.mjs";
|
|
6
7
|
|
|
7
8
|
//#region src/compile/handler/utils.ts
|
|
@@ -241,7 +242,7 @@ function skipValue(src, i) {
|
|
|
241
242
|
}
|
|
242
243
|
return -1;
|
|
243
244
|
}
|
|
244
|
-
function mapBeforeHandle(_hooks, derive, link, isAsync, report) {
|
|
245
|
+
function mapBeforeHandle(_hooks, derive, link, isAsync, report, abortGuard) {
|
|
245
246
|
const hooks = toArray(_hooks);
|
|
246
247
|
let code = "";
|
|
247
248
|
let depth = 0;
|
|
@@ -249,7 +250,7 @@ function mapBeforeHandle(_hooks, derive, link, isAsync, report) {
|
|
|
249
250
|
for (let i = 0; i < hooks.length; i++) {
|
|
250
251
|
const fn = hooks[i];
|
|
251
252
|
if (i > 0) {
|
|
252
|
-
code += `if(_r===undefined){\n`;
|
|
253
|
+
code += `if(${abortGuard ? `!${abortGuard}&&` : ""}_r===undefined){\n`;
|
|
253
254
|
depth++;
|
|
254
255
|
}
|
|
255
256
|
const t = trace(report, fn);
|
|
@@ -269,13 +270,13 @@ else if(tmp){${merge};tmp=undefined}\n`;
|
|
|
269
270
|
if (needsEs) link(ElysiaStatus, "es");
|
|
270
271
|
return code;
|
|
271
272
|
}
|
|
272
|
-
function mapChainHook(hooks, prefix, isAsync, report) {
|
|
273
|
+
function mapChainHook(hooks, prefix, isAsync, report, abortGuard) {
|
|
273
274
|
let code = "";
|
|
274
275
|
let depth = 0;
|
|
275
276
|
for (let i = 0; i < hooks.length; i++) {
|
|
276
277
|
const fn = hooks[i];
|
|
277
278
|
if (i > 0) {
|
|
278
|
-
code += `if(tmp===undefined){\n`;
|
|
279
|
+
code += `if(${abortGuard ? `!${abortGuard}&&` : ""}tmp===undefined){\n`;
|
|
279
280
|
depth++;
|
|
280
281
|
}
|
|
281
282
|
const t = trace(report, fn);
|
|
@@ -288,8 +289,8 @@ function mapChainHook(hooks, prefix, isAsync, report) {
|
|
|
288
289
|
code += `if(tmp!==undefined)_r=c.responseValue=tmp\n`;
|
|
289
290
|
return code;
|
|
290
291
|
}
|
|
291
|
-
const mapAfterHandle = (_hooks, isAsync, report) => mapChainHook(toArray(_hooks), "af", isAsync, report);
|
|
292
|
-
const mapMapResponse = (_hooks, isAsync, report) => mapChainHook(toArray(_hooks), "mr", isAsync, report);
|
|
292
|
+
const mapAfterHandle = (_hooks, isAsync, report, abortGuard) => mapChainHook(toArray(_hooks), "af", isAsync, report, abortGuard);
|
|
293
|
+
const mapMapResponse = (_hooks, isAsync, report, abortGuard) => mapChainHook(toArray(_hooks), "mr", isAsync, report, abortGuard);
|
|
293
294
|
const mapAfterResponse = /* @__PURE__ */ map((i, fn, [report]) => {
|
|
294
295
|
const t = trace(report, fn);
|
|
295
296
|
return `try{` + t.begin + `${Await(fn)}ar${at(i)}(c)\n` + t.end() + `}catch(_e){` + t.end("_e") + `}\n`;
|
|
@@ -299,10 +300,18 @@ const mapError = /* @__PURE__ */ map((i, fn, [map, link, mapResponse, schedule,
|
|
|
299
300
|
return `_r=${Await(fn)}er${at(i)}(c)\nif(_r!==undefined){\nif(_r instanceof Response)c.set.status=_r.status\nelse if(c.set.status===undefined||c.set.status===200)c.set.status=500\n` + schedule + sign + `return ${map}(_r,c.set,c.request)\n}\n`;
|
|
300
301
|
});
|
|
301
302
|
function map(map) {
|
|
302
|
-
return function(event, rest) {
|
|
303
|
+
return function(event, rest, abortGuard) {
|
|
303
304
|
if (Array.isArray(event)) {
|
|
304
305
|
let code = "";
|
|
305
|
-
|
|
306
|
+
let depth = 0;
|
|
307
|
+
for (let i = 0; i < event.length; i++) {
|
|
308
|
+
if (i > 0 && abortGuard) {
|
|
309
|
+
code += `if(!${abortGuard}){\n`;
|
|
310
|
+
depth++;
|
|
311
|
+
}
|
|
312
|
+
code += map(i, event[i], rest);
|
|
313
|
+
}
|
|
314
|
+
code += "}".repeat(depth);
|
|
306
315
|
return code;
|
|
307
316
|
} else return map(void 0, event, rest);
|
|
308
317
|
};
|
|
@@ -374,4 +383,4 @@ const Await = (fn) => isAsyncFunction(fn) ? "await " : "";
|
|
|
374
383
|
const awaitGuard = (fn, isAsync, target) => isAsync && !isAsyncFunction(fn) ? `if(${target} instanceof Promise)${target}=await ${target}\n` : "";
|
|
375
384
|
|
|
376
385
|
//#endregion
|
|
377
|
-
export { cloneResponse, extractDeriveKeys, getQueryParseChannels, hasRequestBody, mapAfterHandle, mapAfterResponse, mapBeforeHandle, mapError, mapMapResponse, mapTransform };
|
|
386
|
+
export { cloneResponse, emptyResponse, extractDeriveKeys, getQueryParseChannels, hasRequestBody, mapAfterHandle, mapAfterResponse, mapBeforeHandle, mapError, mapMapResponse, mapTransform };
|
package/dist/handler/fetch.js
CHANGED
|
@@ -175,6 +175,11 @@ function createFetchHandler(app) {
|
|
|
175
175
|
const asyncIndexes = onRequests.length ? require_handler_utils.getAsyncIndexes(onRequests) : void 0;
|
|
176
176
|
return async (request) => {
|
|
177
177
|
const context = new Context(request);
|
|
178
|
+
let aborted = request.signal.aborted;
|
|
179
|
+
if (!aborted) request.signal.addEventListener("abort", () => {
|
|
180
|
+
aborted = true;
|
|
181
|
+
}, { once: true });
|
|
182
|
+
if (aborted) return require_handler_utils.emptyResponse.clone();
|
|
178
183
|
const url = request.url, s = url.indexOf("/", pathStart);
|
|
179
184
|
context.path = url.substring(s, (context.qi = url.indexOf("?", s)) === -1 ? url.length : context.qi);
|
|
180
185
|
context.rid = require_utils.requestId();
|
|
@@ -201,6 +206,10 @@ function createFetchHandler(app) {
|
|
|
201
206
|
});
|
|
202
207
|
const result = asyncIndexes?.[i] ? await onRequests[i](context) : onRequests[i](context);
|
|
203
208
|
for (let i = 0; i < traceLength; i++) endReports[i]?.();
|
|
209
|
+
if (aborted) {
|
|
210
|
+
for (let j = 0; j < traceLength; j++) trace[j].r(requestReports[j]);
|
|
211
|
+
return require_handler_utils.emptyResponse.clone();
|
|
212
|
+
}
|
|
204
213
|
if (result !== void 0) {
|
|
205
214
|
for (let j = 0; j < traceLength; j++) trace[j].r(requestReports[j]);
|
|
206
215
|
const response = mapResponse(result, context.set);
|
|
@@ -221,11 +230,17 @@ function createFetchHandler(app) {
|
|
|
221
230
|
const asyncIndexes = require_handler_utils.getAsyncIndexes(onRequests);
|
|
222
231
|
if (asyncIndexes) return async (request) => {
|
|
223
232
|
const context = new Context(request);
|
|
233
|
+
let aborted = request.signal.aborted;
|
|
234
|
+
if (!aborted) request.signal.addEventListener("abort", () => {
|
|
235
|
+
aborted = true;
|
|
236
|
+
}, { once: true });
|
|
237
|
+
if (aborted) return require_handler_utils.emptyResponse.clone();
|
|
224
238
|
const url = request.url, s = url.indexOf("/", pathStart);
|
|
225
239
|
context.path = url.substring(s, (context.qi = url.indexOf("?", s)) === -1 ? url.length : context.qi);
|
|
226
240
|
try {
|
|
227
241
|
for (let i = 0; i < onRequests.length; i++) {
|
|
228
242
|
const result = asyncIndexes?.[i] ? await onRequests[i](context) : onRequests[i](context);
|
|
243
|
+
if (aborted) return require_handler_utils.emptyResponse.clone();
|
|
229
244
|
if (result !== void 0) {
|
|
230
245
|
const response = mapResponse(result, context.set);
|
|
231
246
|
afterResponse?.(context);
|
|
@@ -239,11 +254,17 @@ function createFetchHandler(app) {
|
|
|
239
254
|
};
|
|
240
255
|
return (request) => {
|
|
241
256
|
const context = new Context(request);
|
|
257
|
+
let aborted = request.signal.aborted;
|
|
258
|
+
if (!aborted) request.signal.addEventListener("abort", () => {
|
|
259
|
+
aborted = true;
|
|
260
|
+
}, { once: true });
|
|
261
|
+
if (aborted) return require_handler_utils.emptyResponse.clone();
|
|
242
262
|
const url = request.url, s = url.indexOf("/", pathStart);
|
|
243
263
|
context.path = url.substring(s, (context.qi = url.indexOf("?", s)) === -1 ? url.length : context.qi);
|
|
244
264
|
try {
|
|
245
265
|
for (let i = 0; i < onRequests.length; i++) {
|
|
246
266
|
const result = onRequests[i](context);
|
|
267
|
+
if (aborted) return require_handler_utils.emptyResponse.clone();
|
|
247
268
|
if (result !== void 0) {
|
|
248
269
|
const response = mapResponse(result, context.set);
|
|
249
270
|
afterResponse?.(context);
|
package/dist/handler/fetch.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { flattenChain, isNotEmpty, nullObject, requestId } from "../utils.mjs";
|
|
2
2
|
import { NotFound, PROBLEM_JSON, internalServerErrorResponse, isProduction } from "../error.mjs";
|
|
3
3
|
import { handleSet } from "../adapter/utils.mjs";
|
|
4
|
-
import { cachedResponse, getAsyncIndexes } from "./utils.mjs";
|
|
4
|
+
import { cachedResponse, emptyResponse, getAsyncIndexes } from "./utils.mjs";
|
|
5
5
|
import { createTracer, unionTracePhases } from "../trace.mjs";
|
|
6
6
|
import { createContext } from "../context.mjs";
|
|
7
7
|
import { defaultAdapter } from "../adapter/constants.mjs";
|
|
@@ -173,6 +173,11 @@ function createFetchHandler(app) {
|
|
|
173
173
|
const asyncIndexes = onRequests.length ? getAsyncIndexes(onRequests) : void 0;
|
|
174
174
|
return async (request) => {
|
|
175
175
|
const context = new Context(request);
|
|
176
|
+
let aborted = request.signal.aborted;
|
|
177
|
+
if (!aborted) request.signal.addEventListener("abort", () => {
|
|
178
|
+
aborted = true;
|
|
179
|
+
}, { once: true });
|
|
180
|
+
if (aborted) return emptyResponse.clone();
|
|
176
181
|
const url = request.url, s = url.indexOf("/", pathStart);
|
|
177
182
|
context.path = url.substring(s, (context.qi = url.indexOf("?", s)) === -1 ? url.length : context.qi);
|
|
178
183
|
context.rid = requestId();
|
|
@@ -199,6 +204,10 @@ function createFetchHandler(app) {
|
|
|
199
204
|
});
|
|
200
205
|
const result = asyncIndexes?.[i] ? await onRequests[i](context) : onRequests[i](context);
|
|
201
206
|
for (let i = 0; i < traceLength; i++) endReports[i]?.();
|
|
207
|
+
if (aborted) {
|
|
208
|
+
for (let j = 0; j < traceLength; j++) trace[j].r(requestReports[j]);
|
|
209
|
+
return emptyResponse.clone();
|
|
210
|
+
}
|
|
202
211
|
if (result !== void 0) {
|
|
203
212
|
for (let j = 0; j < traceLength; j++) trace[j].r(requestReports[j]);
|
|
204
213
|
const response = mapResponse(result, context.set);
|
|
@@ -219,11 +228,17 @@ function createFetchHandler(app) {
|
|
|
219
228
|
const asyncIndexes = getAsyncIndexes(onRequests);
|
|
220
229
|
if (asyncIndexes) return async (request) => {
|
|
221
230
|
const context = new Context(request);
|
|
231
|
+
let aborted = request.signal.aborted;
|
|
232
|
+
if (!aborted) request.signal.addEventListener("abort", () => {
|
|
233
|
+
aborted = true;
|
|
234
|
+
}, { once: true });
|
|
235
|
+
if (aborted) return emptyResponse.clone();
|
|
222
236
|
const url = request.url, s = url.indexOf("/", pathStart);
|
|
223
237
|
context.path = url.substring(s, (context.qi = url.indexOf("?", s)) === -1 ? url.length : context.qi);
|
|
224
238
|
try {
|
|
225
239
|
for (let i = 0; i < onRequests.length; i++) {
|
|
226
240
|
const result = asyncIndexes?.[i] ? await onRequests[i](context) : onRequests[i](context);
|
|
241
|
+
if (aborted) return emptyResponse.clone();
|
|
227
242
|
if (result !== void 0) {
|
|
228
243
|
const response = mapResponse(result, context.set);
|
|
229
244
|
afterResponse?.(context);
|
|
@@ -237,11 +252,17 @@ function createFetchHandler(app) {
|
|
|
237
252
|
};
|
|
238
253
|
return (request) => {
|
|
239
254
|
const context = new Context(request);
|
|
255
|
+
let aborted = request.signal.aborted;
|
|
256
|
+
if (!aborted) request.signal.addEventListener("abort", () => {
|
|
257
|
+
aborted = true;
|
|
258
|
+
}, { once: true });
|
|
259
|
+
if (aborted) return emptyResponse.clone();
|
|
240
260
|
const url = request.url, s = url.indexOf("/", pathStart);
|
|
241
261
|
context.path = url.substring(s, (context.qi = url.indexOf("?", s)) === -1 ? url.length : context.qi);
|
|
242
262
|
try {
|
|
243
263
|
for (let i = 0; i < onRequests.length; i++) {
|
|
244
264
|
const result = onRequests[i](context);
|
|
265
|
+
if (aborted) return emptyResponse.clone();
|
|
245
266
|
if (result !== void 0) {
|
|
246
267
|
const response = mapResponse(result, context.set);
|
|
247
268
|
afterResponse?.(context);
|
package/dist/handler/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
+
import { getAsyncIndexes } from "./utils.js";
|
|
1
2
|
import { createErrorHandler } from "./error.js";
|
|
2
3
|
import { applyHoc, createFetchHandler } from "./fetch.js";
|
|
3
|
-
import { getAsyncIndexes } from "./utils.js";
|
|
4
4
|
export { applyHoc, createErrorHandler, createFetchHandler, getAsyncIndexes };
|
package/dist/handler/utils.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
//#region src/handler/utils.d.ts
|
|
2
|
+
declare const emptyResponse: Response | {
|
|
3
|
+
clone: () => Response;
|
|
4
|
+
};
|
|
2
5
|
declare function cachedResponse(body: string, status: number, headers?: Record<string, string>): () => Response;
|
|
3
6
|
declare function forwardError<T>(value: T): T;
|
|
4
7
|
declare function getAsyncIndexes(onRequests: Function[]): (true | undefined)[] | undefined;
|
|
5
8
|
//#endregion
|
|
6
|
-
export { cachedResponse, forwardError, getAsyncIndexes };
|
|
9
|
+
export { cachedResponse, emptyResponse, forwardError, getAsyncIndexes };
|
package/dist/handler/utils.js
CHANGED
|
@@ -3,6 +3,7 @@ const require_universal_constants = require('../universal/constants.js');
|
|
|
3
3
|
const require_compile_utils = require('../compile/utils.js');
|
|
4
4
|
|
|
5
5
|
//#region src/handler/utils.ts
|
|
6
|
+
const emptyResponse = require_universal_constants.isCloudflareWorker ? { clone: () => new Response(null) } : new Response(null);
|
|
6
7
|
function cachedResponse(body, status, headers) {
|
|
7
8
|
let cached;
|
|
8
9
|
return () => require_universal_constants.isCloudflareWorker ? new Response(body, {
|
|
@@ -28,5 +29,6 @@ function getAsyncIndexes(onRequests) {
|
|
|
28
29
|
|
|
29
30
|
//#endregion
|
|
30
31
|
exports.cachedResponse = cachedResponse;
|
|
32
|
+
exports.emptyResponse = emptyResponse;
|
|
31
33
|
exports.forwardError = forwardError;
|
|
32
34
|
exports.getAsyncIndexes = getAsyncIndexes;
|
package/dist/handler/utils.mjs
CHANGED
|
@@ -2,6 +2,7 @@ import { isCloudflareWorker } from "../universal/constants.mjs";
|
|
|
2
2
|
import { isAsyncFunction } from "../compile/utils.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/handler/utils.ts
|
|
5
|
+
const emptyResponse = isCloudflareWorker ? { clone: () => new Response(null) } : new Response(null);
|
|
5
6
|
function cachedResponse(body, status, headers) {
|
|
6
7
|
let cached;
|
|
7
8
|
return () => isCloudflareWorker ? new Response(body, {
|
|
@@ -26,4 +27,4 @@ function getAsyncIndexes(onRequests) {
|
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
//#endregion
|
|
29
|
-
export { cachedResponse, forwardError, getAsyncIndexes };
|
|
30
|
+
export { cachedResponse, emptyResponse, forwardError, getAsyncIndexes };
|
package/dist/type/constants.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ declare const ELYSIA_TYPES: {
|
|
|
17
17
|
readonly NoValidate: 15;
|
|
18
18
|
};
|
|
19
19
|
type ELYSIA_TYPES = typeof ELYSIA_TYPES;
|
|
20
|
-
declare const primitiveElysiaTypes: Set<
|
|
20
|
+
declare const primitiveElysiaTypes: Set<3 | 1 | 2 | 6 | 10 | 11 | 13 | 14>;
|
|
21
21
|
declare const noEnumerable: {
|
|
22
22
|
readonly enumerable: false;
|
|
23
23
|
};
|
package/dist/type/types.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ELYSIA_TYPES } from "./constants.js";
|
|
2
2
|
import { CookieOptions } from "../cookie/types.js";
|
|
3
3
|
import { MaybeArray } from "../types.js";
|
|
4
|
-
import { Validator } from "typebox/schema";
|
|
5
4
|
import { TObjectOptions, TSchemaOptions } from "typebox";
|
|
6
5
|
import { TLocalizedValidationError } from "typebox/error";
|
|
6
|
+
import { Validator } from "typebox/schema";
|
|
7
7
|
|
|
8
8
|
//#region src/type/types.d.ts
|
|
9
9
|
type FileUnit = number | `${number}${'k' | 'm'}`;
|