@forgehive/task 0.1.8 → 0.1.9
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/test/safe-replay.test.js +35 -0
- package/dist/test/safe-replay.test.js.map +1 -1
- package/dist/utils/boundary.d.ts +2 -2
- package/dist/utils/boundary.d.ts.map +1 -1
- package/dist/utils/boundary.js +1 -1
- package/dist/utils/boundary.js.map +1 -1
- package/package.json +1 -1
- package/src/test/safe-replay.test.ts +42 -0
- package/src/utils/boundary.ts +3 -3
|
@@ -155,5 +155,40 @@ describe('safeReplay functionality tests', () => {
|
|
|
155
155
|
expect(replayLog.error).toBeDefined();
|
|
156
156
|
expect(replayLog.boundaries.fetchData[0].error).toBe('API error: Rate limit exceeded');
|
|
157
157
|
});
|
|
158
|
+
it('Should handle boundaries with both output and error as null', async () => {
|
|
159
|
+
// Create a manual execution log with null output and error in the boundary
|
|
160
|
+
const executionLog = {
|
|
161
|
+
input: { ticker: 'AAPL' },
|
|
162
|
+
output: { ticker: 'AAPL', price: 160.23 },
|
|
163
|
+
boundaries: {
|
|
164
|
+
fetchData: [
|
|
165
|
+
{
|
|
166
|
+
input: ['AAPL'],
|
|
167
|
+
output: 160.23,
|
|
168
|
+
error: null
|
|
169
|
+
}
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
// Use replay mode for fetchData
|
|
174
|
+
const [replayResult, replayError, replayLog] = await getTickerPrice.safeReplay(executionLog, {
|
|
175
|
+
boundaries: {
|
|
176
|
+
fetchData: 'replay',
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
// Verify the replay execution
|
|
180
|
+
expect(replayError).toBeNull();
|
|
181
|
+
expect(replayResult).toMatchObject({
|
|
182
|
+
ticker: 'AAPL',
|
|
183
|
+
price: 160.23
|
|
184
|
+
});
|
|
185
|
+
// The log should contain the output from the boundary
|
|
186
|
+
expect(replayLog.output).toMatchObject({
|
|
187
|
+
ticker: 'AAPL',
|
|
188
|
+
price: 160.23
|
|
189
|
+
});
|
|
190
|
+
expect(replayLog.boundaries.fetchData[0].output).toBe(160.23);
|
|
191
|
+
expect(replayLog.boundaries.fetchData[0].error).toBeNull();
|
|
192
|
+
});
|
|
158
193
|
});
|
|
159
194
|
//# sourceMappingURL=safe-replay.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-replay.test.js","sourceRoot":"","sources":["../../src/test/safe-replay.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"safe-replay.test.js","sourceRoot":"","sources":["../../src/test/safe-replay.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/boundary.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export type BoundaryFunction<TReturn = any> = (...args: any[]) => Promise<TRetur
|
|
|
14
14
|
export type BoundarySuccessRecord<TInput = unknown[], TOutput = unknown> = {
|
|
15
15
|
input: TInput;
|
|
16
16
|
output: TOutput;
|
|
17
|
-
error?:
|
|
17
|
+
error?: null;
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
20
20
|
* Error record for a boundary function call
|
|
@@ -22,7 +22,7 @@ export type BoundarySuccessRecord<TInput = unknown[], TOutput = unknown> = {
|
|
|
22
22
|
*/
|
|
23
23
|
export type BoundaryErrorRecord<TInput = unknown[]> = {
|
|
24
24
|
input: TInput;
|
|
25
|
-
output?:
|
|
25
|
+
output?: null;
|
|
26
26
|
error: string;
|
|
27
27
|
};
|
|
28
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../src/utils/boundary.ts"],"names":[],"mappings":"AAGA,KAAK,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;AAEnD,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,CAAA;AAEpE;;;;GAIG;AAEH,MAAM,MAAM,gBAAgB,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAElF;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,CAAC,MAAM,GAAG,OAAO,EAAE,EAAE,OAAO,GAAG,OAAO,IAAI;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../src/utils/boundary.ts"],"names":[],"mappings":"AAGA,KAAK,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;AAEnD,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,CAAA;AAEpE;;;;GAIG;AAEH,MAAM,MAAM,gBAAgB,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAElF;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,CAAC,MAAM,GAAG,OAAO,EAAE,EAAE,OAAO,GAAG,OAAO,IAAI;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,IAAI,CAAC;CACd,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,CAAC,MAAM,GAAG,OAAO,EAAE,IAAI;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,MAAM,GAAG,OAAO,EAAE,EAAE,OAAO,GAAG,OAAO,IAC9D,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,IAAI,SAAS,gBAAgB,GAAG,gBAAgB;IACvF,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;IACtD,OAAO,EAAE,MAAM,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACjF,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAC9F,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,CAAA;IAChC,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,UAAU,EAAE,MAAM,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;CACrF;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;AAEzD;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;KAChE,CAAC,IAAI,MAAM,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9C,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,IAAI,SAAS,YAAY,EAAE,IAAI,IAAI,KAAG,uBAAuB,CAAC,IAAI,SAAS,gBAAgB,GAAG,IAAI,GAAG,KAAK,CAiIxI,CAAA"}
|
package/dist/utils/boundary.js
CHANGED
|
@@ -72,7 +72,7 @@ const createBoundary = (fn) => {
|
|
|
72
72
|
throw new Error('No tape value for this inputs');
|
|
73
73
|
}
|
|
74
74
|
// Check if this is an error record by checking if error property exists
|
|
75
|
-
if (record.error !== undefined) {
|
|
75
|
+
if (record.error !== undefined && record.error !== null) {
|
|
76
76
|
throw new Error(record.error);
|
|
77
77
|
}
|
|
78
78
|
return record.output;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../src/utils/boundary.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgC;AA2EzB,MAAM,cAAc,GAAG,CAA4B,EAAQ,EAAyE,EAAE;IAK3I,IAAI,MAAM,GAAiB,EAAE,CAAA;IAC7B,IAAI,SAAS,GAAiB,EAAE,CAAA;IAChC,IAAI,IAAI,GAAS,OAAO,CAAA;IACxB,IAAI,MAAM,GAAY,KAAK,CAAA;IAE3B,MAAM,SAAS,GAAG,KAAK,EAAE,GAAG,IAAsB,EAA6B,EAAE;QAC/E,MAAM,UAAU,GAAG,CAAC,MAAiB,EAAE,IAAkB,EAA0B,EAAE;YACnF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;oBAAC,OAAO,KAAK,CAAA;gBAAC,CAAC;gBAEjD,IAAI,KAAK,CAAA;gBACT,IAAI,CAAC;oBACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,KAAK,GAAG,CAAC,CAAA;gBACX,CAAC;gBAED,OAAO,OAAO,KAAK,KAAK,WAAW,CAAA;YACrC,CAAC,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACf,CAAC,CAAA;QAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;YAE1C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC,KAAK,IAA+B,EAAE;oBAClD,OAAO,MAAM,CAAC,MAAqC,CAAA;gBACrD,CAAC,CAAC,EAAE,CAAA;YACN,CAAC;QACH,CAAC;QAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,KAAK,IAA+B,EAAE;gBAClD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;gBAE1C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;oBAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;gBAClD,CAAC;gBAED,wEAAwE;gBACxE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../src/utils/boundary.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -186,4 +186,46 @@ describe('safeReplay functionality tests', () => {
|
|
|
186
186
|
expect(replayLog.error).toBeDefined()
|
|
187
187
|
expect(replayLog.boundaries.fetchData[0].error).toBe('API error: Rate limit exceeded')
|
|
188
188
|
})
|
|
189
|
+
|
|
190
|
+
it('Should handle boundaries with both output and error as null', async () => {
|
|
191
|
+
// Create a manual execution log with null output and error in the boundary
|
|
192
|
+
const executionLog: ExecutionRecord = {
|
|
193
|
+
input: { ticker: 'AAPL' },
|
|
194
|
+
output: { ticker: 'AAPL', price: 160.23 },
|
|
195
|
+
boundaries: {
|
|
196
|
+
fetchData: [
|
|
197
|
+
{
|
|
198
|
+
input: ['AAPL'],
|
|
199
|
+
output: 160.23,
|
|
200
|
+
error: null
|
|
201
|
+
}
|
|
202
|
+
]
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Use replay mode for fetchData
|
|
207
|
+
const [replayResult, replayError, replayLog] = await getTickerPrice.safeReplay(
|
|
208
|
+
executionLog,
|
|
209
|
+
{
|
|
210
|
+
boundaries: {
|
|
211
|
+
fetchData: 'replay',
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
// Verify the replay execution
|
|
217
|
+
expect(replayError).toBeNull()
|
|
218
|
+
expect(replayResult).toMatchObject({
|
|
219
|
+
ticker: 'AAPL',
|
|
220
|
+
price: 160.23
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
// The log should contain the output from the boundary
|
|
224
|
+
expect(replayLog.output).toMatchObject({
|
|
225
|
+
ticker: 'AAPL',
|
|
226
|
+
price: 160.23
|
|
227
|
+
})
|
|
228
|
+
expect(replayLog.boundaries.fetchData[0].output).toBe(160.23)
|
|
229
|
+
expect(replayLog.boundaries.fetchData[0].error).toBeNull()
|
|
230
|
+
})
|
|
189
231
|
})
|
package/src/utils/boundary.ts
CHANGED
|
@@ -21,7 +21,7 @@ export type BoundaryFunction<TReturn = any> = (...args: any[]) => Promise<TRetur
|
|
|
21
21
|
export type BoundarySuccessRecord<TInput = unknown[], TOutput = unknown> = {
|
|
22
22
|
input: TInput;
|
|
23
23
|
output: TOutput;
|
|
24
|
-
error?:
|
|
24
|
+
error?: null;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
/**
|
|
@@ -30,7 +30,7 @@ export type BoundarySuccessRecord<TInput = unknown[], TOutput = unknown> = {
|
|
|
30
30
|
*/
|
|
31
31
|
export type BoundaryErrorRecord<TInput = unknown[]> = {
|
|
32
32
|
input: TInput;
|
|
33
|
-
output?:
|
|
33
|
+
output?: null;
|
|
34
34
|
error: string;
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -120,7 +120,7 @@ export const createBoundary = <Func extends BaseBoundary>(fn: Func): WrappedBoun
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
// Check if this is an error record by checking if error property exists
|
|
123
|
-
if (record.error !== undefined) {
|
|
123
|
+
if (record.error !== undefined && record.error !== null) {
|
|
124
124
|
throw new Error(record.error)
|
|
125
125
|
}
|
|
126
126
|
|