@forgehive/task 0.1.0
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/LICENSE +21 -0
- package/README.md +241 -0
- package/dist/index.d.ts +92 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +191 -0
- package/dist/index.js.map +1 -0
- package/dist/test/add-listener-with-boundaries.test.d.ts +2 -0
- package/dist/test/add-listener-with-boundaries.test.d.ts.map +1 -0
- package/dist/test/add-listener-with-boundaries.test.js +230 -0
- package/dist/test/add-listener-with-boundaries.test.js.map +1 -0
- package/dist/test/add-listener.test.d.ts +2 -0
- package/dist/test/add-listener.test.d.ts.map +1 -0
- package/dist/test/add-listener.test.js +92 -0
- package/dist/test/add-listener.test.js.map +1 -0
- package/dist/test/boundary-modes.test.d.ts +2 -0
- package/dist/test/boundary-modes.test.d.ts.map +1 -0
- package/dist/test/boundary-modes.test.js +184 -0
- package/dist/test/boundary-modes.test.js.map +1 -0
- package/dist/test/change-mode.test.d.ts +2 -0
- package/dist/test/change-mode.test.d.ts.map +1 -0
- package/dist/test/change-mode.test.js +39 -0
- package/dist/test/change-mode.test.js.map +1 -0
- package/dist/test/index.test.d.ts +2 -0
- package/dist/test/index.test.d.ts.map +1 -0
- package/dist/test/index.test.js +48 -0
- package/dist/test/index.test.js.map +1 -0
- package/dist/test/run-boundary.test.d.ts +2 -0
- package/dist/test/run-boundary.test.d.ts.map +1 -0
- package/dist/test/run-boundary.test.js +49 -0
- package/dist/test/run-boundary.test.js.map +1 -0
- package/dist/test/run-without-args.test.d.ts +2 -0
- package/dist/test/run-without-args.test.d.ts.map +1 -0
- package/dist/test/run-without-args.test.js +29 -0
- package/dist/test/run-without-args.test.js.map +1 -0
- package/dist/test/task-with-boundaries.test.d.ts +2 -0
- package/dist/test/task-with-boundaries.test.d.ts.map +1 -0
- package/dist/test/task-with-boundaries.test.js +102 -0
- package/dist/test/task-with-boundaries.test.js.map +1 -0
- package/dist/test/validation.test.d.ts +2 -0
- package/dist/test/validation.test.d.ts.map +1 -0
- package/dist/test/validation.test.js +166 -0
- package/dist/test/validation.test.js.map +1 -0
- package/dist/utils/boundary.d.ts +44 -0
- package/dist/utils/boundary.d.ts.map +1 -0
- package/dist/utils/boundary.js +145 -0
- package/dist/utils/boundary.js.map +1 -0
- package/jest.config.js +9 -0
- package/package.json +30 -0
- package/src/index.ts +344 -0
- package/src/test/add-listener-with-boundaries.test.ts +299 -0
- package/src/test/add-listener.test.ts +110 -0
- package/src/test/boundary-modes.test.ts +215 -0
- package/src/test/change-mode.test.ts +45 -0
- package/src/test/index.test.ts +62 -0
- package/src/test/run-boundary.test.ts +64 -0
- package/src/test/run-without-args.test.ts +33 -0
- package/src/test/task-with-boundaries.test.ts +137 -0
- package/src/test/validation.test.ts +194 -0
- package/src/utils/boundary.ts +178 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../index");
|
|
4
|
+
describe('Task class', () => {
|
|
5
|
+
it('Identity test', async () => {
|
|
6
|
+
const identity = new index_1.Task(function (argv) {
|
|
7
|
+
return argv;
|
|
8
|
+
});
|
|
9
|
+
const { bar } = await identity.run({ bar: true });
|
|
10
|
+
const { foo } = await identity.run({ foo: true });
|
|
11
|
+
expect(bar).toBe(true);
|
|
12
|
+
expect(foo).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
it('Identity types test', async () => {
|
|
15
|
+
const caller = async function (argv) {
|
|
16
|
+
return argv;
|
|
17
|
+
};
|
|
18
|
+
const identity = new index_1.Task(caller);
|
|
19
|
+
const { bar } = await identity.run({ bar: true });
|
|
20
|
+
const { foo } = await identity.run({ foo: true });
|
|
21
|
+
expect(bar).toBe(true);
|
|
22
|
+
expect(foo).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
it('Add test', async () => {
|
|
25
|
+
const add2 = new index_1.Task(function (int) {
|
|
26
|
+
return int + 2;
|
|
27
|
+
});
|
|
28
|
+
const six = await add2.run(4);
|
|
29
|
+
const seven = await add2.run(5);
|
|
30
|
+
expect(six).toBe(6);
|
|
31
|
+
expect(seven).toBe(7);
|
|
32
|
+
});
|
|
33
|
+
it('getMode proxy test', async () => {
|
|
34
|
+
const proxy = new index_1.Task(function (int) {
|
|
35
|
+
return int + 2;
|
|
36
|
+
}, {
|
|
37
|
+
mode: 'proxy'
|
|
38
|
+
});
|
|
39
|
+
const proxyPass = new index_1.Task(function (int) {
|
|
40
|
+
return int + 2;
|
|
41
|
+
}, {
|
|
42
|
+
mode: 'proxy-pass'
|
|
43
|
+
});
|
|
44
|
+
expect(proxy.getMode()).toBe('proxy');
|
|
45
|
+
expect(proxyPass.getMode()).toBe('proxy-pass');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/test/index.test.ts"],"names":[],"mappings":";;AAAA,oCAA+B;AAE/B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,QAAQ,GAAG,IAAI,YAAI,CAAC,UAAU,IAAI;YACtC,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;QAEjD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QAKnC,MAAM,MAAM,GAAG,KAAK,WAAW,IAAc;YAC3C,OAAO,IAAI,CAAA;QACb,CAAC,CAAA;QAED,MAAM,QAAQ,GAAG,IAAI,YAAI,CAAC,MAAM,CAAC,CAAA;QAEjC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;QAEjD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QACxB,MAAM,IAAI,GAAG,IAAI,YAAI,CAAC,UAAU,GAAW;YACzC,OAAO,GAAG,GAAG,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAE/B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,KAAK,GAAG,IAAI,YAAI,CAAC,UAAU,GAAW;YAC1C,OAAO,GAAG,GAAG,CAAC,CAAA;QAChB,CAAC,EAAE;YACD,IAAI,EAAE,OAAO;SACd,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,IAAI,YAAI,CAAC,UAAU,GAAW;YAC9C,OAAO,GAAG,GAAG,CAAC,CAAA;QAChB,CAAC,EAAE;YACD,IAAI,EAAE,YAAY;SACnB,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-boundary.test.d.ts","sourceRoot":"","sources":["../../src/test/run-boundary.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const boundary_1 = require("../utils/boundary");
|
|
4
|
+
describe('Run boundary tests', function () {
|
|
5
|
+
it('Should add a run record', async function () {
|
|
6
|
+
const identity = (0, boundary_1.createBoundary)(async function (argv) {
|
|
7
|
+
return argv;
|
|
8
|
+
});
|
|
9
|
+
identity.startRun();
|
|
10
|
+
await identity({ value: 5 });
|
|
11
|
+
const runTape = identity.getRunData();
|
|
12
|
+
expect(runTape.length).toBe(1);
|
|
13
|
+
expect(runTape[0]).toEqual({ input: [{ value: 5 }], output: { value: 5 } });
|
|
14
|
+
});
|
|
15
|
+
it('Should only add a record if run is active', async function () {
|
|
16
|
+
const identity = (0, boundary_1.createBoundary)(async function (argv) {
|
|
17
|
+
return argv;
|
|
18
|
+
});
|
|
19
|
+
await identity({ value: 5 });
|
|
20
|
+
const runTape = identity.getRunData();
|
|
21
|
+
expect(runTape.length).toBe(0);
|
|
22
|
+
});
|
|
23
|
+
it('Shouldn\'t add after run stoped', async function () {
|
|
24
|
+
const identity = (0, boundary_1.createBoundary)(async function (argv) {
|
|
25
|
+
return argv;
|
|
26
|
+
});
|
|
27
|
+
identity.startRun();
|
|
28
|
+
await identity({ value: 5 });
|
|
29
|
+
identity.stopRun();
|
|
30
|
+
await identity({ value: 5 });
|
|
31
|
+
const runTape = identity.getRunData();
|
|
32
|
+
expect(runTape.length).toBe(1);
|
|
33
|
+
expect(runTape[0]).toEqual({ input: [{ value: 5 }], output: { value: 5 } });
|
|
34
|
+
});
|
|
35
|
+
it('Should have run elements from this run', async function () {
|
|
36
|
+
const identity = (0, boundary_1.createBoundary)(async function (argv) {
|
|
37
|
+
return argv;
|
|
38
|
+
});
|
|
39
|
+
identity.startRun();
|
|
40
|
+
await identity({ value: 4 });
|
|
41
|
+
identity.stopRun();
|
|
42
|
+
identity.startRun();
|
|
43
|
+
await identity({ value: 5 });
|
|
44
|
+
const runTape = identity.getRunData();
|
|
45
|
+
expect(runTape.length).toBe(1);
|
|
46
|
+
expect(runTape[0]).toEqual({ input: [{ value: 5 }], output: { value: 5 } });
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=run-boundary.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-boundary.test.js","sourceRoot":"","sources":["../../src/test/run-boundary.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-without-args.test.d.ts","sourceRoot":"","sources":["../../src/test/run-without-args.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../index");
|
|
4
|
+
describe('Task run without arguments', () => {
|
|
5
|
+
it('should run a task with no arguments', async () => {
|
|
6
|
+
// Create a task that doesn't require arguments
|
|
7
|
+
const noArgsTask = new index_1.Task(function () {
|
|
8
|
+
return 'success';
|
|
9
|
+
});
|
|
10
|
+
// Call run without passing any arguments
|
|
11
|
+
const result = await noArgsTask.run();
|
|
12
|
+
// Verify the result
|
|
13
|
+
expect(result).toBe('success');
|
|
14
|
+
});
|
|
15
|
+
it('should run a task with optional arguments', async () => {
|
|
16
|
+
// Create a task with optional arguments
|
|
17
|
+
const optionalArgsTask = new index_1.Task(function (argv) {
|
|
18
|
+
return (argv === null || argv === void 0 ? void 0 : argv.value) || 'default';
|
|
19
|
+
});
|
|
20
|
+
// Call run without passing any arguments
|
|
21
|
+
const defaultResult = await optionalArgsTask.run();
|
|
22
|
+
// Call run with arguments for comparison
|
|
23
|
+
const customResult = await optionalArgsTask.run({ value: 'custom' });
|
|
24
|
+
// Verify the results
|
|
25
|
+
expect(defaultResult).toBe('default');
|
|
26
|
+
expect(customResult).toBe('custom');
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=run-without-args.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-without-args.test.js","sourceRoot":"","sources":["../../src/test/run-without-args.test.ts"],"names":[],"mappings":";;AAAA,oCAA+B;AAE/B,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,+CAA+C;QAC/C,MAAM,UAAU,GAAG,IAAI,YAAI,CAAC;YAC1B,OAAO,SAAS,CAAA;QAClB,CAAC,CAAC,CAAA;QAEF,yCAAyC;QACzC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,CAAA;QAErC,oBAAoB;QACpB,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,wCAAwC;QACxC,MAAM,gBAAgB,GAAG,IAAI,YAAI,CAAC,UAAU,IAAyB;YACnE,OAAO,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,SAAS,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,yCAAyC;QACzC,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAA;QAElD,yCAAyC;QACzC,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QAEpE,qBAAqB;QACrB,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACrC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-with-boundaries.test.d.ts","sourceRoot":"","sources":["../../src/test/task-with-boundaries.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../index");
|
|
4
|
+
// Need to add proxy cache mode to the boundaries
|
|
5
|
+
describe('Boundaries tasks tests', () => {
|
|
6
|
+
it('Indentity + boundaries test', async () => {
|
|
7
|
+
// Create a schema for the task
|
|
8
|
+
const schema = new index_1.Schema({});
|
|
9
|
+
// Define the boundaries
|
|
10
|
+
const boundaries = {
|
|
11
|
+
fetchExternalData: async () => {
|
|
12
|
+
return { foo: false };
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
// Create the task using createTask
|
|
16
|
+
const indentity = (0, index_1.createTask)(schema, boundaries, async (argv, boundaries) => {
|
|
17
|
+
const externalData = await boundaries.fetchExternalData();
|
|
18
|
+
return Object.assign(Object.assign({}, externalData), argv);
|
|
19
|
+
});
|
|
20
|
+
const object = await indentity.run({ bar: true });
|
|
21
|
+
const { foo } = await indentity.run({ foo: true });
|
|
22
|
+
expect(object).toEqual({ bar: true, foo: false });
|
|
23
|
+
expect(foo).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
it('Indentity test with tape data', async () => {
|
|
26
|
+
// Create a schema for the task
|
|
27
|
+
const schema = new index_1.Schema({});
|
|
28
|
+
// Define the boundaries
|
|
29
|
+
const boundaries = {
|
|
30
|
+
fetchExternalData: async () => {
|
|
31
|
+
// Return an empty implementation, the actual data will come from boundariesData
|
|
32
|
+
return { foo: false };
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
// Create the task using createTask with boundariesData
|
|
36
|
+
const indentity = (0, index_1.createTask)(schema, boundaries, async (argv, boundaries) => {
|
|
37
|
+
const externalData = await boundaries.fetchExternalData();
|
|
38
|
+
return Object.assign(Object.assign({}, externalData), argv);
|
|
39
|
+
}, {
|
|
40
|
+
boundariesData: {
|
|
41
|
+
fetchExternalData: [
|
|
42
|
+
{ input: [], output: { foo: false } }
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
mode: 'proxy-pass'
|
|
46
|
+
});
|
|
47
|
+
const object = await indentity.run({ bar: true });
|
|
48
|
+
const { foo } = await indentity.run({ foo: true });
|
|
49
|
+
expect(object).toEqual({ bar: true, foo: false });
|
|
50
|
+
expect(foo).toBe(true);
|
|
51
|
+
});
|
|
52
|
+
it('Add task with boundaries test', async () => {
|
|
53
|
+
// Create a schema for the task that accepts a number
|
|
54
|
+
const schema = new index_1.Schema({
|
|
55
|
+
value: index_1.Schema.number()
|
|
56
|
+
});
|
|
57
|
+
// Define the boundaries
|
|
58
|
+
const boundaries = {
|
|
59
|
+
fetchExternalData: async (int) => {
|
|
60
|
+
return int * 2;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
// Create the task using createTask
|
|
64
|
+
const add = (0, index_1.createTask)(schema, boundaries, async function (argv, boundaries) {
|
|
65
|
+
const externalData = await boundaries.fetchExternalData(1);
|
|
66
|
+
return argv.value + externalData;
|
|
67
|
+
});
|
|
68
|
+
const six = await add.run({ value: 4 });
|
|
69
|
+
const seven = await add.run({ value: 5 });
|
|
70
|
+
expect(six).toBe(6);
|
|
71
|
+
expect(seven).toBe(7);
|
|
72
|
+
});
|
|
73
|
+
it('Add task + boundaries + tape test', async () => {
|
|
74
|
+
// Create a schema for the task that accepts a number
|
|
75
|
+
const schema = new index_1.Schema({
|
|
76
|
+
value: index_1.Schema.number()
|
|
77
|
+
});
|
|
78
|
+
// Define the boundaries
|
|
79
|
+
const boundaries = {
|
|
80
|
+
fetchExternalData: async (int) => {
|
|
81
|
+
return int * 2;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
// Create the task using createTask with boundariesData
|
|
85
|
+
const add = (0, index_1.createTask)(schema, boundaries, async function (argv, boundaries) {
|
|
86
|
+
const externalData = await boundaries.fetchExternalData(argv.value);
|
|
87
|
+
return argv.value + externalData;
|
|
88
|
+
}, {
|
|
89
|
+
boundariesData: {
|
|
90
|
+
fetchExternalData: [
|
|
91
|
+
{ input: [4], output: 2 }
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
mode: 'proxy-pass'
|
|
95
|
+
});
|
|
96
|
+
const six = await add.run({ value: 4 }); // From tape data
|
|
97
|
+
const fifteen = await add.run({ value: 5 });
|
|
98
|
+
expect(six).toBe(6);
|
|
99
|
+
expect(fifteen).toBe(15);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=task-with-boundaries.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-with-boundaries.test.js","sourceRoot":"","sources":["../../src/test/task-with-boundaries.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.test.d.ts","sourceRoot":"","sources":["../../src/test/validation.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../index");
|
|
4
|
+
const schema_1 = require("@shadow/schema");
|
|
5
|
+
describe('Validation tests', () => {
|
|
6
|
+
let task;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
const schema = new schema_1.Schema({
|
|
9
|
+
value: schema_1.Schema.number()
|
|
10
|
+
});
|
|
11
|
+
task = new index_1.Task(function (argv) {
|
|
12
|
+
return argv;
|
|
13
|
+
}, {
|
|
14
|
+
schema
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
it('Should be invalid', () => {
|
|
18
|
+
const check = task.isValid({ value: null });
|
|
19
|
+
expect(check).toBe(false);
|
|
20
|
+
});
|
|
21
|
+
it('Should be valid', () => {
|
|
22
|
+
const check = task.isValid({ value: 5 });
|
|
23
|
+
expect(check).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
it('Should validate data as part of run function', async () => {
|
|
26
|
+
try {
|
|
27
|
+
await task.run({ value: null });
|
|
28
|
+
// If we get here, the test should fail
|
|
29
|
+
expect('no error thrown').toBeUndefined();
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
// Test passes if we get here
|
|
33
|
+
expect(e).toBeDefined();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
it('Should work well', async () => {
|
|
37
|
+
const result = await task.run({ value: 5 });
|
|
38
|
+
expect(result.value).toBe(5);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe('Validation tests on param', () => {
|
|
42
|
+
let task;
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
const schema = new schema_1.Schema({
|
|
45
|
+
value: schema_1.Schema.number()
|
|
46
|
+
});
|
|
47
|
+
task = new index_1.Task(function (argv) {
|
|
48
|
+
return argv;
|
|
49
|
+
}, {
|
|
50
|
+
schema
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
it('Should be invalid', () => {
|
|
54
|
+
const check = task.isValid({ value: null });
|
|
55
|
+
expect(check).toBe(false);
|
|
56
|
+
});
|
|
57
|
+
it('Should be valid', () => {
|
|
58
|
+
const check = task.isValid({ value: 5 });
|
|
59
|
+
expect(check).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
it('Should validate data as part of run function', async () => {
|
|
62
|
+
try {
|
|
63
|
+
await task.run({ value: null });
|
|
64
|
+
// If we get here, the test should fail
|
|
65
|
+
expect('no error thrown').toBeUndefined();
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
// Test passes if we get here
|
|
69
|
+
expect(e).toBeDefined();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
it('Should work well', async () => {
|
|
73
|
+
try {
|
|
74
|
+
const result = await task.run({ value: 5 });
|
|
75
|
+
expect(result.value).toBe(5);
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
expect('error thrown: ' + e).toBeUndefined();
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('Validation multiple values tests', () => {
|
|
83
|
+
let task;
|
|
84
|
+
beforeEach(() => {
|
|
85
|
+
const schema = new schema_1.Schema({
|
|
86
|
+
value: schema_1.Schema.number(),
|
|
87
|
+
increment: schema_1.Schema.number()
|
|
88
|
+
});
|
|
89
|
+
task = new index_1.Task(function (argv) {
|
|
90
|
+
return argv;
|
|
91
|
+
}, {
|
|
92
|
+
schema
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
it('Should be on both invalid but fail in first', async () => {
|
|
96
|
+
try {
|
|
97
|
+
await task.run({ value: null });
|
|
98
|
+
// If we get here, the test should fail
|
|
99
|
+
expect('no error thrown').toBeUndefined();
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
// Test passes if we get here
|
|
103
|
+
expect(e).toBeDefined();
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
it('Should be on both invalid but fail in increment', async () => {
|
|
107
|
+
try {
|
|
108
|
+
await task.run({ value: 5 });
|
|
109
|
+
// If we get here, the test should fail
|
|
110
|
+
expect('no error thrown').toBeUndefined();
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
// Test passes if we get here
|
|
114
|
+
expect(e).toBeDefined();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
it('Should work well', async () => {
|
|
118
|
+
const result = await task.run({ value: 5, increment: 1 });
|
|
119
|
+
expect(result.value).toBe(5);
|
|
120
|
+
expect(result.increment).toBe(1);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('Get Schema', () => {
|
|
124
|
+
it('Object as string', async () => {
|
|
125
|
+
var _a;
|
|
126
|
+
const add2 = new index_1.Task(function (int) {
|
|
127
|
+
return int + 2;
|
|
128
|
+
}, {
|
|
129
|
+
schema: new schema_1.Schema({
|
|
130
|
+
value: schema_1.Schema.number()
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
const schema = add2.getSchema();
|
|
134
|
+
const schemaDescription = (_a = schema === null || schema === void 0 ? void 0 : schema.describe()) !== null && _a !== void 0 ? _a : {};
|
|
135
|
+
expect(JSON.stringify(schemaDescription)).toBe('{"value":{"type":"number"}}');
|
|
136
|
+
});
|
|
137
|
+
it('Empty object as string', async () => {
|
|
138
|
+
const add2 = new index_1.Task(function (int) {
|
|
139
|
+
return int + 2;
|
|
140
|
+
}, {});
|
|
141
|
+
const schema = add2.getSchema();
|
|
142
|
+
expect(schema).toBeUndefined();
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('Set Schema', () => {
|
|
146
|
+
it('Object as string', async () => {
|
|
147
|
+
var _a;
|
|
148
|
+
const add2 = new index_1.Task(function (int) {
|
|
149
|
+
return int + 2;
|
|
150
|
+
});
|
|
151
|
+
add2.setSchema(new schema_1.Schema({
|
|
152
|
+
value: schema_1.Schema.number()
|
|
153
|
+
}));
|
|
154
|
+
const schema = add2.getSchema();
|
|
155
|
+
const schemaDescription = (_a = schema === null || schema === void 0 ? void 0 : schema.describe()) !== null && _a !== void 0 ? _a : {};
|
|
156
|
+
expect(JSON.stringify(schemaDescription)).toBe('{"value":{"type":"number"}}');
|
|
157
|
+
});
|
|
158
|
+
it('Empty object as string', async () => {
|
|
159
|
+
const add2 = new index_1.Task(function (int) {
|
|
160
|
+
return int + 2;
|
|
161
|
+
});
|
|
162
|
+
const schema = add2.getSchema();
|
|
163
|
+
expect(schema).toBeUndefined();
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
//# sourceMappingURL=validation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../src/test/validation.test.ts"],"names":[],"mappings":";;AAAA,oCAAsD;AACtD,2CAAyD;AAEzD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,IAAsB,CAAA;IAE1B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC;YACxB,KAAK,EAAE,eAAM,CAAC,MAAM,EAAE;SACvB,CAAC,CAAA;QAEF,IAAI,GAAG,IAAI,YAAI,CAAC,UAAU,IAAgC;YACxD,OAAO,IAAI,CAAA;QACb,CAAC,EAAE;YACD,MAAM;SACP,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3C,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAExC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/B,uCAAuC;YACvC,MAAM,CAAC,iBAAiB,CAAC,CAAC,aAAa,EAAE,CAAA;QAC3C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,6BAA6B;YAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QACzB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,IAAsB,CAAA;IAE1B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC;YACxB,KAAK,EAAE,eAAM,CAAC,MAAM,EAAE;SACvB,CAAC,CAAA;QAEF,IAAI,GAAG,IAAI,YAAI,CAAC,UAAU,IAAgC;YACxD,OAAO,IAAI,CAAA;QACb,CAAC,EAAE;YACD,MAAM;SACP,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3C,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAExC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/B,uCAAuC;YACvC,MAAM,CAAC,iBAAiB,CAAC,CAAC,aAAa,EAAE,CAAA;QAC3C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,6BAA6B;YAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QACzB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QAC9C,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,IAAI,IAAsB,CAAA;IAE1B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC;YACxB,KAAK,EAAE,eAAM,CAAC,MAAM,EAAE;YACtB,SAAS,EAAE,eAAM,CAAC,MAAM,EAAE;SAC3B,CAAC,CAAA;QAEF,IAAI,GAAG,IAAI,YAAI,CAAC,UAAU,IAAgC;YACxD,OAAO,IAAI,CAAA;QACb,CAAC,EAAE;YACD,MAAM;SACP,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/B,uCAAuC;YACvC,MAAM,CAAC,iBAAiB,CAAC,CAAC,aAAa,EAAE,CAAA;QAC3C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,6BAA6B;YAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QACzB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YAC5B,uCAAuC;YACvC,MAAM,CAAC,iBAAiB,CAAC,CAAC,aAAa,EAAE,CAAA;QAC3C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,6BAA6B;YAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QACzB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;QAEzD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;;QAChC,MAAM,IAAI,GAAG,IAAI,YAAI,CAAC,UAAU,GAAW;YACzC,OAAO,GAAG,GAAG,CAAC,CAAA;QAChB,CAAC,EAAE;YACD,MAAM,EAAE,IAAI,eAAM,CAAC;gBACjB,KAAK,EAAE,eAAM,CAAC,MAAM,EAAE;aACvB,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC/B,MAAM,iBAAiB,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,EAAE,mCAAI,EAAE,CAAA;QAElD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IAC/E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,IAAI,GAAG,IAAI,YAAI,CAAC,UAAU,GAAW;YACzC,OAAO,GAAG,GAAG,CAAC,CAAA;QAChB,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAE/B,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;;QAChC,MAAM,IAAI,GAAG,IAAI,YAAI,CAAC,UAAU,GAAW;YACzC,OAAO,GAAG,GAAG,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,SAAS,CAAC,IAAI,eAAM,CAAC;YACxB,KAAK,EAAE,eAAM,CAAC,MAAM,EAAE;SACvB,CAAC,CAAC,CAAA;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC/B,MAAM,iBAAiB,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,EAAE,mCAAI,EAAE,CAAA;QAElD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IAC/E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,IAAI,GAAG,IAAI,YAAI,CAAC,UAAU,GAAW;YACzC,OAAO,GAAG,GAAG,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAE/B,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
type BaseBoundary = (...args: unknown[]) => unknown;
|
|
2
|
+
export type Mode = 'proxy' | 'proxy-pass' | 'proxy-catch' | 'replay';
|
|
3
|
+
/**
|
|
4
|
+
* Represents a boundary function that can be called within a task
|
|
5
|
+
* Using any here for compatibility with existing tests
|
|
6
|
+
* @template TReturn - The return type of the function
|
|
7
|
+
*/
|
|
8
|
+
export type BoundaryFunction<TReturn = any> = (...args: any[]) => Promise<TReturn>;
|
|
9
|
+
/**
|
|
10
|
+
* Represents a record of a boundary function call
|
|
11
|
+
* @template TInput - The type of input data
|
|
12
|
+
* @template TOutput - The type of output data
|
|
13
|
+
*/
|
|
14
|
+
export interface BoundaryRecord<TInput = any[], TOutput = any> {
|
|
15
|
+
input: TInput;
|
|
16
|
+
output?: TOutput;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Represents a wrapped boundary function with additional methods
|
|
21
|
+
*/
|
|
22
|
+
export interface WrappedBoundaryFunction<Func extends BoundaryFunction = BoundaryFunction> {
|
|
23
|
+
(...args: Parameters<Func>): Promise<ReturnType<Func>>;
|
|
24
|
+
getTape: () => Array<BoundaryRecord<Parameters<Func>, Awaited<ReturnType<Func>>>>;
|
|
25
|
+
setTape: (newTape: Array<BoundaryRecord<Parameters<Func>, Awaited<ReturnType<Func>>>>) => void;
|
|
26
|
+
getMode: () => Mode;
|
|
27
|
+
setMode: (newMode: Mode) => void;
|
|
28
|
+
startRun: () => void;
|
|
29
|
+
stopRun: () => void;
|
|
30
|
+
getRunData: () => Array<BoundaryRecord<Parameters<Func>, Awaited<ReturnType<Func>>>>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Represents a collection of boundary functions
|
|
34
|
+
*/
|
|
35
|
+
export type Boundaries = Record<string, BoundaryFunction>;
|
|
36
|
+
/**
|
|
37
|
+
* Represents a collection of wrapped boundary functions
|
|
38
|
+
*/
|
|
39
|
+
export type WrappedBoundaries<B extends Boundaries = Boundaries> = {
|
|
40
|
+
[K in keyof B]: WrappedBoundaryFunction<B[K]>;
|
|
41
|
+
};
|
|
42
|
+
export declare const createBoundary: <Func extends BaseBoundary>(fn: Func) => WrappedBoundaryFunction<Func extends BoundaryFunction ? Func : never>;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=boundary.d.ts.map
|
|
@@ -0,0 +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;AAEH,MAAM,WAAW,cAAc,CAAC,MAAM,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,GAAG;IAC3D,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;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,CA4HxI,CAAA"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createBoundary = void 0;
|
|
37
|
+
const assert = __importStar(require("assert"));
|
|
38
|
+
const createBoundary = (fn) => {
|
|
39
|
+
let runLog = [];
|
|
40
|
+
let cacheTape = [];
|
|
41
|
+
let mode = 'proxy';
|
|
42
|
+
let hasRun = false;
|
|
43
|
+
const wrappedFn = async (...args) => {
|
|
44
|
+
const findRecord = (record, tape) => {
|
|
45
|
+
const result = tape.find((item) => {
|
|
46
|
+
if (typeof item === 'undefined') {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
let error;
|
|
50
|
+
try {
|
|
51
|
+
assert.deepEqual(record, item.input);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
error = e;
|
|
55
|
+
}
|
|
56
|
+
return typeof error === 'undefined';
|
|
57
|
+
});
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
const record = {
|
|
61
|
+
input: args
|
|
62
|
+
};
|
|
63
|
+
if (mode === 'proxy-pass') {
|
|
64
|
+
const record = findRecord(args, cacheTape);
|
|
65
|
+
if (typeof record !== 'undefined') {
|
|
66
|
+
return await (async () => {
|
|
67
|
+
return record.output;
|
|
68
|
+
})();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (mode === 'replay') {
|
|
72
|
+
return await (async () => {
|
|
73
|
+
const record = findRecord(args, cacheTape);
|
|
74
|
+
if (typeof record === 'undefined') {
|
|
75
|
+
throw new Error('No tape value for this inputs');
|
|
76
|
+
}
|
|
77
|
+
if (typeof record.error !== 'undefined') {
|
|
78
|
+
throw new Error(record.error);
|
|
79
|
+
}
|
|
80
|
+
return record.output;
|
|
81
|
+
})();
|
|
82
|
+
}
|
|
83
|
+
return await (async () => {
|
|
84
|
+
let result, error;
|
|
85
|
+
try {
|
|
86
|
+
result = await fn(...args);
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
error = e;
|
|
90
|
+
}
|
|
91
|
+
if (typeof error !== 'undefined') {
|
|
92
|
+
const prevRecord = findRecord(args, cacheTape);
|
|
93
|
+
if (mode === 'proxy-catch' && typeof prevRecord !== 'undefined') {
|
|
94
|
+
return await (async () => {
|
|
95
|
+
return prevRecord.output;
|
|
96
|
+
})();
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
record.error = error.message;
|
|
100
|
+
if (hasRun) {
|
|
101
|
+
runLog.push(record);
|
|
102
|
+
}
|
|
103
|
+
cacheTape.push(record);
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
record.output = result;
|
|
109
|
+
if (hasRun) {
|
|
110
|
+
runLog.push(record);
|
|
111
|
+
}
|
|
112
|
+
cacheTape.push(record);
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
})();
|
|
116
|
+
};
|
|
117
|
+
// tape cache
|
|
118
|
+
wrappedFn.getTape = function () {
|
|
119
|
+
return cacheTape;
|
|
120
|
+
};
|
|
121
|
+
wrappedFn.setTape = function (newTape) {
|
|
122
|
+
cacheTape = newTape;
|
|
123
|
+
};
|
|
124
|
+
// Mode
|
|
125
|
+
wrappedFn.getMode = function () {
|
|
126
|
+
return mode;
|
|
127
|
+
};
|
|
128
|
+
wrappedFn.setMode = function (newMode) {
|
|
129
|
+
mode = newMode;
|
|
130
|
+
};
|
|
131
|
+
// run log
|
|
132
|
+
wrappedFn.startRun = function () {
|
|
133
|
+
runLog = [];
|
|
134
|
+
hasRun = true;
|
|
135
|
+
};
|
|
136
|
+
wrappedFn.stopRun = function () {
|
|
137
|
+
hasRun = false;
|
|
138
|
+
};
|
|
139
|
+
wrappedFn.getRunData = function () {
|
|
140
|
+
return runLog;
|
|
141
|
+
};
|
|
142
|
+
return wrappedFn;
|
|
143
|
+
};
|
|
144
|
+
exports.createBoundary = createBoundary;
|
|
145
|
+
//# sourceMappingURL=boundary.js.map
|