Comparing version 1.1.0-rc.7 to 1.1.0-rc.8
@@ -5,3 +5,3 @@ import type { Server } from 'bun'; | ||
import { error, type ELYSIA_RESPONSE } from './error'; | ||
import type { RouteSchema, Prettify, GetPathParameter, SingletonBase, HTTPHeaders } from './types'; | ||
import type { RouteSchema, Prettify, ResolvePath, SingletonBase, HTTPHeaders } from './types'; | ||
type InvertedStatusMapKey = keyof InvertedStatusMap; | ||
@@ -19,3 +19,3 @@ type WithoutNullableKeys<Type> = { | ||
query: undefined extends Route['query'] ? Record<string, string | string[] | undefined> : Route['query']; | ||
params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? Record<GetPathParameter<Path>, string> : never : Route['params']; | ||
params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? ResolvePath<Path> : never : Route['params']; | ||
headers: undefined extends Route['headers'] ? Record<string, string | undefined> : Route['headers']; | ||
@@ -66,5 +66,3 @@ cookie: undefined extends Route['cookie'] ? Record<string, Cookie<string | undefined>> : Record<string, Cookie<string | undefined>> & Prettify<WithoutNullableKeys<{ | ||
query: undefined extends Route['query'] ? Record<string, string | string[] | undefined> : Route['query']; | ||
params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? { | ||
[path in GetPathParameter<Path>]: string; | ||
} : never : Route['params']; | ||
params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? ResolvePath<Path> : never : Route['params']; | ||
headers: undefined extends Route['headers'] ? Record<string, string | undefined> : Route['headers']; | ||
@@ -117,5 +115,5 @@ cookie: undefined extends Route['cookie'] ? Record<string, Cookie<string | undefined>> : Record<string, Cookie<string | undefined>> & Prettify<WithoutNullableKeys<{ | ||
response?: Route['response']; | ||
} & (Route['response'] extends { | ||
200: unknown; | ||
} ? { | ||
} & ({} extends Route['response'] ? { | ||
error: typeof error; | ||
} : { | ||
error: <const Code extends keyof Route['response'] | InvertedStatusMap[Extract<InvertedStatusMapKey, keyof Route['response']>], const T extends Code extends keyof Route['response'] ? Route['response'][Code] : Code extends keyof StatusMap ? Route['response'][StatusMap[Code]] : never>(code: Code, response: T) => { | ||
@@ -128,4 +126,2 @@ [ELYSIA_RESPONSE]: Code extends keyof StatusMap ? StatusMap[Code] : Code; | ||
}; | ||
} : { | ||
error: typeof error; | ||
}) & Singleton['decorator'] & Singleton['derive'] & Singleton['resolve']>; | ||
@@ -132,0 +128,0 @@ export type PreContext<in out Singleton extends SingletonBase = { |
@@ -128,2 +128,7 @@ import type { Elysia } from '.'; | ||
export type GetPathParameter<Path extends string> = Path extends `${infer A}/${infer B}` ? IsPathParameter<A> | GetPathParameter<B> : IsPathParameter<Path>; | ||
export type ResolvePath<Path extends string> = Prettify<{ | ||
[Param in GetPathParameter<Path> as Param extends `${string}?` ? never : Param]: string; | ||
} & { | ||
[Param in GetPathParameter<Path> as Param extends `${infer OptionalParam}?` ? OptionalParam : never]?: string; | ||
}>; | ||
export type Prettify<T> = { | ||
@@ -141,7 +146,11 @@ [K in keyof T]: T[K]; | ||
} & {}; | ||
type IsBothObject<A, B> = A extends Record<string | number | symbol, unknown> ? B extends Record<string | number | symbol, unknown> ? true : false : false; | ||
export type Reconcile<A extends Object, B extends Object, Override extends boolean = false> = Override extends true ? { | ||
type IsBothObject<A, B> = A extends Record<string | number | symbol, unknown> ? B extends Record<string | number | symbol, unknown> ? IsClass<A> extends false ? IsClass<B> extends false ? true : false : false : false : false; | ||
type IsClass<V> = V extends abstract new (...args: any) => any ? true : false; | ||
export type Reconcile<A extends Object, B extends Object, Override extends boolean = false, Stack extends number[] = []> = Stack['length'] extends 16 ? A : Override extends true ? { | ||
[key in keyof A as key extends keyof B ? never : key]: A[key]; | ||
} extends infer Collision ? {} extends Collision ? { | ||
[key in keyof B]: IsBothObject<A[key], B[key]> extends true ? Reconcile<A[key], B[key], Override> : B[key]; | ||
[key in keyof B]: IsBothObject<A[key], B[key]> extends true ? Reconcile<A[key], B[key], Override, [ | ||
0, | ||
...Stack | ||
]> : B[key]; | ||
} : Prettify<Collision & { | ||
@@ -152,3 +161,6 @@ [key in keyof B]: B[key]; | ||
} extends infer Collision ? {} extends Collision ? { | ||
[key in keyof A]: IsBothObject<A[key], B[key]> extends true ? Reconcile<A[key], B[key], Override> : A[key]; | ||
[key in keyof A]: IsBothObject<A[key], B[key]> extends true ? Reconcile<A[key], B[key], Override, [ | ||
0, | ||
...Stack | ||
]> : A[key]; | ||
} : Prettify<{ | ||
@@ -191,23 +203,2 @@ [key in keyof A]: A[key]; | ||
export type UnwrapBodySchema<Schema extends TSchema | string | undefined, Definitions extends Record<string, unknown> = {}> = undefined extends Schema ? unknown : Schema extends TSchema ? Schema extends OptionalField ? Prettify<Partial<Static<Schema>>> | null : StaticDecode<Schema> : Schema extends string ? Definitions extends Record<Schema, infer NamedSchema> ? NamedSchema : Definitions : unknown; | ||
export type SuccessfulResponse<T = unknown> = { | ||
200: T; | ||
} | { | ||
201: T; | ||
} | { | ||
202: T; | ||
} | { | ||
203: T; | ||
} | { | ||
204: T; | ||
} | { | ||
205: T; | ||
} | { | ||
206: T; | ||
} | { | ||
207: T; | ||
} | { | ||
208: T; | ||
} | { | ||
226: T; | ||
}; | ||
export interface UnwrapRoute<in out Schema extends InputSchema<any>, in out Definitions extends DefinitionBase['type'] = {}> { | ||
@@ -219,3 +210,5 @@ body: UnwrapBodySchema<Schema['body'], Definitions>; | ||
cookie: UnwrapSchema<Schema['cookie'], Definitions>; | ||
response: Schema['response'] extends TSchema | string ? CoExist<UnwrapSchema<Schema['response'], Definitions>, File, BunFile> : Schema['response'] extends SuccessfulResponse<TAnySchema | string> ? { | ||
response: Schema['response'] extends TSchema | string ? { | ||
200: CoExist<UnwrapSchema<Schema['response'], Definitions>, File, BunFile>; | ||
} : Schema['response'] extends Record<number, TAnySchema | string> ? { | ||
[k in keyof Schema['response']]: CoExist<UnwrapSchema<Schema['response'][k], Definitions>, File, BunFile>; | ||
@@ -271,3 +264,7 @@ } : unknown | void; | ||
cookie: undefined extends A['cookie'] ? B['cookie'] : A['cookie']; | ||
response: undefined extends A['response'] ? B['response'] : A['response']; | ||
response: Prettify<{ | ||
[v in keyof A['response']]: A['response'][v]; | ||
} & { | ||
[v in keyof Omit<B['response'], keyof A['response']>]: B['response'][v]; | ||
}>; | ||
} | ||
@@ -279,3 +276,3 @@ export type Handler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = { | ||
resolve: {}; | ||
}, Path extends string = ''> = (context: Context<Route, Singleton, Path>) => Route['response'] extends SuccessfulResponse ? Response | MaybePromise<Route['response'][keyof Route['response']]> : Response | MaybePromise<Route['response']>; | ||
}, Path extends string = ''> = (context: Context<Route, Singleton, Path>) => MaybePromise<{} extends Route['response'] ? unknown : Route['response'][keyof Route['response']]>; | ||
export type Replace<Original, Target, With> = IsAny<Target> extends true ? Original : Original extends Record<string, unknown> ? { | ||
@@ -293,3 +290,3 @@ [K in keyof Original]: Original[K] extends Target ? With : Original[K]; | ||
resolve: {}; | ||
}, Path extends string = '', MacroContext = {}> = ((context: MacroContext extends Record<string | number | symbol, unknown> ? Prettify<MacroContext & Context<Route, Singleton, Path>> : Context<Route, Singleton, Path>) => Route['response'] extends SuccessfulResponse ? Response | MaybePromise<Route['response'][keyof Route['response']] | { | ||
}, Path extends string = '', MacroContext = {}> = ((context: MacroContext extends Record<string | number | symbol, unknown> ? Prettify<MacroContext & Context<Route, Singleton, Path>> : Context<Route, Singleton, Path>) => Response | MaybePromise<{} extends Route['response'] ? unknown : Route['response'][keyof Route['response']] | { | ||
[Status in keyof Route['response']]: { | ||
@@ -299,3 +296,8 @@ _type: Record<Status, Route['response'][Status]>; | ||
}; | ||
}[keyof Route['response']]> : Response | MaybePromise<Route['response']>) | (unknown extends Route['response'] ? string | number | Object : Route['response'] extends SuccessfulResponse ? Route['response'][keyof Route['response']] : Route['response']); | ||
}[keyof Route['response']]>) | ({} extends Route['response'] ? string | number | boolean | Object : Route['response'][keyof Route['response']] | { | ||
[Status in keyof Route['response']]: { | ||
_type: Record<Status, Route['response'][Status]>; | ||
[ELYSIA_RESPONSE]: Status; | ||
}; | ||
}[keyof Route['response']]); | ||
export type OptionalHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = { | ||
@@ -439,3 +441,3 @@ decorator: {}; | ||
} ? Schema : Schema & { | ||
params: undefined extends Schema['params'] ? Record<GetPathParameter<Path>, string> : Schema['params']; | ||
params: undefined extends Schema['params'] ? ResolvePath<Path> : Schema['params']; | ||
}> = (LocalSchema extends {} ? LocalSchema : Isolate<LocalSchema>) & Extension & { | ||
@@ -582,3 +584,3 @@ /** | ||
export type ComposeElysiaResponse<Response, Handle> = Handle extends (...a: any[]) => infer A ? _ComposeElysiaResponse<Response, Replace<Awaited<A>, BunFile, File>> : _ComposeElysiaResponse<Response, Replace<Awaited<Handle>, BunFile, File>>; | ||
type _ComposeElysiaResponse<Response, Handle> = Prettify<unknown extends Response ? { | ||
type _ComposeElysiaResponse<Response, Handle> = Prettify<{} extends Response ? { | ||
200: Exclude<Handle, { | ||
@@ -593,5 +595,3 @@ [ELYSIA_RESPONSE]: any; | ||
} ? Status : never]: ErrorResponse['response']; | ||
} : Response extends SuccessfulResponse ? Response : { | ||
200: Response; | ||
}>; | ||
} : Response>; | ||
export type MergeElysiaInstances<Instances extends Elysia<any, any, any, any, any, any>[] = [], Prefix extends string = '', Scoped extends boolean = false, Singleton extends SingletonBase = { | ||
@@ -598,0 +598,0 @@ decorator: {}; |
@@ -1604,3 +1604,3 @@ "use strict"; | ||
}); | ||
var redirect = (url, status = 301) => Response.redirect(url, status); | ||
var redirect = (url, status = 302) => Response.redirect(url, status); | ||
var ELYSIA_FORM_DATA = Symbol("ElysiaFormData"); | ||
@@ -1607,0 +1607,0 @@ var ELYSIA_REQUEST_ID = Symbol("ElysiaRequestId"); |
@@ -5,3 +5,3 @@ import type { Server } from 'bun'; | ||
import { error, type ELYSIA_RESPONSE } from './error'; | ||
import type { RouteSchema, Prettify, GetPathParameter, SingletonBase, HTTPHeaders } from './types'; | ||
import type { RouteSchema, Prettify, ResolvePath, SingletonBase, HTTPHeaders } from './types'; | ||
type InvertedStatusMapKey = keyof InvertedStatusMap; | ||
@@ -19,3 +19,3 @@ type WithoutNullableKeys<Type> = { | ||
query: undefined extends Route['query'] ? Record<string, string | string[] | undefined> : Route['query']; | ||
params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? Record<GetPathParameter<Path>, string> : never : Route['params']; | ||
params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? ResolvePath<Path> : never : Route['params']; | ||
headers: undefined extends Route['headers'] ? Record<string, string | undefined> : Route['headers']; | ||
@@ -66,5 +66,3 @@ cookie: undefined extends Route['cookie'] ? Record<string, Cookie<string | undefined>> : Record<string, Cookie<string | undefined>> & Prettify<WithoutNullableKeys<{ | ||
query: undefined extends Route['query'] ? Record<string, string | string[] | undefined> : Route['query']; | ||
params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? { | ||
[path in GetPathParameter<Path>]: string; | ||
} : never : Route['params']; | ||
params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? ResolvePath<Path> : never : Route['params']; | ||
headers: undefined extends Route['headers'] ? Record<string, string | undefined> : Route['headers']; | ||
@@ -117,5 +115,5 @@ cookie: undefined extends Route['cookie'] ? Record<string, Cookie<string | undefined>> : Record<string, Cookie<string | undefined>> & Prettify<WithoutNullableKeys<{ | ||
response?: Route['response']; | ||
} & (Route['response'] extends { | ||
200: unknown; | ||
} ? { | ||
} & ({} extends Route['response'] ? { | ||
error: typeof error; | ||
} : { | ||
error: <const Code extends keyof Route['response'] | InvertedStatusMap[Extract<InvertedStatusMapKey, keyof Route['response']>], const T extends Code extends keyof Route['response'] ? Route['response'][Code] : Code extends keyof StatusMap ? Route['response'][StatusMap[Code]] : never>(code: Code, response: T) => { | ||
@@ -128,4 +126,2 @@ [ELYSIA_RESPONSE]: Code extends keyof StatusMap ? StatusMap[Code] : Code; | ||
}; | ||
} : { | ||
error: typeof error; | ||
}) & Singleton['decorator'] & Singleton['derive'] & Singleton['resolve']>; | ||
@@ -132,0 +128,0 @@ export type PreContext<in out Singleton extends SingletonBase = { |
@@ -128,2 +128,7 @@ import type { Elysia } from '.'; | ||
export type GetPathParameter<Path extends string> = Path extends `${infer A}/${infer B}` ? IsPathParameter<A> | GetPathParameter<B> : IsPathParameter<Path>; | ||
export type ResolvePath<Path extends string> = Prettify<{ | ||
[Param in GetPathParameter<Path> as Param extends `${string}?` ? never : Param]: string; | ||
} & { | ||
[Param in GetPathParameter<Path> as Param extends `${infer OptionalParam}?` ? OptionalParam : never]?: string; | ||
}>; | ||
export type Prettify<T> = { | ||
@@ -141,7 +146,11 @@ [K in keyof T]: T[K]; | ||
} & {}; | ||
type IsBothObject<A, B> = A extends Record<string | number | symbol, unknown> ? B extends Record<string | number | symbol, unknown> ? true : false : false; | ||
export type Reconcile<A extends Object, B extends Object, Override extends boolean = false> = Override extends true ? { | ||
type IsBothObject<A, B> = A extends Record<string | number | symbol, unknown> ? B extends Record<string | number | symbol, unknown> ? IsClass<A> extends false ? IsClass<B> extends false ? true : false : false : false : false; | ||
type IsClass<V> = V extends abstract new (...args: any) => any ? true : false; | ||
export type Reconcile<A extends Object, B extends Object, Override extends boolean = false, Stack extends number[] = []> = Stack['length'] extends 16 ? A : Override extends true ? { | ||
[key in keyof A as key extends keyof B ? never : key]: A[key]; | ||
} extends infer Collision ? {} extends Collision ? { | ||
[key in keyof B]: IsBothObject<A[key], B[key]> extends true ? Reconcile<A[key], B[key], Override> : B[key]; | ||
[key in keyof B]: IsBothObject<A[key], B[key]> extends true ? Reconcile<A[key], B[key], Override, [ | ||
0, | ||
...Stack | ||
]> : B[key]; | ||
} : Prettify<Collision & { | ||
@@ -152,3 +161,6 @@ [key in keyof B]: B[key]; | ||
} extends infer Collision ? {} extends Collision ? { | ||
[key in keyof A]: IsBothObject<A[key], B[key]> extends true ? Reconcile<A[key], B[key], Override> : A[key]; | ||
[key in keyof A]: IsBothObject<A[key], B[key]> extends true ? Reconcile<A[key], B[key], Override, [ | ||
0, | ||
...Stack | ||
]> : A[key]; | ||
} : Prettify<{ | ||
@@ -191,23 +203,2 @@ [key in keyof A]: A[key]; | ||
export type UnwrapBodySchema<Schema extends TSchema | string | undefined, Definitions extends Record<string, unknown> = {}> = undefined extends Schema ? unknown : Schema extends TSchema ? Schema extends OptionalField ? Prettify<Partial<Static<Schema>>> | null : StaticDecode<Schema> : Schema extends string ? Definitions extends Record<Schema, infer NamedSchema> ? NamedSchema : Definitions : unknown; | ||
export type SuccessfulResponse<T = unknown> = { | ||
200: T; | ||
} | { | ||
201: T; | ||
} | { | ||
202: T; | ||
} | { | ||
203: T; | ||
} | { | ||
204: T; | ||
} | { | ||
205: T; | ||
} | { | ||
206: T; | ||
} | { | ||
207: T; | ||
} | { | ||
208: T; | ||
} | { | ||
226: T; | ||
}; | ||
export interface UnwrapRoute<in out Schema extends InputSchema<any>, in out Definitions extends DefinitionBase['type'] = {}> { | ||
@@ -219,3 +210,5 @@ body: UnwrapBodySchema<Schema['body'], Definitions>; | ||
cookie: UnwrapSchema<Schema['cookie'], Definitions>; | ||
response: Schema['response'] extends TSchema | string ? CoExist<UnwrapSchema<Schema['response'], Definitions>, File, BunFile> : Schema['response'] extends SuccessfulResponse<TAnySchema | string> ? { | ||
response: Schema['response'] extends TSchema | string ? { | ||
200: CoExist<UnwrapSchema<Schema['response'], Definitions>, File, BunFile>; | ||
} : Schema['response'] extends Record<number, TAnySchema | string> ? { | ||
[k in keyof Schema['response']]: CoExist<UnwrapSchema<Schema['response'][k], Definitions>, File, BunFile>; | ||
@@ -271,3 +264,7 @@ } : unknown | void; | ||
cookie: undefined extends A['cookie'] ? B['cookie'] : A['cookie']; | ||
response: undefined extends A['response'] ? B['response'] : A['response']; | ||
response: Prettify<{ | ||
[v in keyof A['response']]: A['response'][v]; | ||
} & { | ||
[v in keyof Omit<B['response'], keyof A['response']>]: B['response'][v]; | ||
}>; | ||
} | ||
@@ -279,3 +276,3 @@ export type Handler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = { | ||
resolve: {}; | ||
}, Path extends string = ''> = (context: Context<Route, Singleton, Path>) => Route['response'] extends SuccessfulResponse ? Response | MaybePromise<Route['response'][keyof Route['response']]> : Response | MaybePromise<Route['response']>; | ||
}, Path extends string = ''> = (context: Context<Route, Singleton, Path>) => MaybePromise<{} extends Route['response'] ? unknown : Route['response'][keyof Route['response']]>; | ||
export type Replace<Original, Target, With> = IsAny<Target> extends true ? Original : Original extends Record<string, unknown> ? { | ||
@@ -293,3 +290,3 @@ [K in keyof Original]: Original[K] extends Target ? With : Original[K]; | ||
resolve: {}; | ||
}, Path extends string = '', MacroContext = {}> = ((context: MacroContext extends Record<string | number | symbol, unknown> ? Prettify<MacroContext & Context<Route, Singleton, Path>> : Context<Route, Singleton, Path>) => Route['response'] extends SuccessfulResponse ? Response | MaybePromise<Route['response'][keyof Route['response']] | { | ||
}, Path extends string = '', MacroContext = {}> = ((context: MacroContext extends Record<string | number | symbol, unknown> ? Prettify<MacroContext & Context<Route, Singleton, Path>> : Context<Route, Singleton, Path>) => Response | MaybePromise<{} extends Route['response'] ? unknown : Route['response'][keyof Route['response']] | { | ||
[Status in keyof Route['response']]: { | ||
@@ -299,3 +296,8 @@ _type: Record<Status, Route['response'][Status]>; | ||
}; | ||
}[keyof Route['response']]> : Response | MaybePromise<Route['response']>) | (unknown extends Route['response'] ? string | number | Object : Route['response'] extends SuccessfulResponse ? Route['response'][keyof Route['response']] : Route['response']); | ||
}[keyof Route['response']]>) | ({} extends Route['response'] ? string | number | boolean | Object : Route['response'][keyof Route['response']] | { | ||
[Status in keyof Route['response']]: { | ||
_type: Record<Status, Route['response'][Status]>; | ||
[ELYSIA_RESPONSE]: Status; | ||
}; | ||
}[keyof Route['response']]); | ||
export type OptionalHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = { | ||
@@ -439,3 +441,3 @@ decorator: {}; | ||
} ? Schema : Schema & { | ||
params: undefined extends Schema['params'] ? Record<GetPathParameter<Path>, string> : Schema['params']; | ||
params: undefined extends Schema['params'] ? ResolvePath<Path> : Schema['params']; | ||
}> = (LocalSchema extends {} ? LocalSchema : Isolate<LocalSchema>) & Extension & { | ||
@@ -582,3 +584,3 @@ /** | ||
export type ComposeElysiaResponse<Response, Handle> = Handle extends (...a: any[]) => infer A ? _ComposeElysiaResponse<Response, Replace<Awaited<A>, BunFile, File>> : _ComposeElysiaResponse<Response, Replace<Awaited<Handle>, BunFile, File>>; | ||
type _ComposeElysiaResponse<Response, Handle> = Prettify<unknown extends Response ? { | ||
type _ComposeElysiaResponse<Response, Handle> = Prettify<{} extends Response ? { | ||
200: Exclude<Handle, { | ||
@@ -593,5 +595,3 @@ [ELYSIA_RESPONSE]: any; | ||
} ? Status : never]: ErrorResponse['response']; | ||
} : Response extends SuccessfulResponse ? Response : { | ||
200: Response; | ||
}>; | ||
} : Response>; | ||
export type MergeElysiaInstances<Instances extends Elysia<any, any, any, any, any, any>[] = [], Prefix extends string = '', Scoped extends boolean = false, Singleton extends SingletonBase = { | ||
@@ -598,0 +598,0 @@ decorator: {}; |
{ | ||
"name": "elysia", | ||
"description": "Ergonomic Framework for Human", | ||
"version": "1.1.0-rc.7", | ||
"version": "1.1.0-rc.8", | ||
"author": { | ||
@@ -6,0 +6,0 @@ "name": "saltyAom", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
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
2468782
52738