@forgehive/record-tape 0.2.0 → 0.2.1
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 +385 -0
- package/dist/index.d.ts +10 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -63
- package/dist/index.js.map +1 -1
- package/dist/tests/data-methods.test.d.ts +2 -0
- package/dist/tests/data-methods.test.d.ts.map +1 -0
- package/dist/tests/data-methods.test.js +129 -0
- package/dist/tests/data-methods.test.js.map +1 -0
- package/dist/tests/index.test.js +2 -2
- package/dist/tests/index.test.js.map +1 -1
- package/dist/tests/log-format.test.js +8 -8
- package/dist/tests/log-format.test.js.map +1 -1
- package/dist/tests/safe-run.test.js +104 -265
- package/dist/tests/safe-run.test.js.map +1 -1
- package/dist/tests/save.test.js +13 -13
- package/dist/tests/save.test.js.map +1 -1
- package/dist/tests/task-listener.test.js +21 -31
- package/dist/tests/task-listener.test.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +20 -88
- package/src/tests/data-methods.test.ts +150 -0
- package/src/tests/index.test.ts +3 -8
- package/src/tests/log-format.test.ts +8 -8
- package/src/tests/safe-run.test.ts +108 -296
- package/src/tests/save.test.ts +13 -13
- package/src/tests/task-listener.test.ts +22 -41
- package/src/tests/mode.test.ts +0 -106
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../index");
|
|
4
|
+
describe('RecordTape Data Methods', () => {
|
|
5
|
+
let tape;
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
tape = new index_1.RecordTape();
|
|
8
|
+
});
|
|
9
|
+
describe('getLength', () => {
|
|
10
|
+
test('should return 0 for empty tape', () => {
|
|
11
|
+
expect(tape.getLength()).toBe(0);
|
|
12
|
+
});
|
|
13
|
+
test('should return correct length after adding records', () => {
|
|
14
|
+
const record1 = {
|
|
15
|
+
input: { userId: 1 },
|
|
16
|
+
output: { name: 'John' },
|
|
17
|
+
taskName: 'getUser',
|
|
18
|
+
boundaries: {},
|
|
19
|
+
type: 'success'
|
|
20
|
+
};
|
|
21
|
+
const record2 = {
|
|
22
|
+
input: { userId: 2 },
|
|
23
|
+
output: { name: 'Jane' },
|
|
24
|
+
taskName: 'getUser',
|
|
25
|
+
boundaries: {},
|
|
26
|
+
type: 'success'
|
|
27
|
+
};
|
|
28
|
+
tape.push(record1);
|
|
29
|
+
expect(tape.getLength()).toBe(1);
|
|
30
|
+
tape.push(record2);
|
|
31
|
+
expect(tape.getLength()).toBe(2);
|
|
32
|
+
});
|
|
33
|
+
test('should return correct length after removing records', () => {
|
|
34
|
+
const record = {
|
|
35
|
+
input: { userId: 1 },
|
|
36
|
+
output: { name: 'John' },
|
|
37
|
+
taskName: 'getUser',
|
|
38
|
+
boundaries: {},
|
|
39
|
+
type: 'success'
|
|
40
|
+
};
|
|
41
|
+
tape.push(record);
|
|
42
|
+
tape.push(record);
|
|
43
|
+
expect(tape.getLength()).toBe(2);
|
|
44
|
+
tape.shift();
|
|
45
|
+
expect(tape.getLength()).toBe(1);
|
|
46
|
+
tape.shift();
|
|
47
|
+
expect(tape.getLength()).toBe(0);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('shift', () => {
|
|
51
|
+
test('should return undefined for empty tape', () => {
|
|
52
|
+
expect(tape.shift()).toBeUndefined();
|
|
53
|
+
});
|
|
54
|
+
test('should return and remove first record', () => {
|
|
55
|
+
const record1 = {
|
|
56
|
+
input: { userId: 1 },
|
|
57
|
+
output: { name: 'John' },
|
|
58
|
+
taskName: 'getUser',
|
|
59
|
+
boundaries: {},
|
|
60
|
+
type: 'success'
|
|
61
|
+
};
|
|
62
|
+
const record2 = {
|
|
63
|
+
input: { userId: 2 },
|
|
64
|
+
output: { name: 'Jane' },
|
|
65
|
+
taskName: 'getUser',
|
|
66
|
+
boundaries: {},
|
|
67
|
+
type: 'success'
|
|
68
|
+
};
|
|
69
|
+
tape.push(record1);
|
|
70
|
+
tape.push(record2);
|
|
71
|
+
const shiftedRecord = tape.shift();
|
|
72
|
+
// Should return the first record
|
|
73
|
+
expect(shiftedRecord).toEqual(expect.objectContaining({
|
|
74
|
+
taskName: 'getUser',
|
|
75
|
+
input: { userId: 1 },
|
|
76
|
+
output: { name: 'John' },
|
|
77
|
+
type: 'success'
|
|
78
|
+
}));
|
|
79
|
+
// Should have removed the first record
|
|
80
|
+
expect(tape.getLength()).toBe(1);
|
|
81
|
+
expect(tape.getLog()[0]).toEqual(expect.objectContaining({
|
|
82
|
+
taskName: 'getUser',
|
|
83
|
+
input: { userId: 2 },
|
|
84
|
+
output: { name: 'Jane' },
|
|
85
|
+
type: 'success'
|
|
86
|
+
}));
|
|
87
|
+
});
|
|
88
|
+
test('should work correctly with multiple shifts', () => {
|
|
89
|
+
const records = [
|
|
90
|
+
{
|
|
91
|
+
input: { userId: 1 },
|
|
92
|
+
output: { name: 'John' },
|
|
93
|
+
taskName: 'getUser',
|
|
94
|
+
boundaries: {},
|
|
95
|
+
type: 'success'
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
input: { userId: 2 },
|
|
99
|
+
output: { name: 'Jane' },
|
|
100
|
+
taskName: 'getUser',
|
|
101
|
+
boundaries: {},
|
|
102
|
+
type: 'success'
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
input: { userId: 3 },
|
|
106
|
+
output: { name: 'Bob' },
|
|
107
|
+
taskName: 'getUser',
|
|
108
|
+
boundaries: {},
|
|
109
|
+
type: 'success'
|
|
110
|
+
}
|
|
111
|
+
];
|
|
112
|
+
records.forEach(record => tape.push(record));
|
|
113
|
+
expect(tape.getLength()).toBe(3);
|
|
114
|
+
const first = tape.shift();
|
|
115
|
+
expect(first === null || first === void 0 ? void 0 : first.input).toEqual({ userId: 1 });
|
|
116
|
+
expect(tape.getLength()).toBe(2);
|
|
117
|
+
const second = tape.shift();
|
|
118
|
+
expect(second === null || second === void 0 ? void 0 : second.input).toEqual({ userId: 2 });
|
|
119
|
+
expect(tape.getLength()).toBe(1);
|
|
120
|
+
const third = tape.shift();
|
|
121
|
+
expect(third === null || third === void 0 ? void 0 : third.input).toEqual({ userId: 3 });
|
|
122
|
+
expect(tape.getLength()).toBe(0);
|
|
123
|
+
const fourth = tape.shift();
|
|
124
|
+
expect(fourth).toBeUndefined();
|
|
125
|
+
expect(tape.getLength()).toBe(0);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=data-methods.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-methods.test.js","sourceRoot":"","sources":["../../src/tests/data-methods.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tests/index.test.js
CHANGED
|
@@ -74,8 +74,8 @@ describe('Base tests', () => {
|
|
|
74
74
|
});
|
|
75
75
|
it('Should create a new tape with generic types', () => {
|
|
76
76
|
const tape = new index_1.RecordTape({ path: emptyPath });
|
|
77
|
-
tape.
|
|
78
|
-
tape.
|
|
77
|
+
tape.push({ input: [{ name: 'test' }], output: { age: 1 }, type: 'success', boundaries: {}, taskName: 'test' });
|
|
78
|
+
tape.push({ input: [{ name: 'test' }], error: 'test', type: 'error', boundaries: {}, taskName: 'test' });
|
|
79
79
|
const data = tape.getLog();
|
|
80
80
|
expect(data.length).toBe(2);
|
|
81
81
|
const input = data[0].input;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/tests/index.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4B;AAC5B,oCAAqC;AAErC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;AAE3D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC/C,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QAChD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAI5E,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAwB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE3B,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC3C,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAA;QAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACtC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;QAC1C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/tests/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,23 +4,23 @@ const index_1 = require("../index");
|
|
|
4
4
|
describe('Test log item formating', () => {
|
|
5
5
|
it('Should format a log items into valid JSON', async () => {
|
|
6
6
|
const tape = new index_1.RecordTape({});
|
|
7
|
-
tape.
|
|
8
|
-
tape.
|
|
7
|
+
tape.push({ input: true, output: true, boundaries: {}, type: 'success', taskName: 'name' });
|
|
8
|
+
tape.push({ input: true, error: 'invalid data', boundaries: {}, type: 'error', taskName: 'name' });
|
|
9
9
|
const str = tape.stringify();
|
|
10
|
-
expect(str).toEqual(`{"
|
|
11
|
-
{"
|
|
10
|
+
expect(str).toEqual(`{"input":true,"output":true,"boundaries":{},"type":"success","taskName":"name","metadata":{}}
|
|
11
|
+
{"input":true,"error":"invalid data","boundaries":{},"type":"error","taskName":"name","metadata":{}}
|
|
12
12
|
`);
|
|
13
13
|
});
|
|
14
14
|
it('Should parse the string to a list of records', async () => {
|
|
15
15
|
const tape = new index_1.RecordTape({});
|
|
16
|
-
tape.
|
|
17
|
-
tape.
|
|
16
|
+
tape.push({ input: true, output: true, boundaries: {}, type: 'success', taskName: 'name' });
|
|
17
|
+
tape.push({ input: true, error: 'invalid data', boundaries: {}, type: 'error', taskName: 'name' });
|
|
18
18
|
const str = tape.stringify();
|
|
19
19
|
const tape2 = new index_1.RecordTape({});
|
|
20
20
|
const records = tape2.parse(str);
|
|
21
21
|
expect(records).toEqual([
|
|
22
|
-
{
|
|
23
|
-
{
|
|
22
|
+
{ input: true, output: true, boundaries: {}, type: 'success', taskName: 'name', metadata: {} },
|
|
23
|
+
{ input: true, error: 'invalid data', boundaries: {}, type: 'error', taskName: 'name', metadata: {} }
|
|
24
24
|
]);
|
|
25
25
|
});
|
|
26
26
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-format.test.js","sourceRoot":"","sources":["../../src/tests/log-format.test.ts"],"names":[],"mappings":";;AAAA,oCAAqC;AAErC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAIzD,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAwB,EAAE,CAAC,CAAA;QACtD,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"log-format.test.js","sourceRoot":"","sources":["../../src/tests/log-format.test.ts"],"names":[],"mappings":";;AAAA,oCAAqC;AAErC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAIzD,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAwB,EAAE,CAAC,CAAA;QACtD,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3F,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;QAElG,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAE5B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;;CAEvB,CAAC,CAAA;IACA,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAI5D,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAwB,EAAE,CAAC,CAAA;QACtD,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3F,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;QAElG,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC5B,MAAM,KAAK,GAAG,IAAI,kBAAU,CAAwB,EAAE,CAAC,CAAA;QACvD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAEhC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YACtB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC9F,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;SACtG,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,310 +1,149 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const index_1 = require("../index");
|
|
4
3
|
const task_1 = require("@forgehive/task");
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
value: task_1.Schema.number()
|
|
10
|
-
});
|
|
11
|
-
// Define the boundaries
|
|
12
|
-
const boundaries = {
|
|
13
|
-
fetchData: async (value) => {
|
|
14
|
-
return value * 2;
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
// Create the task
|
|
18
|
-
const task = (0, task_1.createTask)({
|
|
19
|
-
schema,
|
|
20
|
-
boundaries,
|
|
21
|
-
fn: async function ({ value }, { fetchData }) {
|
|
22
|
-
const result = await fetchData(value);
|
|
23
|
-
return { result, success: true };
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
// Create a record tape
|
|
27
|
-
const tape = new index_1.RecordTape();
|
|
28
|
-
// Run the task with safeRun and directly use the logItem
|
|
29
|
-
const [result, error, record] = await task.safeRun({ value: 5 });
|
|
30
|
-
tape.push('test-task', record);
|
|
31
|
-
// Verify the execution was successful
|
|
32
|
-
expect(error).toBeNull();
|
|
33
|
-
expect(result).toEqual({ result: 10, success: true });
|
|
34
|
-
// Get the recorded log from the tape
|
|
35
|
-
const recordedLog = tape.getLog();
|
|
36
|
-
// Verify the log was recorded correctly
|
|
37
|
-
expect(recordedLog).toHaveLength(1);
|
|
38
|
-
const logItem = recordedLog[0];
|
|
39
|
-
expect(logItem.name).toEqual('test-task');
|
|
40
|
-
expect(logItem.type).toEqual('success');
|
|
41
|
-
expect(logItem.input).toEqual({ value: 5 });
|
|
42
|
-
expect(logItem.output).toEqual({ result: 10, success: true });
|
|
43
|
-
expect(logItem.boundaries).toEqual({
|
|
44
|
-
fetchData: [{
|
|
45
|
-
input: [5],
|
|
46
|
-
output: 10,
|
|
47
|
-
error: null
|
|
48
|
-
}]
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
it('should record log items from safeRun successfully', async () => {
|
|
52
|
-
// Create a schema
|
|
53
|
-
const schema = new task_1.Schema({
|
|
54
|
-
value: task_1.Schema.number()
|
|
55
|
-
});
|
|
56
|
-
// Define the boundaries
|
|
57
|
-
const boundaries = {
|
|
58
|
-
fetchData: async (value) => {
|
|
59
|
-
return value * 2;
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
// Create the task
|
|
4
|
+
const index_1 = require("../index");
|
|
5
|
+
describe('Safe run', () => {
|
|
6
|
+
it('Should run a simple task with no boundaries and register to a tape', async () => {
|
|
7
|
+
const tape = new index_1.RecordTape({});
|
|
63
8
|
const task = (0, task_1.createTask)({
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
9
|
+
name: 'simple-task',
|
|
10
|
+
schema: new task_1.Schema({
|
|
11
|
+
value: task_1.Schema.number()
|
|
12
|
+
}),
|
|
13
|
+
boundaries: {},
|
|
14
|
+
fn: async ({ value }) => {
|
|
15
|
+
return { doubled: value * 2 };
|
|
69
16
|
}
|
|
70
17
|
});
|
|
71
|
-
// Create a record tape
|
|
72
|
-
const tape = new index_1.RecordTape();
|
|
73
|
-
// Add listener to record the log items
|
|
74
18
|
task.addListener((record) => {
|
|
75
|
-
|
|
76
|
-
if (record.boundaries && record.boundaries.fetchData && Array.isArray(record.boundaries.fetchData)) {
|
|
77
|
-
record.boundaries.fetchData = record.boundaries.fetchData.map((entry) => {
|
|
78
|
-
var _a, _b;
|
|
79
|
-
return (Object.assign(Object.assign({}, entry), { error: (_a = entry.error) !== null && _a !== void 0 ? _a : null, output: (_b = entry.output) !== null && _b !== void 0 ? _b : null }));
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
// Add the record using push method
|
|
83
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
84
|
-
tape.push('test-task', record);
|
|
19
|
+
tape.push(record);
|
|
85
20
|
});
|
|
86
|
-
//
|
|
21
|
+
// Test simple execution
|
|
87
22
|
const [result, error] = await task.safeRun({ value: 5 });
|
|
88
|
-
// Verify the execution was successful
|
|
89
23
|
expect(error).toBeNull();
|
|
90
|
-
expect(result).toEqual({
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
expect(recordedLog).toHaveLength(1);
|
|
95
|
-
expect(recordedLog[0]).toEqual({
|
|
96
|
-
name: 'test-task',
|
|
24
|
+
expect(result).toEqual({ doubled: 10 });
|
|
25
|
+
const log = tape.getLog();
|
|
26
|
+
expect(log).toHaveLength(1);
|
|
27
|
+
expect(log[0]).toEqual({
|
|
97
28
|
type: 'success',
|
|
98
29
|
input: { value: 5 },
|
|
99
|
-
output: {
|
|
100
|
-
boundaries: {
|
|
101
|
-
fetchData: [{
|
|
102
|
-
input: [5],
|
|
103
|
-
output: 10,
|
|
104
|
-
error: null
|
|
105
|
-
}]
|
|
106
|
-
},
|
|
30
|
+
output: { doubled: 10 },
|
|
31
|
+
boundaries: {},
|
|
107
32
|
metadata: {},
|
|
108
|
-
taskName:
|
|
33
|
+
taskName: 'simple-task'
|
|
109
34
|
});
|
|
110
35
|
});
|
|
111
|
-
it('
|
|
112
|
-
|
|
113
|
-
const schema = new task_1.Schema({
|
|
114
|
-
value: task_1.Schema.number()
|
|
115
|
-
});
|
|
116
|
-
// Define the boundaries with a function that will throw an error
|
|
117
|
-
const boundaries = {
|
|
118
|
-
fetchData: async (value) => {
|
|
119
|
-
if (value < 0) {
|
|
120
|
-
throw new Error('Value cannot be negative');
|
|
121
|
-
}
|
|
122
|
-
return value * 2;
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
// Create the task
|
|
36
|
+
it('Should run a task with boundaries and register to a tape', async () => {
|
|
37
|
+
const tape = new index_1.RecordTape({});
|
|
126
38
|
const task = (0, task_1.createTask)({
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
39
|
+
name: 'test',
|
|
40
|
+
schema: new task_1.Schema({
|
|
41
|
+
value: task_1.Schema.number().min(10).max(20)
|
|
42
|
+
}),
|
|
43
|
+
boundaries: {
|
|
44
|
+
multiply: async (value) => {
|
|
45
|
+
return value * 2;
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
fn: async ({ value }, { multiply }) => {
|
|
49
|
+
const result = await multiply(value);
|
|
50
|
+
return { result, success: result > 10 };
|
|
132
51
|
}
|
|
133
52
|
});
|
|
134
|
-
// Create a record tape
|
|
135
|
-
const tape = new index_1.RecordTape();
|
|
136
|
-
// Add listener to record the log items
|
|
137
53
|
task.addListener((record) => {
|
|
138
|
-
|
|
139
|
-
if (record.boundaries && record.boundaries.fetchData && Array.isArray(record.boundaries.fetchData)) {
|
|
140
|
-
record.boundaries.fetchData = record.boundaries.fetchData.map((entry) => {
|
|
141
|
-
var _a, _b;
|
|
142
|
-
return (Object.assign(Object.assign({}, entry), { error: (_a = entry.error) !== null && _a !== void 0 ? _a : null, output: (_b = entry.output) !== null && _b !== void 0 ? _b : null }));
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
// Add the record using push method
|
|
146
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
147
|
-
tape.push('test-task', record);
|
|
54
|
+
tape.push(record);
|
|
148
55
|
});
|
|
149
|
-
//
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
expect(
|
|
153
|
-
|
|
154
|
-
expect(error
|
|
155
|
-
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
expect(
|
|
159
|
-
expect(recordedLog[0]).toEqual({
|
|
160
|
-
name: 'test-task',
|
|
56
|
+
// Test invalid input
|
|
57
|
+
let [result, error] = await task.safeRun({ value: 5 });
|
|
58
|
+
expect(error).toBeDefined();
|
|
59
|
+
expect(error === null || error === void 0 ? void 0 : error.message).toContain('Invalid input');
|
|
60
|
+
[result, error] = await task.safeRun({ value: 15 });
|
|
61
|
+
expect(error).toBeNull();
|
|
62
|
+
expect(result).toEqual({ result: 30, success: true });
|
|
63
|
+
const log = tape.getLog();
|
|
64
|
+
expect(log).toHaveLength(2);
|
|
65
|
+
expect(log[0]).toEqual({
|
|
161
66
|
type: 'error',
|
|
162
|
-
input: { value:
|
|
163
|
-
error: '
|
|
67
|
+
input: { value: 5 },
|
|
68
|
+
error: 'Invalid input on: value: Number must be greater than or equal to 10',
|
|
164
69
|
boundaries: {
|
|
165
|
-
|
|
166
|
-
input: [-5],
|
|
167
|
-
error: 'Value cannot be negative',
|
|
168
|
-
output: null
|
|
169
|
-
}]
|
|
70
|
+
multiply: []
|
|
170
71
|
},
|
|
171
72
|
metadata: {},
|
|
172
|
-
|
|
173
|
-
taskName: undefined
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
it('should handle error records directly with push', async () => {
|
|
177
|
-
// Create a schema
|
|
178
|
-
const schema = new task_1.Schema({
|
|
179
|
-
value: task_1.Schema.number()
|
|
180
|
-
});
|
|
181
|
-
// Define the boundaries with a function that will throw an error
|
|
182
|
-
const boundaries = {
|
|
183
|
-
fetchData: async (value) => {
|
|
184
|
-
if (value < 0) {
|
|
185
|
-
throw new Error('Value cannot be negative');
|
|
186
|
-
}
|
|
187
|
-
return value * 2;
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
// Create the task
|
|
191
|
-
const task = (0, task_1.createTask)({
|
|
192
|
-
schema,
|
|
193
|
-
boundaries,
|
|
194
|
-
fn: async function ({ value }, { fetchData }) {
|
|
195
|
-
const result = await fetchData(value);
|
|
196
|
-
return { result, success: true };
|
|
197
|
-
}
|
|
73
|
+
taskName: 'test'
|
|
198
74
|
});
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
// Push the error record directly with type parameter
|
|
204
|
-
tape.push('test-error', record);
|
|
205
|
-
// Verify the execution failed as expected
|
|
206
|
-
expect(result).toBeNull();
|
|
207
|
-
expect(error).not.toBeNull();
|
|
208
|
-
expect(error instanceof Error).toBe(true);
|
|
209
|
-
if (error instanceof Error) {
|
|
210
|
-
expect(error.message).toContain('Value cannot be negative');
|
|
211
|
-
}
|
|
212
|
-
// Get the recorded log from the tape
|
|
213
|
-
const recordedLog = tape.getLog();
|
|
214
|
-
// Verify the error log was recorded correctly
|
|
215
|
-
expect(recordedLog).toHaveLength(1);
|
|
216
|
-
expect(recordedLog[0]).toEqual({
|
|
217
|
-
name: 'test-error',
|
|
218
|
-
type: 'error',
|
|
219
|
-
input: { value: -5 },
|
|
220
|
-
error: 'Value cannot be negative',
|
|
75
|
+
expect(log[1]).toEqual({
|
|
76
|
+
type: 'success',
|
|
77
|
+
input: { value: 15 },
|
|
78
|
+
output: { result: 30, success: true },
|
|
221
79
|
boundaries: {
|
|
222
|
-
|
|
223
|
-
input: [
|
|
224
|
-
output:
|
|
225
|
-
error: 'Value cannot be negative'
|
|
80
|
+
multiply: [{
|
|
81
|
+
input: [15],
|
|
82
|
+
output: 30
|
|
226
83
|
}]
|
|
227
84
|
},
|
|
228
85
|
metadata: {},
|
|
229
|
-
|
|
230
|
-
taskName: undefined
|
|
86
|
+
taskName: 'test'
|
|
231
87
|
});
|
|
232
88
|
});
|
|
233
|
-
it('
|
|
234
|
-
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
type: 'success',
|
|
89
|
+
it('Should run a task with boundaries and register errors to a tape', async () => {
|
|
90
|
+
const tape = new index_1.RecordTape({});
|
|
91
|
+
const task = (0, task_1.createTask)({
|
|
92
|
+
name: 'test',
|
|
93
|
+
schema: new task_1.Schema({
|
|
94
|
+
value: task_1.Schema.number()
|
|
95
|
+
}),
|
|
241
96
|
boundaries: {
|
|
242
|
-
|
|
243
|
-
{
|
|
244
|
-
|
|
245
|
-
output: 20
|
|
97
|
+
divide: async (value) => {
|
|
98
|
+
if (value === 0) {
|
|
99
|
+
throw new Error('Division by zero');
|
|
246
100
|
}
|
|
247
|
-
|
|
101
|
+
return 100 / value;
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
fn: async ({ value }, { divide }) => {
|
|
105
|
+
const result = await divide(value);
|
|
106
|
+
return { result };
|
|
248
107
|
}
|
|
249
|
-
};
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
expect(
|
|
256
|
-
expect(
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
108
|
+
});
|
|
109
|
+
task.addListener((record) => {
|
|
110
|
+
tape.push(record);
|
|
111
|
+
});
|
|
112
|
+
// Test division by zero
|
|
113
|
+
const [, error] = await task.safeRun({ value: 0 });
|
|
114
|
+
expect(error).toBeDefined();
|
|
115
|
+
expect(error === null || error === void 0 ? void 0 : error.message).toBe('Division by zero');
|
|
116
|
+
// Test valid input
|
|
117
|
+
const [secondResult, secondError] = await task.safeRun({ value: 10 });
|
|
118
|
+
expect(secondError).toBeNull();
|
|
119
|
+
expect(secondResult).toEqual({ result: 10 });
|
|
120
|
+
const log = tape.getLog();
|
|
121
|
+
expect(log).toHaveLength(2);
|
|
122
|
+
expect(log[0]).toEqual({
|
|
123
|
+
type: 'error',
|
|
124
|
+
input: { value: 0 },
|
|
125
|
+
error: 'Division by zero',
|
|
261
126
|
boundaries: {
|
|
262
|
-
|
|
263
|
-
input: [
|
|
264
|
-
|
|
265
|
-
error: null
|
|
127
|
+
divide: [{
|
|
128
|
+
input: [0],
|
|
129
|
+
error: 'Division by zero'
|
|
266
130
|
}]
|
|
267
131
|
},
|
|
268
|
-
metadata: {}
|
|
132
|
+
metadata: {},
|
|
133
|
+
taskName: 'test'
|
|
269
134
|
});
|
|
270
|
-
|
|
271
|
-
it('should handle execution records with Promise outputs correctly', async () => {
|
|
272
|
-
// Create a record tape
|
|
273
|
-
const tape = new index_1.RecordTape();
|
|
274
|
-
// Create a custom execution record with a Promise output
|
|
275
|
-
const promiseResult = Promise.resolve({ result: 30 });
|
|
276
|
-
const promiseRecord = {
|
|
277
|
-
input: { value: 15 },
|
|
278
|
-
output: promiseResult,
|
|
279
|
-
type: 'success',
|
|
280
|
-
boundaries: {
|
|
281
|
-
fetchData: [
|
|
282
|
-
{
|
|
283
|
-
input: [15],
|
|
284
|
-
output: 30
|
|
285
|
-
}
|
|
286
|
-
]
|
|
287
|
-
}
|
|
288
|
-
};
|
|
289
|
-
// Push the record with Promise output using type parameter
|
|
290
|
-
tape.push('promise-record', promiseRecord);
|
|
291
|
-
// Get the recorded log from the tape
|
|
292
|
-
const recordedLog = tape.getLog();
|
|
293
|
-
// Verify the log was recorded correctly, with Promise output set to null
|
|
294
|
-
expect(recordedLog).toHaveLength(1);
|
|
295
|
-
expect(recordedLog[0]).toEqual({
|
|
296
|
-
name: 'promise-record',
|
|
135
|
+
expect(log[1]).toEqual({
|
|
297
136
|
type: 'success',
|
|
298
|
-
input: { value:
|
|
299
|
-
output:
|
|
137
|
+
input: { value: 10 },
|
|
138
|
+
output: { result: 10 },
|
|
300
139
|
boundaries: {
|
|
301
|
-
|
|
302
|
-
input: [
|
|
303
|
-
output:
|
|
304
|
-
error: null
|
|
140
|
+
divide: [{
|
|
141
|
+
input: [10],
|
|
142
|
+
output: 10
|
|
305
143
|
}]
|
|
306
144
|
},
|
|
307
|
-
metadata: {}
|
|
145
|
+
metadata: {},
|
|
146
|
+
taskName: 'test'
|
|
308
147
|
});
|
|
309
148
|
});
|
|
310
149
|
});
|