elysia 0.5.11 → 0.5.13
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/cjs/compose.js +1 -1
- package/dist/cjs/index.d.ts +10 -10
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/types.d.ts +2 -2
- package/dist/compose.js +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.js +1 -1
- package/dist/types.d.ts +2 -2
- package/package.json +2 -1
package/dist/cjs/compose.js
CHANGED
|
@@ -262,7 +262,7 @@ ${t??`default: ${a}`}}
|
|
|
262
262
|
ctx.set
|
|
263
263
|
)
|
|
264
264
|
if (response) return response
|
|
265
|
-
`:`mapEarlyResponse(onRequest[${r}](ctx), ctx.set)
|
|
265
|
+
`:`mapEarlyResponse(onRequest[${r}](ctx), ctx.set);`}l+=`} catch (error) {
|
|
266
266
|
return handleError(request, error, ctx.set)
|
|
267
267
|
}
|
|
268
268
|
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -57,7 +57,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
57
57
|
[key in keyof NewInstance['meta'][typeof SCHEMA] as key extends `${infer Rest}` ? `${Prefix}${Rest}` : key]: NewInstance['meta'][typeof SCHEMA][key];
|
|
58
58
|
}>);
|
|
59
59
|
}> : this;
|
|
60
|
-
guard<Schema extends TypedSchema<Exclude<keyof Instance['meta'][typeof DEFS], number | symbol
|
|
60
|
+
guard<Schema extends TypedSchema<Exclude<keyof Instance['meta'][typeof DEFS], number | symbol>>, NewElysia extends Elysia<any> = Elysia<any>>(hook: LocalHook<Schema, Instance>, run: (group: Elysia<{
|
|
61
61
|
request: Instance['request'];
|
|
62
62
|
store: Instance['store'];
|
|
63
63
|
schema: Schema & Instance['schema'];
|
|
@@ -172,7 +172,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
172
172
|
};
|
|
173
173
|
} : {})>>;
|
|
174
174
|
}>;
|
|
175
|
-
patch<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
175
|
+
patch<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
176
176
|
request: Instance['request'];
|
|
177
177
|
store: Instance['store'];
|
|
178
178
|
schema: Instance['schema'];
|
|
@@ -194,7 +194,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
194
194
|
};
|
|
195
195
|
} : {})>>;
|
|
196
196
|
}>;
|
|
197
|
-
delete<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
197
|
+
delete<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
198
198
|
request: Instance['request'];
|
|
199
199
|
store: Instance['store'];
|
|
200
200
|
schema: Instance['schema'];
|
|
@@ -216,7 +216,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
216
216
|
};
|
|
217
217
|
} : {})>>;
|
|
218
218
|
}>;
|
|
219
|
-
options<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
219
|
+
options<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
220
220
|
request: Instance['request'];
|
|
221
221
|
store: Instance['store'];
|
|
222
222
|
schema: Instance['schema'];
|
|
@@ -238,7 +238,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
238
238
|
};
|
|
239
239
|
} : {})>>;
|
|
240
240
|
}>;
|
|
241
|
-
all<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
241
|
+
all<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
242
242
|
request: Instance['request'];
|
|
243
243
|
store: Instance['store'];
|
|
244
244
|
schema: Instance['schema'];
|
|
@@ -260,7 +260,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
260
260
|
};
|
|
261
261
|
} : {})>>;
|
|
262
262
|
}>;
|
|
263
|
-
head<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
263
|
+
head<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
264
264
|
request: Instance['request'];
|
|
265
265
|
store: Instance['store'];
|
|
266
266
|
schema: Instance['schema'];
|
|
@@ -282,7 +282,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
282
282
|
};
|
|
283
283
|
} : {})>>;
|
|
284
284
|
}>;
|
|
285
|
-
trace<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
285
|
+
trace<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
286
286
|
request: Instance['request'];
|
|
287
287
|
store: Instance['store'];
|
|
288
288
|
schema: Instance['schema'];
|
|
@@ -304,7 +304,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
304
304
|
};
|
|
305
305
|
} : {})>>;
|
|
306
306
|
}>;
|
|
307
|
-
connect<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
307
|
+
connect<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
308
308
|
request: Instance['request'];
|
|
309
309
|
store: Instance['store'];
|
|
310
310
|
schema: Instance['schema'];
|
|
@@ -326,7 +326,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
326
326
|
};
|
|
327
327
|
} : {})>>;
|
|
328
328
|
}>;
|
|
329
|
-
ws<Path extends string
|
|
329
|
+
ws<Path extends string, Schema extends WSTypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, options: Path extends '' ? never : this extends Elysia<infer Instance> ? ElysiaWSOptions<Path, Schema, Instance['meta'][typeof DEFS]> : never): Elysia<{
|
|
330
330
|
request: Instance['request'];
|
|
331
331
|
store: Instance['store'];
|
|
332
332
|
schema: Instance['schema'];
|
|
@@ -334,7 +334,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
334
334
|
subscribe: TypedWSRouteToEden<Typed, Instance['meta'][typeof DEFS], Path>;
|
|
335
335
|
} : {}>>;
|
|
336
336
|
}>;
|
|
337
|
-
route<Schema extends TypedSchema<Exclude<keyof Instance['meta'][typeof DEFS], number | symbol
|
|
337
|
+
route<Schema extends TypedSchema<Exclude<keyof Instance['meta'][typeof DEFS], number | symbol>>, Method extends HTTPMethod = HTTPMethod, Path extends string = string, Handler extends LocalHandler<Schema, Instance, Path> = LocalHandler<Schema, Instance, Path>>(method: Method, path: Path, handler: Handler, { config, ...hook }?: LocalHook<Schema, Instance, Path> & {
|
|
338
338
|
config: {
|
|
339
339
|
allowMeta?: boolean;
|
|
340
340
|
};
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
function e(t){if("function"!=typeof WeakMap)return null;var r=new WeakMap,s=new WeakMap;return(e=function(e){return e?s:r})(t)}"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{default:function(){return h},Elysia:function(){return h},t:function(){return i.t},ws:function(){return a.ws},SCHEMA:function(){return r.SCHEMA},DEFS:function(){return r.DEFS},EXPOSED:function(){return r.EXPOSED},getSchemaValidator:function(){return r.getSchemaValidator},mergeDeep:function(){return r.mergeDeep},mergeHook:function(){return r.mergeHook},mergeObjectArray:function(){return r.mergeObjectArray},getResponseSchemaValidator:function(){return r.getResponseSchemaValidator},ParseError:function(){return n.ParseError},NotFoundError:function(){return n.NotFoundError},ValidationError:function(){return n.ValidationError},InternalServerError:function(){return n.InternalServerError}});const t=require("memoirist"),r=require("./utils"),s=require("./schema"),o=require("./compose"),a=require("./ws"),i=require("./custom-types"),n=require("./error");class h{config;store={};meta={[r.SCHEMA]:Object.create(null),[r.DEFS]:Object.create(null),[r.EXPOSED]:Object.create(null)};decorators={};event={start:[],request:[],parse:[],transform:[],beforeHandle:[],afterHandle:[],error:[],stop:[]};server=null;$schema=null;router=new t.Memoirist;routes=[];staticRouter={handlers:[],variables:"",map:{},all:""};wsRouter;lazyLoadModules=[];constructor(e){this.config={fn:"/~fn",forceErrorEncapsulation:!1,basePath:"",...e}}add(e,t,a,i,{allowMeta:n=!1}={allowMeta:!1}){t=""===t?t:47===t.charCodeAt(0)?t:`/${t}`,this.config.basePath&&this.config.basePath,this.routes.push({method:e,path:t,handler:a,hooks:(0,r.mergeHook)({...this.event},i)});let h=this.meta[r.DEFS];if(i?.type)switch(i.type){case"text":i.type="text/plain";break;case"json":i.type="application/json";break;case"formdata":i.type="multipart/form-data";break;case"urlencoded":i.type="application/x-www-form-urlencoded";break;case"arrayBuffer":i.type="application/octet-stream"}(0,s.registerSchemaPath)({schema:this.meta[r.SCHEMA],contentType:i?.type,hook:i,method:e,path:t,models:this.meta[r.DEFS]});let u={body:(0,r.getSchemaValidator)(i?.body??this.$schema?.body,h),headers:(0,r.getSchemaValidator)(i?.headers??this.$schema?.headers,h,!0),params:(0,r.getSchemaValidator)(i?.params??this.$schema?.params,h),query:(0,r.getSchemaValidator)(i?.query??this.$schema?.query,h),response:(0,r.getResponseSchemaValidator)(i?.response??this.$schema?.response,h)},c=(0,r.mergeHook)(this.event,i),l=(0,o.composeHandler)({path:t,method:e,hooks:c,validator:u,handler:a,handleError:this.handleError,meta:n?this.meta:void 0,onRequest:this.event.request,config:this.config});if(-1===t.indexOf(":")&&-1===t.indexOf("*")){let r=this.staticRouter.handlers.length;this.staticRouter.handlers.push(l),this.staticRouter.variables+=`const st${r} = staticRouter.handlers[${r}]
|
|
2
2
|
`,this.staticRouter.map[t]||(this.staticRouter.map[t]={code:""}),"ALL"===e?this.staticRouter.map[t].all=`default: return st${r}(ctx)
|
|
3
3
|
`:this.staticRouter.map[t].code+=`case '${e}': return st${r}(ctx)
|
|
4
|
-
`}else this.router.add(e,t,l)}onStart(e){return this.event.start.push(e),this}onRequest(e){return this.event.request.push(e),this}onParse(e){return this.event.parse.splice(this.event.parse.length-1,0,e),this}onTransform(e){return this.event.transform.push(e),this}onBeforeHandle(e){return this.event.beforeHandle.push(e),this}onAfterHandle(e){return this.event.afterHandle.push(e),this}onError(e){return this.event.error.push(e),this}onStop(e){return this.event.stop.push(e),this}on(e,t){switch(e){case"start":this.event.start.push(t);break;case"request":this.event.request.push(t);break;case"parse":this.event.parse.push(t);break;case"transform":this.event.transform.push(t);break;case"beforeHandle":this.event.beforeHandle.push(t);break;case"afterHandle":this.event.afterHandle.push(t);break;case"error":this.event.error.push(t);break;case"stop":this.event.stop.push(t)}return this}group(e,t,s){let o=new h;o.store=this.store,this.wsRouter&&o.use((0,a.ws)());let i="object"==typeof t,n=(i?s:t)(o);return this.decorators=(0,r.mergeDeep)(this.decorators,o.decorators),n.event.request.length&&(this.event.request=[...this.event.request,...n.event.request]),this.model(n.meta[r.DEFS]),Object.values(o.routes).forEach(({method:s,path:a,handler:h,hooks:u})=>{if(i){let i=`${e}${a}`,c=o.wsRouter?.find("subscribe",i);if(c){let e=o.wsRouter.history.find(([e,t])=>i===t);if(!e)return;return this.ws(i,e[2])}this.add(s,i,h,(0,r.mergeHook)(t,{...u,error:u.error?Array.isArray(u.error)?[...u.error,...n.event.error]:[u.error,...n.event.error]:n.event.error}))}else{let t=`${e}${a}`,i=o.wsRouter?.find("subscribe",t);if(i){let e=o.wsRouter.history.find(([e,t])=>a===t);if(!e)return;return this.ws(t,e[2])}this.add(s,t,h,(0,r.mergeHook)(u,{error:n.event.error}))}}),o.wsRouter&&this.wsRouter&&o.wsRouter.history.forEach(([t,r,s])=>{"/"===r?this.wsRouter?.add(t,e,s):this.wsRouter?.add(t,`${e}${r}`,s)}),this}guard(e,t){let s=new h;s.store=this.store,this.wsRouter&&s.use((0,a.ws)());let o=t(s);return this.decorators=(0,r.mergeDeep)(this.decorators,s.decorators),o.event.request.length&&(this.event.request=[...this.event.request,...o.event.request]),this.model(o.meta[r.DEFS]),Object.values(s.routes).forEach(({method:t,path:a,handler:i,hooks:n})=>{let h=s.wsRouter?.find("subscribe",a);if(h){let e=s.wsRouter.history.find(([e,t])=>a===t);if(!e)return;return this.ws(a,e[2])}this.add(t,a,i,(0,r.mergeHook)(e,{...n,error:n.error?Array.isArray(n.error)?[...n.error,...o.event.error]:[n.error,...o.event.error]:o.event.error}))}),s.wsRouter&&this.wsRouter&&s.wsRouter.history.forEach(([e,t,r])=>{this.wsRouter?.add(e,t,r)}),this}use(e){if(e instanceof Promise)return this.lazyLoadModules.push(e.then(e=>"function"==typeof e?e(this):e.default(this)).then(e=>e.compile())),this;let t=e(this);return t instanceof Promise?(this.lazyLoadModules.push(t.then(e=>e.compile())),this):t}if(e,t){return e?this.use(t):this}get(e,t,r){return this.add("GET",e,t,r),this}post(e,t,r){return this.add("POST",e,t,r),this}put(e,t,r){return this.add("PUT",e,t,r),this}patch(e,t,r){return this.add("PATCH",e,t,r),this}delete(e,t,r){return this.add("DELETE",e,t,r),this}options(e,t,r){return this.add("OPTIONS",e,t,r),this}all(e,t,r){return this.add("ALL",e,t,r),this}head(e,t,r){return this.add("HEAD",e,t,r),this}trace(e,t,r){return this.add("TRACE",e,t,r),this}connect(e,t,r){return this.add("CONNECT",e,t,r),this}ws(e,t){if(!this.wsRouter)throw Error("Can't find WebSocket. Please register WebSocket plugin first by importing 'elysia/ws'");return this.wsRouter.add("subscribe",e,t),this.get(e,e=>{if(!this.server?.upgrade(e.request,{headers:"function"==typeof t.upgrade?t.upgrade(e):t.upgrade,data:{...e,id:Date.now(),headers:e.request.headers.toJSON(),message:(0,r.getSchemaValidator)(t?.body,this.meta[r.DEFS]),transformMessage:t.transform?Array.isArray(t.transformMessage)?t.transformMessage:[t.transformMessage]:[]}}))return e.set.status=400,"Expected a websocket connection"},{beforeHandle:t.beforeHandle,transform:t.transform,headers:t?.headers,params:t?.params,query:t?.query}),this}route(e,t,r,{config:s,...o}={config:{allowMeta:!1}}){return this.add(e,t,r,o,s),this}state(e,t){return"object"==typeof e?(this.store=(0,r.mergeDeep)(this.store,e),this):(e in this.store||(this.store[e]=t),this)}decorate(e,t){return"object"==typeof e?(this.decorators=(0,r.mergeDeep)(this.decorators,e),this):(e in this.decorators||(this.decorators[e]=t),this)}derive(e){return e.$elysia="derive",this.onTransform(e)}fn(t){return this.use(async r=>{let{fn:s}=await Promise.resolve().then(()=>(function(t,r){if(!r&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var s=e(r);if(s&&s.has(t))return s.get(t);var o={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in t)if("default"!==i&&Object.prototype.hasOwnProperty.call(t,i)){var n=a?Object.getOwnPropertyDescriptor(t,i):null;n&&(n.get||n.set)?Object.defineProperty(o,i,n):o[i]=t[i]}return o.default=t,s&&s.set(t,o),o})(require("@elysiajs/fn")));return s({app:r,value:t,path:r.config.fn})})}schema(e){let t=this.meta[r.DEFS];return this.$schema={body:(0,r.getSchemaValidator)(e.body,t),headers:(0,r.getSchemaValidator)(e?.headers,t,!0),params:(0,r.getSchemaValidator)(e?.params,t),query:(0,r.getSchemaValidator)(e?.query,t),response:(0,r.getSchemaValidator)(e?.response,t)},this}compile(){return this.fetch=(0,o.composeGeneralHandler)(this),this.server&&this.server.reload({...this.server,fetch:this.fetch}),this}handle=async e=>this.fetch(e);fetch=e=>(this.fetch=(0,o.composeGeneralHandler)(this))(e);handleError=async(e,t,r)=>(this.handleError=(0,o.composeErrorHandler)(this))(e,t,r);outerErrorHandler=e=>new Response(e.message,{status:e?.status??500});listen=(e,t)=>{if(!Bun)throw Error("Bun to run");if(this.compile(),"string"==typeof e&&Number.isNaN(e=+e))throw Error("Port must be a numeric value");let r=this.fetch,s=(process.env.ENV??process.env.NODE_ENV)!=="production",o="object"==typeof e?{...this.config.serve,...e,development:s,fetch:r,error:this.outerErrorHandler}:{...this.config.serve,port:e,fetch:r,error:this.outerErrorHandler};if(
|
|
4
|
+
`}else this.router.add(e,t,l)}onStart(e){return this.event.start.push(e),this}onRequest(e){return this.event.request.push(e),this}onParse(e){return this.event.parse.splice(this.event.parse.length-1,0,e),this}onTransform(e){return this.event.transform.push(e),this}onBeforeHandle(e){return this.event.beforeHandle.push(e),this}onAfterHandle(e){return this.event.afterHandle.push(e),this}onError(e){return this.event.error.push(e),this}onStop(e){return this.event.stop.push(e),this}on(e,t){switch(e){case"start":this.event.start.push(t);break;case"request":this.event.request.push(t);break;case"parse":this.event.parse.push(t);break;case"transform":this.event.transform.push(t);break;case"beforeHandle":this.event.beforeHandle.push(t);break;case"afterHandle":this.event.afterHandle.push(t);break;case"error":this.event.error.push(t);break;case"stop":this.event.stop.push(t)}return this}group(e,t,s){let o=new h;o.store=this.store,this.wsRouter&&o.use((0,a.ws)());let i="object"==typeof t,n=(i?s:t)(o);return this.decorators=(0,r.mergeDeep)(this.decorators,o.decorators),n.event.request.length&&(this.event.request=[...this.event.request,...n.event.request]),this.model(n.meta[r.DEFS]),Object.values(o.routes).forEach(({method:s,path:a,handler:h,hooks:u})=>{if(i){let i=`${e}${a}`,c=o.wsRouter?.find("subscribe",i);if(c){let e=o.wsRouter.history.find(([e,t])=>i===t);if(!e)return;return this.ws(i,e[2])}this.add(s,i,h,(0,r.mergeHook)(t,{...u,error:u.error?Array.isArray(u.error)?[...u.error,...n.event.error]:[u.error,...n.event.error]:n.event.error}))}else{let t=`${e}${a}`,i=o.wsRouter?.find("subscribe",t);if(i){let e=o.wsRouter.history.find(([e,t])=>a===t);if(!e)return;return this.ws(t,e[2])}this.add(s,t,h,(0,r.mergeHook)(u,{error:n.event.error}))}}),o.wsRouter&&this.wsRouter&&o.wsRouter.history.forEach(([t,r,s])=>{"/"===r?this.wsRouter?.add(t,e,s):this.wsRouter?.add(t,`${e}${r}`,s)}),this}guard(e,t){let s=new h;s.store=this.store,this.wsRouter&&s.use((0,a.ws)());let o=t(s);return this.decorators=(0,r.mergeDeep)(this.decorators,s.decorators),o.event.request.length&&(this.event.request=[...this.event.request,...o.event.request]),this.model(o.meta[r.DEFS]),Object.values(s.routes).forEach(({method:t,path:a,handler:i,hooks:n})=>{let h=s.wsRouter?.find("subscribe",a);if(h){let e=s.wsRouter.history.find(([e,t])=>a===t);if(!e)return;return this.ws(a,e[2])}this.add(t,a,i,(0,r.mergeHook)(e,{...n,error:n.error?Array.isArray(n.error)?[...n.error,...o.event.error]:[n.error,...o.event.error]:o.event.error}))}),s.wsRouter&&this.wsRouter&&s.wsRouter.history.forEach(([e,t,r])=>{this.wsRouter?.add(e,t,r)}),this}use(e){if(e instanceof Promise)return this.lazyLoadModules.push(e.then(e=>"function"==typeof e?e(this):e.default(this)).then(e=>e.compile())),this;let t=e(this);return t instanceof Promise?(this.lazyLoadModules.push(t.then(e=>e.compile())),this):t}if(e,t){return e?this.use(t):this}get(e,t,r){return this.add("GET",e,t,r),this}post(e,t,r){return this.add("POST",e,t,r),this}put(e,t,r){return this.add("PUT",e,t,r),this}patch(e,t,r){return this.add("PATCH",e,t,r),this}delete(e,t,r){return this.add("DELETE",e,t,r),this}options(e,t,r){return this.add("OPTIONS",e,t,r),this}all(e,t,r){return this.add("ALL",e,t,r),this}head(e,t,r){return this.add("HEAD",e,t,r),this}trace(e,t,r){return this.add("TRACE",e,t,r),this}connect(e,t,r){return this.add("CONNECT",e,t,r),this}ws(e,t){if(!this.wsRouter)throw Error("Can't find WebSocket. Please register WebSocket plugin first by importing 'elysia/ws'");return this.wsRouter.add("subscribe",e,t),this.get(e,e=>{if(!this.server?.upgrade(e.request,{headers:"function"==typeof t.upgrade?t.upgrade(e):t.upgrade,data:{...e,id:Date.now(),headers:e.request.headers.toJSON(),message:(0,r.getSchemaValidator)(t?.body,this.meta[r.DEFS]),transformMessage:t.transform?Array.isArray(t.transformMessage)?t.transformMessage:[t.transformMessage]:[]}}))return e.set.status=400,"Expected a websocket connection"},{beforeHandle:t.beforeHandle,transform:t.transform,headers:t?.headers,params:t?.params,query:t?.query}),this}route(e,t,r,{config:s,...o}={config:{allowMeta:!1}}){return this.add(e,t,r,o,s),this}state(e,t){return"object"==typeof e?(this.store=(0,r.mergeDeep)(this.store,e),this):(e in this.store||(this.store[e]=t),this)}decorate(e,t){return"object"==typeof e?(this.decorators=(0,r.mergeDeep)(this.decorators,e),this):(e in this.decorators||(this.decorators[e]=t),this)}derive(e){return e.$elysia="derive",this.onTransform(e)}fn(t){return this.use(async r=>{let{fn:s}=await Promise.resolve().then(()=>(function(t,r){if(!r&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var s=e(r);if(s&&s.has(t))return s.get(t);var o={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in t)if("default"!==i&&Object.prototype.hasOwnProperty.call(t,i)){var n=a?Object.getOwnPropertyDescriptor(t,i):null;n&&(n.get||n.set)?Object.defineProperty(o,i,n):o[i]=t[i]}return o.default=t,s&&s.set(t,o),o})(require("@elysiajs/fn")));return s({app:r,value:t,path:r.config.fn})})}schema(e){let t=this.meta[r.DEFS];return this.$schema={body:(0,r.getSchemaValidator)(e.body,t),headers:(0,r.getSchemaValidator)(e?.headers,t,!0),params:(0,r.getSchemaValidator)(e?.params,t),query:(0,r.getSchemaValidator)(e?.query,t),response:(0,r.getSchemaValidator)(e?.response,t)},this}compile(){return this.fetch=(0,o.composeGeneralHandler)(this),this.server&&this.server.reload({...this.server,fetch:this.fetch}),this}handle=async e=>this.fetch(e);fetch=e=>(this.fetch=(0,o.composeGeneralHandler)(this))(e);handleError=async(e,t,r)=>(this.handleError=(0,o.composeErrorHandler)(this))(e,t,r);outerErrorHandler=e=>new Response(e.message,{status:e?.status??500});listen=(e,t)=>{if(!Bun)throw Error("Bun to run");if(this.compile(),"string"==typeof e&&Number.isNaN(e=+e))throw Error("Port must be a numeric value");let r=this.fetch,s=(process.env.ENV??process.env.NODE_ENV)!=="production",o="object"==typeof e?{...this.config.serve,...e,development:s,fetch:r,error:this.outerErrorHandler}:{...this.config.serve,port:e,fetch:r,error:this.outerErrorHandler};if(s){let e=`$$Elysia:${o.port}`;globalThis[e]?(this.server=globalThis[e],this.server.reload(o)):globalThis[e]=this.server=Bun.serve(o)}else this.server=Bun.serve(o);for(let e=0;e<this.event.start.length;e++)this.event.start[e](this);return t&&t(this.server),Promise.all(this.lazyLoadModules).then(()=>{Bun.gc(!0)}),this};stop=async()=>{if(!this.server)throw Error("Elysia isn't running. Call `app.listen` to start the server.");this.server.stop();for(let e=0;e<this.event.stop.length;e++)await this.event.stop[e](this)};get modules(){return Promise.all(this.lazyLoadModules)}model(e,t){return"object"==typeof e?Object.entries(e).forEach(([e,t])=>{e in this.meta[r.DEFS]||(this.meta[r.DEFS][e]=t)}):this.meta[r.DEFS][e]=t,this}}
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -169,7 +169,7 @@ export type LocalHandler<Schema extends TypedSchema, Instance extends ElysiaInst
|
|
|
169
169
|
query: Query;
|
|
170
170
|
headers: Headers;
|
|
171
171
|
response: Response;
|
|
172
|
-
} :
|
|
172
|
+
} : never : never, Instance>;
|
|
173
173
|
export interface TypedRoute {
|
|
174
174
|
body?: unknown;
|
|
175
175
|
headers?: Record<string, unknown>;
|
|
@@ -203,7 +203,7 @@ export type HTTPMethod = 'ACL' | 'BIND' | 'CHECKOUT' | 'CONNECT' | 'COPY' | 'DEL
|
|
|
203
203
|
export type ErrorCode = (string & {}) | 'NOT_FOUND' | 'INTERNAL_SERVER_ERROR' | 'VALIDATION' | 'PARSE' | 'UNKNOWN';
|
|
204
204
|
export type ErrorHandler = (params: {
|
|
205
205
|
request: Request;
|
|
206
|
-
code: 'UNKNOWN';
|
|
206
|
+
code: 'UNKNOWN' | (string & {});
|
|
207
207
|
error: Readonly<Error>;
|
|
208
208
|
set: Context['set'];
|
|
209
209
|
} | {
|
package/dist/compose.js
CHANGED
|
@@ -262,7 +262,7 @@ ${t??`default: ${o}`}}
|
|
|
262
262
|
ctx.set
|
|
263
263
|
)
|
|
264
264
|
if (response) return response
|
|
265
|
-
`:`mapEarlyResponse(onRequest[${r}](ctx), ctx.set)
|
|
265
|
+
`:`mapEarlyResponse(onRequest[${r}](ctx), ctx.set);`}i+=`} catch (error) {
|
|
266
266
|
return handleError(request, error, ctx.set)
|
|
267
267
|
}
|
|
268
268
|
|
package/dist/index.d.ts
CHANGED
|
@@ -57,7 +57,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
57
57
|
[key in keyof NewInstance['meta'][typeof SCHEMA] as key extends `${infer Rest}` ? `${Prefix}${Rest}` : key]: NewInstance['meta'][typeof SCHEMA][key];
|
|
58
58
|
}>);
|
|
59
59
|
}> : this;
|
|
60
|
-
guard<Schema extends TypedSchema<Exclude<keyof Instance['meta'][typeof DEFS], number | symbol
|
|
60
|
+
guard<Schema extends TypedSchema<Exclude<keyof Instance['meta'][typeof DEFS], number | symbol>>, NewElysia extends Elysia<any> = Elysia<any>>(hook: LocalHook<Schema, Instance>, run: (group: Elysia<{
|
|
61
61
|
request: Instance['request'];
|
|
62
62
|
store: Instance['store'];
|
|
63
63
|
schema: Schema & Instance['schema'];
|
|
@@ -172,7 +172,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
172
172
|
};
|
|
173
173
|
} : {})>>;
|
|
174
174
|
}>;
|
|
175
|
-
patch<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
175
|
+
patch<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
176
176
|
request: Instance['request'];
|
|
177
177
|
store: Instance['store'];
|
|
178
178
|
schema: Instance['schema'];
|
|
@@ -194,7 +194,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
194
194
|
};
|
|
195
195
|
} : {})>>;
|
|
196
196
|
}>;
|
|
197
|
-
delete<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
197
|
+
delete<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
198
198
|
request: Instance['request'];
|
|
199
199
|
store: Instance['store'];
|
|
200
200
|
schema: Instance['schema'];
|
|
@@ -216,7 +216,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
216
216
|
};
|
|
217
217
|
} : {})>>;
|
|
218
218
|
}>;
|
|
219
|
-
options<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
219
|
+
options<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
220
220
|
request: Instance['request'];
|
|
221
221
|
store: Instance['store'];
|
|
222
222
|
schema: Instance['schema'];
|
|
@@ -238,7 +238,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
238
238
|
};
|
|
239
239
|
} : {})>>;
|
|
240
240
|
}>;
|
|
241
|
-
all<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
241
|
+
all<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
242
242
|
request: Instance['request'];
|
|
243
243
|
store: Instance['store'];
|
|
244
244
|
schema: Instance['schema'];
|
|
@@ -260,7 +260,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
260
260
|
};
|
|
261
261
|
} : {})>>;
|
|
262
262
|
}>;
|
|
263
|
-
head<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
263
|
+
head<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
264
264
|
request: Instance['request'];
|
|
265
265
|
store: Instance['store'];
|
|
266
266
|
schema: Instance['schema'];
|
|
@@ -282,7 +282,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
282
282
|
};
|
|
283
283
|
} : {})>>;
|
|
284
284
|
}>;
|
|
285
|
-
trace<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
285
|
+
trace<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
286
286
|
request: Instance['request'];
|
|
287
287
|
store: Instance['store'];
|
|
288
288
|
schema: Instance['schema'];
|
|
@@ -304,7 +304,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
304
304
|
};
|
|
305
305
|
} : {})>>;
|
|
306
306
|
}>;
|
|
307
|
-
connect<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string
|
|
307
|
+
connect<Path extends string, Handler extends LocalHandler<Schema, Instance, Path>, Schema extends TypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, handler: Handler, hook?: LocalHook<Schema, Instance, Path>): Elysia<{
|
|
308
308
|
request: Instance['request'];
|
|
309
309
|
store: Instance['store'];
|
|
310
310
|
schema: Instance['schema'];
|
|
@@ -326,7 +326,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
326
326
|
};
|
|
327
327
|
} : {})>>;
|
|
328
328
|
}>;
|
|
329
|
-
ws<Path extends string
|
|
329
|
+
ws<Path extends string, Schema extends WSTypedSchema<Extract<keyof Instance['meta'][typeof DEFS], string>>>(path: Path, options: Path extends '' ? never : this extends Elysia<infer Instance> ? ElysiaWSOptions<Path, Schema, Instance['meta'][typeof DEFS]> : never): Elysia<{
|
|
330
330
|
request: Instance['request'];
|
|
331
331
|
store: Instance['store'];
|
|
332
332
|
schema: Instance['schema'];
|
|
@@ -334,7 +334,7 @@ export default class Elysia<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
334
334
|
subscribe: TypedWSRouteToEden<Typed, Instance['meta'][typeof DEFS], Path>;
|
|
335
335
|
} : {}>>;
|
|
336
336
|
}>;
|
|
337
|
-
route<Schema extends TypedSchema<Exclude<keyof Instance['meta'][typeof DEFS], number | symbol
|
|
337
|
+
route<Schema extends TypedSchema<Exclude<keyof Instance['meta'][typeof DEFS], number | symbol>>, Method extends HTTPMethod = HTTPMethod, Path extends string = string, Handler extends LocalHandler<Schema, Instance, Path> = LocalHandler<Schema, Instance, Path>>(method: Method, path: Path, handler: Handler, { config, ...hook }?: LocalHook<Schema, Instance, Path> & {
|
|
338
338
|
config: {
|
|
339
339
|
allowMeta?: boolean;
|
|
340
340
|
};
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import{Memoirist as e}from"memoirist";import{SCHEMA as t,EXPOSED as r,DEFS as s,mergeHook as o,getSchemaValidator as a,getResponseSchemaValidator as i,mergeDeep as h}from"./utils";import{registerSchemaPath as n}from"./schema";import{composeErrorHandler as u,composeGeneralHandler as d,composeHandler as l}from"./compose";import{ws as c}from"./ws";export default class p{config;store={};meta={[t]:Object.create(null),[s]:Object.create(null),[r]:Object.create(null)};decorators={};event={start:[],request:[],parse:[],transform:[],beforeHandle:[],afterHandle:[],error:[],stop:[]};server=null;$schema=null;router=new e;routes=[];staticRouter={handlers:[],variables:"",map:{},all:""};wsRouter;lazyLoadModules=[];constructor(e){this.config={fn:"/~fn",forceErrorEncapsulation:!1,basePath:"",...e}}add(e,r,h,u,{allowMeta:d=!1}={allowMeta:!1}){r=""===r?r:47===r.charCodeAt(0)?r:`/${r}`,this.config.basePath&&this.config.basePath,this.routes.push({method:e,path:r,handler:h,hooks:o({...this.event},u)});let c=this.meta[s];if(u?.type)switch(u.type){case"text":u.type="text/plain";break;case"json":u.type="application/json";break;case"formdata":u.type="multipart/form-data";break;case"urlencoded":u.type="application/x-www-form-urlencoded";break;case"arrayBuffer":u.type="application/octet-stream"}n({schema:this.meta[t],contentType:u?.type,hook:u,method:e,path:r,models:this.meta[s]});let p={body:a(u?.body??this.$schema?.body,c),headers:a(u?.headers??this.$schema?.headers,c,!0),params:a(u?.params??this.$schema?.params,c),query:a(u?.query??this.$schema?.query,c),response:i(u?.response??this.$schema?.response,c)},f=o(this.event,u),m=l({path:r,method:e,hooks:f,validator:p,handler:h,handleError:this.handleError,meta:d?this.meta:void 0,onRequest:this.event.request,config:this.config});if(-1===r.indexOf(":")&&-1===r.indexOf("*")){let t=this.staticRouter.handlers.length;this.staticRouter.handlers.push(m),this.staticRouter.variables+=`const st${t} = staticRouter.handlers[${t}]
|
|
2
2
|
`,this.staticRouter.map[r]||(this.staticRouter.map[r]={code:""}),"ALL"===e?this.staticRouter.map[r].all=`default: return st${t}(ctx)
|
|
3
3
|
`:this.staticRouter.map[r].code+=`case '${e}': return st${t}(ctx)
|
|
4
|
-
`}else this.router.add(e,r,m)}onStart(e){return this.event.start.push(e),this}onRequest(e){return this.event.request.push(e),this}onParse(e){return this.event.parse.splice(this.event.parse.length-1,0,e),this}onTransform(e){return this.event.transform.push(e),this}onBeforeHandle(e){return this.event.beforeHandle.push(e),this}onAfterHandle(e){return this.event.afterHandle.push(e),this}onError(e){return this.event.error.push(e),this}onStop(e){return this.event.stop.push(e),this}on(e,t){switch(e){case"start":this.event.start.push(t);break;case"request":this.event.request.push(t);break;case"parse":this.event.parse.push(t);break;case"transform":this.event.transform.push(t);break;case"beforeHandle":this.event.beforeHandle.push(t);break;case"afterHandle":this.event.afterHandle.push(t);break;case"error":this.event.error.push(t);break;case"stop":this.event.stop.push(t)}return this}group(e,t,r){let a=new p;a.store=this.store,this.wsRouter&&a.use(c());let i="object"==typeof t,n=(i?r:t)(a);return this.decorators=h(this.decorators,a.decorators),n.event.request.length&&(this.event.request=[...this.event.request,...n.event.request]),this.model(n.meta[s]),Object.values(a.routes).forEach(({method:r,path:s,handler:h,hooks:u})=>{if(i){let i=`${e}${s}`,d=a.wsRouter?.find("subscribe",i);if(d){let e=a.wsRouter.history.find(([e,t])=>i===t);if(!e)return;return this.ws(i,e[2])}this.add(r,i,h,o(t,{...u,error:u.error?Array.isArray(u.error)?[...u.error,...n.event.error]:[u.error,...n.event.error]:n.event.error}))}else{let t=`${e}${s}`,i=a.wsRouter?.find("subscribe",t);if(i){let e=a.wsRouter.history.find(([e,t])=>s===t);if(!e)return;return this.ws(t,e[2])}this.add(r,t,h,o(u,{error:n.event.error}))}}),a.wsRouter&&this.wsRouter&&a.wsRouter.history.forEach(([t,r,s])=>{"/"===r?this.wsRouter?.add(t,e,s):this.wsRouter?.add(t,`${e}${r}`,s)}),this}guard(e,t){let r=new p;r.store=this.store,this.wsRouter&&r.use(c());let a=t(r);return this.decorators=h(this.decorators,r.decorators),a.event.request.length&&(this.event.request=[...this.event.request,...a.event.request]),this.model(a.meta[s]),Object.values(r.routes).forEach(({method:t,path:s,handler:i,hooks:h})=>{let n=r.wsRouter?.find("subscribe",s);if(n){let e=r.wsRouter.history.find(([e,t])=>s===t);if(!e)return;return this.ws(s,e[2])}this.add(t,s,i,o(e,{...h,error:h.error?Array.isArray(h.error)?[...h.error,...a.event.error]:[h.error,...a.event.error]:a.event.error}))}),r.wsRouter&&this.wsRouter&&r.wsRouter.history.forEach(([e,t,r])=>{this.wsRouter?.add(e,t,r)}),this}use(e){if(e instanceof Promise)return this.lazyLoadModules.push(e.then(e=>"function"==typeof e?e(this):e.default(this)).then(e=>e.compile())),this;let t=e(this);return t instanceof Promise?(this.lazyLoadModules.push(t.then(e=>e.compile())),this):t}if(e,t){return e?this.use(t):this}get(e,t,r){return this.add("GET",e,t,r),this}post(e,t,r){return this.add("POST",e,t,r),this}put(e,t,r){return this.add("PUT",e,t,r),this}patch(e,t,r){return this.add("PATCH",e,t,r),this}delete(e,t,r){return this.add("DELETE",e,t,r),this}options(e,t,r){return this.add("OPTIONS",e,t,r),this}all(e,t,r){return this.add("ALL",e,t,r),this}head(e,t,r){return this.add("HEAD",e,t,r),this}trace(e,t,r){return this.add("TRACE",e,t,r),this}connect(e,t,r){return this.add("CONNECT",e,t,r),this}ws(e,t){if(!this.wsRouter)throw Error("Can't find WebSocket. Please register WebSocket plugin first by importing 'elysia/ws'");return this.wsRouter.add("subscribe",e,t),this.get(e,e=>{if(!this.server?.upgrade(e.request,{headers:"function"==typeof t.upgrade?t.upgrade(e):t.upgrade,data:{...e,id:Date.now(),headers:e.request.headers.toJSON(),message:a(t?.body,this.meta[s]),transformMessage:t.transform?Array.isArray(t.transformMessage)?t.transformMessage:[t.transformMessage]:[]}}))return e.set.status=400,"Expected a websocket connection"},{beforeHandle:t.beforeHandle,transform:t.transform,headers:t?.headers,params:t?.params,query:t?.query}),this}route(e,t,r,{config:s,...o}={config:{allowMeta:!1}}){return this.add(e,t,r,o,s),this}state(e,t){return"object"==typeof e?(this.store=h(this.store,e),this):(e in this.store||(this.store[e]=t),this)}decorate(e,t){return"object"==typeof e?(this.decorators=h(this.decorators,e),this):(e in this.decorators||(this.decorators[e]=t),this)}derive(e){return e.$elysia="derive",this.onTransform(e)}fn(e){return this.use(async t=>{let{fn:r}=await import("@elysiajs/fn");return r({app:t,value:e,path:t.config.fn})})}schema(e){let t=this.meta[s];return this.$schema={body:a(e.body,t),headers:a(e?.headers,t,!0),params:a(e?.params,t),query:a(e?.query,t),response:a(e?.response,t)},this}compile(){return this.fetch=d(this),this.server&&this.server.reload({...this.server,fetch:this.fetch}),this}handle=async e=>this.fetch(e);fetch=e=>(this.fetch=d(this))(e);handleError=async(e,t,r)=>(this.handleError=u(this))(e,t,r);outerErrorHandler=e=>new Response(e.message,{status:e?.status??500});listen=(e,t)=>{if(!Bun)throw Error("Bun to run");if(this.compile(),"string"==typeof e&&Number.isNaN(e=+e))throw Error("Port must be a numeric value");let r=this.fetch,s=(process.env.ENV??process.env.NODE_ENV)!=="production",o="object"==typeof e?{...this.config.serve,...e,development:s,fetch:r,error:this.outerErrorHandler}:{...this.config.serve,port:e,fetch:r,error:this.outerErrorHandler};if(
|
|
4
|
+
`}else this.router.add(e,r,m)}onStart(e){return this.event.start.push(e),this}onRequest(e){return this.event.request.push(e),this}onParse(e){return this.event.parse.splice(this.event.parse.length-1,0,e),this}onTransform(e){return this.event.transform.push(e),this}onBeforeHandle(e){return this.event.beforeHandle.push(e),this}onAfterHandle(e){return this.event.afterHandle.push(e),this}onError(e){return this.event.error.push(e),this}onStop(e){return this.event.stop.push(e),this}on(e,t){switch(e){case"start":this.event.start.push(t);break;case"request":this.event.request.push(t);break;case"parse":this.event.parse.push(t);break;case"transform":this.event.transform.push(t);break;case"beforeHandle":this.event.beforeHandle.push(t);break;case"afterHandle":this.event.afterHandle.push(t);break;case"error":this.event.error.push(t);break;case"stop":this.event.stop.push(t)}return this}group(e,t,r){let a=new p;a.store=this.store,this.wsRouter&&a.use(c());let i="object"==typeof t,n=(i?r:t)(a);return this.decorators=h(this.decorators,a.decorators),n.event.request.length&&(this.event.request=[...this.event.request,...n.event.request]),this.model(n.meta[s]),Object.values(a.routes).forEach(({method:r,path:s,handler:h,hooks:u})=>{if(i){let i=`${e}${s}`,d=a.wsRouter?.find("subscribe",i);if(d){let e=a.wsRouter.history.find(([e,t])=>i===t);if(!e)return;return this.ws(i,e[2])}this.add(r,i,h,o(t,{...u,error:u.error?Array.isArray(u.error)?[...u.error,...n.event.error]:[u.error,...n.event.error]:n.event.error}))}else{let t=`${e}${s}`,i=a.wsRouter?.find("subscribe",t);if(i){let e=a.wsRouter.history.find(([e,t])=>s===t);if(!e)return;return this.ws(t,e[2])}this.add(r,t,h,o(u,{error:n.event.error}))}}),a.wsRouter&&this.wsRouter&&a.wsRouter.history.forEach(([t,r,s])=>{"/"===r?this.wsRouter?.add(t,e,s):this.wsRouter?.add(t,`${e}${r}`,s)}),this}guard(e,t){let r=new p;r.store=this.store,this.wsRouter&&r.use(c());let a=t(r);return this.decorators=h(this.decorators,r.decorators),a.event.request.length&&(this.event.request=[...this.event.request,...a.event.request]),this.model(a.meta[s]),Object.values(r.routes).forEach(({method:t,path:s,handler:i,hooks:h})=>{let n=r.wsRouter?.find("subscribe",s);if(n){let e=r.wsRouter.history.find(([e,t])=>s===t);if(!e)return;return this.ws(s,e[2])}this.add(t,s,i,o(e,{...h,error:h.error?Array.isArray(h.error)?[...h.error,...a.event.error]:[h.error,...a.event.error]:a.event.error}))}),r.wsRouter&&this.wsRouter&&r.wsRouter.history.forEach(([e,t,r])=>{this.wsRouter?.add(e,t,r)}),this}use(e){if(e instanceof Promise)return this.lazyLoadModules.push(e.then(e=>"function"==typeof e?e(this):e.default(this)).then(e=>e.compile())),this;let t=e(this);return t instanceof Promise?(this.lazyLoadModules.push(t.then(e=>e.compile())),this):t}if(e,t){return e?this.use(t):this}get(e,t,r){return this.add("GET",e,t,r),this}post(e,t,r){return this.add("POST",e,t,r),this}put(e,t,r){return this.add("PUT",e,t,r),this}patch(e,t,r){return this.add("PATCH",e,t,r),this}delete(e,t,r){return this.add("DELETE",e,t,r),this}options(e,t,r){return this.add("OPTIONS",e,t,r),this}all(e,t,r){return this.add("ALL",e,t,r),this}head(e,t,r){return this.add("HEAD",e,t,r),this}trace(e,t,r){return this.add("TRACE",e,t,r),this}connect(e,t,r){return this.add("CONNECT",e,t,r),this}ws(e,t){if(!this.wsRouter)throw Error("Can't find WebSocket. Please register WebSocket plugin first by importing 'elysia/ws'");return this.wsRouter.add("subscribe",e,t),this.get(e,e=>{if(!this.server?.upgrade(e.request,{headers:"function"==typeof t.upgrade?t.upgrade(e):t.upgrade,data:{...e,id:Date.now(),headers:e.request.headers.toJSON(),message:a(t?.body,this.meta[s]),transformMessage:t.transform?Array.isArray(t.transformMessage)?t.transformMessage:[t.transformMessage]:[]}}))return e.set.status=400,"Expected a websocket connection"},{beforeHandle:t.beforeHandle,transform:t.transform,headers:t?.headers,params:t?.params,query:t?.query}),this}route(e,t,r,{config:s,...o}={config:{allowMeta:!1}}){return this.add(e,t,r,o,s),this}state(e,t){return"object"==typeof e?(this.store=h(this.store,e),this):(e in this.store||(this.store[e]=t),this)}decorate(e,t){return"object"==typeof e?(this.decorators=h(this.decorators,e),this):(e in this.decorators||(this.decorators[e]=t),this)}derive(e){return e.$elysia="derive",this.onTransform(e)}fn(e){return this.use(async t=>{let{fn:r}=await import("@elysiajs/fn");return r({app:t,value:e,path:t.config.fn})})}schema(e){let t=this.meta[s];return this.$schema={body:a(e.body,t),headers:a(e?.headers,t,!0),params:a(e?.params,t),query:a(e?.query,t),response:a(e?.response,t)},this}compile(){return this.fetch=d(this),this.server&&this.server.reload({...this.server,fetch:this.fetch}),this}handle=async e=>this.fetch(e);fetch=e=>(this.fetch=d(this))(e);handleError=async(e,t,r)=>(this.handleError=u(this))(e,t,r);outerErrorHandler=e=>new Response(e.message,{status:e?.status??500});listen=(e,t)=>{if(!Bun)throw Error("Bun to run");if(this.compile(),"string"==typeof e&&Number.isNaN(e=+e))throw Error("Port must be a numeric value");let r=this.fetch,s=(process.env.ENV??process.env.NODE_ENV)!=="production",o="object"==typeof e?{...this.config.serve,...e,development:s,fetch:r,error:this.outerErrorHandler}:{...this.config.serve,port:e,fetch:r,error:this.outerErrorHandler};if(s){let e=`$$Elysia:${o.port}`;globalThis[e]?(this.server=globalThis[e],this.server.reload(o)):globalThis[e]=this.server=Bun.serve(o)}else this.server=Bun.serve(o);for(let e=0;e<this.event.start.length;e++)this.event.start[e](this);return t&&t(this.server),Promise.all(this.lazyLoadModules).then(()=>{Bun.gc(!0)}),this};stop=async()=>{if(!this.server)throw Error("Elysia isn't running. Call `app.listen` to start the server.");this.server.stop();for(let e=0;e<this.event.stop.length;e++)await this.event.stop[e](this)};get modules(){return Promise.all(this.lazyLoadModules)}model(e,t){return"object"==typeof e?Object.entries(e).forEach(([e,t])=>{e in this.meta[s]||(this.meta[s][e]=t)}):this.meta[s][e]=t,this}}export{t}from"./custom-types";export{ws}from"./ws";export{SCHEMA,DEFS,EXPOSED,getSchemaValidator,mergeDeep,mergeHook,mergeObjectArray,getResponseSchemaValidator}from"./utils";export{ParseError,NotFoundError,ValidationError,InternalServerError}from"./error";export{p as Elysia};
|
package/dist/types.d.ts
CHANGED
|
@@ -169,7 +169,7 @@ export type LocalHandler<Schema extends TypedSchema, Instance extends ElysiaInst
|
|
|
169
169
|
query: Query;
|
|
170
170
|
headers: Headers;
|
|
171
171
|
response: Response;
|
|
172
|
-
} :
|
|
172
|
+
} : never : never, Instance>;
|
|
173
173
|
export interface TypedRoute {
|
|
174
174
|
body?: unknown;
|
|
175
175
|
headers?: Record<string, unknown>;
|
|
@@ -203,7 +203,7 @@ export type HTTPMethod = 'ACL' | 'BIND' | 'CHECKOUT' | 'CONNECT' | 'COPY' | 'DEL
|
|
|
203
203
|
export type ErrorCode = (string & {}) | 'NOT_FOUND' | 'INTERNAL_SERVER_ERROR' | 'VALIDATION' | 'PARSE' | 'UNKNOWN';
|
|
204
204
|
export type ErrorHandler = (params: {
|
|
205
205
|
request: Request;
|
|
206
|
-
code: 'UNKNOWN';
|
|
206
|
+
code: 'UNKNOWN' | (string & {});
|
|
207
207
|
error: Readonly<Error>;
|
|
208
208
|
set: Context['set'];
|
|
209
209
|
} | {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "elysia",
|
|
3
3
|
"description": "Fast, and friendly Bun web framework",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.13",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "saltyAom",
|
|
7
7
|
"url": "https://github.com/SaltyAom",
|
|
@@ -116,6 +116,7 @@
|
|
|
116
116
|
"openapi-types": "^12.1.0"
|
|
117
117
|
},
|
|
118
118
|
"devDependencies": {
|
|
119
|
+
"@elysiajs/cors": "^0.5.0",
|
|
119
120
|
"@swc/cli": "^0.1.62",
|
|
120
121
|
"@swc/core": "^1.3.41",
|
|
121
122
|
"@types/node": "^18.15.5",
|