diff --git a/CHANGELOG.md b/CHANGELOG.md index 948b4275..9e56c83e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +# 1.0.3 - 18 Mar 2024 +Improvement: +- Reduce instruction for static resource + +Bug fix: +- Fix returning mulitple status code using `error` doesn't accept the response + +# 1.0.2 - 18 Mar 2024 +Feature: +- add `scoped` support for `derive` and `resolve` + +Improvement: +- Type soundness +- type inference performance improvement + # 1.0.1 - 18 Mar 2024 Improvement: - `mapHandler` now check passthrough once instead of twice diff --git a/example/a.ts b/example/a.ts index a6851e0a..6d0e8f4d 100644 --- a/example/a.ts +++ b/example/a.ts @@ -1,16 +1,10 @@ -import { Elysia } from '../src' +import { Elysia, error, t } from '../src' -const child = new Elysia() - // ? This is only in local - .derive(() => ({ - hello: 'world' - })) - /** - * ? Since hello is only in local - * ? It might not be available in global - * - **/ - .mapDerive(({ hello }) => ({ - hello - })) - .get('/child', ({ hello }) => hello) +const app = new Elysia({ precompile: true }) + .headers({ + a: 'hello' + }) + .get('/', 'a') + .listen(3000) + +console.log(app.routes[0].composed?.toString()) diff --git a/package.json b/package.json index 199dbbba..74e59612 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "elysia", "description": "Ergonomic Framework for Human", - "version": "1.0.2", + "version": "1.0.3", "author": { "name": "saltyAom", "url": "https://github.com/SaltyAom", diff --git a/src/compose.ts b/src/compose.ts index 1246b741..85745594 100644 --- a/src/compose.ts +++ b/src/compose.ts @@ -341,7 +341,12 @@ export const composeHandler = ({ } }): ComposedHandler => { const isHandleFn = typeof handler === 'function' - if (!isHandleFn) handler = mapCompactResponse(handler) + + if (!isHandleFn) + handler = mapResponse(handler, { + // @ts-expect-error private property + headers: app.setHeaders ?? {} + }) const hasErrorHandler = (app.config.forceErrorEncapsulation && @@ -387,11 +392,6 @@ export const composeHandler = ({ hooks.type !== 'none' && (inference.body || !!validator.body) - // @ts-expect-error private - const defaultHeaders = app.setHeaders - const hasDefaultHeaders = - defaultHeaders && !!Object.keys(defaultHeaders).length - // ? defaultHeaders doesn't imply that user will use headers in handler const hasHeaders = inference.headers || validator.headers const hasCookie = inference.cookie || !!validator.cookie @@ -556,11 +556,7 @@ export const composeHandler = ({ const hasTraceSet = traceInference.set const hasSet = - inference.cookie || - inference.set || - hasTraceSet || - hasHeaders || - hasDefaultHeaders + inference.cookie || inference.set || hasTraceSet || hasHeaders if (hasTrace) fnLiteral += '\nconst id = c.$$requestId\n' @@ -782,7 +778,7 @@ export const composeHandler = ({ unit: hooks.transform.length }) - fnLiteral += '\nlet transformed\n' + if (hooks.transform.length) fnLiteral += '\nlet transformed\n' for (let i = 0; i < hooks.transform.length; i++) { const transform = hooks.transform[i] @@ -1166,9 +1162,8 @@ export const composeHandler = ({ fnLiteral += encodeCookie if (handler instanceof Response) { - fnLiteral += - inference.set || hasDefaultHeaders - ? `if( + fnLiteral += inference.set + ? `if( isNotEmpty(c.set.headers) || c.set.status !== 200 || c.set.redirect || @@ -1177,7 +1172,7 @@ export const composeHandler = ({ return mapResponse(${handle}.clone(), c.set, c.request) else return ${handle}.clone()` - : `return ${handle}.clone()` + : `return ${handle}.clone()` fnLiteral += '\n' } else if (hasSet) @@ -1215,9 +1210,8 @@ export const composeHandler = ({ report('afterHandle')() if (handler instanceof Response) { - fnLiteral += - inference.set || hasDefaultHeaders - ? `if( + fnLiteral += inference.set + ? `if( isNotEmpty(c.set.headers) || c.set.status !== 200 || c.set.redirect || @@ -1226,7 +1220,7 @@ export const composeHandler = ({ return mapResponse(${handle}.clone(), c.set, c.request) else return ${handle}.clone()` - : `return ${handle}.clone()` + : `return ${handle}.clone()` fnLiteral += '\n' } else if (hasSet) diff --git a/src/error.ts b/src/error.ts index 7a373fb2..a81b6a46 100644 --- a/src/error.ts +++ b/src/error.ts @@ -30,9 +30,9 @@ export const error = < const T = Code extends keyof InvertedStatusMap ? InvertedStatusMap[Code] : Code, - const Status extends number = Code extends keyof StatusMap + const Status extends Code extends keyof StatusMap ? StatusMap[Code] - : Code + : Code = Code extends keyof StatusMap ? StatusMap[Code] : Code >( code: Code, response?: T @@ -127,7 +127,7 @@ export class ValidationError extends Error { : customError + '' } else if (isProduction) { message = JSON.stringify({ - type: "validation", + type: 'validation', on: type, message: error?.message, found: value @@ -140,22 +140,22 @@ export class ValidationError extends Error { ? [...validator.Errors(value)] : [...Value.Errors(validator, value)] - let expected - - try { - expected = Value.Create(schema) - } catch (error) { - expected = { - type: 'Could not create expected value', - // @ts-expect-error - message: error?.message, - error - } + let expected + + try { + expected = Value.Create(schema) + } catch (error) { + expected = { + type: 'Could not create expected value', + // @ts-expect-error + message: error?.message, + error } + } message = JSON.stringify( { - type: "validation", + type: 'validation', on: type, property: accessor, message: error?.message,