Skip to content

Commit e5c77bd

Browse files
committed
🔧 fix: static content JIT
1 parent 7207848 commit e5c77bd

File tree

5 files changed

+80
-162
lines changed

5 files changed

+80
-162
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Change:
2727
- detect possible json before return
2828
- unknown response now return as-is instead of JSON.stringify()
2929
- change Elysia validation error to JSON instead of string
30+
- static content evalute hook JIT instead of AOT
3031

3132
Bug fix:
3233
- [#466](https://github.com/elysiajs/elysia/issues/466) Async Derive leaks request context to other requests if `aot: true`
@@ -39,6 +40,7 @@ Bug fix:
3940
- derive/resolve always scoped to Global
4041
- duplicated onError call if not handled
4142
- [#516](https://github.com/elysiajs/elysia/issues/516) server timing breaks beforeHandle guards
43+
- cookie.remove() doesn't set correct cookie path
4244

4345
# 0.8.17 - 12 Feb 2024
4446
Feature:

example/a.ts

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,5 @@
1-
import { Elysia, t } from '../src'
2-
import { cors } from '../../cors/src'
1+
import { Elysia } from '../src'
32

4-
const app = new Elysia({ precompile: true })
5-
.guard(
6-
{
7-
query: t.Object({
8-
__omit: t.ObjectString({
9-
'x-id': t.Numeric(),
10-
'x-token': t.String({ minLength: 150 })
11-
})
12-
})
13-
},
14-
(app) =>
15-
app.ws('/v2/socket/user', {
16-
open(ws) {
17-
ws.send('test')
18-
}
19-
})
20-
)
3+
const app = new Elysia()
4+
.get('/', Bun.file('test/kyuukurarin.mp4'))
215
.listen(3000)

src/compose.ts

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,8 @@ export const composeHandler = ({
350350
!!hooks.trace.length
351351

352352
const isHandleFn = typeof handler === 'function'
353+
if (!isHandleFn) handler = mapCompactResponse(handler)
354+
353355
const handle = isHandleFn ? `handler(c)` : `handler`
354356
const handleResponse = hooks.onResponse.length
355357
? `\n;(async () => {${hooks.onResponse
@@ -383,6 +385,8 @@ export const composeHandler = ({
383385

384386
// @ts-expect-error private
385387
const defaultHeaders = app.setHeaders
388+
const hasDefaultHeaders =
389+
defaultHeaders && !!Object.keys(defaultHeaders).length
386390

387391
// ? defaultHeaders doesn't imply that user will use headers in handler
388392
const hasHeaders = inference.headers || validator.headers
@@ -552,7 +556,7 @@ export const composeHandler = ({
552556
inference.set ||
553557
hasTraceSet ||
554558
hasHeaders ||
555-
(defaultHeaders && !!Object.keys(defaultHeaders).length)
559+
hasDefaultHeaders
556560

557561
if (hasTrace) fnLiteral += '\nconst id = c.$$requestId\n'
558562

@@ -781,7 +785,6 @@ export const composeHandler = ({
781785
name: transform.name
782786
})
783787

784-
// @ts-ignore
785788
if (transform.$elysia === 'derive')
786789
fnLiteral += isAsync(transform)
787790
? `Object.assign(c, await transform[${i}](c));`
@@ -980,7 +983,9 @@ export const composeHandler = ({
980983
})
981984
if (hooks.afterHandle) {
982985
report('handle', {
983-
name: isHandleFn ? handler.name : undefined
986+
name: isHandleFn
987+
? (handler as Function).name
988+
: undefined
984989
})()
985990

986991
for (let i = 0; i < hooks.afterHandle.length; i++) {
@@ -1038,7 +1043,7 @@ export const composeHandler = ({
10381043

10391044
if (hooks?.afterHandle.length) {
10401045
const endHandle = report('handle', {
1041-
name: isHandleFn ? handler.name : undefined
1046+
name: isHandleFn ? (handler as Function).name : undefined
10421047
})
10431048

10441049
if (hooks.afterHandle.length)
@@ -1112,7 +1117,7 @@ export const composeHandler = ({
11121117
else fnLiteral += `return mapCompactResponse(r, c.request)\n`
11131118
} else {
11141119
const endHandle = report('handle', {
1115-
name: isHandleFn ? handler.name : undefined
1120+
name: isHandleFn ? (handler as Function).name : undefined
11161121
})
11171122

11181123
if (validator.response || hooks.mapResponse.length) {
@@ -1139,9 +1144,22 @@ export const composeHandler = ({
11391144

11401145
fnLiteral += encodeCookie
11411146

1142-
if (handler instanceof Response)
1143-
fnLiteral += `return ${handle}.clone()\n`
1144-
else if (hasSet)
1147+
if (handler instanceof Response) {
1148+
fnLiteral +=
1149+
inference.set || hasDefaultHeaders
1150+
? `if(
1151+
isNotEmpty(c.set.headers) ||
1152+
c.set.status !== 200 ||
1153+
c.set.redirect ||
1154+
c.set.cookie
1155+
)
1156+
return mapResponse(r, c.set, c.request)
1157+
else
1158+
return ${handle}.clone()`
1159+
: `return ${handle}.clone()`
1160+
1161+
fnLiteral += '\n'
1162+
} else if (hasSet)
11451163
fnLiteral += `return mapResponse(r, c.set, c.request)\n`
11461164
else fnLiteral += `return mapCompactResponse(r, c.request)\n`
11471165
} else if (traceConditions.handle || hasCookie) {
@@ -1175,9 +1193,22 @@ export const composeHandler = ({
11751193

11761194
report('afterHandle')()
11771195

1178-
if (handler instanceof Response)
1179-
fnLiteral += `return ${handle}.clone()\n`
1180-
else if (hasSet)
1196+
if (handler instanceof Response) {
1197+
fnLiteral +=
1198+
inference.set || hasDefaultHeaders
1199+
? `if(
1200+
isNotEmpty(c.set.headers) ||
1201+
c.set.status !== 200 ||
1202+
c.set.redirect ||
1203+
c.set.cookie
1204+
)
1205+
return mapResponse(r, c.set, c.request)
1206+
else
1207+
return ${handle}.clone()`
1208+
: `return ${handle}.clone()`
1209+
1210+
fnLiteral += '\n'
1211+
} else if (hasSet)
11811212
fnLiteral += `return mapResponse(${handled}, c.set, c.request)\n`
11821213
else
11831214
fnLiteral += `return mapCompactResponse(${handled}, c.request)\n`
@@ -1267,7 +1298,8 @@ export const composeHandler = ({
12671298
mapResponse,
12681299
mapCompactResponse,
12691300
mapEarlyResponse,
1270-
parseQuery
1301+
parseQuery,
1302+
isNotEmpty
12711303
},
12721304
error: {
12731305
NotFoundError,
@@ -1315,7 +1347,8 @@ export const composeHandler = ({
13151347
mapResponse,
13161348
mapCompactResponse,
13171349
mapEarlyResponse,
1318-
parseQuery
1350+
parseQuery,
1351+
isNotEmpty
13191352
},
13201353
error: {
13211354
NotFoundError,

0 commit comments

Comments
 (0)