@adviser/cement 0.5.12 → 0.5.14
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/cjs/base-basic-sys-abstraction.test.cjs +1 -2
- package/cjs/base-basic-sys-abstraction.test.cjs.map +1 -1
- package/cjs/base-service.cjs +67 -0
- package/cjs/base-service.cjs.map +1 -0
- package/cjs/base-service.d.ts +27 -0
- package/cjs/base-service.d.ts.map +1 -0
- package/cjs/base-sys-abstraction.cjs +6 -49
- package/cjs/base-sys-abstraction.cjs.map +1 -1
- package/cjs/base-sys-abstraction.d.ts +2 -14
- package/cjs/base-sys-abstraction.d.ts.map +1 -1
- package/cjs/evento.cjs +104 -20
- package/cjs/evento.cjs.map +1 -1
- package/cjs/evento.d.ts +51 -7
- package/cjs/evento.d.ts.map +1 -1
- package/cjs/evento.test.cjs +139 -24
- package/cjs/evento.test.cjs.map +1 -1
- package/cjs/index.cjs +1 -0
- package/cjs/index.cjs.map +1 -1
- package/cjs/index.d.ts +1 -0
- package/cjs/index.d.ts.map +1 -1
- package/cjs/sys-abstraction.cjs +1 -11
- package/cjs/sys-abstraction.cjs.map +1 -1
- package/cjs/sys-abstraction.d.ts +0 -12
- package/cjs/sys-abstraction.d.ts.map +1 -1
- package/cjs/version.cjs +1 -1
- package/deno.json +1 -1
- package/esm/base-basic-sys-abstraction.test.js +2 -3
- package/esm/base-basic-sys-abstraction.test.js.map +1 -1
- package/esm/base-service.d.ts +27 -0
- package/esm/base-service.d.ts.map +1 -0
- package/esm/base-service.js +62 -0
- package/esm/base-service.js.map +1 -0
- package/esm/base-sys-abstraction.d.ts +2 -14
- package/esm/base-sys-abstraction.d.ts.map +1 -1
- package/esm/base-sys-abstraction.js +6 -47
- package/esm/base-sys-abstraction.js.map +1 -1
- package/esm/evento.d.ts +51 -7
- package/esm/evento.d.ts.map +1 -1
- package/esm/evento.js +101 -19
- package/esm/evento.js.map +1 -1
- package/esm/evento.test.js +140 -25
- package/esm/evento.test.js.map +1 -1
- package/esm/index.d.ts +1 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/esm/sys-abstraction.d.ts +0 -12
- package/esm/sys-abstraction.d.ts.map +1 -1
- package/esm/sys-abstraction.js +0 -10
- package/esm/sys-abstraction.js.map +1 -1
- package/esm/version.js +1 -1
- package/package.json +1 -1
- package/src/base-service.ts +129 -0
- package/src/base-sys-abstraction.ts +6 -118
- package/src/evento.ts +159 -45
- package/src/index.ts +1 -0
- package/src/sys-abstraction.ts +0 -14
- package/ts/cjs/base-basic-sys-abstraction.test.js +1 -2
- package/ts/cjs/base-basic-sys-abstraction.test.js.map +1 -1
- package/ts/cjs/base-service.d.ts +27 -0
- package/ts/cjs/base-service.d.ts.map +1 -0
- package/ts/cjs/base-service.js +67 -0
- package/ts/cjs/base-service.js.map +1 -0
- package/ts/cjs/base-sys-abstraction.d.ts +2 -14
- package/ts/cjs/base-sys-abstraction.d.ts.map +1 -1
- package/ts/cjs/base-sys-abstraction.js +6 -49
- package/ts/cjs/base-sys-abstraction.js.map +1 -1
- package/ts/cjs/evento.d.ts +51 -7
- package/ts/cjs/evento.d.ts.map +1 -1
- package/ts/cjs/evento.js +104 -20
- package/ts/cjs/evento.js.map +1 -1
- package/ts/cjs/evento.test.js +139 -24
- package/ts/cjs/evento.test.js.map +1 -1
- package/ts/cjs/index.d.ts +1 -0
- package/ts/cjs/index.d.ts.map +1 -1
- package/ts/cjs/index.js +1 -0
- package/ts/cjs/index.js.map +1 -1
- package/ts/cjs/sys-abstraction.d.ts +0 -12
- package/ts/cjs/sys-abstraction.d.ts.map +1 -1
- package/ts/cjs/sys-abstraction.js +1 -11
- package/ts/cjs/sys-abstraction.js.map +1 -1
- package/ts/cjs/version.js +1 -1
- package/ts/esm/base-basic-sys-abstraction.test.js +2 -3
- package/ts/esm/base-basic-sys-abstraction.test.js.map +1 -1
- package/ts/esm/base-service.d.ts +27 -0
- package/ts/esm/base-service.d.ts.map +1 -0
- package/ts/esm/base-service.js +62 -0
- package/ts/esm/base-service.js.map +1 -0
- package/ts/esm/base-sys-abstraction.d.ts +2 -14
- package/ts/esm/base-sys-abstraction.d.ts.map +1 -1
- package/ts/esm/base-sys-abstraction.js +6 -47
- package/ts/esm/base-sys-abstraction.js.map +1 -1
- package/ts/esm/evento.d.ts +51 -7
- package/ts/esm/evento.d.ts.map +1 -1
- package/ts/esm/evento.js +101 -19
- package/ts/esm/evento.js.map +1 -1
- package/ts/esm/evento.test.js +140 -25
- package/ts/esm/evento.test.js.map +1 -1
- package/ts/esm/index.d.ts +1 -0
- package/ts/esm/index.d.ts.map +1 -1
- package/ts/esm/index.js +1 -0
- package/ts/esm/index.js.map +1 -1
- package/ts/esm/sys-abstraction.d.ts +0 -12
- package/ts/esm/sys-abstraction.d.ts.map +1 -1
- package/ts/esm/sys-abstraction.js +0 -10
- package/ts/esm/sys-abstraction.js.map +1 -1
- package/ts/esm/version.js +1 -1
package/ts/esm/evento.js
CHANGED
|
@@ -1,7 +1,47 @@
|
|
|
1
1
|
import { AppContext } from "./app-context.js";
|
|
2
|
+
import { IdService } from "./base-service.js";
|
|
2
3
|
import { Option } from "./option.js";
|
|
3
4
|
import { ResolveOnce } from "./resolve-once.js";
|
|
4
5
|
import { exception2Result, Result } from "./result.js";
|
|
6
|
+
export class EventoSend {
|
|
7
|
+
provider;
|
|
8
|
+
constructor(provider) {
|
|
9
|
+
this.provider = provider;
|
|
10
|
+
}
|
|
11
|
+
start(trigger) {
|
|
12
|
+
trigger.stats.send.startTime = new Date();
|
|
13
|
+
if (this.provider.start) {
|
|
14
|
+
return this.provider.start(trigger);
|
|
15
|
+
}
|
|
16
|
+
return Promise.resolve(Result.Ok());
|
|
17
|
+
}
|
|
18
|
+
done(trigger) {
|
|
19
|
+
trigger.stats.send.doneTime = new Date();
|
|
20
|
+
if (this.provider.done) {
|
|
21
|
+
return this.provider.done(trigger);
|
|
22
|
+
}
|
|
23
|
+
return Promise.resolve(Result.Ok());
|
|
24
|
+
}
|
|
25
|
+
async send(trigger, data) {
|
|
26
|
+
const start = new Date();
|
|
27
|
+
const rSend = await this.provider.send(trigger, data);
|
|
28
|
+
const done = new Date();
|
|
29
|
+
const item = {
|
|
30
|
+
startTime: start,
|
|
31
|
+
doneTime: done,
|
|
32
|
+
item: rSend,
|
|
33
|
+
};
|
|
34
|
+
trigger.stats.send.items.push(item);
|
|
35
|
+
return Result.Ok(item);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class TriggerResultError extends Error {
|
|
39
|
+
ctx;
|
|
40
|
+
constructor(message, ctx) {
|
|
41
|
+
super(message);
|
|
42
|
+
this.ctx = ctx;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
5
45
|
export const EventoResult = {
|
|
6
46
|
Continue: "continue",
|
|
7
47
|
Stop: "stop",
|
|
@@ -95,19 +135,40 @@ export class Evento {
|
|
|
95
135
|
});
|
|
96
136
|
}
|
|
97
137
|
async trigger(ictx) {
|
|
98
|
-
let stepCtx =
|
|
138
|
+
let stepCtx = null;
|
|
99
139
|
const toPost = [];
|
|
100
140
|
const startOnce = new ResolveOnce();
|
|
101
141
|
const res = await exception2Result(async () => {
|
|
142
|
+
const nullDate = new Date(0);
|
|
102
143
|
const ctx = {
|
|
103
144
|
...ictx,
|
|
104
145
|
encoder: ictx.encoder ?? this.encoder,
|
|
146
|
+
stats: ictx.stats ?? {
|
|
147
|
+
request: {
|
|
148
|
+
startTime: new Date(),
|
|
149
|
+
doneTime: nullDate,
|
|
150
|
+
},
|
|
151
|
+
encode: {
|
|
152
|
+
startTime: nullDate,
|
|
153
|
+
doneTime: nullDate,
|
|
154
|
+
},
|
|
155
|
+
handlers: [],
|
|
156
|
+
send: {
|
|
157
|
+
startTime: nullDate,
|
|
158
|
+
doneTime: nullDate,
|
|
159
|
+
items: [],
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
send: new EventoSend(ictx.send),
|
|
105
163
|
ctx: ictx.ctx ?? new AppContext(),
|
|
164
|
+
id: (ictx.idService ?? IdService.create()).NextId(),
|
|
106
165
|
};
|
|
107
166
|
stepCtx = ctx;
|
|
108
167
|
const results = [];
|
|
109
168
|
if (!ctx.enRequest) {
|
|
169
|
+
ctx.stats.encode.startTime = new Date();
|
|
110
170
|
const rUnk = await this.encoder.encode(ctx.request);
|
|
171
|
+
ctx.stats.encode.doneTime = new Date();
|
|
111
172
|
if (rUnk.isErr()) {
|
|
112
173
|
return Result.Err(rUnk);
|
|
113
174
|
}
|
|
@@ -129,8 +190,27 @@ export class Evento {
|
|
|
129
190
|
if (hdl.post) {
|
|
130
191
|
toPost.push(hdl);
|
|
131
192
|
}
|
|
193
|
+
const stat = {
|
|
194
|
+
handler: hdl,
|
|
195
|
+
total: {
|
|
196
|
+
startTime: new Date(),
|
|
197
|
+
doneTime: nullDate,
|
|
198
|
+
},
|
|
199
|
+
validated: {
|
|
200
|
+
startTime: nullDate,
|
|
201
|
+
doneTime: nullDate,
|
|
202
|
+
},
|
|
203
|
+
handled: {
|
|
204
|
+
startTime: nullDate,
|
|
205
|
+
doneTime: nullDate,
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
ctx.stats.handlers.push(stat);
|
|
209
|
+
stat.validated.startTime = new Date();
|
|
132
210
|
const rData = await Promise.resolve(hdl.validate ? hdl.validate(validateCtx) : Result.Ok(Option.Some(ctx.enRequest)));
|
|
211
|
+
stat.validated.doneTime = new Date();
|
|
133
212
|
if (rData.isErr()) {
|
|
213
|
+
stat.total.doneTime = new Date();
|
|
134
214
|
return Result.Err(rData);
|
|
135
215
|
}
|
|
136
216
|
const data = rData.Ok();
|
|
@@ -143,19 +223,22 @@ export class Evento {
|
|
|
143
223
|
request: ctx.request,
|
|
144
224
|
enRequest: ctx.enRequest,
|
|
145
225
|
});
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return Result.Err(rv);
|
|
150
|
-
}
|
|
151
|
-
return Result.Ok(hdlCtx);
|
|
152
|
-
}));
|
|
153
|
-
if (rStart.isErr()) {
|
|
154
|
-
return Result.Err(rStart);
|
|
226
|
+
const rStart = await startOnce.once(() => ctx.send.start(hdlCtx).then((rv) => {
|
|
227
|
+
if (rv.isErr()) {
|
|
228
|
+
return Result.Err(rv);
|
|
155
229
|
}
|
|
230
|
+
return Result.Ok(hdlCtx);
|
|
231
|
+
}));
|
|
232
|
+
if (rStart.isErr()) {
|
|
233
|
+
stat.total.doneTime = new Date();
|
|
234
|
+
return Result.Err(rStart);
|
|
156
235
|
}
|
|
236
|
+
stat.handled.startTime = new Date();
|
|
157
237
|
const rHandle = await hdl.handle(hdlCtx);
|
|
238
|
+
stat.handled.doneTime = new Date();
|
|
239
|
+
stat.total.doneTime = new Date();
|
|
158
240
|
if (rHandle.isErr()) {
|
|
241
|
+
stat.total.doneTime = new Date();
|
|
159
242
|
return Result.Err(rHandle);
|
|
160
243
|
}
|
|
161
244
|
results.push(hdl.hash);
|
|
@@ -165,10 +248,10 @@ export class Evento {
|
|
|
165
248
|
}
|
|
166
249
|
return Result.Ok(results);
|
|
167
250
|
});
|
|
251
|
+
if (!stepCtx) {
|
|
252
|
+
throw new Error("Internal error: stepCtx is null");
|
|
253
|
+
}
|
|
168
254
|
for (const hdl of toPost) {
|
|
169
|
-
if (res.isOk()) {
|
|
170
|
-
stepCtx.triggerResult = res.Ok();
|
|
171
|
-
}
|
|
172
255
|
await exception2Result(() => hdl.post(stepCtx));
|
|
173
256
|
}
|
|
174
257
|
if (res.isErr()) {
|
|
@@ -177,13 +260,12 @@ export class Evento {
|
|
|
177
260
|
await exception2Result(() => hdl.handle(stepCtx));
|
|
178
261
|
}
|
|
179
262
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
263
|
+
if (startOnce.value?.isOk()) {
|
|
264
|
+
const ctx = startOnce.value.Ok();
|
|
265
|
+
ctx.stats.request.doneTime = new Date();
|
|
266
|
+
await startOnce.value.Ok().send.done(ctx);
|
|
185
267
|
}
|
|
186
|
-
return
|
|
268
|
+
return Result.Ok(stepCtx);
|
|
187
269
|
}
|
|
188
270
|
}
|
|
189
271
|
//# sourceMappingURL=evento.js.map
|
package/ts/esm/evento.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evento.js","sourceRoot":"","sources":["../../../src/evento.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"evento.js","sourceRoot":"","sources":["../../../src/evento.ts"],"names":[],"mappings":"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"}
|
package/ts/esm/evento.test.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
-
import { Evento, EventoResult, EventoOp, EventoType, } from "./evento.js";
|
|
2
|
+
import { Evento, EventoResult, EventoOp, EventoType, EventoSend, } from "./evento.js";
|
|
3
3
|
import { Result } from "./result.js";
|
|
4
4
|
import { Option } from "./option.js";
|
|
5
|
+
import { sleep } from "./promise-sleep.js";
|
|
5
6
|
class ReqResEventoEnDecoder {
|
|
6
7
|
async encode(args) {
|
|
7
8
|
const body = (await args.json());
|
|
@@ -136,6 +137,7 @@ describe("Evento", () => {
|
|
|
136
137
|
const reqRes = new ReqResEventoEnDecoder();
|
|
137
138
|
const evo = new Evento(reqRes);
|
|
138
139
|
const send = new TestSend();
|
|
140
|
+
const sendEvent = new EventoSend(send);
|
|
139
141
|
evo.push({
|
|
140
142
|
type: EventoType.WildCard,
|
|
141
143
|
hash: "wildcard-handler-first",
|
|
@@ -157,7 +159,8 @@ describe("Evento", () => {
|
|
|
157
159
|
req: ctx.validated,
|
|
158
160
|
})
|
|
159
161
|
.then((rv) => {
|
|
160
|
-
const
|
|
162
|
+
const { item } = rv.Ok();
|
|
163
|
+
const v = item.Ok();
|
|
161
164
|
let ret = Result.Ok(EventoResult.Continue);
|
|
162
165
|
if (v.req.stop) {
|
|
163
166
|
ret = Result.Ok(EventoResult.Stop);
|
|
@@ -188,7 +191,7 @@ describe("Evento", () => {
|
|
|
188
191
|
req: ctx.validated,
|
|
189
192
|
})
|
|
190
193
|
.then((rv) => {
|
|
191
|
-
const v = rv.Ok();
|
|
194
|
+
const { item: v } = rv.Ok();
|
|
192
195
|
const ret = Result.Ok(EventoResult.Continue);
|
|
193
196
|
send.fn("wildcard-second-handle", ctx, v, ret);
|
|
194
197
|
return ret;
|
|
@@ -215,7 +218,8 @@ describe("Evento", () => {
|
|
|
215
218
|
req: ctx.validated,
|
|
216
219
|
})
|
|
217
220
|
.then((rv) => {
|
|
218
|
-
const
|
|
221
|
+
const { item } = rv.Ok();
|
|
222
|
+
const v = item.Ok();
|
|
219
223
|
let ret = Result.Ok(EventoResult.Continue);
|
|
220
224
|
if (v.req.stop) {
|
|
221
225
|
ret = Result.Ok(EventoResult.Stop);
|
|
@@ -245,7 +249,8 @@ describe("Evento", () => {
|
|
|
245
249
|
req: ctx.validated,
|
|
246
250
|
})
|
|
247
251
|
.then((rv) => {
|
|
248
|
-
const
|
|
252
|
+
const { item } = rv.Ok();
|
|
253
|
+
const v = item.Ok();
|
|
249
254
|
const ret = Result.Ok(EventoResult.Continue);
|
|
250
255
|
send.fn("regular-second-handle", ctx, v, ret);
|
|
251
256
|
return ret;
|
|
@@ -278,10 +283,11 @@ describe("Evento", () => {
|
|
|
278
283
|
"wildcard-first-validate",
|
|
279
284
|
expect.objectContaining({
|
|
280
285
|
ctx: expect.anything(),
|
|
286
|
+
stats: expect.anything(),
|
|
281
287
|
enRequest: { x: 1 },
|
|
282
288
|
encoder: reqRes,
|
|
283
289
|
request,
|
|
284
|
-
send,
|
|
290
|
+
send: sendEvent,
|
|
285
291
|
}),
|
|
286
292
|
Result.Ok(Option.Some({ validated: true, x: 1, step: "wildcard-first" })),
|
|
287
293
|
]);
|
|
@@ -289,10 +295,11 @@ describe("Evento", () => {
|
|
|
289
295
|
"wildcard-first-handle",
|
|
290
296
|
expect.objectContaining({
|
|
291
297
|
ctx: expect.anything(),
|
|
298
|
+
stats: expect.anything(),
|
|
292
299
|
enRequest: { x: 1 },
|
|
293
300
|
encoder: reqRes,
|
|
294
301
|
request,
|
|
295
|
-
send,
|
|
302
|
+
send: sendEvent,
|
|
296
303
|
validated: { validated: true, x: 1, step: "wildcard-first" },
|
|
297
304
|
}),
|
|
298
305
|
{
|
|
@@ -310,10 +317,11 @@ describe("Evento", () => {
|
|
|
310
317
|
"wildcard-second-validate",
|
|
311
318
|
expect.objectContaining({
|
|
312
319
|
ctx: expect.anything(),
|
|
320
|
+
stats: expect.anything(),
|
|
313
321
|
enRequest: { x: 1 },
|
|
314
322
|
encoder: reqRes,
|
|
315
323
|
request,
|
|
316
|
-
send,
|
|
324
|
+
send: sendEvent,
|
|
317
325
|
}),
|
|
318
326
|
Result.Ok(Option.Some({ validated: true, x: 1, step: "wildcard-second" })),
|
|
319
327
|
]);
|
|
@@ -321,13 +329,14 @@ describe("Evento", () => {
|
|
|
321
329
|
"wildcard-second-handle",
|
|
322
330
|
expect.objectContaining({
|
|
323
331
|
ctx: expect.anything(),
|
|
332
|
+
stats: expect.anything(),
|
|
324
333
|
enRequest: { x: 1 },
|
|
325
334
|
encoder: reqRes,
|
|
326
335
|
request,
|
|
327
|
-
send,
|
|
336
|
+
send: sendEvent,
|
|
328
337
|
validated: { validated: true, x: 1, step: "wildcard-second" },
|
|
329
338
|
}),
|
|
330
|
-
{
|
|
339
|
+
Result.Ok({
|
|
331
340
|
encoderInfo: "test-encoder",
|
|
332
341
|
req: {
|
|
333
342
|
step: "wildcard-second",
|
|
@@ -335,7 +344,7 @@ describe("Evento", () => {
|
|
|
335
344
|
x: 1,
|
|
336
345
|
},
|
|
337
346
|
response: "ok",
|
|
338
|
-
},
|
|
347
|
+
}),
|
|
339
348
|
Result.Ok(EventoResult.Continue),
|
|
340
349
|
]);
|
|
341
350
|
});
|
|
@@ -358,10 +367,11 @@ describe("Evento", () => {
|
|
|
358
367
|
"wildcard-first-validate",
|
|
359
368
|
expect.objectContaining({
|
|
360
369
|
ctx: expect.anything(),
|
|
370
|
+
stats: expect.anything(),
|
|
361
371
|
enRequest: { x: 1, stop: true },
|
|
362
372
|
encoder: reqRes,
|
|
363
373
|
request,
|
|
364
|
-
send,
|
|
374
|
+
send: sendEvent,
|
|
365
375
|
}),
|
|
366
376
|
Result.Ok(Option.Some({ validated: true, x: 1, stop: true, step: "wildcard-first" })),
|
|
367
377
|
]);
|
|
@@ -369,10 +379,11 @@ describe("Evento", () => {
|
|
|
369
379
|
"wildcard-first-handle",
|
|
370
380
|
expect.objectContaining({
|
|
371
381
|
ctx: expect.anything(),
|
|
382
|
+
stats: expect.anything(),
|
|
372
383
|
enRequest: { x: 1, stop: true },
|
|
373
384
|
encoder: reqRes,
|
|
374
385
|
request,
|
|
375
|
-
send,
|
|
386
|
+
send: sendEvent,
|
|
376
387
|
validated: { validated: true, x: 1, stop: true, step: "wildcard-first" },
|
|
377
388
|
}),
|
|
378
389
|
{
|
|
@@ -408,10 +419,11 @@ describe("Evento", () => {
|
|
|
408
419
|
"regular-first-validate",
|
|
409
420
|
expect.objectContaining({
|
|
410
421
|
ctx: expect.anything(),
|
|
422
|
+
stats: expect.anything(),
|
|
411
423
|
enRequest: { x: 2 },
|
|
412
424
|
encoder: reqRes,
|
|
413
425
|
request,
|
|
414
|
-
send,
|
|
426
|
+
send: sendEvent,
|
|
415
427
|
}),
|
|
416
428
|
Result.Ok(Option.Some({ validated: true, x: 2, step: "regular-first" })),
|
|
417
429
|
]);
|
|
@@ -419,10 +431,11 @@ describe("Evento", () => {
|
|
|
419
431
|
"regular-first-handle",
|
|
420
432
|
expect.objectContaining({
|
|
421
433
|
ctx: expect.anything(),
|
|
434
|
+
stats: expect.anything(),
|
|
422
435
|
enRequest: { x: 2 },
|
|
423
436
|
encoder: reqRes,
|
|
424
437
|
request,
|
|
425
|
-
send,
|
|
438
|
+
send: sendEvent,
|
|
426
439
|
validated: { validated: true, x: 2, step: "regular-first" },
|
|
427
440
|
}),
|
|
428
441
|
{
|
|
@@ -440,10 +453,11 @@ describe("Evento", () => {
|
|
|
440
453
|
"regular-second-validate",
|
|
441
454
|
expect.objectContaining({
|
|
442
455
|
ctx: expect.anything(),
|
|
456
|
+
stats: expect.anything(),
|
|
443
457
|
enRequest: { x: 2 },
|
|
444
458
|
encoder: reqRes,
|
|
445
459
|
request,
|
|
446
|
-
send,
|
|
460
|
+
send: sendEvent,
|
|
447
461
|
}),
|
|
448
462
|
Result.Ok(Option.Some({ validated: true, x: 2, step: "regular-second" })),
|
|
449
463
|
]);
|
|
@@ -451,10 +465,11 @@ describe("Evento", () => {
|
|
|
451
465
|
"regular-second-handle",
|
|
452
466
|
expect.objectContaining({
|
|
453
467
|
ctx: expect.anything(),
|
|
468
|
+
stats: expect.anything(),
|
|
454
469
|
enRequest: { x: 2 },
|
|
455
470
|
encoder: reqRes,
|
|
456
471
|
request,
|
|
457
|
-
send,
|
|
472
|
+
send: sendEvent,
|
|
458
473
|
validated: { validated: true, x: 2, step: "regular-second" },
|
|
459
474
|
}),
|
|
460
475
|
{
|
|
@@ -486,10 +501,11 @@ describe("Evento", () => {
|
|
|
486
501
|
"regular-first-validate",
|
|
487
502
|
expect.objectContaining({
|
|
488
503
|
ctx: expect.anything(),
|
|
504
|
+
stats: expect.anything(),
|
|
489
505
|
enRequest: { x: 2, stop: true },
|
|
490
506
|
encoder: reqRes,
|
|
491
507
|
request,
|
|
492
|
-
send,
|
|
508
|
+
send: sendEvent,
|
|
493
509
|
}),
|
|
494
510
|
Result.Ok(Option.Some({ validated: true, x: 2, stop: true, step: "regular-first" })),
|
|
495
511
|
]);
|
|
@@ -497,10 +513,11 @@ describe("Evento", () => {
|
|
|
497
513
|
"regular-first-handle",
|
|
498
514
|
expect.objectContaining({
|
|
499
515
|
ctx: expect.anything(),
|
|
516
|
+
stats: expect.anything(),
|
|
500
517
|
enRequest: { x: 2, stop: true },
|
|
501
518
|
encoder: reqRes,
|
|
502
519
|
request,
|
|
503
|
-
send,
|
|
520
|
+
send: sendEvent,
|
|
504
521
|
validated: { validated: true, x: 2, stop: true, step: "regular-first" },
|
|
505
522
|
}),
|
|
506
523
|
{
|
|
@@ -527,6 +544,7 @@ describe("Evento", () => {
|
|
|
527
544
|
}
|
|
528
545
|
const evo = new Evento(new ErrorEncoder());
|
|
529
546
|
const send = new TestSend();
|
|
547
|
+
const sendEvent = new EventoSend(send);
|
|
530
548
|
evo.push({
|
|
531
549
|
type: EventoType.Error,
|
|
532
550
|
hash: "error-handler-0",
|
|
@@ -561,10 +579,11 @@ describe("Evento", () => {
|
|
|
561
579
|
"error-handler-0-handle",
|
|
562
580
|
expect.objectContaining({
|
|
563
581
|
ctx: expect.anything(),
|
|
582
|
+
stats: expect.anything(),
|
|
564
583
|
encoder: reqRes,
|
|
565
584
|
request,
|
|
566
585
|
error: send.fn.mock.calls[0][1].error,
|
|
567
|
-
send,
|
|
586
|
+
send: sendEvent,
|
|
568
587
|
}),
|
|
569
588
|
]);
|
|
570
589
|
});
|
|
@@ -579,6 +598,7 @@ describe("Evento", () => {
|
|
|
579
598
|
}
|
|
580
599
|
const evo = new Evento(new ErrorEncoder());
|
|
581
600
|
const send = new TestSend();
|
|
601
|
+
const sendEvent = new EventoSend(send);
|
|
582
602
|
evo.push({
|
|
583
603
|
type: EventoType.Error,
|
|
584
604
|
hash: "error-handler-0",
|
|
@@ -613,16 +633,18 @@ describe("Evento", () => {
|
|
|
613
633
|
"error-handler-0-handle",
|
|
614
634
|
expect.objectContaining({
|
|
615
635
|
ctx: expect.anything(),
|
|
636
|
+
stats: expect.anything(),
|
|
616
637
|
encoder: reqRes,
|
|
617
638
|
request,
|
|
618
639
|
error: send.fn.mock.calls[0][1].error,
|
|
619
|
-
send,
|
|
640
|
+
send: sendEvent,
|
|
620
641
|
}),
|
|
621
642
|
]);
|
|
622
643
|
});
|
|
623
644
|
it("validate throw error trigger", async () => {
|
|
624
645
|
const evo = new Evento(reqRes);
|
|
625
646
|
const send = new TestSend();
|
|
647
|
+
const sendEvent = new EventoSend(send);
|
|
626
648
|
evo.push({
|
|
627
649
|
type: EventoType.Error,
|
|
628
650
|
hash: "error-handler-0",
|
|
@@ -665,17 +687,19 @@ describe("Evento", () => {
|
|
|
665
687
|
"error-handler-0-handle",
|
|
666
688
|
expect.objectContaining({
|
|
667
689
|
ctx: expect.anything(),
|
|
690
|
+
stats: expect.anything(),
|
|
668
691
|
encoder: reqRes,
|
|
669
692
|
enRequest: { x: 2, stop: true },
|
|
670
693
|
request,
|
|
671
694
|
error,
|
|
672
|
-
send,
|
|
695
|
+
send: sendEvent,
|
|
673
696
|
}),
|
|
674
697
|
]);
|
|
675
698
|
});
|
|
676
699
|
it("validate result error trigger", async () => {
|
|
677
700
|
const evo = new Evento(reqRes);
|
|
678
701
|
const send = new TestSend();
|
|
702
|
+
const sendEvent = new EventoSend(send);
|
|
679
703
|
evo.push({
|
|
680
704
|
type: EventoType.Error,
|
|
681
705
|
hash: "error-handler-0",
|
|
@@ -718,17 +742,19 @@ describe("Evento", () => {
|
|
|
718
742
|
"error-handler-0-handle",
|
|
719
743
|
expect.objectContaining({
|
|
720
744
|
ctx: expect.anything(),
|
|
745
|
+
stats: expect.anything(),
|
|
721
746
|
encoder: reqRes,
|
|
722
747
|
enRequest: { x: 2, stop: true },
|
|
723
748
|
request,
|
|
724
749
|
error,
|
|
725
|
-
send,
|
|
750
|
+
send: sendEvent,
|
|
726
751
|
}),
|
|
727
752
|
]);
|
|
728
753
|
});
|
|
729
754
|
it("handle throw error trigger", async () => {
|
|
730
755
|
const evo = new Evento(reqRes);
|
|
731
756
|
const send = new TestSend();
|
|
757
|
+
const sendEvent = new EventoSend(send);
|
|
732
758
|
evo.push({
|
|
733
759
|
type: EventoType.Error,
|
|
734
760
|
hash: "error-handler-0",
|
|
@@ -769,11 +795,12 @@ describe("Evento", () => {
|
|
|
769
795
|
"error-handler-0-handle",
|
|
770
796
|
expect.objectContaining({
|
|
771
797
|
ctx: expect.anything(),
|
|
798
|
+
stats: expect.anything(),
|
|
772
799
|
encoder: reqRes,
|
|
773
800
|
enRequest: { x: 2, stop: true },
|
|
774
801
|
request,
|
|
775
802
|
error,
|
|
776
|
-
send,
|
|
803
|
+
send: sendEvent,
|
|
777
804
|
validated: {
|
|
778
805
|
stop: true,
|
|
779
806
|
x: 2,
|
|
@@ -784,6 +811,7 @@ describe("Evento", () => {
|
|
|
784
811
|
it("handle result error trigger", async () => {
|
|
785
812
|
const evo = new Evento(reqRes);
|
|
786
813
|
const send = new TestSend();
|
|
814
|
+
const sendEvent = new EventoSend(send);
|
|
787
815
|
evo.push({
|
|
788
816
|
type: EventoType.Error,
|
|
789
817
|
hash: "error-handler-0",
|
|
@@ -829,11 +857,12 @@ describe("Evento", () => {
|
|
|
829
857
|
"error-handler-0-handle",
|
|
830
858
|
expect.objectContaining({
|
|
831
859
|
ctx: expect.anything(),
|
|
860
|
+
stats: expect.anything(),
|
|
832
861
|
encoder: reqRes,
|
|
833
862
|
enRequest: { x: 2, stop: true },
|
|
834
863
|
request,
|
|
835
864
|
error,
|
|
836
|
-
send,
|
|
865
|
+
send: sendEvent,
|
|
837
866
|
validated: {
|
|
838
867
|
stop: true,
|
|
839
868
|
x: 2,
|
|
@@ -888,5 +917,91 @@ describe("Evento", () => {
|
|
|
888
917
|
"done",
|
|
889
918
|
]);
|
|
890
919
|
});
|
|
920
|
+
it("check stat", async () => {
|
|
921
|
+
const evo = new Evento(reqRes);
|
|
922
|
+
const send = new TestSend();
|
|
923
|
+
evo.push({
|
|
924
|
+
hash: "regular-handler-0",
|
|
925
|
+
validate: async (ctx) => {
|
|
926
|
+
send.fn("regular-handler-0-validate", ctx);
|
|
927
|
+
return sleep(10).then(() => Result.Ok(Option.Some({ x: 2, stop: true })));
|
|
928
|
+
},
|
|
929
|
+
handle: async (ctx) => {
|
|
930
|
+
send.fn("regular-handler-0-handle", ctx);
|
|
931
|
+
for (let i = 0; i < 3; i++) {
|
|
932
|
+
await ctx.send.send(ctx, {
|
|
933
|
+
response: "ok0",
|
|
934
|
+
req: ctx.validated,
|
|
935
|
+
cnt: i,
|
|
936
|
+
});
|
|
937
|
+
}
|
|
938
|
+
return Promise.resolve(Result.Ok(EventoResult.Continue));
|
|
939
|
+
},
|
|
940
|
+
post: async (ctx) => {
|
|
941
|
+
send.fn("regular-handler-0-post", ctx);
|
|
942
|
+
return sleep(10).then(() => {
|
|
943
|
+
return;
|
|
944
|
+
});
|
|
945
|
+
},
|
|
946
|
+
});
|
|
947
|
+
evo.push({
|
|
948
|
+
hash: "regular-handler-1",
|
|
949
|
+
handle: async (ctx) => {
|
|
950
|
+
send.fn("regular-handler-1-handle", ctx);
|
|
951
|
+
for (let i = 0; i < 3; i++) {
|
|
952
|
+
await ctx.send.send(ctx, {
|
|
953
|
+
response: "ok1",
|
|
954
|
+
req: ctx.validated,
|
|
955
|
+
cnt: i,
|
|
956
|
+
});
|
|
957
|
+
}
|
|
958
|
+
return Promise.resolve(Result.Ok(EventoResult.Continue));
|
|
959
|
+
},
|
|
960
|
+
});
|
|
961
|
+
const request = new Request("http://example.com", { method: "POST", body: JSON.stringify({ x: 2, stop: true }) });
|
|
962
|
+
await evo.trigger({
|
|
963
|
+
send,
|
|
964
|
+
request,
|
|
965
|
+
});
|
|
966
|
+
expect(send.fn.mock.calls.map((i) => i[0])).toEqual([
|
|
967
|
+
"regular-handler-0-validate",
|
|
968
|
+
"start",
|
|
969
|
+
"regular-handler-0-handle",
|
|
970
|
+
"send",
|
|
971
|
+
"send",
|
|
972
|
+
"send",
|
|
973
|
+
"regular-handler-1-handle",
|
|
974
|
+
"send",
|
|
975
|
+
"send",
|
|
976
|
+
"send",
|
|
977
|
+
"regular-handler-0-post",
|
|
978
|
+
"done",
|
|
979
|
+
]);
|
|
980
|
+
const stats = send.fn.mock.calls[3][1].stats;
|
|
981
|
+
expect(stats.request.doneTime.getTime()).toBeGreaterThanOrEqual(stats.request.startTime.getTime());
|
|
982
|
+
expect(stats.encode.doneTime.getTime()).toBeGreaterThanOrEqual(stats.encode.startTime.getTime());
|
|
983
|
+
expect(stats.handlers.length).toBe(2);
|
|
984
|
+
for (const hdl of stats.handlers) {
|
|
985
|
+
expect(hdl.handled.doneTime.getTime()).toBeGreaterThanOrEqual(hdl.handled.startTime.getTime());
|
|
986
|
+
expect(hdl.handler.hash).toMatch(/regular-handler/);
|
|
987
|
+
expect(hdl.validated.doneTime.getTime()).toBeGreaterThanOrEqual(hdl.validated.startTime.getTime());
|
|
988
|
+
expect(hdl.total.doneTime.getTime()).toBeGreaterThanOrEqual(hdl.total.startTime.getTime());
|
|
989
|
+
}
|
|
990
|
+
expect(stats.send.doneTime.getTime()).toBeGreaterThanOrEqual(stats.send.startTime.getTime());
|
|
991
|
+
expect(stats.send.items.length).toBe(6);
|
|
992
|
+
let sendCount = 0;
|
|
993
|
+
for (const item of stats.send.items) {
|
|
994
|
+
expect(item.doneTime.getTime()).toBeGreaterThanOrEqual(item.startTime.getTime());
|
|
995
|
+
expect(item.item).toEqual(Result.Ok({
|
|
996
|
+
cnt: sendCount++ % 3,
|
|
997
|
+
encoderInfo: "test-encoder",
|
|
998
|
+
req: {
|
|
999
|
+
stop: true,
|
|
1000
|
+
x: 2,
|
|
1001
|
+
},
|
|
1002
|
+
response: `ok${sendCount > 3 ? 1 : 0}`,
|
|
1003
|
+
}));
|
|
1004
|
+
}
|
|
1005
|
+
});
|
|
891
1006
|
});
|
|
892
1007
|
//# sourceMappingURL=evento.test.js.map
|