Comparing version 0.2.0-beta.0 to 0.2.0-beta.1
@@ -16,2 +16,2 @@ /// <reference types="bun-types" /> | ||
} | ||
export type PreContext<Store extends Elysia['store'] = Elysia['store']> = Omit<Context<{}, Store>, 'query' | 'params' | 'body'>; | ||
export type PreContext<Route extends TypedRoute = TypedRoute, Store extends Elysia['store'] = Elysia['store']> = Omit<Context<Route, Store>, 'query' | 'params' | 'body'>; |
@@ -20,4 +20,4 @@ /// <reference types="bun-types" /> | ||
onStart(handler: VoidLifeCycle<Instance>): this; | ||
onRequest(handler: BeforeRequestHandler<Instance['store']>): this; | ||
onParse(parser: BodyParser): this; | ||
onRequest<Route extends OverwritableTypeRoute = TypedRoute>(handler: BeforeRequestHandler<Route, Instance>): this; | ||
onParse(parser: BodyParser<any, Instance>): this; | ||
onTransform<Route extends OverwritableTypeRoute = TypedRoute>(handler: NoReturnHandler<Route, Instance>): this; | ||
@@ -24,0 +24,0 @@ onBeforeHandle<Route extends OverwritableTypeRoute = TypedRoute>(handler: Handler<Route, Instance>): this; |
@@ -271,10 +271,20 @@ import { Router } from './router'; | ||
}; | ||
let context; | ||
if (this.decorators) { | ||
context = clone(this.decorators); | ||
context.request = request; | ||
context.set = set; | ||
context.store = this.store; | ||
} | ||
else { | ||
context = { | ||
set, | ||
store: this.store, | ||
request | ||
}; | ||
} | ||
try { | ||
for (let i = 0; i < this.event.request.length; i++) { | ||
const onRequest = this.event.request[i]; | ||
let response = onRequest({ | ||
request, | ||
store: this.store, | ||
set | ||
}); | ||
let response = onRequest(context); | ||
if (response instanceof Promise) | ||
@@ -295,8 +305,12 @@ response = await response; | ||
throw new Error('NOT_FOUND'); | ||
const hooks = handler.hooks; | ||
let body; | ||
if (request.method !== 'GET') { | ||
const contentType = request.headers.get('content-type'); | ||
let contentType = request.headers.get('content-type'); | ||
if (contentType) { | ||
const index = contentType.indexOf(';'); | ||
if (index !== -1) | ||
contentType = contentType.slice(0, index); | ||
for (let i = 0; i < this.event.parse.length; i++) { | ||
let temp = this.event.parse[i](request, contentType); | ||
let temp = this.event.parse[i](context, contentType); | ||
if (temp instanceof Promise) | ||
@@ -309,3 +323,3 @@ temp = await temp; | ||
} | ||
if (body === undefined) | ||
if (body === undefined) { | ||
switch (contentType) { | ||
@@ -318,25 +332,12 @@ case 'application/json': | ||
break; | ||
case 'application/x-www-form-urlencoded': | ||
body = mapQuery(await request.text(), null); | ||
break; | ||
} | ||
} | ||
} | ||
} | ||
const hooks = handler.hooks; | ||
let context; | ||
if (this.decorators) { | ||
context = clone(this.decorators); | ||
context.request = request; | ||
context.body = body; | ||
context.set = set; | ||
context.store = this.store; | ||
context.params = route?.params || {}; | ||
context.query = mapQuery(request.url, index); | ||
} | ||
else | ||
context = { | ||
request, | ||
body, | ||
set, | ||
store: this.store, | ||
params: route?.params || {}, | ||
query: mapQuery(request.url, index) | ||
}; | ||
context.body = body; | ||
context.params = route?.params || {}; | ||
context.query = mapQuery(request.url, index); | ||
for (let i = 0; i < hooks.transform.length; i++) { | ||
@@ -383,14 +384,4 @@ const operation = hooks.transform[i](context); | ||
response = await response; | ||
if (handler.validator?.response) | ||
if (response instanceof Response) { | ||
let res; | ||
if (handler.validator.response.schema.type === 'object') | ||
res = await response.clone().json(); | ||
else | ||
res = await response.clone().text(); | ||
if (handler.validator.response.Check(res) === false) | ||
throw createValidationError('response', handler.validator.response, response); | ||
} | ||
else if (handler.validator.response.Check(response) === false) | ||
throw createValidationError('response', handler.validator.response, response); | ||
if (handler.validator?.response?.Check(response) === false) | ||
throw createValidationError('response', handler.validator.response, response); | ||
for (let i = 0; i < hooks.afterHandle.length; i++) { | ||
@@ -397,0 +388,0 @@ let newResponse = hooks.afterHandle[i](context, response); |
@@ -27,7 +27,7 @@ /// <reference types="bun-types" /> | ||
export type VoidLifeCycle<Instance extends ElysiaInstance = ElysiaInstance> = ((app: Elysia<Instance>) => void) | ((app: Elysia<Instance>) => Promise<void>); | ||
export type BodyParser = (request: Request, contentType: string) => any | Promise<any>; | ||
export type BodyParser<Route extends TypedRoute = TypedRoute, Instance extends ElysiaInstance = ElysiaInstance> = (context: PreContext<Route, Instance['store']> & Instance['request'], contentType: string) => any | Promise<any>; | ||
export interface LifeCycle<Instance extends ElysiaInstance = ElysiaInstance> { | ||
start: VoidLifeCycle<Instance>; | ||
request: BeforeRequestHandler; | ||
parse: BodyParser; | ||
request: BeforeRequestHandler<any, Instance>; | ||
parse: BodyParser<any, Instance>; | ||
transform: NoReturnHandler<any, Instance>; | ||
@@ -42,4 +42,4 @@ beforeHandle: Handler<any, Instance>; | ||
start: VoidLifeCycle<Instance>[]; | ||
request: BeforeRequestHandler[]; | ||
parse: BodyParser[]; | ||
request: BeforeRequestHandler<any, Instance>[]; | ||
parse: BodyParser<any, Instance>[]; | ||
transform: NoReturnHandler<any, Instance>[]; | ||
@@ -51,3 +51,3 @@ beforeHandle: Handler<any, Instance>[]; | ||
} | ||
export type BeforeRequestHandler<Store extends ElysiaInstance['store'] = ElysiaInstance['store']> = (context: PreContext<Store>) => any; | ||
export type BeforeRequestHandler<Route extends TypedRoute = TypedRoute, Instance extends ElysiaInstance = ElysiaInstance> = (context: PreContext<Route, Instance['store']> & Instance['request']) => any; | ||
export interface RegisteredHook<Instance extends ElysiaInstance = ElysiaInstance> { | ||
@@ -54,0 +54,0 @@ schema?: TypedSchema; |
@@ -9,5 +9,5 @@ import { TypeCheck } from '@sinclair/typebox/compiler'; | ||
export declare const getPath: (url: string, queryIndex?: number) => string; | ||
export declare const mapQuery: (url: string, queryIndex?: number) => Record<string, string>; | ||
export declare const mapQuery: (url: string, queryIndex?: number | null) => Record<string, string>; | ||
export declare const mergeDeep: <A extends Object = Object, B extends Object = Object>(target: A, source: B) => DeepMergeTwoTypes<A, B>; | ||
export declare const createValidationError: (type: string, validator: TypeCheck<any>, value: any) => Error; | ||
export declare const getSchemaValidator: <Schema extends TSchema | undefined = undefined>(schema: Schema, additionalProperties?: boolean) => TypeCheck<NonNullable<Schema>> | undefined; |
@@ -41,23 +41,26 @@ import { TypeCompiler } from '@sinclair/typebox/compiler'; | ||
const query = {}; | ||
let paths = url.slice(queryIndex); | ||
if (queryIndex) | ||
url = url.slice(queryIndex); | ||
else | ||
url = ';' + url; | ||
while (true) { | ||
const sep = paths.indexOf('&', 4); | ||
const sep = url.indexOf('&', 4); | ||
if (sep === -1) { | ||
const equal = paths.indexOf('='); | ||
let value = paths.slice(equal + 1); | ||
const equal = url.indexOf('='); | ||
let value = url.slice(equal + 1); | ||
const hashIndex = value.indexOf('#'); | ||
if (hashIndex !== -1) | ||
value = value.substring(0, hashIndex); | ||
if (value.indexOf('%') !== -1) | ||
value = value.slice(0, hashIndex); | ||
if (value.includes('%')) | ||
value = decodeURI(value); | ||
query[paths.slice(1, equal)] = decodeURI(value); | ||
query[url.slice(1, equal)] = value; | ||
break; | ||
} | ||
const path = paths.slice(0, sep); | ||
const path = url.slice(0, sep); | ||
const equal = path.indexOf('='); | ||
let value = path.slice(equal + 1); | ||
if (value.indexOf('%') !== -1) | ||
if (value.includes('%')) | ||
value = decodeURI(value); | ||
query[path.slice(1, equal)] = value; | ||
paths = paths.slice(sep); | ||
url = url.slice(sep); | ||
} | ||
@@ -64,0 +67,0 @@ return query; |
{ | ||
"name": "elysia", | ||
"description": "Fast, and friendly Bun web framework", | ||
"version": "0.2.0-beta.0", | ||
"version": "0.2.0-beta.1", | ||
"author": { | ||
@@ -6,0 +6,0 @@ "name": "saltyAom", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
63821
1378