@forgehive/task 0.2.0 → 0.2.2
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/README.md +164 -10
- package/dist/index.d.ts +20 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -6
- package/dist/index.js.map +1 -1
- package/dist/test/add-listener-with-boundaries.test.js +175 -200
- package/dist/test/add-listener-with-boundaries.test.js.map +1 -1
- package/dist/test/add-listener.test.js +80 -52
- package/dist/test/add-listener.test.js.map +1 -1
- package/dist/test/execution-record-boundaries.test.d.ts +2 -0
- package/dist/test/execution-record-boundaries.test.d.ts.map +1 -0
- package/dist/test/execution-record-boundaries.test.js +220 -0
- package/dist/test/execution-record-boundaries.test.js.map +1 -0
- package/dist/test/task-with-boundaries.test.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +78 -28
- package/src/test/add-listener-with-boundaries.test.ts +186 -242
- package/src/test/add-listener.test.ts +90 -64
- package/src/test/execution-record-boundaries.test.ts +266 -0
- package/src/test/task-with-boundaries.test.ts +3 -3
|
@@ -1,260 +1,235 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const index_1 = require("../index");
|
|
4
|
-
describe('Listener with boundaries
|
|
5
|
-
it('Should
|
|
4
|
+
describe('Listener with boundaries', () => {
|
|
5
|
+
it('Should add a listener to the task and capture boundaries', async () => {
|
|
6
6
|
const tape = [];
|
|
7
|
-
// Create a schema for the task
|
|
8
|
-
const schema = new index_1.Schema({
|
|
9
|
-
value: index_1.Schema.number()
|
|
10
|
-
});
|
|
11
|
-
// Define the boundaries
|
|
12
|
-
const boundaries = {
|
|
13
|
-
fetchExternalData: async () => {
|
|
14
|
-
return { foo: false };
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
// Create the task using createTask
|
|
18
7
|
const task = (0, index_1.createTask)({
|
|
19
|
-
name: '
|
|
20
|
-
schema
|
|
21
|
-
|
|
8
|
+
name: 'test',
|
|
9
|
+
schema: new index_1.Schema({
|
|
10
|
+
value: index_1.Schema.number()
|
|
11
|
+
}),
|
|
12
|
+
boundaries: {
|
|
13
|
+
getTen: async () => {
|
|
14
|
+
return 10;
|
|
15
|
+
}
|
|
16
|
+
},
|
|
22
17
|
fn: async (argv, boundaries) => {
|
|
23
|
-
const
|
|
24
|
-
return
|
|
18
|
+
const ten = await boundaries.getTen();
|
|
19
|
+
return { value: argv.value, foo: ten > 5 };
|
|
25
20
|
}
|
|
26
21
|
});
|
|
27
22
|
task.addListener((record) => {
|
|
28
23
|
tape.push(record);
|
|
29
24
|
});
|
|
30
25
|
await task.run({ value: 5 });
|
|
31
|
-
expect(tape
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
26
|
+
expect(tape).toEqual([{
|
|
27
|
+
input: { value: 5 },
|
|
28
|
+
output: { value: 5, foo: true },
|
|
29
|
+
boundaries: {
|
|
30
|
+
getTen: [{
|
|
31
|
+
input: [],
|
|
32
|
+
output: 10
|
|
33
|
+
}]
|
|
34
|
+
},
|
|
35
|
+
taskName: 'test',
|
|
36
|
+
metadata: {},
|
|
37
|
+
type: 'success'
|
|
38
|
+
}]);
|
|
39
39
|
});
|
|
40
|
-
it('Should
|
|
40
|
+
it('Should add a listener to the task and capture boundaries with error', async () => {
|
|
41
41
|
const tape = [];
|
|
42
|
-
// Create a schema for the task
|
|
43
|
-
const schema = new index_1.Schema({
|
|
44
|
-
value: index_1.Schema.number()
|
|
45
|
-
});
|
|
46
|
-
// Define the boundaries
|
|
47
|
-
const boundaries = {
|
|
48
|
-
fetchExternalData: async () => {
|
|
49
|
-
return { foo: false };
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
// Create the task using createTask
|
|
53
42
|
const task = (0, index_1.createTask)({
|
|
54
|
-
name: '
|
|
55
|
-
schema
|
|
56
|
-
|
|
43
|
+
name: 'test',
|
|
44
|
+
schema: new index_1.Schema({
|
|
45
|
+
value: index_1.Schema.number()
|
|
46
|
+
}),
|
|
47
|
+
boundaries: {
|
|
48
|
+
getTen: async () => {
|
|
49
|
+
throw new Error('Network error');
|
|
50
|
+
}
|
|
51
|
+
},
|
|
57
52
|
fn: async (argv, boundaries) => {
|
|
58
|
-
const
|
|
59
|
-
return
|
|
53
|
+
const ten = await boundaries.getTen();
|
|
54
|
+
return { value: argv.value, foo: ten > 5 };
|
|
60
55
|
}
|
|
61
56
|
});
|
|
62
57
|
task.addListener((record) => {
|
|
63
58
|
tape.push(record);
|
|
64
59
|
});
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
60
|
+
try {
|
|
61
|
+
await task.run({ value: 5 });
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
// Expected error
|
|
65
|
+
}
|
|
66
|
+
expect(tape).toEqual([{
|
|
67
|
+
input: { value: 5 },
|
|
68
|
+
error: 'Network error',
|
|
69
|
+
boundaries: {
|
|
70
|
+
getTen: [{
|
|
71
|
+
input: [],
|
|
72
|
+
error: 'Network error'
|
|
73
|
+
}]
|
|
74
|
+
},
|
|
75
|
+
taskName: 'test',
|
|
76
|
+
metadata: {},
|
|
77
|
+
type: 'error'
|
|
78
|
+
}]);
|
|
82
79
|
});
|
|
83
|
-
it('Should
|
|
80
|
+
it('Should add a listener to the task and capture boundaries with dynamic parameters', async () => {
|
|
84
81
|
const tape = [];
|
|
85
|
-
// Create a schema for the task
|
|
86
|
-
const schema = new index_1.Schema({
|
|
87
|
-
value: index_1.Schema.number().optional()
|
|
88
|
-
});
|
|
89
|
-
// Define the boundaries
|
|
90
|
-
const boundaries = {
|
|
91
|
-
fetchExternalData: async () => {
|
|
92
|
-
return { foo: false };
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
// Create the task using createTask
|
|
96
82
|
const task = (0, index_1.createTask)({
|
|
97
|
-
name: '
|
|
98
|
-
schema,
|
|
99
|
-
boundaries
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (typeof argv.value === 'undefined') {
|
|
103
|
-
throw new Error('Value is required');
|
|
83
|
+
name: 'test',
|
|
84
|
+
schema: new index_1.Schema({}),
|
|
85
|
+
boundaries: {
|
|
86
|
+
addNumbers: async (a, b) => {
|
|
87
|
+
return a + b;
|
|
104
88
|
}
|
|
105
|
-
|
|
89
|
+
},
|
|
90
|
+
fn: async (argv, boundaries) => {
|
|
91
|
+
const sum = await boundaries.addNumbers(3, 7);
|
|
92
|
+
return { value: sum, foo: sum > 5 };
|
|
106
93
|
}
|
|
107
94
|
});
|
|
108
95
|
task.addListener((record) => {
|
|
109
96
|
tape.push(record);
|
|
110
97
|
});
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
98
|
+
await task.run({});
|
|
99
|
+
expect(tape).toEqual([{
|
|
100
|
+
input: {},
|
|
101
|
+
output: { value: 10, foo: true },
|
|
102
|
+
boundaries: {
|
|
103
|
+
addNumbers: [{
|
|
104
|
+
input: [3, 7],
|
|
105
|
+
output: 10
|
|
106
|
+
}]
|
|
107
|
+
},
|
|
108
|
+
taskName: 'test',
|
|
109
|
+
metadata: {},
|
|
110
|
+
type: 'success'
|
|
111
|
+
}]);
|
|
125
112
|
});
|
|
126
|
-
it('Should
|
|
113
|
+
it('Should add a listener to the task and capture boundaries with optional parameters', async () => {
|
|
127
114
|
const tape = [];
|
|
128
|
-
// Create a schema for the task
|
|
129
|
-
const schema = new index_1.Schema({
|
|
130
|
-
value: index_1.Schema.number().optional()
|
|
131
|
-
});
|
|
132
|
-
// Define the boundaries
|
|
133
|
-
const boundaries = {
|
|
134
|
-
fetchExternalData: async () => {
|
|
135
|
-
return { foo: false };
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
// Create the task using createTask
|
|
139
115
|
const task = (0, index_1.createTask)({
|
|
140
|
-
name: '
|
|
141
|
-
schema
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
116
|
+
name: 'test',
|
|
117
|
+
schema: new index_1.Schema({
|
|
118
|
+
value: index_1.Schema.number().optional()
|
|
119
|
+
}),
|
|
120
|
+
boundaries: {
|
|
121
|
+
processValue: async (val) => {
|
|
122
|
+
return val || 0;
|
|
147
123
|
}
|
|
148
|
-
|
|
124
|
+
},
|
|
125
|
+
fn: async (argv, boundaries) => {
|
|
126
|
+
const processed = await boundaries.processValue(argv.value);
|
|
127
|
+
return { value: processed, foo: processed > 5 };
|
|
149
128
|
}
|
|
150
129
|
});
|
|
151
130
|
task.addListener((record) => {
|
|
152
131
|
tape.push(record);
|
|
153
132
|
});
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
]
|
|
168
|
-
});
|
|
169
|
-
expect(tape[1].input).toEqual({ value: 5 });
|
|
170
|
-
expect(tape[1].output).toEqual({ value: 5, foo: false });
|
|
171
|
-
expect(tape[1].boundaries).toEqual({
|
|
172
|
-
fetchExternalData: [
|
|
173
|
-
{ input: [], output: { foo: false } }
|
|
174
|
-
]
|
|
175
|
-
});
|
|
133
|
+
await task.run({ value: undefined });
|
|
134
|
+
expect(tape).toEqual([{
|
|
135
|
+
input: { value: undefined },
|
|
136
|
+
output: { value: 0, foo: false },
|
|
137
|
+
boundaries: {
|
|
138
|
+
processValue: [{
|
|
139
|
+
input: [undefined],
|
|
140
|
+
output: 0
|
|
141
|
+
}]
|
|
142
|
+
},
|
|
143
|
+
taskName: 'test',
|
|
144
|
+
metadata: {},
|
|
145
|
+
type: 'success'
|
|
146
|
+
}]);
|
|
176
147
|
});
|
|
177
|
-
it('Should
|
|
148
|
+
it('Should add a listener to the task and capture boundaries with multiple calls', async () => {
|
|
178
149
|
const tape = [];
|
|
179
|
-
// Create a schema for the task
|
|
180
|
-
const schema = new index_1.Schema({
|
|
181
|
-
value: index_1.Schema.number()
|
|
182
|
-
});
|
|
183
|
-
// Define the boundaries
|
|
184
|
-
const boundaries = {
|
|
185
|
-
fetchExternalData: async () => {
|
|
186
|
-
return { foo: false };
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
// Create the task using createTask
|
|
190
150
|
const task = (0, index_1.createTask)({
|
|
191
|
-
name: '
|
|
192
|
-
schema
|
|
193
|
-
|
|
151
|
+
name: 'test',
|
|
152
|
+
schema: new index_1.Schema({
|
|
153
|
+
value: index_1.Schema.number()
|
|
154
|
+
}),
|
|
155
|
+
boundaries: {
|
|
156
|
+
multiplyByTwo: async (num) => {
|
|
157
|
+
return num * 2;
|
|
158
|
+
}
|
|
159
|
+
},
|
|
194
160
|
fn: async (argv, boundaries) => {
|
|
195
|
-
await boundaries.
|
|
196
|
-
await boundaries.
|
|
197
|
-
return { foo:
|
|
161
|
+
const doubled = await boundaries.multiplyByTwo(argv.value);
|
|
162
|
+
const quadrupled = await boundaries.multiplyByTwo(doubled);
|
|
163
|
+
return { foo: quadrupled > 10 };
|
|
198
164
|
}
|
|
199
165
|
});
|
|
200
166
|
task.addListener((record) => {
|
|
201
167
|
tape.push(record);
|
|
202
168
|
});
|
|
203
|
-
await task.run({ value:
|
|
204
|
-
expect(tape
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
169
|
+
await task.run({ value: 3 });
|
|
170
|
+
expect(tape).toEqual([{
|
|
171
|
+
input: { value: 3 },
|
|
172
|
+
output: { foo: true },
|
|
173
|
+
boundaries: {
|
|
174
|
+
multiplyByTwo: [
|
|
175
|
+
{
|
|
176
|
+
input: [3],
|
|
177
|
+
output: 6
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
input: [6],
|
|
181
|
+
output: 12
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
taskName: 'test',
|
|
186
|
+
metadata: {},
|
|
187
|
+
type: 'success'
|
|
188
|
+
}]);
|
|
213
189
|
});
|
|
214
|
-
it('Should
|
|
190
|
+
it('Should add a listener to the task and capture boundaries with mixed results', async () => {
|
|
215
191
|
const tape = [];
|
|
216
|
-
// Create a schema for the task
|
|
217
|
-
const schema = new index_1.Schema({
|
|
218
|
-
value: index_1.Schema.number()
|
|
219
|
-
});
|
|
220
|
-
// Define the boundaries
|
|
221
|
-
const boundaries = {
|
|
222
|
-
add: async (value) => {
|
|
223
|
-
return value + 1;
|
|
224
|
-
},
|
|
225
|
-
subtract: async (value) => {
|
|
226
|
-
return value - 1;
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
// Create the task using createTask
|
|
230
192
|
const task = (0, index_1.createTask)({
|
|
231
|
-
name: '
|
|
232
|
-
schema
|
|
233
|
-
|
|
193
|
+
name: 'test',
|
|
194
|
+
schema: new index_1.Schema({
|
|
195
|
+
value: index_1.Schema.number()
|
|
196
|
+
}),
|
|
197
|
+
boundaries: {
|
|
198
|
+
getResult: async (num) => {
|
|
199
|
+
if (num > 5) {
|
|
200
|
+
return num * 2;
|
|
201
|
+
}
|
|
202
|
+
throw new Error('Number too small');
|
|
203
|
+
}
|
|
204
|
+
},
|
|
234
205
|
fn: async (argv, boundaries) => {
|
|
235
|
-
let
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
206
|
+
let result = 0;
|
|
207
|
+
try {
|
|
208
|
+
result = await boundaries.getResult(argv.value);
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
// Continue with default
|
|
212
|
+
}
|
|
213
|
+
return result;
|
|
240
214
|
}
|
|
241
215
|
});
|
|
242
216
|
task.addListener((record) => {
|
|
243
217
|
tape.push(record);
|
|
244
218
|
});
|
|
245
|
-
await task.run({ value:
|
|
246
|
-
expect(tape
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
219
|
+
await task.run({ value: 3 });
|
|
220
|
+
expect(tape).toEqual([{
|
|
221
|
+
input: { value: 3 },
|
|
222
|
+
output: 0,
|
|
223
|
+
boundaries: {
|
|
224
|
+
getResult: [{
|
|
225
|
+
input: [3],
|
|
226
|
+
error: 'Number too small'
|
|
227
|
+
}]
|
|
228
|
+
},
|
|
229
|
+
taskName: 'test',
|
|
230
|
+
metadata: {},
|
|
231
|
+
type: 'success'
|
|
232
|
+
}]);
|
|
258
233
|
});
|
|
259
234
|
});
|
|
260
235
|
//# sourceMappingURL=add-listener-with-boundaries.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-listener-with-boundaries.test.js","sourceRoot":"","sources":["../../src/test/add-listener-with-boundaries.test.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"add-listener-with-boundaries.test.js","sourceRoot":"","sources":["../../src/test/add-listener-with-boundaries.test.ts"],"names":[],"mappings":"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"}
|