@forgehive/record-tape 0.1.6 → 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 -35
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -120
- 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 +3 -3
- package/dist/tests/index.test.js.map +1 -1
- package/dist/tests/log-format.test.js +18 -27
- package/dist/tests/log-format.test.js.map +1 -1
- package/dist/tests/mode.test.js +66 -54
- package/dist/tests/mode.test.js.map +1 -1
- package/dist/tests/safe-run.test.js +110 -242
- 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 +35 -31
- package/dist/tests/task-listener.test.js.map +1 -1
- package/package.json +4 -4
- package/src/index.ts +34 -164
- package/src/tests/data-methods.test.ts +150 -0
- package/src/tests/index.test.ts +4 -9
- package/src/tests/log-format.test.ts +20 -32
- package/src/tests/safe-run.test.ts +119 -294
- package/src/tests/save.test.ts +19 -19
- package/src/tests/task-listener.test.ts +29 -42
- package/src/tests/mode.test.ts +0 -93
|
@@ -1,30 +1,26 @@
|
|
|
1
1
|
import { Task, createTask, Schema } from '@forgehive/task'
|
|
2
|
-
import { RecordTape
|
|
2
|
+
import { RecordTape } from '../index'
|
|
3
3
|
|
|
4
4
|
describe('Task listener', () => {
|
|
5
5
|
it('Should listen to task events', async () => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
async (_input
|
|
6
|
+
const tape = new RecordTape({})
|
|
7
|
+
const task = createTask({
|
|
8
|
+
name: 'test',
|
|
9
|
+
schema: new Schema({}),
|
|
10
|
+
boundaries: {},
|
|
11
|
+
fn: async (_input) => {
|
|
12
12
|
return { value: 1, foo: true }
|
|
13
13
|
}
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
task.addListener<InputType, OutputType>((record) => {
|
|
17
|
-
const logItem: LogItem<InputType, OutputType> = record.error
|
|
18
|
-
? { input: record.input, error: record.error, boundaries: record.boundaries }
|
|
19
|
-
: { input: record.input, output: record.output as OutputType, boundaries: record.boundaries }
|
|
14
|
+
})
|
|
20
15
|
|
|
21
|
-
|
|
16
|
+
task.addListener((record) => {
|
|
17
|
+
tape.push(record)
|
|
22
18
|
})
|
|
23
19
|
|
|
24
20
|
await task.run({})
|
|
25
21
|
|
|
26
22
|
expect(tape.getLog()).toEqual([
|
|
27
|
-
{
|
|
23
|
+
{ type: 'success', input: {}, output: { value: 1, foo: true }, boundaries: {}, metadata: {}, taskName: 'test' }
|
|
28
24
|
])
|
|
29
25
|
})
|
|
30
26
|
|
|
@@ -41,12 +37,9 @@ describe('Task listener', () => {
|
|
|
41
37
|
|
|
42
38
|
const tape = new RecordTape<{ value: number }, { result: number }>({})
|
|
43
39
|
|
|
40
|
+
task.setName('test')
|
|
44
41
|
task.addListener<{ value: number }, { result: number }>((record) => {
|
|
45
|
-
|
|
46
|
-
? { input: record.input, error: record.error, boundaries: record.boundaries }
|
|
47
|
-
: { input: record.input, output: record.output as { result: number }, boundaries: record.boundaries }
|
|
48
|
-
|
|
49
|
-
tape.addLogItem('test', logItem)
|
|
42
|
+
tape.push(record)
|
|
50
43
|
})
|
|
51
44
|
|
|
52
45
|
try {
|
|
@@ -60,8 +53,8 @@ describe('Task listener', () => {
|
|
|
60
53
|
const log = tape.getLog()
|
|
61
54
|
|
|
62
55
|
expect(log).toEqual([
|
|
63
|
-
{
|
|
64
|
-
{
|
|
56
|
+
{ type: 'error', input: { value: 5 }, error: 'Value is not between 10 and 20', boundaries: {}, metadata: {}, output: undefined, taskName: 'test' },
|
|
57
|
+
{ type: 'success', input: { value: 15 }, output: { result: 30 }, boundaries: {}, metadata: {}, taskName: 'test' }
|
|
65
58
|
])
|
|
66
59
|
})
|
|
67
60
|
|
|
@@ -79,14 +72,14 @@ describe('Task listener', () => {
|
|
|
79
72
|
}
|
|
80
73
|
|
|
81
74
|
// Create the task using createTask
|
|
82
|
-
const task = createTask(
|
|
75
|
+
const task = createTask({
|
|
83
76
|
schema,
|
|
84
77
|
boundaries,
|
|
85
|
-
async (input, { multiply }) => {
|
|
78
|
+
fn: async (input, { multiply }) => {
|
|
86
79
|
const result = await multiply(input.value)
|
|
87
80
|
return { result }
|
|
88
81
|
}
|
|
89
|
-
)
|
|
82
|
+
})
|
|
90
83
|
|
|
91
84
|
type InputType = typeof schema
|
|
92
85
|
type OutputType = Awaited<ReturnType<typeof task.run>>
|
|
@@ -94,24 +87,21 @@ describe('Task listener', () => {
|
|
|
94
87
|
const tape = new RecordTape<InputType, OutputType>({})
|
|
95
88
|
|
|
96
89
|
task.addListener<InputType, OutputType>((record) => {
|
|
97
|
-
|
|
98
|
-
? { input: record.input, error: record.error, boundaries: record.boundaries }
|
|
99
|
-
: { input: record.input, output: record.output as OutputType, boundaries: record.boundaries }
|
|
100
|
-
|
|
101
|
-
tape.addLogItem('test', logItem)
|
|
90
|
+
tape.push(record)
|
|
102
91
|
})
|
|
103
92
|
|
|
104
93
|
await task.run({ value: 5 })
|
|
105
94
|
|
|
106
95
|
expect(tape.getLog()).toEqual([
|
|
107
96
|
{
|
|
108
|
-
name: 'test',
|
|
109
97
|
type: 'success',
|
|
110
98
|
input: { value: 5 },
|
|
111
99
|
output: { result: 10 },
|
|
112
100
|
boundaries: {
|
|
113
101
|
multiply: [{ input: [5], output: 10 }]
|
|
114
|
-
}
|
|
102
|
+
},
|
|
103
|
+
metadata: {},
|
|
104
|
+
taskName: undefined
|
|
115
105
|
}
|
|
116
106
|
])
|
|
117
107
|
})
|
|
@@ -135,34 +125,31 @@ describe('Task listener', () => {
|
|
|
135
125
|
}
|
|
136
126
|
|
|
137
127
|
// Create the task using createTask
|
|
138
|
-
const task = createTask(
|
|
128
|
+
const task = createTask({
|
|
139
129
|
schema,
|
|
140
130
|
boundaries,
|
|
141
|
-
async (input, { multiply }) => {
|
|
131
|
+
fn: async (input, { multiply }) => {
|
|
142
132
|
const result = await multiply(input.value)
|
|
143
133
|
return { result }
|
|
144
134
|
}
|
|
145
|
-
)
|
|
135
|
+
})
|
|
146
136
|
|
|
147
137
|
task.addListener<InputType, OutputType>((record) => {
|
|
148
|
-
|
|
149
|
-
? { input: record.input, error: record.error, boundaries: record.boundaries }
|
|
150
|
-
: { input: record.input, output: record.output as OutputType, boundaries: record.boundaries }
|
|
151
|
-
|
|
152
|
-
tape.addLogItem('test', logItem)
|
|
138
|
+
tape.push(record)
|
|
153
139
|
})
|
|
154
140
|
|
|
155
141
|
await task.run({ value: 5 })
|
|
156
142
|
|
|
157
143
|
expect(tape.getLog()).toEqual([
|
|
158
144
|
{
|
|
159
|
-
name: 'test',
|
|
160
145
|
type: 'success',
|
|
161
146
|
input: { value: 5 },
|
|
162
147
|
output: { result: 10 },
|
|
163
148
|
boundaries: {
|
|
164
149
|
multiply: [{ input: [5], output: 10 }]
|
|
165
|
-
}
|
|
150
|
+
},
|
|
151
|
+
metadata: {},
|
|
152
|
+
taskName: undefined
|
|
166
153
|
}
|
|
167
154
|
])
|
|
168
155
|
})
|
package/src/tests/mode.test.ts
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { RecordTape } from '../index'
|
|
2
|
-
|
|
3
|
-
describe('Mode behavior', () => {
|
|
4
|
-
it('Should start in record mode by default', () => {
|
|
5
|
-
const tape = new RecordTape()
|
|
6
|
-
expect(tape.getMode()).toBe('record')
|
|
7
|
-
})
|
|
8
|
-
|
|
9
|
-
it('Should not add log items in replay mode', () => {
|
|
10
|
-
type InputType = { value: number }
|
|
11
|
-
type OutputType = { result: number }
|
|
12
|
-
|
|
13
|
-
const tape = new RecordTape<InputType, OutputType>()
|
|
14
|
-
tape.setMode('replay')
|
|
15
|
-
|
|
16
|
-
tape.addLogItem('test', {
|
|
17
|
-
input: { value: 1 },
|
|
18
|
-
output: { result: 2 }
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
expect(tape.getLog()).toEqual([])
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
it('Should add log items in record mode', () => {
|
|
25
|
-
type InputType = { value: number }
|
|
26
|
-
type OutputType = { result: number }
|
|
27
|
-
|
|
28
|
-
const tape = new RecordTape<InputType, OutputType>()
|
|
29
|
-
tape.setMode('record')
|
|
30
|
-
|
|
31
|
-
tape.addLogItem('test', {
|
|
32
|
-
input: { value: 1 },
|
|
33
|
-
output: { result: 2 }
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
expect(tape.getLog()).toEqual([
|
|
37
|
-
{
|
|
38
|
-
name: 'test',
|
|
39
|
-
type: 'success',
|
|
40
|
-
input: { value: 1 },
|
|
41
|
-
output: { result: 2 },
|
|
42
|
-
boundaries: {}
|
|
43
|
-
}
|
|
44
|
-
])
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
it('Should switch between modes', () => {
|
|
48
|
-
type InputType = { value: number }
|
|
49
|
-
type OutputType = { result: number }
|
|
50
|
-
|
|
51
|
-
const tape = new RecordTape<InputType, OutputType>()
|
|
52
|
-
|
|
53
|
-
// Start in record mode
|
|
54
|
-
expect(tape.getMode()).toBe('record')
|
|
55
|
-
tape.addLogItem('test1', {
|
|
56
|
-
input: { value: 1 },
|
|
57
|
-
output: { result: 2 }
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
// Switch to replay mode
|
|
61
|
-
tape.setMode('replay')
|
|
62
|
-
expect(tape.getMode()).toBe('replay')
|
|
63
|
-
tape.addLogItem('test2', {
|
|
64
|
-
input: { value: 3 },
|
|
65
|
-
output: { result: 4 }
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
// Switch back to record mode
|
|
69
|
-
tape.setMode('record')
|
|
70
|
-
expect(tape.getMode()).toBe('record')
|
|
71
|
-
tape.addLogItem('test3', {
|
|
72
|
-
input: { value: 5 },
|
|
73
|
-
output: { result: 6 }
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
expect(tape.getLog()).toEqual([
|
|
77
|
-
{
|
|
78
|
-
name: 'test1',
|
|
79
|
-
type: 'success',
|
|
80
|
-
input: { value: 1 },
|
|
81
|
-
output: { result: 2 },
|
|
82
|
-
boundaries: {}
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
name: 'test3',
|
|
86
|
-
type: 'success',
|
|
87
|
-
input: { value: 5 },
|
|
88
|
-
output: { result: 6 },
|
|
89
|
-
boundaries: {}
|
|
90
|
-
}
|
|
91
|
-
])
|
|
92
|
-
})
|
|
93
|
-
})
|