@adviser/cement 0.5.5 → 0.5.7

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.
Files changed (98) hide show
  1. package/cjs/evento.cjs +157 -0
  2. package/cjs/evento.cjs.map +1 -0
  3. package/cjs/evento.d.ts +88 -0
  4. package/cjs/evento.d.ts.map +1 -0
  5. package/cjs/evento.test.cjs +522 -0
  6. package/cjs/evento.test.cjs.map +1 -0
  7. package/cjs/evento.test.d.ts +2 -0
  8. package/cjs/evento.test.d.ts.map +1 -0
  9. package/cjs/json-en-decoder.cjs.map +1 -1
  10. package/cjs/resolve-once.d.ts +1 -1
  11. package/cjs/resolve-once.d.ts.map +1 -1
  12. package/cjs/result.cjs +6 -2
  13. package/cjs/result.cjs.map +1 -1
  14. package/cjs/result.d.ts +4 -3
  15. package/cjs/result.d.ts.map +1 -1
  16. package/cjs/result.test.cjs +66 -0
  17. package/cjs/result.test.cjs.map +1 -1
  18. package/cjs/types.d.ts +2 -2
  19. package/cjs/types.d.ts.map +1 -1
  20. package/cjs/uri.cjs.map +1 -1
  21. package/cjs/version.cjs +1 -1
  22. package/cjs/wait-for-value.test.cjs +25 -0
  23. package/cjs/wait-for-value.test.cjs.map +1 -1
  24. package/deno.json +1 -1
  25. package/esm/evento.d.ts +88 -0
  26. package/esm/evento.d.ts.map +1 -0
  27. package/esm/evento.js +155 -0
  28. package/esm/evento.js.map +1 -0
  29. package/esm/evento.test.d.ts +2 -0
  30. package/esm/evento.test.d.ts.map +1 -0
  31. package/esm/evento.test.js +520 -0
  32. package/esm/evento.test.js.map +1 -0
  33. package/esm/json-en-decoder.js.map +1 -1
  34. package/esm/resolve-once.d.ts +1 -1
  35. package/esm/resolve-once.d.ts.map +1 -1
  36. package/esm/result.d.ts +4 -3
  37. package/esm/result.d.ts.map +1 -1
  38. package/esm/result.js +6 -2
  39. package/esm/result.js.map +1 -1
  40. package/esm/result.test.js +67 -1
  41. package/esm/result.test.js.map +1 -1
  42. package/esm/types.d.ts +2 -2
  43. package/esm/types.d.ts.map +1 -1
  44. package/esm/uri.js.map +1 -1
  45. package/esm/version.js +1 -1
  46. package/esm/wait-for-value.test.js +25 -0
  47. package/esm/wait-for-value.test.js.map +1 -1
  48. package/package.json +5 -5
  49. package/src/evento.ts +513 -0
  50. package/src/json-en-decoder.ts +1 -1
  51. package/src/result.ts +24 -4
  52. package/src/uri.ts +1 -1
  53. package/ts/cjs/evento.d.ts +88 -0
  54. package/ts/cjs/evento.d.ts.map +1 -0
  55. package/ts/cjs/evento.js +157 -0
  56. package/ts/cjs/evento.js.map +1 -0
  57. package/ts/cjs/evento.test.d.ts +2 -0
  58. package/ts/cjs/evento.test.d.ts.map +1 -0
  59. package/ts/cjs/evento.test.js +522 -0
  60. package/ts/cjs/evento.test.js.map +1 -0
  61. package/ts/cjs/json-en-decoder.js.map +1 -1
  62. package/ts/cjs/resolve-once.d.ts +1 -1
  63. package/ts/cjs/resolve-once.d.ts.map +1 -1
  64. package/ts/cjs/result.d.ts +4 -3
  65. package/ts/cjs/result.d.ts.map +1 -1
  66. package/ts/cjs/result.js +6 -2
  67. package/ts/cjs/result.js.map +1 -1
  68. package/ts/cjs/result.test.js +66 -0
  69. package/ts/cjs/result.test.js.map +1 -1
  70. package/ts/cjs/types.d.ts +2 -2
  71. package/ts/cjs/types.d.ts.map +1 -1
  72. package/ts/cjs/uri.js.map +1 -1
  73. package/ts/cjs/version.js +1 -1
  74. package/ts/cjs/wait-for-value.test.js +25 -0
  75. package/ts/cjs/wait-for-value.test.js.map +1 -1
  76. package/ts/esm/evento.d.ts +88 -0
  77. package/ts/esm/evento.d.ts.map +1 -0
  78. package/ts/esm/evento.js +155 -0
  79. package/ts/esm/evento.js.map +1 -0
  80. package/ts/esm/evento.test.d.ts +2 -0
  81. package/ts/esm/evento.test.d.ts.map +1 -0
  82. package/ts/esm/evento.test.js +520 -0
  83. package/ts/esm/evento.test.js.map +1 -0
  84. package/ts/esm/json-en-decoder.js.map +1 -1
  85. package/ts/esm/resolve-once.d.ts +1 -1
  86. package/ts/esm/resolve-once.d.ts.map +1 -1
  87. package/ts/esm/result.d.ts +4 -3
  88. package/ts/esm/result.d.ts.map +1 -1
  89. package/ts/esm/result.js +6 -2
  90. package/ts/esm/result.js.map +1 -1
  91. package/ts/esm/result.test.js +67 -1
  92. package/ts/esm/result.test.js.map +1 -1
  93. package/ts/esm/types.d.ts +2 -2
  94. package/ts/esm/types.d.ts.map +1 -1
  95. package/ts/esm/uri.js.map +1 -1
  96. package/ts/esm/version.js +1 -1
  97. package/ts/esm/wait-for-value.test.js +25 -0
  98. package/ts/esm/wait-for-value.test.js.map +1 -1
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Evento = exports.EventoType = exports.EventoOp = exports.EventoResult = void 0;
4
+ const app_context_js_1 = require("./app-context.js");
5
+ const option_js_1 = require("./option.js");
6
+ const resolve_once_js_1 = require("./resolve-once.js");
7
+ const result_js_1 = require("./result.js");
8
+ exports.EventoResult = {
9
+ Continue: "continue",
10
+ Stop: "stop",
11
+ };
12
+ var EventoOp;
13
+ (function (EventoOp) {
14
+ EventoOp["Push"] = "push";
15
+ EventoOp["Unshift"] = "unshift";
16
+ EventoOp["Position"] = "position";
17
+ })(EventoOp || (exports.EventoOp = EventoOp = {}));
18
+ var EventoType;
19
+ (function (EventoType) {
20
+ EventoType["WildCard"] = "wildcard";
21
+ EventoType["Regular"] = "regular";
22
+ })(EventoType || (exports.EventoType = EventoType = {}));
23
+ function unregFunc(item, actions) {
24
+ return () => {
25
+ const index = actions.findIndex((x) => x.hash === item.hash);
26
+ if (index >= 0) {
27
+ actions.splice(index, 1);
28
+ }
29
+ };
30
+ }
31
+ class Evento {
32
+ actions = [];
33
+ wildcards = [];
34
+ encoder;
35
+ constructor(encoder) {
36
+ this.encoder = encoder;
37
+ }
38
+ handlers() {
39
+ return {
40
+ actions: [...this.actions],
41
+ wildcards: [...this.wildcards],
42
+ };
43
+ }
44
+ push(...hdls) {
45
+ return this.register(...hdls.flat().map((handler) => {
46
+ return {
47
+ handler,
48
+ type: handler.type ?? EventoType.Regular,
49
+ op: EventoOp.Push,
50
+ };
51
+ }));
52
+ }
53
+ unshift(...hdls) {
54
+ return this.register(...hdls.flat().map((handler) => {
55
+ return {
56
+ handler: handler,
57
+ type: handler.type ?? EventoType.Regular,
58
+ op: EventoOp.Unshift,
59
+ };
60
+ }));
61
+ }
62
+ register(...hdls) {
63
+ return hdls.map((item) => {
64
+ const handlers = item.type === EventoType.WildCard ? this.wildcards : this.actions;
65
+ const hasHandler = handlers.find((h) => h.hash === item.handler.hash);
66
+ if (hasHandler) {
67
+ return unregFunc(hasHandler, handlers);
68
+ }
69
+ switch (item.op) {
70
+ case EventoOp.Push:
71
+ handlers.push(item.handler);
72
+ return unregFunc(item.handler, handlers);
73
+ case EventoOp.Unshift:
74
+ handlers.unshift(item.handler);
75
+ return unregFunc(item.handler, handlers);
76
+ case EventoOp.Position:
77
+ handlers.splice(item.idx, 0, item.handler);
78
+ return unregFunc(item.handler, handlers);
79
+ default:
80
+ throw new Error(`Unknown position`);
81
+ }
82
+ });
83
+ }
84
+ async trigger(ictx) {
85
+ return (0, result_js_1.exception2Result)(async () => {
86
+ const ctx = {
87
+ ...ictx,
88
+ encoder: ictx.encoder ?? this.encoder,
89
+ ctx: ictx.ctx ?? new app_context_js_1.AppContext(),
90
+ };
91
+ const results = [];
92
+ if (!ctx.enRequest) {
93
+ const rUnk = await this.encoder.encode(ctx.request);
94
+ if (rUnk.isErr()) {
95
+ return result_js_1.Result.Err(rUnk);
96
+ }
97
+ const unk = rUnk.unwrap();
98
+ ctx.enRequest = unk;
99
+ }
100
+ const validateCtx = {
101
+ ...ctx,
102
+ enRequest: ctx.enRequest,
103
+ request: ctx.request,
104
+ };
105
+ const startOnce = new resolve_once_js_1.ResolveOnce();
106
+ for (const hdl of [...this.actions, "breakpoint", ...this.wildcards]) {
107
+ if (typeof hdl === "string") {
108
+ if (results.length > 0) {
109
+ break;
110
+ }
111
+ continue;
112
+ }
113
+ const rData = await Promise.resolve(hdl.validate ? hdl.validate(validateCtx) : result_js_1.Result.Ok(option_js_1.Option.Some(ctx.enRequest)));
114
+ if (rData.isErr()) {
115
+ return result_js_1.Result.Err(rData);
116
+ }
117
+ const data = rData.Ok();
118
+ if (data.IsNone()) {
119
+ continue;
120
+ }
121
+ const hdlCtx = {
122
+ ...ctx,
123
+ validated: data.Unwrap(),
124
+ request: ctx.request,
125
+ enRequest: ctx.enRequest,
126
+ };
127
+ if (ctx.send.start) {
128
+ const rStart = await startOnce.once(() => ctx.send.start(hdlCtx).then((rv) => {
129
+ if (rv.isErr()) {
130
+ return result_js_1.Result.Err(rv);
131
+ }
132
+ return result_js_1.Result.Ok(hdlCtx);
133
+ }));
134
+ if (rStart.isErr()) {
135
+ return result_js_1.Result.Err(rStart);
136
+ }
137
+ }
138
+ const rHandle = await hdl.handle(hdlCtx);
139
+ if (rHandle.isErr()) {
140
+ return result_js_1.Result.Err(rHandle);
141
+ }
142
+ results.push(hdl.hash);
143
+ if (rHandle.Ok() === exports.EventoResult.Stop) {
144
+ break;
145
+ }
146
+ }
147
+ if (ctx.send.done && startOnce.state === "processed" && startOnce.value) {
148
+ if (startOnce.value.isOk()) {
149
+ await ctx.send.done(startOnce.value.Ok());
150
+ }
151
+ }
152
+ return result_js_1.Result.Ok(results);
153
+ });
154
+ }
155
+ }
156
+ exports.Evento = Evento;
157
+ //# sourceMappingURL=evento.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evento.js","sourceRoot":"","sources":["../../../src/evento.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=evento.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evento.test.d.ts","sourceRoot":"","sources":["../../../src/evento.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,522 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const evento_js_1 = require("./evento.js");
5
+ const result_js_1 = require("./result.js");
6
+ const option_js_1 = require("./option.js");
7
+ class ReqResEventoEnDecoder {
8
+ async encode(args) {
9
+ const body = (await args.json());
10
+ return result_js_1.Result.Ok(body);
11
+ }
12
+ decode(data) {
13
+ return Promise.resolve(result_js_1.Result.Ok(JSON.stringify(data)));
14
+ }
15
+ }
16
+ class TestSend {
17
+ fn = vitest_1.vi.fn();
18
+ async start(trigger) {
19
+ this.fn("start", trigger);
20
+ return Promise.resolve(result_js_1.Result.Ok(undefined));
21
+ }
22
+ async send(trigger, data) {
23
+ const resData = data;
24
+ resData.encoderInfo = "test-encoder";
25
+ this.fn("send", trigger, resData);
26
+ return Promise.resolve(result_js_1.Result.Ok(resData));
27
+ }
28
+ async done(trigger) {
29
+ this.fn("done", trigger);
30
+ return Promise.resolve(result_js_1.Result.Ok(undefined));
31
+ }
32
+ }
33
+ (0, vitest_1.describe)("Evento", () => {
34
+ (0, vitest_1.it)("register ops push", () => {
35
+ const evo = new evento_js_1.Evento(new ReqResEventoEnDecoder());
36
+ let r1 = [], r2 = [];
37
+ for (let i = 0; i < 5; i++) {
38
+ r1 = evo.push({
39
+ hash: "h1",
40
+ handle: async () => {
41
+ return Promise.resolve(result_js_1.Result.Ok(evento_js_1.EventoResult.Continue));
42
+ },
43
+ });
44
+ r2 = evo.push({
45
+ hash: "h2",
46
+ handle: async () => {
47
+ return Promise.resolve(result_js_1.Result.Ok(evento_js_1.EventoResult.Continue));
48
+ },
49
+ });
50
+ }
51
+ (0, vitest_1.expect)(evo.handlers().actions.map((h) => h.hash)).toEqual(["h1", "h2"]);
52
+ (0, vitest_1.expect)(evo.handlers().wildcards.length).toBe(0);
53
+ r1[0]();
54
+ (0, vitest_1.expect)(evo.handlers().actions.map((h) => h.hash)).toEqual(["h2"]);
55
+ (0, vitest_1.expect)(evo.handlers().wildcards.length).toBe(0);
56
+ r1[0]();
57
+ r2[0]();
58
+ (0, vitest_1.expect)(evo.handlers().actions.length).toBe(0);
59
+ (0, vitest_1.expect)(evo.handlers().wildcards.length).toBe(0);
60
+ });
61
+ (0, vitest_1.it)("register ops unshift", () => {
62
+ const evo = new evento_js_1.Evento(new ReqResEventoEnDecoder());
63
+ for (let i = 0; i < 5; i++) {
64
+ evo.unshift({
65
+ hash: "h2",
66
+ handle: async () => {
67
+ return Promise.resolve(result_js_1.Result.Ok(evento_js_1.EventoResult.Continue));
68
+ },
69
+ });
70
+ evo.unshift({
71
+ hash: "h1",
72
+ handle: async () => {
73
+ return Promise.resolve(result_js_1.Result.Ok(evento_js_1.EventoResult.Continue));
74
+ },
75
+ });
76
+ }
77
+ (0, vitest_1.expect)(evo.handlers().actions.map((h) => h.hash)).toEqual(["h1", "h2"]);
78
+ (0, vitest_1.expect)(evo.handlers().wildcards.length).toBe(0);
79
+ });
80
+ (0, vitest_1.it)("register ops position", () => {
81
+ const evo = new evento_js_1.Evento(new ReqResEventoEnDecoder());
82
+ for (let i = 0; i < 5; i++) {
83
+ evo.register({
84
+ op: evento_js_1.EventoOp.Position,
85
+ type: evento_js_1.EventoType.Regular,
86
+ idx: 1,
87
+ handler: {
88
+ hash: "h2",
89
+ handle: async () => {
90
+ return Promise.resolve(result_js_1.Result.Ok(evento_js_1.EventoResult.Continue));
91
+ },
92
+ },
93
+ });
94
+ evo.register({
95
+ op: evento_js_1.EventoOp.Position,
96
+ type: evento_js_1.EventoType.Regular,
97
+ idx: 0,
98
+ handler: {
99
+ hash: "h1",
100
+ handle: async () => {
101
+ return Promise.resolve(result_js_1.Result.Ok(evento_js_1.EventoResult.Continue));
102
+ },
103
+ },
104
+ });
105
+ }
106
+ (0, vitest_1.expect)(evo.handlers().actions.map((h) => h.hash)).toEqual(["h1", "h2"]);
107
+ (0, vitest_1.expect)(evo.handlers().wildcards.length).toBe(0);
108
+ });
109
+ (0, vitest_1.it)("wildcard ops push", () => {
110
+ const evo = new evento_js_1.Evento(new ReqResEventoEnDecoder());
111
+ let r1 = [], r2 = [];
112
+ for (let i = 0; i < 5; i++) {
113
+ r1 = evo.push({
114
+ hash: "h1",
115
+ type: evento_js_1.EventoType.WildCard,
116
+ handle: async () => {
117
+ return Promise.resolve(result_js_1.Result.Ok(evento_js_1.EventoResult.Continue));
118
+ },
119
+ });
120
+ r2 = evo.push({
121
+ hash: "h2",
122
+ type: evento_js_1.EventoType.WildCard,
123
+ handle: async () => {
124
+ return Promise.resolve(result_js_1.Result.Ok(evento_js_1.EventoResult.Continue));
125
+ },
126
+ });
127
+ }
128
+ (0, vitest_1.expect)(evo.handlers().wildcards.map((h) => h.hash)).toEqual(["h1", "h2"]);
129
+ (0, vitest_1.expect)(evo.handlers().actions.length).toBe(0);
130
+ r1[0]();
131
+ (0, vitest_1.expect)(evo.handlers().wildcards.map((h) => h.hash)).toEqual(["h2"]);
132
+ (0, vitest_1.expect)(evo.handlers().actions.length).toBe(0);
133
+ r1[0]();
134
+ r2[0]();
135
+ (0, vitest_1.expect)(evo.handlers().actions.length).toBe(0);
136
+ (0, vitest_1.expect)(evo.handlers().wildcards.length).toBe(0);
137
+ });
138
+ const reqRes = new ReqResEventoEnDecoder();
139
+ const evo = new evento_js_1.Evento(reqRes);
140
+ const send = new TestSend();
141
+ evo.push({
142
+ type: evento_js_1.EventoType.WildCard,
143
+ hash: "wildcard-handler-first",
144
+ validate: (ctx) => {
145
+ const ret = (() => {
146
+ const test = ctx.enRequest;
147
+ if (test.x === 1) {
148
+ return result_js_1.Result.Ok(option_js_1.Option.Some({ ...test, validated: true, step: "wildcard-first" }));
149
+ }
150
+ return result_js_1.Result.Ok(option_js_1.Option.None());
151
+ })();
152
+ send.fn("wildcard-first-validate", ctx, ret);
153
+ return Promise.resolve(ret);
154
+ },
155
+ handle: async (ctx) => {
156
+ const ret = ctx.send
157
+ .send(ctx, {
158
+ response: "ok",
159
+ req: ctx.validated,
160
+ })
161
+ .then((rv) => {
162
+ const v = rv.Ok();
163
+ let ret = result_js_1.Result.Ok(evento_js_1.EventoResult.Continue);
164
+ if (v.req.stop) {
165
+ ret = result_js_1.Result.Ok(evento_js_1.EventoResult.Stop);
166
+ }
167
+ send.fn("wildcard-first-handle", ctx, v, ret);
168
+ return ret;
169
+ });
170
+ return ret;
171
+ },
172
+ }, {
173
+ type: evento_js_1.EventoType.WildCard,
174
+ hash: "wildcard-second-handler",
175
+ validate: (ctx) => {
176
+ const ret = (() => {
177
+ const test = ctx.enRequest;
178
+ if (test.x === 1) {
179
+ return result_js_1.Result.Ok(option_js_1.Option.Some({ ...test, validated: true, step: "wildcard-second" }));
180
+ }
181
+ return result_js_1.Result.Ok(option_js_1.Option.None());
182
+ })();
183
+ send.fn("wildcard-second-validate", ctx, ret);
184
+ return Promise.resolve(ret);
185
+ },
186
+ handle: async (ctx) => {
187
+ const ret = ctx.send
188
+ .send(ctx, {
189
+ response: "ok",
190
+ req: ctx.validated,
191
+ })
192
+ .then((rv) => {
193
+ const v = rv.Ok();
194
+ const ret = result_js_1.Result.Ok(evento_js_1.EventoResult.Continue);
195
+ send.fn("wildcard-second-handle", ctx, v, ret);
196
+ return ret;
197
+ });
198
+ return ret;
199
+ },
200
+ }, {
201
+ hash: "regular-first-handler",
202
+ validate: (ctx) => {
203
+ const ret = (() => {
204
+ const test = ctx.enRequest;
205
+ if (test.x === 2) {
206
+ return result_js_1.Result.Ok(option_js_1.Option.Some({ ...test, validated: true, step: "regular-first" }));
207
+ }
208
+ return result_js_1.Result.Ok(option_js_1.Option.None());
209
+ })();
210
+ send.fn("regular-first-validate", ctx, ret);
211
+ return Promise.resolve(ret);
212
+ },
213
+ handle: async (ctx) => {
214
+ const ret = ctx.send
215
+ .send(ctx, {
216
+ response: "ok",
217
+ req: ctx.validated,
218
+ })
219
+ .then((rv) => {
220
+ const v = rv.Ok();
221
+ let ret = result_js_1.Result.Ok(evento_js_1.EventoResult.Continue);
222
+ if (v.req.stop) {
223
+ ret = result_js_1.Result.Ok(evento_js_1.EventoResult.Stop);
224
+ }
225
+ send.fn("regular-first-handle", ctx, v, ret);
226
+ return ret;
227
+ });
228
+ return ret;
229
+ },
230
+ }, {
231
+ hash: "regular-second-handler",
232
+ validate: (ctx) => {
233
+ const ret = (() => {
234
+ const test = ctx.enRequest;
235
+ if (test.x === 2) {
236
+ return result_js_1.Result.Ok(option_js_1.Option.Some({ ...test, validated: true, step: "regular-second" }));
237
+ }
238
+ return result_js_1.Result.Ok(option_js_1.Option.None());
239
+ })();
240
+ send.fn("regular-second-validate", ctx, ret);
241
+ return Promise.resolve(ret);
242
+ },
243
+ handle: async (ctx) => {
244
+ const ret = ctx.send
245
+ .send(ctx, {
246
+ response: "ok",
247
+ req: ctx.validated,
248
+ })
249
+ .then((rv) => {
250
+ const v = rv.Ok();
251
+ const ret = result_js_1.Result.Ok(evento_js_1.EventoResult.Continue);
252
+ send.fn("regular-second-handle", ctx, v, ret);
253
+ return ret;
254
+ });
255
+ return ret;
256
+ },
257
+ });
258
+ (0, vitest_1.beforeEach)(() => {
259
+ send.fn.mockClear();
260
+ });
261
+ (0, vitest_1.it)("continue:wildcard trigger", async () => {
262
+ const request = new Request("http://example.com", { method: "POST", body: JSON.stringify({ x: 1 }) });
263
+ await evo.trigger({
264
+ send,
265
+ request,
266
+ });
267
+ (0, vitest_1.expect)(send.fn.mock.calls.map((i) => i[0])).toEqual([
268
+ "regular-first-validate",
269
+ "regular-second-validate",
270
+ "wildcard-first-validate",
271
+ "start",
272
+ "send",
273
+ "wildcard-first-handle",
274
+ "wildcard-second-validate",
275
+ "send",
276
+ "wildcard-second-handle",
277
+ "done",
278
+ ]);
279
+ (0, vitest_1.expect)(send.fn.mock.calls[2]).toEqual([
280
+ "wildcard-first-validate",
281
+ vitest_1.expect.objectContaining({
282
+ ctx: vitest_1.expect.anything(),
283
+ enRequest: { x: 1 },
284
+ encoder: reqRes,
285
+ request,
286
+ send,
287
+ }),
288
+ result_js_1.Result.Ok(option_js_1.Option.Some({ validated: true, x: 1, step: "wildcard-first" })),
289
+ ]);
290
+ (0, vitest_1.expect)(send.fn.mock.calls[5]).toEqual([
291
+ "wildcard-first-handle",
292
+ vitest_1.expect.objectContaining({
293
+ ctx: vitest_1.expect.anything(),
294
+ enRequest: { x: 1 },
295
+ encoder: reqRes,
296
+ request,
297
+ send,
298
+ validated: { validated: true, x: 1, step: "wildcard-first" },
299
+ }),
300
+ {
301
+ encoderInfo: "test-encoder",
302
+ req: {
303
+ step: "wildcard-first",
304
+ validated: true,
305
+ x: 1,
306
+ },
307
+ response: "ok",
308
+ },
309
+ result_js_1.Result.Ok(evento_js_1.EventoResult.Continue),
310
+ ]);
311
+ (0, vitest_1.expect)(send.fn.mock.calls[6]).toEqual([
312
+ "wildcard-second-validate",
313
+ vitest_1.expect.objectContaining({
314
+ ctx: vitest_1.expect.anything(),
315
+ enRequest: { x: 1 },
316
+ encoder: reqRes,
317
+ request,
318
+ send,
319
+ }),
320
+ result_js_1.Result.Ok(option_js_1.Option.Some({ validated: true, x: 1, step: "wildcard-second" })),
321
+ ]);
322
+ (0, vitest_1.expect)(send.fn.mock.calls[8]).toEqual([
323
+ "wildcard-second-handle",
324
+ vitest_1.expect.objectContaining({
325
+ ctx: vitest_1.expect.anything(),
326
+ enRequest: { x: 1 },
327
+ encoder: reqRes,
328
+ request,
329
+ send,
330
+ validated: { validated: true, x: 1, step: "wildcard-second" },
331
+ }),
332
+ {
333
+ encoderInfo: "test-encoder",
334
+ req: {
335
+ step: "wildcard-second",
336
+ validated: true,
337
+ x: 1,
338
+ },
339
+ response: "ok",
340
+ },
341
+ result_js_1.Result.Ok(evento_js_1.EventoResult.Continue),
342
+ ]);
343
+ });
344
+ (0, vitest_1.it)("stop:wildcard trigger", async () => {
345
+ const request = new Request("http://example.com", { method: "POST", body: JSON.stringify({ x: 1, stop: true }) });
346
+ await evo.trigger({
347
+ send,
348
+ request,
349
+ });
350
+ (0, vitest_1.expect)(send.fn.mock.calls.map((i) => i[0])).toEqual([
351
+ "regular-first-validate",
352
+ "regular-second-validate",
353
+ "wildcard-first-validate",
354
+ "start",
355
+ "send",
356
+ "wildcard-first-handle",
357
+ "done",
358
+ ]);
359
+ (0, vitest_1.expect)(send.fn.mock.calls[2]).toEqual([
360
+ "wildcard-first-validate",
361
+ vitest_1.expect.objectContaining({
362
+ ctx: vitest_1.expect.anything(),
363
+ enRequest: { x: 1, stop: true },
364
+ encoder: reqRes,
365
+ request,
366
+ send,
367
+ }),
368
+ result_js_1.Result.Ok(option_js_1.Option.Some({ validated: true, x: 1, stop: true, step: "wildcard-first" })),
369
+ ]);
370
+ (0, vitest_1.expect)(send.fn.mock.calls[5]).toEqual([
371
+ "wildcard-first-handle",
372
+ vitest_1.expect.objectContaining({
373
+ ctx: vitest_1.expect.anything(),
374
+ enRequest: { x: 1, stop: true },
375
+ encoder: reqRes,
376
+ request,
377
+ send,
378
+ validated: { validated: true, x: 1, stop: true, step: "wildcard-first" },
379
+ }),
380
+ {
381
+ encoderInfo: "test-encoder",
382
+ req: {
383
+ step: "wildcard-first",
384
+ validated: true,
385
+ stop: true,
386
+ x: 1,
387
+ },
388
+ response: "ok",
389
+ },
390
+ result_js_1.Result.Ok(evento_js_1.EventoResult.Stop),
391
+ ]);
392
+ });
393
+ (0, vitest_1.it)("continue:regular trigger", async () => {
394
+ const request = new Request("http://example.com", { method: "POST", body: JSON.stringify({ x: 2 }) });
395
+ await evo.trigger({
396
+ send,
397
+ request,
398
+ });
399
+ (0, vitest_1.expect)(send.fn.mock.calls.map((i) => i[0])).toEqual([
400
+ "regular-first-validate",
401
+ "start",
402
+ "send",
403
+ "regular-first-handle",
404
+ "regular-second-validate",
405
+ "send",
406
+ "regular-second-handle",
407
+ "done",
408
+ ]);
409
+ (0, vitest_1.expect)(send.fn.mock.calls[0]).toEqual([
410
+ "regular-first-validate",
411
+ vitest_1.expect.objectContaining({
412
+ ctx: vitest_1.expect.anything(),
413
+ enRequest: { x: 2 },
414
+ encoder: reqRes,
415
+ request,
416
+ send,
417
+ }),
418
+ result_js_1.Result.Ok(option_js_1.Option.Some({ validated: true, x: 2, step: "regular-first" })),
419
+ ]);
420
+ (0, vitest_1.expect)(send.fn.mock.calls[3]).toEqual([
421
+ "regular-first-handle",
422
+ vitest_1.expect.objectContaining({
423
+ ctx: vitest_1.expect.anything(),
424
+ enRequest: { x: 2 },
425
+ encoder: reqRes,
426
+ request,
427
+ send,
428
+ validated: { validated: true, x: 2, step: "regular-first" },
429
+ }),
430
+ {
431
+ encoderInfo: "test-encoder",
432
+ req: {
433
+ step: "regular-first",
434
+ validated: true,
435
+ x: 2,
436
+ },
437
+ response: "ok",
438
+ },
439
+ result_js_1.Result.Ok(evento_js_1.EventoResult.Continue),
440
+ ]);
441
+ (0, vitest_1.expect)(send.fn.mock.calls[4]).toEqual([
442
+ "regular-second-validate",
443
+ vitest_1.expect.objectContaining({
444
+ ctx: vitest_1.expect.anything(),
445
+ enRequest: { x: 2 },
446
+ encoder: reqRes,
447
+ request,
448
+ send,
449
+ }),
450
+ result_js_1.Result.Ok(option_js_1.Option.Some({ validated: true, x: 2, step: "regular-second" })),
451
+ ]);
452
+ (0, vitest_1.expect)(send.fn.mock.calls[6]).toEqual([
453
+ "regular-second-handle",
454
+ vitest_1.expect.objectContaining({
455
+ ctx: vitest_1.expect.anything(),
456
+ enRequest: { x: 2 },
457
+ encoder: reqRes,
458
+ request,
459
+ send,
460
+ validated: { validated: true, x: 2, step: "regular-second" },
461
+ }),
462
+ {
463
+ encoderInfo: "test-encoder",
464
+ req: {
465
+ step: "regular-second",
466
+ validated: true,
467
+ x: 2,
468
+ },
469
+ response: "ok",
470
+ },
471
+ result_js_1.Result.Ok(evento_js_1.EventoResult.Continue),
472
+ ]);
473
+ });
474
+ (0, vitest_1.it)("stop:regular trigger", async () => {
475
+ const request = new Request("http://example.com", { method: "POST", body: JSON.stringify({ x: 2, stop: true }) });
476
+ await evo.trigger({
477
+ send,
478
+ request,
479
+ });
480
+ (0, vitest_1.expect)(send.fn.mock.calls.map((i) => i[0])).toEqual([
481
+ "regular-first-validate",
482
+ "start",
483
+ "send",
484
+ "regular-first-handle",
485
+ "done",
486
+ ]);
487
+ (0, vitest_1.expect)(send.fn.mock.calls[0]).toEqual([
488
+ "regular-first-validate",
489
+ vitest_1.expect.objectContaining({
490
+ ctx: vitest_1.expect.anything(),
491
+ enRequest: { x: 2, stop: true },
492
+ encoder: reqRes,
493
+ request,
494
+ send,
495
+ }),
496
+ result_js_1.Result.Ok(option_js_1.Option.Some({ validated: true, x: 2, stop: true, step: "regular-first" })),
497
+ ]);
498
+ (0, vitest_1.expect)(send.fn.mock.calls[3]).toEqual([
499
+ "regular-first-handle",
500
+ vitest_1.expect.objectContaining({
501
+ ctx: vitest_1.expect.anything(),
502
+ enRequest: { x: 2, stop: true },
503
+ encoder: reqRes,
504
+ request,
505
+ send,
506
+ validated: { validated: true, x: 2, stop: true, step: "regular-first" },
507
+ }),
508
+ {
509
+ encoderInfo: "test-encoder",
510
+ req: {
511
+ step: "regular-first",
512
+ validated: true,
513
+ stop: true,
514
+ x: 2,
515
+ },
516
+ response: "ok",
517
+ },
518
+ result_js_1.Result.Ok(evento_js_1.EventoResult.Stop),
519
+ ]);
520
+ });
521
+ });
522
+ //# sourceMappingURL=evento.test.js.map