@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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +241 -0
  3. package/dist/index.d.ts +92 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +191 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/test/add-listener-with-boundaries.test.d.ts +2 -0
  8. package/dist/test/add-listener-with-boundaries.test.d.ts.map +1 -0
  9. package/dist/test/add-listener-with-boundaries.test.js +230 -0
  10. package/dist/test/add-listener-with-boundaries.test.js.map +1 -0
  11. package/dist/test/add-listener.test.d.ts +2 -0
  12. package/dist/test/add-listener.test.d.ts.map +1 -0
  13. package/dist/test/add-listener.test.js +92 -0
  14. package/dist/test/add-listener.test.js.map +1 -0
  15. package/dist/test/boundary-modes.test.d.ts +2 -0
  16. package/dist/test/boundary-modes.test.d.ts.map +1 -0
  17. package/dist/test/boundary-modes.test.js +184 -0
  18. package/dist/test/boundary-modes.test.js.map +1 -0
  19. package/dist/test/change-mode.test.d.ts +2 -0
  20. package/dist/test/change-mode.test.d.ts.map +1 -0
  21. package/dist/test/change-mode.test.js +39 -0
  22. package/dist/test/change-mode.test.js.map +1 -0
  23. package/dist/test/index.test.d.ts +2 -0
  24. package/dist/test/index.test.d.ts.map +1 -0
  25. package/dist/test/index.test.js +48 -0
  26. package/dist/test/index.test.js.map +1 -0
  27. package/dist/test/run-boundary.test.d.ts +2 -0
  28. package/dist/test/run-boundary.test.d.ts.map +1 -0
  29. package/dist/test/run-boundary.test.js +49 -0
  30. package/dist/test/run-boundary.test.js.map +1 -0
  31. package/dist/test/run-without-args.test.d.ts +2 -0
  32. package/dist/test/run-without-args.test.d.ts.map +1 -0
  33. package/dist/test/run-without-args.test.js +29 -0
  34. package/dist/test/run-without-args.test.js.map +1 -0
  35. package/dist/test/task-with-boundaries.test.d.ts +2 -0
  36. package/dist/test/task-with-boundaries.test.d.ts.map +1 -0
  37. package/dist/test/task-with-boundaries.test.js +102 -0
  38. package/dist/test/task-with-boundaries.test.js.map +1 -0
  39. package/dist/test/validation.test.d.ts +2 -0
  40. package/dist/test/validation.test.d.ts.map +1 -0
  41. package/dist/test/validation.test.js +166 -0
  42. package/dist/test/validation.test.js.map +1 -0
  43. package/dist/utils/boundary.d.ts +44 -0
  44. package/dist/utils/boundary.d.ts.map +1 -0
  45. package/dist/utils/boundary.js +145 -0
  46. package/dist/utils/boundary.js.map +1 -0
  47. package/jest.config.js +9 -0
  48. package/package.json +30 -0
  49. package/src/index.ts +344 -0
  50. package/src/test/add-listener-with-boundaries.test.ts +299 -0
  51. package/src/test/add-listener.test.ts +110 -0
  52. package/src/test/boundary-modes.test.ts +215 -0
  53. package/src/test/change-mode.test.ts +45 -0
  54. package/src/test/index.test.ts +62 -0
  55. package/src/test/run-boundary.test.ts +64 -0
  56. package/src/test/run-without-args.test.ts +33 -0
  57. package/src/test/task-with-boundaries.test.ts +137 -0
  58. package/src/test/validation.test.ts +194 -0
  59. package/src/utils/boundary.ts +178 -0
  60. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=run-boundary.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=run-without-args.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=task-with-boundaries.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validation.test.d.ts.map
@@ -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":"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"}
@@ -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