elysia 0.7.2 → 0.7.4
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/bun/index.d.ts +53 -13
- package/dist/bun/index.js +51 -51
- package/dist/bun/index.js.map +7 -6
- package/dist/cjs/index.d.ts +53 -13
- package/dist/cjs/index.js +16 -4
- package/dist/cjs/types.d.ts +11 -2
- package/dist/cjs/utils.js +4 -2
- package/dist/index.d.ts +53 -13
- package/dist/index.js +2 -2
- package/dist/types.d.ts +11 -2
- package/dist/utils.js +5 -4
- package/package.json +1 -1
package/dist/cjs/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { Serve, Server } from 'bun';
|
|
|
3
3
|
import type { Static, TSchema } from '@sinclair/typebox';
|
|
4
4
|
import type { Context } from './context';
|
|
5
5
|
import type { WS } from './ws/types';
|
|
6
|
-
import type { ElysiaConfig, DecoratorBase, DefinitionBase, RouteBase, Handler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, VoidHandler, PreHandler, BodyHandler, OptionalHandler, AfterHandler, ErrorHandler, LifeCycleStore, MaybePromise, Prettify, ListenCallback, AddPrefix, AddSuffix, AddPrefixCapitalize, AddSuffixCapitalize, TraceReporter, TraceHandler, MaybeArray } from './types';
|
|
6
|
+
import type { ElysiaConfig, DecoratorBase, DefinitionBase, RouteBase, Handler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, VoidHandler, PreHandler, BodyHandler, OptionalHandler, AfterHandler, ErrorHandler, LifeCycleStore, MaybePromise, Prettify, ListenCallback, AddPrefix, AddSuffix, AddPrefixCapitalize, AddSuffixCapitalize, TraceReporter, TraceHandler, MaybeArray, GracefulHandler } from './types';
|
|
7
7
|
/**
|
|
8
8
|
* ### Elysia Server
|
|
9
9
|
* Main instance to create web server using Elysia
|
|
@@ -57,7 +57,7 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
57
57
|
* .listen(8080)
|
|
58
58
|
* ```
|
|
59
59
|
*/
|
|
60
|
-
onStart(handler: MaybeArray<
|
|
60
|
+
onStart(handler: MaybeArray<GracefulHandler<this, Decorators>>): this;
|
|
61
61
|
/**
|
|
62
62
|
* ### request | Life cycle event
|
|
63
63
|
* Called on every new request is accepted
|
|
@@ -337,7 +337,7 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
337
337
|
* })
|
|
338
338
|
* ```
|
|
339
339
|
*/
|
|
340
|
-
onStop(handler:
|
|
340
|
+
onStop(handler: MaybeArray<GracefulHandler<this, Decorators>>): this;
|
|
341
341
|
/**
|
|
342
342
|
* ### on
|
|
343
343
|
* Syntax sugar for attaching life cycle event by name
|
|
@@ -424,7 +424,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
424
424
|
headers: Route['headers'];
|
|
425
425
|
response: unknown extends Route['response'] ? {
|
|
426
426
|
200: ReturnType<Function>;
|
|
427
|
-
} : Route['response']
|
|
427
|
+
} : Route['response'] extends {
|
|
428
|
+
200: any;
|
|
429
|
+
} ? Route['response'] : {
|
|
430
|
+
200: Route['response'];
|
|
431
|
+
};
|
|
428
432
|
};
|
|
429
433
|
};
|
|
430
434
|
}>, Scoped>;
|
|
@@ -455,7 +459,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
455
459
|
headers: Route['headers'];
|
|
456
460
|
response: unknown extends Route['response'] ? {
|
|
457
461
|
200: ReturnType<Function>;
|
|
458
|
-
} : Route['response']
|
|
462
|
+
} : Route['response'] extends {
|
|
463
|
+
200: any;
|
|
464
|
+
} ? Route['response'] : {
|
|
465
|
+
200: Route['response'];
|
|
466
|
+
};
|
|
459
467
|
};
|
|
460
468
|
};
|
|
461
469
|
}>, Scoped>;
|
|
@@ -486,7 +494,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
486
494
|
headers: Route['headers'];
|
|
487
495
|
response: unknown extends Route['response'] ? {
|
|
488
496
|
200: ReturnType<Function>;
|
|
489
|
-
} : Route['response']
|
|
497
|
+
} : Route['response'] extends {
|
|
498
|
+
200: any;
|
|
499
|
+
} ? Route['response'] : {
|
|
500
|
+
200: Route['response'];
|
|
501
|
+
};
|
|
490
502
|
};
|
|
491
503
|
};
|
|
492
504
|
}>, Scoped>;
|
|
@@ -517,7 +529,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
517
529
|
headers: Route['headers'];
|
|
518
530
|
response: unknown extends Route['response'] ? {
|
|
519
531
|
200: ReturnType<Function>;
|
|
520
|
-
} : Route['response']
|
|
532
|
+
} : Route['response'] extends {
|
|
533
|
+
200: any;
|
|
534
|
+
} ? Route['response'] : {
|
|
535
|
+
200: Route['response'];
|
|
536
|
+
};
|
|
521
537
|
};
|
|
522
538
|
};
|
|
523
539
|
}>, Scoped>;
|
|
@@ -548,7 +564,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
548
564
|
headers: Route['headers'];
|
|
549
565
|
response: unknown extends Route['response'] ? {
|
|
550
566
|
200: ReturnType<Function>;
|
|
551
|
-
} : Route['response']
|
|
567
|
+
} : Route['response'] extends {
|
|
568
|
+
200: any;
|
|
569
|
+
} ? Route['response'] : {
|
|
570
|
+
200: Route['response'];
|
|
571
|
+
};
|
|
552
572
|
};
|
|
553
573
|
};
|
|
554
574
|
}>, Scoped>;
|
|
@@ -579,7 +599,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
579
599
|
headers: Route['headers'];
|
|
580
600
|
response: unknown extends Route['response'] ? {
|
|
581
601
|
200: ReturnType<Function>;
|
|
582
|
-
} : Route['response']
|
|
602
|
+
} : Route['response'] extends {
|
|
603
|
+
200: any;
|
|
604
|
+
} ? Route['response'] : {
|
|
605
|
+
200: Route['response'];
|
|
606
|
+
};
|
|
583
607
|
};
|
|
584
608
|
};
|
|
585
609
|
}>, Scoped>;
|
|
@@ -605,7 +629,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
605
629
|
headers: Route['headers'];
|
|
606
630
|
response: unknown extends Route['response'] ? {
|
|
607
631
|
200: ReturnType<Function>;
|
|
608
|
-
} : Route['response']
|
|
632
|
+
} : Route['response'] extends {
|
|
633
|
+
200: any;
|
|
634
|
+
} ? Route['response'] : {
|
|
635
|
+
200: Route['response'];
|
|
636
|
+
};
|
|
609
637
|
};
|
|
610
638
|
};
|
|
611
639
|
}>, Scoped>;
|
|
@@ -636,7 +664,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
636
664
|
headers: Route['headers'];
|
|
637
665
|
response: unknown extends Route['response'] ? {
|
|
638
666
|
200: ReturnType<Function>;
|
|
639
|
-
} : Route['response']
|
|
667
|
+
} : Route['response'] extends {
|
|
668
|
+
200: any;
|
|
669
|
+
} ? Route['response'] : {
|
|
670
|
+
200: Route['response'];
|
|
671
|
+
};
|
|
640
672
|
};
|
|
641
673
|
};
|
|
642
674
|
}>, Scoped>;
|
|
@@ -667,7 +699,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
667
699
|
headers: Route['headers'];
|
|
668
700
|
response: unknown extends Route['response'] ? {
|
|
669
701
|
200: ReturnType<Function>;
|
|
670
|
-
} : Route['response']
|
|
702
|
+
} : Route['response'] extends {
|
|
703
|
+
200: any;
|
|
704
|
+
} ? Route['response'] : {
|
|
705
|
+
200: Route['response'];
|
|
706
|
+
};
|
|
671
707
|
};
|
|
672
708
|
};
|
|
673
709
|
}>, Scoped>;
|
|
@@ -736,7 +772,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
736
772
|
headers: Headers;
|
|
737
773
|
response: unknown extends Response ? {
|
|
738
774
|
200: ReturnType<Function>;
|
|
739
|
-
} :
|
|
775
|
+
} : Route['response'] extends {
|
|
776
|
+
200: any;
|
|
777
|
+
} ? Route['response'] : {
|
|
778
|
+
200: Route['response'];
|
|
779
|
+
};
|
|
740
780
|
} : never;
|
|
741
781
|
};
|
|
742
782
|
}>, Scoped>;
|
package/dist/cjs/index.js
CHANGED
|
@@ -127,8 +127,14 @@ class Elysia {
|
|
|
127
127
|
if (typeof Bun === 'undefined')
|
|
128
128
|
throw new Error('.listen() is designed to run on Bun only. If you are running Elysia in other environment please use a dedicated plugin or export the handler via Elysia.fetch');
|
|
129
129
|
this.server = Bun?.serve(serve);
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
if (this.event.start.length) {
|
|
131
|
+
const context = Object.assign(this.decorators, {
|
|
132
|
+
store: this.store,
|
|
133
|
+
app: this
|
|
134
|
+
});
|
|
135
|
+
for (let i = 0; i < this.event.start.length; i++)
|
|
136
|
+
this.event.start[i](context);
|
|
137
|
+
}
|
|
132
138
|
if (callback)
|
|
133
139
|
callback(this.server);
|
|
134
140
|
Promise.all(this.lazyLoadModules).then(() => {
|
|
@@ -155,8 +161,14 @@ class Elysia {
|
|
|
155
161
|
if (!this.server)
|
|
156
162
|
throw new Error("Elysia isn't running. Call `app.listen` to start the server.");
|
|
157
163
|
this.server.stop();
|
|
158
|
-
|
|
159
|
-
|
|
164
|
+
if (this.event.stop.length) {
|
|
165
|
+
const context = Object.assign(this.decorators, {
|
|
166
|
+
store: this.store,
|
|
167
|
+
app: this
|
|
168
|
+
});
|
|
169
|
+
for (let i = 0; i < this.event.stop.length; i++)
|
|
170
|
+
await this.event.stop[i](context);
|
|
171
|
+
}
|
|
160
172
|
};
|
|
161
173
|
this.config = {
|
|
162
174
|
forceErrorEncapsulation: false,
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type { EventEmitter } from 'eventemitter3';
|
|
|
7
7
|
import type { CookieOptions } from './cookie';
|
|
8
8
|
import type { Context, PreContext } from './context';
|
|
9
9
|
import type { InternalServerError, InvalidCookieSignature, NotFoundError, ParseError, ValidationError } from './error';
|
|
10
|
+
import Elysia from '.';
|
|
10
11
|
export type ElysiaConfig<T extends string = '', Scoped extends boolean = false> = {
|
|
11
12
|
name?: string;
|
|
12
13
|
seed?: unknown;
|
|
@@ -112,7 +113,7 @@ export type UnwrapGroupGuardRoute<Schema extends InputSchema<any>, Definitions e
|
|
|
112
113
|
};
|
|
113
114
|
export interface LifeCycleStore {
|
|
114
115
|
type?: ContentType;
|
|
115
|
-
start:
|
|
116
|
+
start: GracefulHandler<any, any>[];
|
|
116
117
|
request: PreHandler<any, any>[];
|
|
117
118
|
parse: BodyHandler<any, any>[];
|
|
118
119
|
transform: VoidHandler<any, any>[];
|
|
@@ -121,7 +122,7 @@ export interface LifeCycleStore {
|
|
|
121
122
|
onResponse: VoidHandler<any, any>[];
|
|
122
123
|
trace: TraceHandler<any, any>[];
|
|
123
124
|
error: ErrorHandler<any, any, any>[];
|
|
124
|
-
stop:
|
|
125
|
+
stop: GracefulHandler<any, any>[];
|
|
125
126
|
}
|
|
126
127
|
export type LifeCycleEvent = 'start' | 'request' | 'parse' | 'transform' | 'beforeHandle' | 'afterHandle' | 'response' | 'error' | 'stop';
|
|
127
128
|
export type ContentType = MaybeArray<(string & {}) | 'none' | 'text' | 'json' | 'formdata' | 'urlencoded' | 'arrayBuffer' | 'text/plain' | 'application/json' | 'multipart/form-data' | 'application/x-www-form-urlencoded'>;
|
|
@@ -205,6 +206,14 @@ export type PreHandler<Route extends RouteSchema = {}, Decorators extends Decora
|
|
|
205
206
|
request: {};
|
|
206
207
|
store: {};
|
|
207
208
|
}> = (context: Prettify<PreContext<Route, Decorators>>) => MaybePromise<Route['response'] | void>;
|
|
209
|
+
export type GracefulHandler<Instance extends Elysia<any, any, any, any, any, any>, Decorators extends DecoratorBase = {
|
|
210
|
+
request: {};
|
|
211
|
+
store: {};
|
|
212
|
+
}> = (data: {
|
|
213
|
+
app: Instance;
|
|
214
|
+
} & Prettify<Decorators['request'] & {
|
|
215
|
+
store: Decorators['store'];
|
|
216
|
+
}>) => any;
|
|
208
217
|
export type ErrorHandler<T extends Record<string, Error> = {}, Route extends RouteSchema = {}, Decorators extends DecoratorBase = {
|
|
209
218
|
request: {};
|
|
210
219
|
store: {};
|
package/dist/cjs/utils.js
CHANGED
|
@@ -4,10 +4,13 @@ exports.StatusMap = exports.filterGlobalHook = exports.asGlobal = exports.asGlob
|
|
|
4
4
|
const typebox_1 = require("@sinclair/typebox");
|
|
5
5
|
const value_1 = require("@sinclair/typebox/value");
|
|
6
6
|
const compiler_1 = require("@sinclair/typebox/compiler");
|
|
7
|
+
const handler_1 = require("./handler");
|
|
7
8
|
const isObject = (item) => item && typeof item === 'object' && !Array.isArray(item);
|
|
8
9
|
const isClass = (v) => (typeof v === 'function' && /^\s*class\s+/.test(v.toString())) ||
|
|
9
10
|
// Handle import * as Sentry from '@sentry/bun'
|
|
10
|
-
v.toString() === '[object Module]'
|
|
11
|
+
v.toString() === '[object Module]' ||
|
|
12
|
+
// If object prototype is not pure, then probably a class-like object
|
|
13
|
+
(0, handler_1.isNotEmpty)(Object.getPrototypeOf(v));
|
|
11
14
|
const mergeDeep = (target, source, { skipKeys } = {}) => {
|
|
12
15
|
if (isObject(target) && isObject(source))
|
|
13
16
|
for (const [key, value] of Object.entries(source)) {
|
|
@@ -25,7 +28,6 @@ const mergeDeep = (target, source, { skipKeys } = {}) => {
|
|
|
25
28
|
target[key] = value;
|
|
26
29
|
continue;
|
|
27
30
|
}
|
|
28
|
-
console.log("B");
|
|
29
31
|
target[key] = (0, exports.mergeDeep)(target[key], value);
|
|
30
32
|
}
|
|
31
33
|
return target;
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { Serve, Server } from 'bun';
|
|
|
3
3
|
import type { Static, TSchema } from '@sinclair/typebox';
|
|
4
4
|
import type { Context } from './context';
|
|
5
5
|
import type { WS } from './ws/types';
|
|
6
|
-
import type { ElysiaConfig, DecoratorBase, DefinitionBase, RouteBase, Handler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, VoidHandler, PreHandler, BodyHandler, OptionalHandler, AfterHandler, ErrorHandler, LifeCycleStore, MaybePromise, Prettify, ListenCallback, AddPrefix, AddSuffix, AddPrefixCapitalize, AddSuffixCapitalize, TraceReporter, TraceHandler, MaybeArray } from './types';
|
|
6
|
+
import type { ElysiaConfig, DecoratorBase, DefinitionBase, RouteBase, Handler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, VoidHandler, PreHandler, BodyHandler, OptionalHandler, AfterHandler, ErrorHandler, LifeCycleStore, MaybePromise, Prettify, ListenCallback, AddPrefix, AddSuffix, AddPrefixCapitalize, AddSuffixCapitalize, TraceReporter, TraceHandler, MaybeArray, GracefulHandler } from './types';
|
|
7
7
|
/**
|
|
8
8
|
* ### Elysia Server
|
|
9
9
|
* Main instance to create web server using Elysia
|
|
@@ -57,7 +57,7 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
57
57
|
* .listen(8080)
|
|
58
58
|
* ```
|
|
59
59
|
*/
|
|
60
|
-
onStart(handler: MaybeArray<
|
|
60
|
+
onStart(handler: MaybeArray<GracefulHandler<this, Decorators>>): this;
|
|
61
61
|
/**
|
|
62
62
|
* ### request | Life cycle event
|
|
63
63
|
* Called on every new request is accepted
|
|
@@ -337,7 +337,7 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
337
337
|
* })
|
|
338
338
|
* ```
|
|
339
339
|
*/
|
|
340
|
-
onStop(handler:
|
|
340
|
+
onStop(handler: MaybeArray<GracefulHandler<this, Decorators>>): this;
|
|
341
341
|
/**
|
|
342
342
|
* ### on
|
|
343
343
|
* Syntax sugar for attaching life cycle event by name
|
|
@@ -424,7 +424,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
424
424
|
headers: Route['headers'];
|
|
425
425
|
response: unknown extends Route['response'] ? {
|
|
426
426
|
200: ReturnType<Function>;
|
|
427
|
-
} : Route['response']
|
|
427
|
+
} : Route['response'] extends {
|
|
428
|
+
200: any;
|
|
429
|
+
} ? Route['response'] : {
|
|
430
|
+
200: Route['response'];
|
|
431
|
+
};
|
|
428
432
|
};
|
|
429
433
|
};
|
|
430
434
|
}>, Scoped>;
|
|
@@ -455,7 +459,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
455
459
|
headers: Route['headers'];
|
|
456
460
|
response: unknown extends Route['response'] ? {
|
|
457
461
|
200: ReturnType<Function>;
|
|
458
|
-
} : Route['response']
|
|
462
|
+
} : Route['response'] extends {
|
|
463
|
+
200: any;
|
|
464
|
+
} ? Route['response'] : {
|
|
465
|
+
200: Route['response'];
|
|
466
|
+
};
|
|
459
467
|
};
|
|
460
468
|
};
|
|
461
469
|
}>, Scoped>;
|
|
@@ -486,7 +494,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
486
494
|
headers: Route['headers'];
|
|
487
495
|
response: unknown extends Route['response'] ? {
|
|
488
496
|
200: ReturnType<Function>;
|
|
489
|
-
} : Route['response']
|
|
497
|
+
} : Route['response'] extends {
|
|
498
|
+
200: any;
|
|
499
|
+
} ? Route['response'] : {
|
|
500
|
+
200: Route['response'];
|
|
501
|
+
};
|
|
490
502
|
};
|
|
491
503
|
};
|
|
492
504
|
}>, Scoped>;
|
|
@@ -517,7 +529,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
517
529
|
headers: Route['headers'];
|
|
518
530
|
response: unknown extends Route['response'] ? {
|
|
519
531
|
200: ReturnType<Function>;
|
|
520
|
-
} : Route['response']
|
|
532
|
+
} : Route['response'] extends {
|
|
533
|
+
200: any;
|
|
534
|
+
} ? Route['response'] : {
|
|
535
|
+
200: Route['response'];
|
|
536
|
+
};
|
|
521
537
|
};
|
|
522
538
|
};
|
|
523
539
|
}>, Scoped>;
|
|
@@ -548,7 +564,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
548
564
|
headers: Route['headers'];
|
|
549
565
|
response: unknown extends Route['response'] ? {
|
|
550
566
|
200: ReturnType<Function>;
|
|
551
|
-
} : Route['response']
|
|
567
|
+
} : Route['response'] extends {
|
|
568
|
+
200: any;
|
|
569
|
+
} ? Route['response'] : {
|
|
570
|
+
200: Route['response'];
|
|
571
|
+
};
|
|
552
572
|
};
|
|
553
573
|
};
|
|
554
574
|
}>, Scoped>;
|
|
@@ -579,7 +599,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
579
599
|
headers: Route['headers'];
|
|
580
600
|
response: unknown extends Route['response'] ? {
|
|
581
601
|
200: ReturnType<Function>;
|
|
582
|
-
} : Route['response']
|
|
602
|
+
} : Route['response'] extends {
|
|
603
|
+
200: any;
|
|
604
|
+
} ? Route['response'] : {
|
|
605
|
+
200: Route['response'];
|
|
606
|
+
};
|
|
583
607
|
};
|
|
584
608
|
};
|
|
585
609
|
}>, Scoped>;
|
|
@@ -605,7 +629,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
605
629
|
headers: Route['headers'];
|
|
606
630
|
response: unknown extends Route['response'] ? {
|
|
607
631
|
200: ReturnType<Function>;
|
|
608
|
-
} : Route['response']
|
|
632
|
+
} : Route['response'] extends {
|
|
633
|
+
200: any;
|
|
634
|
+
} ? Route['response'] : {
|
|
635
|
+
200: Route['response'];
|
|
636
|
+
};
|
|
609
637
|
};
|
|
610
638
|
};
|
|
611
639
|
}>, Scoped>;
|
|
@@ -636,7 +664,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
636
664
|
headers: Route['headers'];
|
|
637
665
|
response: unknown extends Route['response'] ? {
|
|
638
666
|
200: ReturnType<Function>;
|
|
639
|
-
} : Route['response']
|
|
667
|
+
} : Route['response'] extends {
|
|
668
|
+
200: any;
|
|
669
|
+
} ? Route['response'] : {
|
|
670
|
+
200: Route['response'];
|
|
671
|
+
};
|
|
640
672
|
};
|
|
641
673
|
};
|
|
642
674
|
}>, Scoped>;
|
|
@@ -667,7 +699,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
667
699
|
headers: Route['headers'];
|
|
668
700
|
response: unknown extends Route['response'] ? {
|
|
669
701
|
200: ReturnType<Function>;
|
|
670
|
-
} : Route['response']
|
|
702
|
+
} : Route['response'] extends {
|
|
703
|
+
200: any;
|
|
704
|
+
} ? Route['response'] : {
|
|
705
|
+
200: Route['response'];
|
|
706
|
+
};
|
|
671
707
|
};
|
|
672
708
|
};
|
|
673
709
|
}>, Scoped>;
|
|
@@ -736,7 +772,11 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
|
|
|
736
772
|
headers: Headers;
|
|
737
773
|
response: unknown extends Response ? {
|
|
738
774
|
200: ReturnType<Function>;
|
|
739
|
-
} :
|
|
775
|
+
} : Route['response'] extends {
|
|
776
|
+
200: any;
|
|
777
|
+
} ? Route['response'] : {
|
|
778
|
+
200: Route['response'];
|
|
779
|
+
};
|
|
740
780
|
} : never;
|
|
741
781
|
};
|
|
742
782
|
}>, Scoped>;
|
package/dist/index.js
CHANGED
|
@@ -472,7 +472,7 @@ e.$elysia="derive",this.onTransform(e))}affix(e,t,r){if(""===r)return this;let s
|
|
|
472
472
|
* .get("/", () => 'hi')
|
|
473
473
|
* .listen(8080)
|
|
474
474
|
* ```
|
|
475
|
-
*/listen=(e,t)=>{if(!Bun)throw Error("Bun to run");if(this.compile(),"string"==typeof e&&Number.isNaN(e=+e.trim()))throw Error("Port must be a numeric value");let r=this.fetch,s="object"==typeof e?{development:!k,...this.config.serve,...e,websocket:{...this.config.websocket,...i},fetch:r,error:this.outerErrorHandler}:{development:!k,...this.config.serve,websocket:{...this.config.websocket,...i},port:e,fetch:r,error:this.outerErrorHandler};if("undefined"==typeof Bun)throw Error(".listen() is designed to run on Bun only. If you are running Elysia in other environment please use a dedicated plugin or export the handler via Elysia.fetch");this.server=Bun?.serve(s);for(let
|
|
475
|
+
*/listen=(e,t)=>{if(!Bun)throw Error("Bun to run");if(this.compile(),"string"==typeof e&&Number.isNaN(e=+e.trim()))throw Error("Port must be a numeric value");let r=this.fetch,s="object"==typeof e?{development:!k,...this.config.serve,...e,websocket:{...this.config.websocket,...i},fetch:r,error:this.outerErrorHandler}:{development:!k,...this.config.serve,websocket:{...this.config.websocket,...i},port:e,fetch:r,error:this.outerErrorHandler};if("undefined"==typeof Bun)throw Error(".listen() is designed to run on Bun only. If you are running Elysia in other environment please use a dedicated plugin or export the handler via Elysia.fetch");if(this.server=Bun?.serve(s),this.event.start.length){let e=Object.assign(this.decorators,{store:this.store,app:this});for(let t=0;t<this.event.start.length;t++)this.event.start[t](e)}return t&&t(this.server),Promise.all(this.lazyLoadModules).then(()=>{Bun?.gc(!1)}),this};/**
|
|
476
476
|
* ### stop
|
|
477
477
|
* Stop server from serving
|
|
478
478
|
*
|
|
@@ -486,6 +486,6 @@ e.$elysia="derive",this.onTransform(e))}affix(e,t,r){if(""===r)return this;let s
|
|
|
486
486
|
* // Sometime later
|
|
487
487
|
* app.stop()
|
|
488
488
|
* ```
|
|
489
|
-
*/stop=async()=>{if(!this.server)throw Error("Elysia isn't running. Call `app.listen` to start the server.");this.server.stop();for(let
|
|
489
|
+
*/stop=async()=>{if(!this.server)throw Error("Elysia isn't running. Call `app.listen` to start the server.");if(this.server.stop(),this.event.stop.length){let e=Object.assign(this.decorators,{store:this.store,app:this});for(let t=0;t<this.event.stop.length;t++)await this.event.stop[t](e)}};/**
|
|
490
490
|
* Wait until all lazy loaded modules all load is fully
|
|
491
491
|
*/get modules(){return Promise.all(this.lazyLoadModules)}}export{mapResponse,mapCompactResponse,mapEarlyResponse}from"./handler";export{t}from"./custom-types";export{Cookie}from"./cookie";export{getSchemaValidator,mergeDeep,mergeHook,mergeObjectArray,getResponseSchemaValidator}from"./utils";export{ParseError,NotFoundError,ValidationError,InternalServerError,InvalidCookieSignature}from"./error";export{E as Elysia};
|
package/dist/types.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type { EventEmitter } from 'eventemitter3';
|
|
|
7
7
|
import type { CookieOptions } from './cookie';
|
|
8
8
|
import type { Context, PreContext } from './context';
|
|
9
9
|
import type { InternalServerError, InvalidCookieSignature, NotFoundError, ParseError, ValidationError } from './error';
|
|
10
|
+
import Elysia from '.';
|
|
10
11
|
export type ElysiaConfig<T extends string = '', Scoped extends boolean = false> = {
|
|
11
12
|
name?: string;
|
|
12
13
|
seed?: unknown;
|
|
@@ -112,7 +113,7 @@ export type UnwrapGroupGuardRoute<Schema extends InputSchema<any>, Definitions e
|
|
|
112
113
|
};
|
|
113
114
|
export interface LifeCycleStore {
|
|
114
115
|
type?: ContentType;
|
|
115
|
-
start:
|
|
116
|
+
start: GracefulHandler<any, any>[];
|
|
116
117
|
request: PreHandler<any, any>[];
|
|
117
118
|
parse: BodyHandler<any, any>[];
|
|
118
119
|
transform: VoidHandler<any, any>[];
|
|
@@ -121,7 +122,7 @@ export interface LifeCycleStore {
|
|
|
121
122
|
onResponse: VoidHandler<any, any>[];
|
|
122
123
|
trace: TraceHandler<any, any>[];
|
|
123
124
|
error: ErrorHandler<any, any, any>[];
|
|
124
|
-
stop:
|
|
125
|
+
stop: GracefulHandler<any, any>[];
|
|
125
126
|
}
|
|
126
127
|
export type LifeCycleEvent = 'start' | 'request' | 'parse' | 'transform' | 'beforeHandle' | 'afterHandle' | 'response' | 'error' | 'stop';
|
|
127
128
|
export type ContentType = MaybeArray<(string & {}) | 'none' | 'text' | 'json' | 'formdata' | 'urlencoded' | 'arrayBuffer' | 'text/plain' | 'application/json' | 'multipart/form-data' | 'application/x-www-form-urlencoded'>;
|
|
@@ -205,6 +206,14 @@ export type PreHandler<Route extends RouteSchema = {}, Decorators extends Decora
|
|
|
205
206
|
request: {};
|
|
206
207
|
store: {};
|
|
207
208
|
}> = (context: Prettify<PreContext<Route, Decorators>>) => MaybePromise<Route['response'] | void>;
|
|
209
|
+
export type GracefulHandler<Instance extends Elysia<any, any, any, any, any, any>, Decorators extends DecoratorBase = {
|
|
210
|
+
request: {};
|
|
211
|
+
store: {};
|
|
212
|
+
}> = (data: {
|
|
213
|
+
app: Instance;
|
|
214
|
+
} & Prettify<Decorators['request'] & {
|
|
215
|
+
store: Decorators['store'];
|
|
216
|
+
}>) => any;
|
|
208
217
|
export type ErrorHandler<T extends Record<string, Error> = {}, Route extends RouteSchema = {}, Decorators extends DecoratorBase = {
|
|
209
218
|
request: {};
|
|
210
219
|
store: {};
|
package/dist/utils.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import{Kind as e}from"@sinclair/typebox";import{Value as r}from"@sinclair/typebox/value";import{TypeCompiler as t}from"@sinclair/typebox/compiler";let
|
|
2
|
-
"[object Module]"===e.toString()
|
|
1
|
+
import{Kind as e}from"@sinclair/typebox";import{Value as r}from"@sinclair/typebox/value";import{TypeCompiler as t}from"@sinclair/typebox/compiler";import{isNotEmpty as o}from"./handler";let a=e=>e&&"object"==typeof e&&!Array.isArray(e),n=e=>"function"==typeof e&&/^\s*class\s+/.test(e.toString())||// Handle import * as Sentry from '@sentry/bun'
|
|
2
|
+
"[object Module]"===e.toString()||// If object prototype is not pure, then probably a class-like object
|
|
3
|
+
o(Object.getPrototypeOf(e));export const mergeDeep=(e,r,{skipKeys:t}={})=>{if(a(e)&&a(r)){for(let[o,s]of Object.entries(r))if(!t?.includes(o)){if(!a(s)||!(o in e)||n(s)){e[o]=s;continue}e[o]=mergeDeep(e[o],s)}}return e};export const mergeCookie=(e,r)=>mergeDeep(e,r,{skipKeys:["properties"]});export const mergeObjectArray=(e,r)=>{// ! Must copy to remove side-effect
|
|
3
4
|
let t=[...Array.isArray(e)?e:[e]],o=[];for(let e of t)// @ts-ignore
|
|
4
5
|
e.$elysiaChecksum&&// @ts-ignore
|
|
5
6
|
o.push(e.$elysiaChecksum);for(let e of Array.isArray(r)?r:[r])// @ts-ignore
|
|
@@ -18,5 +19,5 @@ export const checksum=e=>{let r=9;for(let t=0;t<e.length;)r=Math.imul(r^e.charCo
|
|
|
18
19
|
(e.$elysiaChecksum=t),e);return{start:mergeObjectArray(e.start,("start"in r?r.start??[]:[]).map(o)),request:mergeObjectArray(e.request,("request"in r?r.request??[]:[]).map(o)),parse:mergeObjectArray(e.parse,"parse"in r?r?.parse??[]:(void 0)??[]).map(o),transform:mergeObjectArray(e.transform,(r?.transform??[]).map(o)),beforeHandle:mergeObjectArray(e.beforeHandle,(r?.beforeHandle??[]).map(o)),afterHandle:mergeObjectArray(e.afterHandle,(r?.afterHandle??[]).map(o)),onResponse:mergeObjectArray(e.onResponse,(r?.onResponse??[]).map(o)),trace:mergeObjectArray(e.trace,("trace"in r?r.trace??[]:[]).map(o)),error:mergeObjectArray(e.error,(r?.error??[]).map(o)),stop:mergeObjectArray(e.stop,("stop"in r?r.stop??[]:[]).map(o))}};export const asGlobalHook=(e,r=!0)=>({// rest is validator
|
|
19
20
|
...e,type:e?.type,detail:e?.detail,parse:asGlobal(e?.parse,r),transform:asGlobal(e?.transform,r),beforeHandle:asGlobal(e?.beforeHandle,r),afterHandle:asGlobal(e?.afterHandle,r),onResponse:asGlobal(e?.onResponse,r),error:asGlobal(e?.error,r)});export const asGlobal=(e,r=!0)=>e?"function"==typeof e?(r?// @ts-ignore
|
|
20
21
|
e.$elysiaHookType="global":e.$elysiaHookType=void 0,e):e.map(e=>(r?// @ts-ignore
|
|
21
|
-
e.$elysiaHookType="global":e.$elysiaHookType=void 0,e)):e;let
|
|
22
|
-
...e,type:e?.type,detail:e?.detail,parse:
|
|
22
|
+
e.$elysiaHookType="global":e.$elysiaHookType=void 0,e)):e;let s=e=>e?"function"==typeof e?"global"===e.$elysiaHookType?e:void 0:e.filter(e=>"global"===e.$elysiaHookType):e;export const filterGlobalHook=e=>({// rest is validator
|
|
23
|
+
...e,type:e?.type,detail:e?.detail,parse:s(e?.parse),transform:s(e?.transform),beforeHandle:s(e?.beforeHandle),afterHandle:s(e?.afterHandle),onResponse:s(e?.onResponse),error:s(e?.error)});export const StatusMap={Continue:100,"Switching Protocols":101,Processing:102,"Early Hints":103,OK:200,Created:201,Accepted:202,"Non-Authoritative Information":203,"No Content":204,"Reset Content":205,"Partial Content":206,"Multi-Status":207,"Already Reported":208,"Multiple Choices":300,"Moved Permanently":301,Found:302,"See Other":303,"Not Modified":304,"Temporary Redirect":307,"Permanent Redirect":308,"Bad Request":400,Unauthorized:401,"Payment Required":402,Forbidden:403,"Not Found":404,"Method Not Allowed":405,"Not Acceptable":406,"Proxy Authentication Required":407,"Request Timeout":408,Conflict:409,Gone:410,"Length Required":411,"Precondition Failed":412,"Payload Too Large":413,"URI Too Long":414,"Unsupported Media Type":415,"Range Not Satisfiable":416,"Expectation Failed":417,"I'm a teapot":418,"Misdirected Request":421,"Unprocessable Content":422,Locked:423,"Failed Dependency":424,"Too Early":425,"Upgrade Required":426,"Precondition Required":428,"Too Many Requests":429,"Request Header Fields Too Large":431,"Unavailable For Legal Reasons":451,"Internal Server Error":500,"Not Implemented":501,"Bad Gateway":502,"Service Unavailable":503,"Gateway Timeout":504,"HTTP Version Not Supported":505,"Variant Also Negotiates":506,"Insufficient Storage":507,"Loop Detected":508,"Not Extended":510,"Network Authentication Required":511};
|