elysia 0.7.21 → 0.7.23
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 +1 -1
- package/dist/bun/index.js +66 -66
- package/dist/bun/index.js.map +9 -9
- package/dist/cjs/compose.js +15 -9
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/trace.d.ts +1 -1
- package/dist/cjs/trace.js +192 -205
- package/dist/cjs/types.d.ts +2 -2
- package/dist/cjs/utils.js +5 -1
- package/dist/compose.js +17 -12
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/trace.d.ts +1 -1
- package/dist/trace.js +4 -6
- package/dist/types.d.ts +2 -2
- package/dist/utils.js +5 -1
- package/package.json +1 -1
package/dist/cjs/compose.js
CHANGED
|
@@ -21,8 +21,10 @@ const createReport = ({ hasTrace, hasTraceSet = false, addFn, condition = {} })
|
|
|
21
21
|
? event
|
|
22
22
|
: event.slice(0, dotIndex))])
|
|
23
23
|
return () => {
|
|
24
|
-
if (hasTraceSet && event === 'afterHandle')
|
|
25
|
-
addFn('
|
|
24
|
+
if (hasTraceSet && event === 'afterHandle') {
|
|
25
|
+
addFn(`reporter.emit('event',{id,event:'exit',type:'begin',time:0})`);
|
|
26
|
+
addFn(`\nawait traceDone\n`);
|
|
27
|
+
}
|
|
26
28
|
};
|
|
27
29
|
if (isGroup)
|
|
28
30
|
name ||= event;
|
|
@@ -52,8 +54,10 @@ const createReport = ({ hasTrace, hasTraceSet = false, addFn, condition = {} })
|
|
|
52
54
|
time: performance.now()
|
|
53
55
|
})`.replace(/(\t| |\n)/g, '') +
|
|
54
56
|
'\n');
|
|
55
|
-
if (hasTraceSet && event === 'afterHandle')
|
|
57
|
+
if (hasTraceSet && event === 'afterHandle') {
|
|
58
|
+
addFn(`\nreporter.emit('event',{id,event:'exit',type:'begin',time:0})\n`);
|
|
56
59
|
addFn('\nawait traceDone\n');
|
|
60
|
+
}
|
|
57
61
|
};
|
|
58
62
|
};
|
|
59
63
|
}
|
|
@@ -458,9 +462,14 @@ const composeHandler = ({ path, method, hooks, validator, handler, handleError,
|
|
|
458
462
|
}
|
|
459
463
|
});
|
|
460
464
|
fnLiteral += hasErrorHandler ? 'try {\n' : '';
|
|
461
|
-
if (hasTrace)
|
|
462
|
-
fnLiteral +=
|
|
463
|
-
|
|
465
|
+
if (hasTrace) {
|
|
466
|
+
// fnLiteral += `\nconst traceDone = new Promise(r => r())\n`
|
|
467
|
+
fnLiteral += `\nconst traceDone = Promise.all([`;
|
|
468
|
+
for (let i = 0; i < hooks.trace.length; i++) {
|
|
469
|
+
fnLiteral += `new Promise(r => { reporter.once(\`res\${id}.${i}\`, r) }),`;
|
|
470
|
+
}
|
|
471
|
+
fnLiteral += `])\n`;
|
|
472
|
+
}
|
|
464
473
|
const maybeAsync = hasCookie ||
|
|
465
474
|
hasBody ||
|
|
466
475
|
hasTraceSet ||
|
|
@@ -800,8 +809,6 @@ const composeHandler = ({ path, method, hooks, validator, handler, handleError,
|
|
|
800
809
|
else {
|
|
801
810
|
fnLiteral += `if(${name}) {`;
|
|
802
811
|
endAfterHandle();
|
|
803
|
-
if (hasTraceSet)
|
|
804
|
-
fnLiteral += `${name} = mapEarlyResponse(${name}, c.set)\n`;
|
|
805
812
|
fnLiteral += `return ${name}}\n`;
|
|
806
813
|
}
|
|
807
814
|
}
|
|
@@ -906,7 +913,6 @@ const composeHandler = ({ path, method, hooks, validator, handler, handleError,
|
|
|
906
913
|
fnLiteral += `}`;
|
|
907
914
|
}
|
|
908
915
|
}
|
|
909
|
-
// console.log(fnLiteral)
|
|
910
916
|
fnLiteral = `const {
|
|
911
917
|
handler,
|
|
912
918
|
handleError,
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -980,5 +980,5 @@ export { Cookie, type CookieOptions } from './cookie';
|
|
|
980
980
|
export { getSchemaValidator, mergeDeep, mergeHook, mergeObjectArray, getResponseSchemaValidator } from './utils';
|
|
981
981
|
export { ParseError, NotFoundError, ValidationError, InternalServerError, InvalidCookieSignature } from './error';
|
|
982
982
|
export type { Context, PreContext } from './context';
|
|
983
|
-
export type { ElysiaConfig, DecoratorBase, DefinitionBase, RouteBase, Handler, ComposedHandler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, SchemaValidator, VoidHandler, PreHandler, BodyHandler, OptionalHandler, ErrorHandler, AfterHandler,
|
|
983
|
+
export type { ElysiaConfig, DecoratorBase, DefinitionBase, RouteBase, Handler, ComposedHandler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, SchemaValidator, VoidHandler, PreHandler, BodyHandler, OptionalHandler, ErrorHandler, AfterHandler, LifeCycleEvent, TraceEvent, LifeCycleStore, MaybePromise, ListenCallback, UnwrapSchema, TraceHandler, TraceProcess, TraceReporter, TraceStream } from './types';
|
|
984
984
|
export type { Static } from '@sinclair/typebox';
|
package/dist/cjs/index.js
CHANGED
|
@@ -556,7 +556,7 @@ class Elysia {
|
|
|
556
556
|
* ```
|
|
557
557
|
*/
|
|
558
558
|
trace(handler) {
|
|
559
|
-
this.reporter.on('event', (0, trace_1.createTraceListener)(() => this.reporter, handler));
|
|
559
|
+
this.reporter.on('event', (0, trace_1.createTraceListener)(() => this.reporter, this.event.trace.length, handler));
|
|
560
560
|
this.on('trace', handler);
|
|
561
561
|
return this;
|
|
562
562
|
}
|
package/dist/cjs/trace.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { TraceHandler, TraceReporter, TraceStream } from './types';
|
|
2
|
-
export declare const createTraceListener: (getReporter: () => TraceReporter, handler: TraceHandler<any, any>) => (
|
|
2
|
+
export declare const createTraceListener: (getReporter: () => TraceReporter, totalListener: number, handler: TraceHandler<any, any>) => (trace: TraceStream) => Promise<void>;
|
package/dist/cjs/trace.js
CHANGED
|
@@ -1,217 +1,204 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createTraceListener = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (childIteration === -1)
|
|
33
|
-
childIteration = 0;
|
|
34
|
-
for (; childIteration < endChildren.length; childIteration++) {
|
|
35
|
-
// eslint-disable-next-line prefer-const
|
|
36
|
-
let end;
|
|
37
|
-
const start = {
|
|
38
|
-
name: 'anonymous',
|
|
39
|
-
time: performance.now(),
|
|
40
|
-
skip: true,
|
|
41
|
-
end: new Promise((resolve) => {
|
|
42
|
-
resolve(end);
|
|
43
|
-
}),
|
|
44
|
-
children: []
|
|
45
|
-
};
|
|
46
|
-
end = performance.now();
|
|
47
|
-
children[childIteration](start);
|
|
48
|
-
}
|
|
49
|
-
resolve(a);
|
|
50
|
-
};
|
|
51
|
-
});
|
|
52
|
-
return {
|
|
53
|
-
signal: handle,
|
|
54
|
-
consumeChild(event) {
|
|
55
|
-
switch (event.type) {
|
|
56
|
-
case 'begin':
|
|
57
|
-
const child = children[++childIteration];
|
|
58
|
-
// Child may cause early return
|
|
59
|
-
if (child)
|
|
60
|
-
child({
|
|
61
|
-
name: event.name,
|
|
62
|
-
time: event.time,
|
|
4
|
+
const resolver = () => {
|
|
5
|
+
let resolve;
|
|
6
|
+
const promise = new Promise((r) => {
|
|
7
|
+
resolve = r;
|
|
8
|
+
});
|
|
9
|
+
return [promise, resolve];
|
|
10
|
+
};
|
|
11
|
+
const createSignal = () => {
|
|
12
|
+
const [start, resolveStart] = resolver();
|
|
13
|
+
const [end, resolveEnd] = resolver();
|
|
14
|
+
const children = [];
|
|
15
|
+
const resolvers = [];
|
|
16
|
+
return {
|
|
17
|
+
signal: start,
|
|
18
|
+
consume: (trace) => {
|
|
19
|
+
switch (trace.type) {
|
|
20
|
+
case 'begin':
|
|
21
|
+
if (trace.unit && children.length === 0)
|
|
22
|
+
for (let i = 0; i < trace.unit; i++) {
|
|
23
|
+
const [start, resolveStart] = resolver();
|
|
24
|
+
const [end, resolveEnd] = resolver();
|
|
25
|
+
children.push(start);
|
|
26
|
+
resolvers.push([
|
|
27
|
+
(trace) => {
|
|
28
|
+
resolveStart({
|
|
29
|
+
children: [],
|
|
30
|
+
end,
|
|
31
|
+
name: trace.name ?? '',
|
|
63
32
|
skip: false,
|
|
64
|
-
|
|
65
|
-
endChildren.push(resolve);
|
|
66
|
-
})
|
|
33
|
+
time: trace.time
|
|
67
34
|
});
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
35
|
+
},
|
|
36
|
+
(time) => {
|
|
37
|
+
resolveEnd(time);
|
|
71
38
|
}
|
|
72
|
-
|
|
73
|
-
case 'end':
|
|
74
|
-
endChildren[childIteration]?.(event.time);
|
|
75
|
-
break;
|
|
39
|
+
]);
|
|
76
40
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
end = performance.now();
|
|
119
|
-
resolveHandle(start);
|
|
120
|
-
resolveHandleEnd(end);
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
};
|
|
124
|
-
const request = createSignal();
|
|
125
|
-
const parse = createSignal();
|
|
126
|
-
const transform = createSignal();
|
|
127
|
-
const beforeHandle = createSignal();
|
|
128
|
-
const handle = createSignal();
|
|
129
|
-
const afterHandle = createSignal();
|
|
130
|
-
const error = createSignal();
|
|
131
|
-
const response = createSignal();
|
|
132
|
-
request.consume(event);
|
|
133
|
-
const reducer = (event) => {
|
|
134
|
-
if (event.id === id)
|
|
135
|
-
switch (event.event) {
|
|
136
|
-
case 'request':
|
|
137
|
-
request.consume(event);
|
|
138
|
-
break;
|
|
139
|
-
case 'request.unit':
|
|
140
|
-
request.consumeChild(event);
|
|
141
|
-
break;
|
|
142
|
-
case 'parse':
|
|
143
|
-
parse.consume(event);
|
|
144
|
-
break;
|
|
145
|
-
case 'parse.unit':
|
|
146
|
-
parse.consumeChild(event);
|
|
147
|
-
break;
|
|
148
|
-
case 'transform':
|
|
149
|
-
transform.consume(event);
|
|
150
|
-
break;
|
|
151
|
-
case 'transform.unit':
|
|
152
|
-
transform.consumeChild(event);
|
|
153
|
-
break;
|
|
154
|
-
case 'beforeHandle':
|
|
155
|
-
beforeHandle.consume(event);
|
|
156
|
-
break;
|
|
157
|
-
case 'beforeHandle.unit':
|
|
158
|
-
beforeHandle.consumeChild(event);
|
|
159
|
-
break;
|
|
160
|
-
case 'handle':
|
|
161
|
-
handle.consume(event);
|
|
162
|
-
break;
|
|
163
|
-
case 'afterHandle':
|
|
164
|
-
afterHandle.consume(event);
|
|
165
|
-
break;
|
|
166
|
-
case 'afterHandle.unit':
|
|
167
|
-
afterHandle.consumeChild(event);
|
|
168
|
-
break;
|
|
169
|
-
case 'error':
|
|
170
|
-
error.consume(event);
|
|
171
|
-
break;
|
|
172
|
-
case 'error.unit':
|
|
173
|
-
error.consumeChild(event);
|
|
174
|
-
break;
|
|
175
|
-
case 'response':
|
|
176
|
-
if (event.type === 'begin') {
|
|
177
|
-
request.resolve();
|
|
178
|
-
parse.resolve();
|
|
179
|
-
transform.resolve();
|
|
180
|
-
beforeHandle.resolve();
|
|
181
|
-
handle.resolve();
|
|
182
|
-
afterHandle.resolve();
|
|
183
|
-
error.resolve();
|
|
184
|
-
}
|
|
185
|
-
else
|
|
186
|
-
reporter.off('event', reducer);
|
|
187
|
-
response.consume(event);
|
|
188
|
-
break;
|
|
189
|
-
case 'response.unit':
|
|
190
|
-
response.consumeChild(event);
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
};
|
|
194
|
-
reporter.on('event', reducer);
|
|
195
|
-
await handler({
|
|
196
|
-
id: event.id,
|
|
197
|
-
// @ts-ignore
|
|
198
|
-
context: event.ctx,
|
|
199
|
-
// @ts-ignore
|
|
200
|
-
set: event.ctx?.set,
|
|
201
|
-
// @ts-ignore
|
|
202
|
-
store: event.ctx?.store,
|
|
203
|
-
time: event.time,
|
|
204
|
-
request: request.signal,
|
|
205
|
-
parse: parse.signal,
|
|
206
|
-
transform: transform.signal,
|
|
207
|
-
beforeHandle: beforeHandle.signal,
|
|
208
|
-
handle: handle.signal,
|
|
209
|
-
afterHandle: afterHandle.signal,
|
|
210
|
-
error: error.signal,
|
|
211
|
-
response: response.signal
|
|
41
|
+
resolveStart({
|
|
42
|
+
children,
|
|
43
|
+
end,
|
|
44
|
+
name: trace.name ?? '',
|
|
45
|
+
skip: false,
|
|
46
|
+
time: trace.time
|
|
47
|
+
});
|
|
48
|
+
break;
|
|
49
|
+
case 'end':
|
|
50
|
+
resolveEnd(trace.time);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
consumeChild(trace) {
|
|
55
|
+
switch (trace.type) {
|
|
56
|
+
case 'begin':
|
|
57
|
+
if (!resolvers[0])
|
|
58
|
+
return;
|
|
59
|
+
const [resolveStart] = resolvers[0];
|
|
60
|
+
resolveStart({
|
|
61
|
+
children: [],
|
|
62
|
+
end,
|
|
63
|
+
name: trace.name ?? '',
|
|
64
|
+
skip: false,
|
|
65
|
+
time: trace.time
|
|
66
|
+
});
|
|
67
|
+
break;
|
|
68
|
+
case 'end':
|
|
69
|
+
const child = resolvers.shift();
|
|
70
|
+
if (!child)
|
|
71
|
+
return;
|
|
72
|
+
child[1](trace.time);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
resolve() {
|
|
76
|
+
resolveStart({
|
|
77
|
+
children: [],
|
|
78
|
+
end: new Promise((resolve) => resolve(0)),
|
|
79
|
+
name: '',
|
|
80
|
+
skip: true,
|
|
81
|
+
time: 0
|
|
212
82
|
});
|
|
213
|
-
|
|
83
|
+
for (const [resolveStart, resolveEnd] of resolvers) {
|
|
84
|
+
resolveStart({
|
|
85
|
+
children: [],
|
|
86
|
+
end: new Promise((resolve) => resolve(0)),
|
|
87
|
+
name: '',
|
|
88
|
+
skip: true,
|
|
89
|
+
time: 0
|
|
90
|
+
});
|
|
91
|
+
resolveEnd(0);
|
|
92
|
+
}
|
|
93
|
+
resolveEnd(0);
|
|
214
94
|
}
|
|
215
95
|
};
|
|
216
96
|
};
|
|
97
|
+
const createTraceListener = (getReporter, totalListener, handler) => {
|
|
98
|
+
return async function trace(trace) {
|
|
99
|
+
if (trace.event !== 'request' || trace.type !== 'begin')
|
|
100
|
+
return;
|
|
101
|
+
const id = trace.id;
|
|
102
|
+
const reporter = getReporter();
|
|
103
|
+
const request = createSignal();
|
|
104
|
+
const parse = createSignal();
|
|
105
|
+
const transform = createSignal();
|
|
106
|
+
const beforeHandle = createSignal();
|
|
107
|
+
const handle = createSignal();
|
|
108
|
+
const afterHandle = createSignal();
|
|
109
|
+
const error = createSignal();
|
|
110
|
+
const response = createSignal();
|
|
111
|
+
request.consume(trace);
|
|
112
|
+
const reducer = (event) => {
|
|
113
|
+
if (event.id === id)
|
|
114
|
+
switch (event.event) {
|
|
115
|
+
case 'request':
|
|
116
|
+
request.consume(event);
|
|
117
|
+
break;
|
|
118
|
+
case 'request.unit':
|
|
119
|
+
request.consumeChild(event);
|
|
120
|
+
break;
|
|
121
|
+
case 'parse':
|
|
122
|
+
parse.consume(event);
|
|
123
|
+
break;
|
|
124
|
+
case 'parse.unit':
|
|
125
|
+
parse.consumeChild(event);
|
|
126
|
+
break;
|
|
127
|
+
case 'transform':
|
|
128
|
+
transform.consume(event);
|
|
129
|
+
break;
|
|
130
|
+
case 'transform.unit':
|
|
131
|
+
transform.consumeChild(event);
|
|
132
|
+
break;
|
|
133
|
+
case 'beforeHandle':
|
|
134
|
+
beforeHandle.consume(event);
|
|
135
|
+
break;
|
|
136
|
+
case 'beforeHandle.unit':
|
|
137
|
+
beforeHandle.consumeChild(event);
|
|
138
|
+
break;
|
|
139
|
+
case 'handle':
|
|
140
|
+
handle.consume(event);
|
|
141
|
+
break;
|
|
142
|
+
case 'afterHandle':
|
|
143
|
+
afterHandle.consume(event);
|
|
144
|
+
break;
|
|
145
|
+
case 'afterHandle.unit':
|
|
146
|
+
afterHandle.consumeChild(event);
|
|
147
|
+
break;
|
|
148
|
+
case 'error':
|
|
149
|
+
error.consume(event);
|
|
150
|
+
break;
|
|
151
|
+
case 'error.unit':
|
|
152
|
+
error.consumeChild(event);
|
|
153
|
+
break;
|
|
154
|
+
case 'response':
|
|
155
|
+
if (event.type === 'begin') {
|
|
156
|
+
request.resolve();
|
|
157
|
+
parse.resolve();
|
|
158
|
+
transform.resolve();
|
|
159
|
+
beforeHandle.resolve();
|
|
160
|
+
handle.resolve();
|
|
161
|
+
afterHandle.resolve();
|
|
162
|
+
error.resolve();
|
|
163
|
+
}
|
|
164
|
+
else
|
|
165
|
+
reporter.off('event', reducer);
|
|
166
|
+
response.consume(event);
|
|
167
|
+
break;
|
|
168
|
+
case 'response.unit':
|
|
169
|
+
response.consumeChild(event);
|
|
170
|
+
break;
|
|
171
|
+
case 'exit':
|
|
172
|
+
request.resolve();
|
|
173
|
+
parse.resolve();
|
|
174
|
+
transform.resolve();
|
|
175
|
+
beforeHandle.resolve();
|
|
176
|
+
handle.resolve();
|
|
177
|
+
afterHandle.resolve();
|
|
178
|
+
error.resolve();
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
reporter.on('event', reducer);
|
|
183
|
+
await handler({
|
|
184
|
+
id,
|
|
185
|
+
// @ts-ignore
|
|
186
|
+
context: trace.ctx,
|
|
187
|
+
// @ts-ignore
|
|
188
|
+
set: trace.ctx?.set,
|
|
189
|
+
// @ts-ignore
|
|
190
|
+
store: trace.ctx?.store,
|
|
191
|
+
time: trace.time,
|
|
192
|
+
request: request.signal,
|
|
193
|
+
parse: parse.signal,
|
|
194
|
+
transform: transform.signal,
|
|
195
|
+
beforeHandle: beforeHandle.signal,
|
|
196
|
+
handle: handle.signal,
|
|
197
|
+
afterHandle: afterHandle.signal,
|
|
198
|
+
error: error.signal,
|
|
199
|
+
response: response.signal
|
|
200
|
+
});
|
|
201
|
+
reporter.emit(`res${id}.${totalListener}`, undefined);
|
|
202
|
+
};
|
|
203
|
+
};
|
|
217
204
|
exports.createTraceListener = createTraceListener;
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -165,7 +165,7 @@ export type VoidHandler<Route extends RouteSchema = {}, Decorators extends Decor
|
|
|
165
165
|
request: {};
|
|
166
166
|
store: {};
|
|
167
167
|
}> = (context: Prettify<Context<Route, Decorators>>) => MaybePromise<void>;
|
|
168
|
-
export type TraceEvent = 'request' | 'parse' | 'transform' | 'beforeHandle' | 'afterHandle' | 'error' | 'response' extends infer Events extends string ? Events | `${Events}.unit` | 'handle' : never;
|
|
168
|
+
export type TraceEvent = 'request' | 'parse' | 'transform' | 'beforeHandle' | 'afterHandle' | 'error' | 'response' extends infer Events extends string ? Events | `${Events}.unit` | 'handle' | 'exit' : never;
|
|
169
169
|
export type TraceStream = {
|
|
170
170
|
id: number;
|
|
171
171
|
event: TraceEvent;
|
|
@@ -175,7 +175,7 @@ export type TraceStream = {
|
|
|
175
175
|
unit?: number;
|
|
176
176
|
};
|
|
177
177
|
export type TraceReporter = EventEmitter<{
|
|
178
|
-
[res in `res${number}`]: undefined;
|
|
178
|
+
[res in `res${number}.${number}`]: undefined;
|
|
179
179
|
} & {
|
|
180
180
|
event(stream: TraceStream): MaybePromise<void>;
|
|
181
181
|
}>;
|
package/dist/cjs/utils.js
CHANGED
|
@@ -182,7 +182,11 @@ const mergeLifeCycle = (a, b, checksum) => {
|
|
|
182
182
|
beforeHandle: (0, exports.mergeObjectArray)(a.beforeHandle, (b?.beforeHandle ?? []).map(injectChecksum)),
|
|
183
183
|
afterHandle: (0, exports.mergeObjectArray)(a.afterHandle, (b?.afterHandle ?? []).map(injectChecksum)),
|
|
184
184
|
onResponse: (0, exports.mergeObjectArray)(a.onResponse, (b?.onResponse ?? []).map(injectChecksum)),
|
|
185
|
-
trace:
|
|
185
|
+
trace: a.trace,
|
|
186
|
+
// trace: mergeObjectArray(
|
|
187
|
+
// a.trace as any,
|
|
188
|
+
// ('trace' in b ? b.trace ?? [] : ([] as any)).map(injectChecksum)
|
|
189
|
+
// ),
|
|
186
190
|
error: (0, exports.mergeObjectArray)(a.error, (b?.error ?? []).map(injectChecksum)),
|
|
187
191
|
stop: (0, exports.mergeObjectArray)(a.stop, ('stop' in b ? b.stop ?? [] : []).map(injectChecksum))
|
|
188
192
|
};
|
package/dist/compose.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import{parse as e}from"fast-querystring";import{signCookie as t}from"./utils";import{mapEarlyResponse as r,mapResponse as s,mapCompactResponse as n,isNotEmpty as o}from"./handler";import{NotFoundError as a,ValidationError as i,InternalServerError as c,ERROR_CODE as l}from"./error";import{parseCookie as f}from"./cookie";let u=new Headers().toJSON,d=RegExp(" (\\w+) = context","g"),p={value:0},m=({hasTrace:e,hasTraceSet:t=!1,addFn:r,condition:s={}})=>(r(`
|
|
2
2
|
const reporter = getReporter()
|
|
3
|
-
`),e)?(e,{name:n,attribute:o="",unit:a=0}={})=>{let i=e.indexOf("."),c=-1===i;if("request"!==e&&"response"!==e&&!s[c?e:e.slice(0,i)])return()=>{t&&"afterHandle"===e&&
|
|
3
|
+
`),e)?(e,{name:n,attribute:o="",unit:a=0}={})=>{let i=e.indexOf("."),c=-1===i;if("request"!==e&&"response"!==e&&!s[c?e:e.slice(0,i)])return()=>{t&&"afterHandle"===e&&(r("reporter.emit('event',{id,event:'exit',type:'begin',time:0})"),r(`
|
|
4
|
+
await traceDone
|
|
5
|
+
`))};c?n||=e:n||="anonymous",r("\n"+`reporter.emit('event', {
|
|
4
6
|
id,
|
|
5
7
|
event: '${e}',
|
|
6
8
|
type: 'begin',
|
|
@@ -13,7 +15,9 @@ const reporter = getReporter()
|
|
|
13
15
|
event: '${e}',
|
|
14
16
|
type: 'end',
|
|
15
17
|
time: performance.now()
|
|
16
|
-
})`.replace(/(\t| |\n)/g,"")+"\n"),t&&"afterHandle"===e&&r(
|
|
18
|
+
})`.replace(/(\t| |\n)/g,"")+"\n"),t&&"afterHandle"===e&&(r(`
|
|
19
|
+
reporter.emit('event',{id,event:'exit',type:'begin',time:0})
|
|
20
|
+
`),r("\nawait traceDone\n")))}}:()=>()=>{};export const hasReturn=e=>{let t=e.indexOf(")");return(// Is direct arrow function return eg. () => 1
|
|
17
21
|
61===e.charCodeAt(t+2)&&123!==e.charCodeAt(t+5)||e.includes("return"))};let h=(e,{injectResponse:t=""}={})=>({composeValidation:(t,r=`c.${t}`)=>e?`c.set.status = 400; throw new ValidationError(
|
|
18
22
|
'${t}',
|
|
19
23
|
${t},
|
|
@@ -57,7 +61,7 @@ if(t.match(RegExp(`${r}(.${e}|\\["${e}"\\])`)))return!0;let n=-1!==s?r.slice(s+3
|
|
|
57
61
|
* ```
|
|
58
62
|
*/let b=e=>{if(!e)return;// @ts-ignore
|
|
59
63
|
let t=e?.schema;if(t&&"anyOf"in t){let e=!1,r=t.anyOf[0].type;for(let s of t.anyOf)if(s.type!==r){e=!0;break}if(!e)return r}// @ts-ignore
|
|
60
|
-
return e.schema?.type},k=/(?:return|=>) \S*\(/g;export const isAsync=e=>"AsyncFunction"===e.constructor.name||e.toString().match(k);export const composeHandler=({path:d,method:$,hooks:g,validator:k,handler:w,handleError:
|
|
64
|
+
return e.schema?.type},k=/(?:return|=>) \S*\(/g;export const isAsync=e=>"AsyncFunction"===e.constructor.name||e.toString().match(k);export const composeHandler=({path:d,method:$,hooks:g,validator:k,handler:w,handleError:x,definitions:R,schema:q,onRequest:H,config:v,getReporter:E})=>{let O=v.forceErrorEncapsulation||g.error.length>0||"undefined"==typeof Bun||g.onResponse.length>0||!!g.trace.length,A=g.onResponse.length?`
|
|
61
65
|
;(async () => {${g.onResponse.map((e,t)=>`await res${t}(c)`).join(";")}})();
|
|
62
66
|
`:"",C=g.trace.map(e=>e.toString()),F=!1;if(y(w.toString())&&(F=!0),!F){for(let[e,t]of Object.entries(g))if(Array.isArray(t)&&t.length&&["parse","transform","beforeHandle","afterHandle","onResponse"].includes(e)){for(let e of t)if("function"==typeof e&&y(e.toString())){F=!0;break}if(F)break}}let j={parse:C.some(e=>isFnUse("parse",e)),transform:C.some(e=>isFnUse("transform",e)),handle:C.some(e=>isFnUse("handle",e)),beforeHandle:C.some(e=>isFnUse("beforeHandle",e)),afterHandle:C.some(e=>isFnUse("afterHandle",e)),error:O||C.some(e=>isFnUse("error",e))},T=g.trace.length>0,S="",U=k||"GET"!==$&&"HEAD"!==$?[w,...g.transform,...g.beforeHandle,...g.afterHandle].map(e=>e.toString()):[],D=F||"GET"!==$&&"HEAD"!==$&&"none"!==g.type&&(!!k.body||!!g.type||U.some(e=>isFnUse("body",e))),V=F||k.headers||U.some(e=>isFnUse("headers",e)),N=F||k.cookie||U.some(e=>isFnUse("cookie",e)),_=k?.cookie?.schema,I="";if(_?.sign){if(!_.secrets)throw Error(`t.Cookie required secret which is not set in (${$}) ${d}.`);let e=_.secrets?"string"==typeof _.secrets?_.secrets:_.secrets[0]:void 0;if(I+=`const _setCookie = c.set.cookie
|
|
63
67
|
if(_setCookie) {`,!0===_.sign)// encodeCookie += `if(_setCookie['${name}']?.value) { c.set.cookie['${name}'].value = await signCookie(_setCookie['${name}'].value, '${secret}') }\n`
|
|
@@ -87,14 +91,17 @@ let r=_?.[e]??t;return r?"string"==typeof r?`${e}: '${r}',`:r instanceof Date?`$
|
|
|
87
91
|
c.cookie = await parseCookie(c.set, c.headers.cookie, ${t})
|
|
88
92
|
`:S+=`
|
|
89
93
|
c.cookie = await parseCookie(c.set, c.request.headers.get('cookie'), ${t})
|
|
90
|
-
`}let
|
|
94
|
+
`}let P=F||k.query||U.some(e=>isFnUse("query",e));P&&(S+=`const url = c.request.url
|
|
91
95
|
|
|
92
96
|
if(c.qi !== -1) {
|
|
93
97
|
c.query ??= parseQuery(url.substring(c.qi + 1))
|
|
94
98
|
} else {
|
|
95
99
|
c.query ??= {}
|
|
96
100
|
}
|
|
97
|
-
`);let
|
|
101
|
+
`);let G=g.trace.map(e=>e.toString()),L=G.some(e=>isFnUse("set",e)||y(e));F||g.trace.some(e=>isFnUse("set",e.toString()));let Q=L||N||U.some(e=>isFnUse("set",e))||H.some(e=>isFnUse("set",e.toString()));T&&(S+="\nconst id = c.$$requestId\n");let K=m({hasTrace:T,hasTraceSet:L,condition:j,addFn:e=>{S+=e}});if(S+=O?"try {\n":"",T){// fnLiteral += `\nconst traceDone = new Promise(r => r())\n`
|
|
102
|
+
S+=`
|
|
103
|
+
const traceDone = Promise.all([`;for(let e=0;e<g.trace.length;e++)S+=`new Promise(r => { reporter.once(\`res\${id}.${e}\`, r) }),`;S+=`])
|
|
104
|
+
`}let J=N||D||L||isAsync(w)||g.parse.length>0||g.afterHandle.some(isAsync)||g.beforeHandle.some(isAsync)||g.transform.some(isAsync),z=K("parse",{unit:g.parse.length});if(D){let e=b(k?.body);if(g.type&&!Array.isArray(g.type)){if(g.type)switch(g.type){case"json":case"application/json":S+=`c.body = await c.request.json()
|
|
98
105
|
`;break;case"text":case"text/plain":S+=`c.body = await c.request.text()
|
|
99
106
|
`;break;case"urlencoded":case"application/x-www-form-urlencoded":S+=`c.body = parseQuery(await c.request.text())
|
|
100
107
|
`;break;case"arrayBuffer":case"application/octet-stream":S+=`c.body = await c.request.arrayBuffer()
|
|
@@ -212,9 +219,8 @@ c.cookie = params.Decode(c.cookie)
|
|
|
212
219
|
`:S+=isAsync(g.afterHandle[e])?`let ${r} = mapEarlyResponse(await afterHandle[${e}](c), c.set)
|
|
213
220
|
`:`let ${r} = mapEarlyResponse(afterHandle[${e}](c), c.set)
|
|
214
221
|
`,n(),k.response?(S+=`if(${r} !== undefined) {`+W(r)+`${r} = mapEarlyResponse(${r}, c.set)
|
|
215
|
-
`+`if(${r}) {`,t(),
|
|
216
|
-
`),S+=`return ${r} } }`):(S+=`if(${r}) {`,t(),
|
|
217
|
-
`),S+=`return ${r}}
|
|
222
|
+
`+`if(${r}) {`,t(),L&&(S+=`${r} = mapEarlyResponse(${r}, c.set)
|
|
223
|
+
`),S+=`return ${r} } }`):(S+=`if(${r}) {`,t(),S+=`return ${r}}
|
|
218
224
|
`)):(S+=isAsync(g.afterHandle[e])?`await afterHandle[${e}](c)
|
|
219
225
|
`:`afterHandle[${e}](c)
|
|
220
226
|
`,n())}t(),S+=`r = c.response
|
|
@@ -246,8 +252,7 @@ let ${t} = handleErrors[${e}](
|
|
|
246
252
|
if (${t}) {return ${t} }
|
|
247
253
|
`}if(e(),S+=`return handleError(c, error)
|
|
248
254
|
|
|
249
|
-
`,J||(S+="})()"),S+="}",A||T){S+=" finally { ";let e=K("response",{unit:g.onResponse.length});S+=A,e(),S+="}"}}
|
|
250
|
-
S=`const {
|
|
255
|
+
`,J||(S+="})()"),S+="}",A||T){S+=" finally { ";let e=K("response",{unit:g.onResponse.length});S+=A,e(),S+="}"}}S=`const {
|
|
251
256
|
handler,
|
|
252
257
|
handleError,
|
|
253
258
|
hooks: {
|
|
@@ -289,9 +294,9 @@ S=`const {
|
|
|
289
294
|
${g.onResponse.length?`const ${g.onResponse.map((e,t)=>`res${t} = onResponse[${t}]`).join(",")}`:""}
|
|
290
295
|
|
|
291
296
|
return ${J?"async":""} function(c) {
|
|
292
|
-
${q&&
|
|
297
|
+
${q&&R?"c.schema = schema; c.defs = definitions;":""}
|
|
293
298
|
${S}
|
|
294
|
-
}`;let M=Function("hooks",S);return M({handler:w,hooks:g,validator:k,handleError:
|
|
299
|
+
}`;let M=Function("hooks",S);return M({handler:w,hooks:g,validator:k,handleError:x,utils:{mapResponse:s,mapCompactResponse:n,mapEarlyResponse:r,parseQuery:e},error:{NotFoundError:a,ValidationError:i,InternalServerError:c},schema:q,definitions:R,ERROR_CODE:l,getReporter:E,requestId:p,parseCookie:f,signCookie:t})};export const composeGeneralHandler=e=>{let t="",s="";// @ts-ignore
|
|
295
300
|
for(let r of Object.keys(e.decorators))t+=`,${r}: app.decorators.${r}`;// @ts-ignore
|
|
296
301
|
let{router:n,staticRouter:o}=e,i=e.event.trace.length>0,c=`
|
|
297
302
|
const route = find(request.method, path) ${n.root.ALL?'?? find("ALL", path)':""}
|
package/dist/index.d.ts
CHANGED
|
@@ -980,5 +980,5 @@ export { Cookie, type CookieOptions } from './cookie';
|
|
|
980
980
|
export { getSchemaValidator, mergeDeep, mergeHook, mergeObjectArray, getResponseSchemaValidator } from './utils';
|
|
981
981
|
export { ParseError, NotFoundError, ValidationError, InternalServerError, InvalidCookieSignature } from './error';
|
|
982
982
|
export type { Context, PreContext } from './context';
|
|
983
|
-
export type { ElysiaConfig, DecoratorBase, DefinitionBase, RouteBase, Handler, ComposedHandler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, SchemaValidator, VoidHandler, PreHandler, BodyHandler, OptionalHandler, ErrorHandler, AfterHandler,
|
|
983
|
+
export type { ElysiaConfig, DecoratorBase, DefinitionBase, RouteBase, Handler, ComposedHandler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, SchemaValidator, VoidHandler, PreHandler, BodyHandler, OptionalHandler, ErrorHandler, AfterHandler, LifeCycleEvent, TraceEvent, LifeCycleStore, MaybePromise, ListenCallback, UnwrapSchema, TraceHandler, TraceProcess, TraceReporter, TraceStream } from './types';
|
|
984
984
|
export type { Static } from '@sinclair/typebox';
|
package/dist/index.js
CHANGED
|
@@ -139,7 +139,7 @@ ${this.staticRouter.map[v].code}`)}else this.router.add(e,h,y),this.config.stric
|
|
|
139
139
|
* return JSON.stringify(response)
|
|
140
140
|
* })
|
|
141
141
|
* ```
|
|
142
|
-
*/trace(e){return this.reporter.on("event",r(()=>this.reporter,e)),this.on("trace",e),this}addError(// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
142
|
+
*/trace(e){return this.reporter.on("event",r(()=>this.reporter,this.event.trace.length,e)),this.on("trace",e),this}addError(// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
143
143
|
e,// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
144
144
|
t){return this.error(e,t)}error(// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
145
145
|
e,// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
package/dist/trace.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { TraceHandler, TraceReporter, TraceStream } from './types';
|
|
2
|
-
export declare const createTraceListener: (getReporter: () => TraceReporter, handler: TraceHandler<any, any>) => (
|
|
2
|
+
export declare const createTraceListener: (getReporter: () => TraceReporter, totalListener: number, handler: TraceHandler<any, any>) => (trace: TraceStream) => Promise<void>;
|