@forgehive/record-tape 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 +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 +4 -4
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-run.test.js","sourceRoot":"","sources":["../../src/tests/safe-run.test.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"safe-run.test.js","sourceRoot":"","sources":["../../src/tests/safe-run.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tests/save.test.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const fs_1 = __importDefault(require("fs"));
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const index_1 = require("../index");
|
|
9
|
-
const logFileData = '{"
|
|
9
|
+
const logFileData = '{"input":true,"output":true,"boundaries":{},"type":"success","taskName":"name","metadata":{}}\n{"input":true,"error":"invalid data","boundaries":{},"type":"error","taskName":"name","metadata":{}}\n';
|
|
10
10
|
describe('Save to file async', () => {
|
|
11
11
|
it('Save async to existing file(should add new logs)', async () => {
|
|
12
12
|
const tapeFilePath = path_1.default.resolve(__dirname, './fixtures/save');
|
|
@@ -19,8 +19,8 @@ describe('Save to file async', () => {
|
|
|
19
19
|
}
|
|
20
20
|
const tape = new index_1.RecordTape({ path: tapeFilePath });
|
|
21
21
|
await tape.load();
|
|
22
|
-
tape.
|
|
23
|
-
tape.
|
|
22
|
+
tape.push({ input: true, output: true, boundaries: {}, type: 'success', taskName: 'name' });
|
|
23
|
+
tape.push({ input: true, error: 'invalid data', boundaries: {}, type: 'error', taskName: 'name' });
|
|
24
24
|
await tape.save();
|
|
25
25
|
const content = await fs_1.default.promises.readFile(tapeFilePath + '.log', 'utf8');
|
|
26
26
|
expect(tape.getLog().length).toBe(4);
|
|
@@ -30,8 +30,8 @@ describe('Save to file async', () => {
|
|
|
30
30
|
it('Save async to a path of invalid folder', async () => {
|
|
31
31
|
const tapeFilePath = path_1.default.resolve(__dirname, './nowhere/nop');
|
|
32
32
|
const tape = new index_1.RecordTape({ path: tapeFilePath });
|
|
33
|
-
tape.
|
|
34
|
-
tape.
|
|
33
|
+
tape.push({ input: true, output: true, boundaries: {}, type: 'success', taskName: 'name' });
|
|
34
|
+
tape.push({ input: true, error: 'invalid data', boundaries: {}, type: 'error', taskName: 'name' });
|
|
35
35
|
await expect(tape.save()).rejects.toThrow('Folder doesn\'t exists');
|
|
36
36
|
});
|
|
37
37
|
it('Save async to a log file that doesnt exist', async () => {
|
|
@@ -44,8 +44,8 @@ describe('Save to file async', () => {
|
|
|
44
44
|
// console.warn('Didnt found a file to unlink')
|
|
45
45
|
}
|
|
46
46
|
const tape = new index_1.RecordTape({ path: tapeFilePath });
|
|
47
|
-
tape.
|
|
48
|
-
tape.
|
|
47
|
+
tape.push({ input: true, output: true, boundaries: {}, type: 'success', taskName: 'name' });
|
|
48
|
+
tape.push({ input: true, error: 'invalid data', boundaries: {}, type: 'error', taskName: 'name' });
|
|
49
49
|
await tape.save();
|
|
50
50
|
const content = await fs_1.default.promises.readFile(tapeFilePath + '.log', 'utf8');
|
|
51
51
|
expect(content).toBe(logFileData);
|
|
@@ -62,8 +62,8 @@ describe('Save to file sync', () => {
|
|
|
62
62
|
// console.warn('didnt found a file to unlink')
|
|
63
63
|
}
|
|
64
64
|
const tape = new index_1.RecordTape({ path: tapeFilePath });
|
|
65
|
-
tape.
|
|
66
|
-
tape.
|
|
65
|
+
tape.push({ input: true, output: true, boundaries: {}, type: 'success', taskName: 'name' });
|
|
66
|
+
tape.push({ input: true, error: 'invalid data', boundaries: {}, type: 'error', taskName: 'name' });
|
|
67
67
|
tape.saveSync();
|
|
68
68
|
const content = fs_1.default.readFileSync(tapeFilePath + '.log', 'utf8');
|
|
69
69
|
expect(content).toBe(logFileData);
|
|
@@ -71,8 +71,8 @@ describe('Save to file sync', () => {
|
|
|
71
71
|
it('Save sync to a path of invalid folder', () => {
|
|
72
72
|
const tapeFilePath = path_1.default.resolve(__dirname, './nowhere/nop');
|
|
73
73
|
const tape = new index_1.RecordTape({ path: tapeFilePath });
|
|
74
|
-
tape.
|
|
75
|
-
tape.
|
|
74
|
+
tape.push({ input: true, output: true, boundaries: {}, type: 'success', taskName: 'name' });
|
|
75
|
+
tape.push({ input: true, error: 'invalid data', boundaries: {}, type: 'error', taskName: 'name' });
|
|
76
76
|
expect(() => tape.saveSync()).toThrow('Folder doesn\'t exists');
|
|
77
77
|
});
|
|
78
78
|
it('Save sync to a log file that doesnt exist', () => {
|
|
@@ -85,8 +85,8 @@ describe('Save to file sync', () => {
|
|
|
85
85
|
// console.warn('Didnt found a file to unlink')
|
|
86
86
|
}
|
|
87
87
|
const tape = new index_1.RecordTape({ path: tapeFilePath });
|
|
88
|
-
tape.
|
|
89
|
-
tape.
|
|
88
|
+
tape.push({ input: true, output: true, boundaries: {}, type: 'success', taskName: 'name' });
|
|
89
|
+
tape.push({ input: true, error: 'invalid data', boundaries: {}, type: 'error', taskName: 'name' });
|
|
90
90
|
tape.saveSync();
|
|
91
91
|
const content = fs_1.default.readFileSync(tapeFilePath + '.log', 'utf8');
|
|
92
92
|
expect(content).toBe(logFileData);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.test.js","sourceRoot":"","sources":["../../src/tests/save.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAmB;AACnB,gDAAuB;AACvB,oCAAqC;AAErC,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"save.test.js","sourceRoot":"","sources":["../../src/tests/save.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAmB;AACnB,gDAAuB;AACvB,oCAAqC;AAErC,MAAM,WAAW,GAAG,uMAAuM,CAAA;AAE3N,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAIhE,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;QAC/D,IAAI,CAAC;YACH,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,GAAG,MAAM,EAAE,WAAW,CAAC,CAAA;QACjE,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,sCAAsC;YACtC,+CAA+C;QACjD,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAwB,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;QAC1E,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QACjB,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;QAClG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAEjB,MAAM,OAAO,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,GAAG,MAAM,EAAE,MAAM,CAAC,CAAA;QAEzE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,CAAA;QACxD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QAItD,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;QAE7D,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAwB,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;QAC1E,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,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAI1D,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;QAC9D,IAAI,CAAC;YACH,MAAM,YAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,CAAA;QACjD,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,sCAAsC;YACtC,+CAA+C;QACjD,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAwB,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;QAC1E,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;QAClG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAEjB,MAAM,OAAO,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,GAAG,MAAM,EAAE,MAAM,CAAC,CAAA;QAEzE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QAInB,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;QAC/D,IAAI,CAAC;YACH,YAAE,CAAC,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,sCAAsC;YACtC,+CAA+C;QACjD,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAwB,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;QAC1E,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;QAClG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,GAAG,MAAM,EAAE,MAAM,CAAC,CAAA;QAE9D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAI/C,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;QAE7D,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAwB,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;QAC1E,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,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QAInD,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;QAE9D,IAAI,CAAC;YACH,YAAE,CAAC,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,sCAAsC;YACtC,+CAA+C;QACjD,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,kBAAU,CAAwB,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;QAC1E,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;QAClG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,GAAG,MAAM,EAAE,MAAM,CAAC,CAAA;QAE9D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -5,19 +5,20 @@ const index_1 = require("../index");
|
|
|
5
5
|
describe('Task listener', () => {
|
|
6
6
|
it('Should listen to task events', async () => {
|
|
7
7
|
const tape = new index_1.RecordTape({});
|
|
8
|
-
const task =
|
|
9
|
-
|
|
8
|
+
const task = (0, task_1.createTask)({
|
|
9
|
+
name: 'test',
|
|
10
|
+
schema: new task_1.Schema({}),
|
|
11
|
+
boundaries: {},
|
|
12
|
+
fn: async (_input) => {
|
|
13
|
+
return { value: 1, foo: true };
|
|
14
|
+
}
|
|
10
15
|
});
|
|
11
16
|
task.addListener((record) => {
|
|
12
|
-
|
|
13
|
-
? { input: record.input, error: record.error, boundaries: record.boundaries || {}, type: 'error' }
|
|
14
|
-
: { input: record.input, output: record.output, boundaries: record.boundaries || {}, type: 'success' };
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
-
tape.push('test', executionRecord);
|
|
17
|
+
tape.push(record);
|
|
17
18
|
});
|
|
18
19
|
await task.run({});
|
|
19
20
|
expect(tape.getLog()).toEqual([
|
|
20
|
-
{
|
|
21
|
+
{ type: 'success', input: {}, output: { value: 1, foo: true }, boundaries: {}, metadata: {}, taskName: 'test' }
|
|
21
22
|
]);
|
|
22
23
|
});
|
|
23
24
|
it('Should has errors and sucess items', async () => {
|
|
@@ -28,12 +29,9 @@ describe('Task listener', () => {
|
|
|
28
29
|
return { result: input.value * 2 };
|
|
29
30
|
});
|
|
30
31
|
const tape = new index_1.RecordTape({});
|
|
32
|
+
task.setName('test');
|
|
31
33
|
task.addListener((record) => {
|
|
32
|
-
|
|
33
|
-
? { input: record.input, error: record.error, boundaries: record.boundaries || {}, type: 'error' }
|
|
34
|
-
: { input: record.input, output: record.output, boundaries: record.boundaries || {}, type: 'success' };
|
|
35
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
36
|
-
tape.push('test', executionRecord);
|
|
34
|
+
tape.push(record);
|
|
37
35
|
});
|
|
38
36
|
try {
|
|
39
37
|
await task.run({ value: 5 });
|
|
@@ -44,8 +42,8 @@ describe('Task listener', () => {
|
|
|
44
42
|
await task.run({ value: 15 });
|
|
45
43
|
const log = tape.getLog();
|
|
46
44
|
expect(log).toEqual([
|
|
47
|
-
{
|
|
48
|
-
{
|
|
45
|
+
{ type: 'error', input: { value: 5 }, error: 'Value is not between 10 and 20', boundaries: {}, metadata: {}, output: undefined, taskName: 'test' },
|
|
46
|
+
{ type: 'success', input: { value: 15 }, output: { result: 30 }, boundaries: {}, metadata: {}, taskName: 'test' }
|
|
49
47
|
]);
|
|
50
48
|
});
|
|
51
49
|
it('Should get types from task', async () => {
|
|
@@ -70,23 +68,19 @@ describe('Task listener', () => {
|
|
|
70
68
|
});
|
|
71
69
|
const tape = new index_1.RecordTape({});
|
|
72
70
|
task.addListener((record) => {
|
|
73
|
-
|
|
74
|
-
? { input: record.input, error: record.error, boundaries: record.boundaries || {}, type: 'error' }
|
|
75
|
-
: { input: record.input, output: record.output, boundaries: record.boundaries || {}, type: 'success' };
|
|
76
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
77
|
-
tape.push('test', executionRecord);
|
|
71
|
+
tape.push(record);
|
|
78
72
|
});
|
|
79
73
|
await task.run({ value: 5 });
|
|
80
74
|
expect(tape.getLog()).toEqual([
|
|
81
75
|
{
|
|
82
|
-
name: 'test',
|
|
83
76
|
type: 'success',
|
|
84
77
|
input: { value: 5 },
|
|
85
78
|
output: { result: 10 },
|
|
86
79
|
boundaries: {
|
|
87
|
-
multiply: [{ input: [5], output: 10
|
|
80
|
+
multiply: [{ input: [5], output: 10 }]
|
|
88
81
|
},
|
|
89
|
-
metadata: {}
|
|
82
|
+
metadata: {},
|
|
83
|
+
taskName: undefined
|
|
90
84
|
}
|
|
91
85
|
]);
|
|
92
86
|
});
|
|
@@ -112,23 +106,19 @@ describe('Task listener', () => {
|
|
|
112
106
|
}
|
|
113
107
|
});
|
|
114
108
|
task.addListener((record) => {
|
|
115
|
-
|
|
116
|
-
? { input: record.input, error: record.error, boundaries: record.boundaries || {}, type: 'error' }
|
|
117
|
-
: { input: record.input, output: record.output, boundaries: record.boundaries || {}, type: 'success' };
|
|
118
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
119
|
-
tape.push('test', executionRecord);
|
|
109
|
+
tape.push(record);
|
|
120
110
|
});
|
|
121
111
|
await task.run({ value: 5 });
|
|
122
112
|
expect(tape.getLog()).toEqual([
|
|
123
113
|
{
|
|
124
|
-
name: 'test',
|
|
125
114
|
type: 'success',
|
|
126
115
|
input: { value: 5 },
|
|
127
116
|
output: { result: 10 },
|
|
128
117
|
boundaries: {
|
|
129
|
-
multiply: [{ input: [5], output: 10
|
|
118
|
+
multiply: [{ input: [5], output: 10 }]
|
|
130
119
|
},
|
|
131
|
-
metadata: {}
|
|
120
|
+
metadata: {},
|
|
121
|
+
taskName: undefined
|
|
132
122
|
}
|
|
133
123
|
]);
|
|
134
124
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-listener.test.js","sourceRoot":"","sources":["../../src/tests/task-listener.test.ts"],"names":[],"mappings":";;AAAA,0CAA0D;AAC1D,oCAAqC;AAErC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"task-listener.test.js","sourceRoot":"","sources":["../../src/tests/task-listener.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forgehive/record-tape",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"access": "public",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@forgehive/schema": "^0.1.4",
|
|
11
|
-
"@forgehive/task": "^0.2.
|
|
11
|
+
"@forgehive/task": "^0.2.2"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"typescript": "^5.3.3"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@forgehive/
|
|
23
|
-
"@forgehive/
|
|
22
|
+
"@forgehive/task": "0.2.2",
|
|
23
|
+
"@forgehive/schema": "0.1.4"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "tsc",
|
package/src/index.ts
CHANGED
|
@@ -2,123 +2,60 @@ import fs from 'fs'
|
|
|
2
2
|
import path from 'path'
|
|
3
3
|
import { type ExecutionRecord, type Boundaries } from '@forgehive/task'
|
|
4
4
|
|
|
5
|
-
export interface
|
|
6
|
-
name: string
|
|
5
|
+
export interface GenericExecutionRecord<TInput = unknown, TOutput = unknown, B extends Boundaries = Boundaries> extends ExecutionRecord<TInput, TOutput, B> {
|
|
7
6
|
}
|
|
8
7
|
|
|
9
8
|
interface Config<TInput = unknown, TOutput = unknown, B extends Boundaries = Boundaries> {
|
|
10
9
|
path?: fs.PathLike
|
|
11
|
-
log?:
|
|
10
|
+
log?: GenericExecutionRecord<TInput, TOutput, B>[]
|
|
12
11
|
boundaries?: Record<string, unknown>
|
|
13
12
|
}
|
|
14
13
|
|
|
15
|
-
export type Mode = 'record' | 'replay'
|
|
16
|
-
|
|
17
14
|
export class RecordTape<TInput = unknown, TOutput = unknown, B extends Boundaries = Boundaries> {
|
|
18
15
|
private _path: fs.PathLike | undefined
|
|
19
|
-
private
|
|
20
|
-
private _log: LogRecord<TInput, TOutput, B>[]
|
|
16
|
+
private _log: GenericExecutionRecord<TInput, TOutput, B>[]
|
|
21
17
|
|
|
22
18
|
constructor(config: Config<TInput, TOutput, B> = {}) {
|
|
23
19
|
this._path = typeof config.path === 'string' ? `${config.path}.log` : undefined
|
|
24
20
|
this._log = config.log ?? []
|
|
25
|
-
this._mode = 'record'
|
|
26
21
|
}
|
|
27
22
|
|
|
28
23
|
// Data functions
|
|
29
|
-
getLog():
|
|
24
|
+
getLog(): GenericExecutionRecord<TInput, TOutput, B>[] {
|
|
30
25
|
return this._log
|
|
31
26
|
}
|
|
32
27
|
|
|
33
|
-
|
|
34
|
-
return this.
|
|
28
|
+
getLength(): number {
|
|
29
|
+
return this._log.length
|
|
35
30
|
}
|
|
36
31
|
|
|
37
|
-
|
|
38
|
-
this.
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
addExecutionRecord(name: string, record: ExecutionRecord<TInput, TOutput, B>): void {
|
|
42
|
-
if (this._mode === 'replay') {
|
|
43
|
-
return
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Format boundaries to ensure consistent structure
|
|
47
|
-
const formattedBoundaries: Record<string, unknown> = {}
|
|
48
|
-
if (record.boundaries) {
|
|
49
|
-
for (const key in record.boundaries) {
|
|
50
|
-
const boundaryEntries = record.boundaries[key] as Array<Record<string, unknown>>
|
|
51
|
-
formattedBoundaries[key] = boundaryEntries.map(entry => ({
|
|
52
|
-
input: entry.input,
|
|
53
|
-
output: entry.output ?? null,
|
|
54
|
-
error: entry.error ?? null
|
|
55
|
-
}))
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
this._log.push({
|
|
60
|
-
name,
|
|
61
|
-
...record,
|
|
62
|
-
boundaries: formattedBoundaries
|
|
63
|
-
} as LogRecord<TInput, TOutput, B>)
|
|
32
|
+
shift(): GenericExecutionRecord<TInput, TOutput, B> | undefined {
|
|
33
|
+
return this._log.shift()
|
|
64
34
|
}
|
|
65
35
|
|
|
66
36
|
push(
|
|
67
|
-
name: string,
|
|
68
37
|
record: ExecutionRecord<TInput, unknown, B>,
|
|
69
38
|
metadata?: Record<string, string>
|
|
70
|
-
):
|
|
71
|
-
|
|
72
|
-
return {} as LogRecord<TInput, TOutput, B>
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// For safeRun records, always include both error and output fields
|
|
76
|
-
const formattedBoundaries: Record<string, unknown> = {}
|
|
77
|
-
if (record.boundaries) {
|
|
78
|
-
for (const key in record.boundaries) {
|
|
79
|
-
const boundaryArray = record.boundaries[key] as Array<Record<string, unknown>>
|
|
80
|
-
formattedBoundaries[key] = boundaryArray.map(entry => {
|
|
81
|
-
return {
|
|
82
|
-
input: entry.input,
|
|
83
|
-
output: entry.output ?? null,
|
|
84
|
-
error: entry.error ?? null
|
|
85
|
-
}
|
|
86
|
-
})
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Use the type from ExecutionRecord if available, otherwise derive it
|
|
39
|
+
): GenericExecutionRecord<TInput, TOutput, B> {
|
|
40
|
+
// Add type if missing
|
|
91
41
|
const recordType = ('type' in record && record.type) ? record.type :
|
|
92
42
|
(record.output !== undefined && record.output !== null) ? 'success' :
|
|
93
43
|
(record.error !== undefined) ? 'error' : 'pending'
|
|
94
44
|
|
|
95
|
-
// Handle Promise outputs by setting to null in the log
|
|
96
|
-
const output = record.output instanceof Promise ? null : record.output
|
|
97
|
-
|
|
98
45
|
// Merge metadata from record and parameter (parameter takes precedence)
|
|
99
46
|
const mergedMetadata = { ...record.metadata, ...metadata }
|
|
100
47
|
|
|
101
48
|
const logRecord = {
|
|
102
|
-
name,
|
|
103
49
|
...record,
|
|
104
50
|
type: recordType,
|
|
105
|
-
output,
|
|
106
|
-
boundaries: formattedBoundaries,
|
|
107
51
|
metadata: mergedMetadata
|
|
108
|
-
} as
|
|
52
|
+
} as GenericExecutionRecord<TInput, TOutput, B>
|
|
109
53
|
|
|
110
54
|
this._log.push(logRecord)
|
|
111
55
|
|
|
112
56
|
return logRecord
|
|
113
57
|
}
|
|
114
58
|
|
|
115
|
-
addLogRecord(logRecord: LogRecord<TInput, TOutput, B>): void {
|
|
116
|
-
if (this._mode === 'replay') {
|
|
117
|
-
return
|
|
118
|
-
}
|
|
119
|
-
this._log.push(logRecord)
|
|
120
|
-
}
|
|
121
|
-
|
|
122
59
|
stringify(): string {
|
|
123
60
|
let log = ''
|
|
124
61
|
for (const logItem of this._log) {
|
|
@@ -128,12 +65,12 @@ export class RecordTape<TInput = unknown, TOutput = unknown, B extends Boundarie
|
|
|
128
65
|
return log
|
|
129
66
|
}
|
|
130
67
|
|
|
131
|
-
parse(content: string):
|
|
68
|
+
parse(content: string): GenericExecutionRecord<TInput, TOutput, B>[] {
|
|
132
69
|
const items = content.split('\n')
|
|
133
|
-
const log:
|
|
70
|
+
const log: GenericExecutionRecord<TInput, TOutput, B>[] = []
|
|
134
71
|
for (const item of items) {
|
|
135
72
|
if (item !== '') {
|
|
136
|
-
const data = JSON.parse(item) as
|
|
73
|
+
const data = JSON.parse(item) as GenericExecutionRecord<TInput, TOutput, B>
|
|
137
74
|
log.push(data)
|
|
138
75
|
}
|
|
139
76
|
}
|
|
@@ -156,21 +93,15 @@ export class RecordTape<TInput = unknown, TOutput = unknown, B extends Boundarie
|
|
|
156
93
|
return cache
|
|
157
94
|
}
|
|
158
95
|
|
|
159
|
-
recordFrom(
|
|
96
|
+
recordFrom(task: { _listener?: unknown }): void {
|
|
160
97
|
// Add listener for ExecutionRecord
|
|
161
|
-
task._listener = async (executionRecord: ExecutionRecord<TInput, TOutput, B
|
|
162
|
-
|
|
163
|
-
if (this.getMode() === 'record') {
|
|
164
|
-
this.addExecutionRecord(name, executionRecord)
|
|
165
|
-
}
|
|
98
|
+
task._listener = async (executionRecord: ExecutionRecord<TInput, TOutput, B>): Promise<void> => {
|
|
99
|
+
this.push(executionRecord)
|
|
166
100
|
}
|
|
167
|
-
|
|
168
|
-
// Add cache
|
|
169
|
-
task.setBoundariesData(this.compileCache())
|
|
170
101
|
}
|
|
171
102
|
|
|
172
103
|
// Load save functions
|
|
173
|
-
async load(): Promise<
|
|
104
|
+
async load(): Promise<GenericExecutionRecord<TInput, TOutput, B>[]> {
|
|
174
105
|
if (typeof this._path === 'undefined') {
|
|
175
106
|
return []
|
|
176
107
|
}
|
|
@@ -200,7 +131,7 @@ export class RecordTape<TInput = unknown, TOutput = unknown, B extends Boundarie
|
|
|
200
131
|
return this._log
|
|
201
132
|
}
|
|
202
133
|
|
|
203
|
-
loadSync():
|
|
134
|
+
loadSync(): GenericExecutionRecord<TInput, TOutput, B>[] {
|
|
204
135
|
if (typeof this._path === 'undefined') { return [] }
|
|
205
136
|
|
|
206
137
|
const dirpath = path.dirname(this._path.toString())
|
|
@@ -219,6 +150,7 @@ export class RecordTape<TInput = unknown, TOutput = unknown, B extends Boundarie
|
|
|
219
150
|
return this._log
|
|
220
151
|
}
|
|
221
152
|
|
|
153
|
+
// Save functions
|
|
222
154
|
async save(): Promise<void> {
|
|
223
155
|
if (typeof this._path === 'undefined') { return }
|
|
224
156
|
|