@forgehive/task 0.2.3 → 0.2.5

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 (73) hide show
  1. package/dist/index.d.ts +9 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +38 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/test/add-listener-with-boundaries.test.js +78 -7
  6. package/dist/test/add-listener-with-boundaries.test.js.map +1 -1
  7. package/dist/test/add-listener.test.js +36 -0
  8. package/dist/test/add-listener.test.js.map +1 -1
  9. package/dist/test/boundary-modes.test.js +45 -5
  10. package/dist/test/boundary-modes.test.js.map +1 -1
  11. package/dist/test/execution-record-boundaries.test.js +12 -2
  12. package/dist/test/execution-record-boundaries.test.js.map +1 -1
  13. package/dist/test/integration-enhanced-records.test.d.ts +2 -0
  14. package/dist/test/integration-enhanced-records.test.d.ts.map +1 -0
  15. package/dist/test/integration-enhanced-records.test.js +467 -0
  16. package/dist/test/integration-enhanced-records.test.js.map +1 -0
  17. package/dist/test/metrics-collection.test.d.ts +2 -0
  18. package/dist/test/metrics-collection.test.d.ts.map +1 -0
  19. package/dist/test/metrics-collection.test.js +409 -0
  20. package/dist/test/metrics-collection.test.js.map +1 -0
  21. package/dist/test/performance-edge-cases.test.d.ts +2 -0
  22. package/dist/test/performance-edge-cases.test.d.ts.map +1 -0
  23. package/dist/test/performance-edge-cases.test.js +502 -0
  24. package/dist/test/performance-edge-cases.test.js.map +1 -0
  25. package/dist/test/run-boundary.test.js +27 -3
  26. package/dist/test/run-boundary.test.js.map +1 -1
  27. package/dist/test/safe-replay-complex-boundary.test.js +110 -9
  28. package/dist/test/safe-replay-complex-boundary.test.js.map +1 -1
  29. package/dist/test/safe-replay.test.js +35 -5
  30. package/dist/test/safe-replay.test.js.map +1 -1
  31. package/dist/test/safe-run.test.js +46 -4
  32. package/dist/test/safe-run.test.js.map +1 -1
  33. package/dist/test/setmetrics-boundary.test.d.ts +2 -0
  34. package/dist/test/setmetrics-boundary.test.d.ts.map +1 -0
  35. package/dist/test/setmetrics-boundary.test.js +195 -0
  36. package/dist/test/setmetrics-boundary.test.js.map +1 -0
  37. package/dist/test/task-with-boundaries.test.js +63 -2
  38. package/dist/test/task-with-boundaries.test.js.map +1 -1
  39. package/dist/test/timing-capture.test.d.ts +2 -0
  40. package/dist/test/timing-capture.test.d.ts.map +1 -0
  41. package/dist/test/timing-capture.test.js +304 -0
  42. package/dist/test/timing-capture.test.js.map +1 -0
  43. package/dist/test/timing-utilities.test.d.ts +2 -0
  44. package/dist/test/timing-utilities.test.d.ts.map +1 -0
  45. package/dist/test/timing-utilities.test.js +127 -0
  46. package/dist/test/timing-utilities.test.js.map +1 -0
  47. package/dist/types.d.ts +93 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +78 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/utils/boundary.d.ts +3 -0
  52. package/dist/utils/boundary.d.ts.map +1 -1
  53. package/dist/utils/boundary.js +11 -2
  54. package/dist/utils/boundary.js.map +1 -1
  55. package/package.json +3 -2
  56. package/src/index.ts +63 -8
  57. package/src/test/ToDos.md +79 -0
  58. package/src/test/add-listener-with-boundaries.test.ts +78 -7
  59. package/src/test/add-listener.test.ts +36 -0
  60. package/src/test/boundary-modes.test.ts +45 -5
  61. package/src/test/execution-record-boundaries.test.ts +12 -2
  62. package/src/test/metrics-collection.test.ts +476 -0
  63. package/src/test/performance-edge-cases.test.ts +596 -0
  64. package/src/test/run-boundary.test.ts +27 -3
  65. package/src/test/safe-replay-complex-boundary.test.ts +115 -10
  66. package/src/test/safe-replay.test.ts +35 -5
  67. package/src/test/safe-run.test.ts +46 -4
  68. package/src/test/setmetrics-boundary.test.ts +223 -0
  69. package/src/test/task-with-boundaries.test.ts +71 -5
  70. package/src/test/timing-capture.test.ts +348 -0
  71. package/src/test/timing-utilities.test.ts +145 -0
  72. package/src/types.ts +139 -0
  73. package/src/utils/boundary.ts +15 -2
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("../index");
4
+ const schema_1 = require("@forgehive/schema");
5
+ describe('Timing Capture Tests', () => {
6
+ describe('TimingTracker accuracy and reliability', () => {
7
+ it('should capture timing with millisecond precision', async () => {
8
+ const tracker = index_1.TimingTracker.create();
9
+ tracker.start();
10
+ await new Promise(resolve => setTimeout(resolve, 100)); // Wait 100ms
11
+ const timing = tracker.end();
12
+ expect(timing).not.toBeNull();
13
+ if (timing) {
14
+ expect(timing.duration).toBeGreaterThanOrEqual(90); // Allow for some variance
15
+ expect(timing.duration).toBeLessThan(150); // But not too much
16
+ expect(timing.endTime - timing.startTime).toBe(timing.duration);
17
+ }
18
+ });
19
+ it('should handle rapid successive timing operations', () => {
20
+ const timings = [];
21
+ for (let i = 0; i < 10; i++) {
22
+ const tracker = index_1.TimingTracker.create();
23
+ tracker.start();
24
+ // Immediate end
25
+ const timing = tracker.end();
26
+ if (timing) {
27
+ timings.push(timing);
28
+ }
29
+ }
30
+ timings.forEach(timing => {
31
+ expect(timing).not.toBeNull();
32
+ expect(timing.duration).toBeGreaterThanOrEqual(0);
33
+ expect(timing.duration).toBeLessThan(10); // Should be very fast
34
+ });
35
+ });
36
+ it('should provide monotonic timestamps', () => {
37
+ const tracker1 = index_1.TimingTracker.create();
38
+ const tracker2 = index_1.TimingTracker.create();
39
+ tracker1.start();
40
+ tracker2.start();
41
+ const timing1 = tracker1.end();
42
+ const timing2 = tracker2.end();
43
+ expect(timing1).not.toBeNull();
44
+ expect(timing2).not.toBeNull();
45
+ if (timing1 && timing2) {
46
+ expect(timing2.startTime).toBeGreaterThanOrEqual(timing1.startTime);
47
+ }
48
+ });
49
+ });
50
+ describe('Boundary timing capture in various scenarios', () => {
51
+ it('should capture timing for successful boundary calls', async () => {
52
+ const task = (0, index_1.createTask)({
53
+ name: 'timing-test-success',
54
+ schema: new schema_1.Schema({ input: schema_1.Schema.string() }),
55
+ boundaries: {
56
+ slowOperation: async (data) => {
57
+ await new Promise(resolve => setTimeout(resolve, 50));
58
+ return `processed: ${data}`;
59
+ }
60
+ },
61
+ fn: async ({ input }, { slowOperation }) => {
62
+ const result = await slowOperation(input);
63
+ return { result };
64
+ }
65
+ });
66
+ const [result, error, record] = await task.safeRun({ input: 'test' });
67
+ expect(error).toBeNull();
68
+ expect(result).toEqual({ result: 'processed: test' });
69
+ expect(record.boundaries.slowOperation).toHaveLength(1);
70
+ const boundaryCall = record.boundaries.slowOperation[0];
71
+ expect(boundaryCall.timing).toEqual(expect.objectContaining({
72
+ startTime: expect.any(Number),
73
+ endTime: expect.any(Number),
74
+ duration: expect.any(Number)
75
+ }));
76
+ expect(boundaryCall.timing.duration).toBeGreaterThanOrEqual(40);
77
+ expect(boundaryCall.timing.duration).toBeLessThan(100);
78
+ });
79
+ it('should capture timing for failed boundary calls', async () => {
80
+ const task = (0, index_1.createTask)({
81
+ name: 'timing-test-error',
82
+ schema: new schema_1.Schema({ input: schema_1.Schema.string() }),
83
+ boundaries: {
84
+ failingOperation: async (data) => {
85
+ await new Promise(resolve => setTimeout(resolve, 30));
86
+ throw new Error(`Failed to process: ${data}`);
87
+ }
88
+ },
89
+ fn: async ({ input }, { failingOperation }) => {
90
+ const result = await failingOperation(input);
91
+ return { result };
92
+ }
93
+ });
94
+ const [result, error, record] = await task.safeRun({ input: 'test' });
95
+ expect(result).toBeNull();
96
+ expect(error).not.toBeNull();
97
+ expect(record.boundaries.failingOperation).toHaveLength(1);
98
+ const boundaryCall = record.boundaries.failingOperation[0];
99
+ expect(boundaryCall.timing).toEqual(expect.objectContaining({
100
+ startTime: expect.any(Number),
101
+ endTime: expect.any(Number),
102
+ duration: expect.any(Number)
103
+ }));
104
+ expect(boundaryCall.timing.duration).toBeGreaterThanOrEqual(20);
105
+ expect(boundaryCall.timing.duration).toBeLessThan(60);
106
+ expect('error' in boundaryCall).toBe(true);
107
+ });
108
+ it('should capture timing for multiple boundary calls', async () => {
109
+ const task = (0, index_1.createTask)({
110
+ name: 'timing-test-multiple',
111
+ schema: new schema_1.Schema({ count: schema_1.Schema.number() }),
112
+ boundaries: {
113
+ operation: async (index) => {
114
+ await new Promise(resolve => setTimeout(resolve, 20 + index * 10));
115
+ return `result-${index}`;
116
+ }
117
+ },
118
+ fn: async ({ count }, { operation }) => {
119
+ const results = [];
120
+ for (let i = 0; i < count; i++) {
121
+ results.push(await operation(i));
122
+ }
123
+ return { results };
124
+ }
125
+ });
126
+ const [result, error, record] = await task.safeRun({ count: 3 });
127
+ expect(error).toBeNull();
128
+ expect(result === null || result === void 0 ? void 0 : result.results).toEqual(['result-0', 'result-1', 'result-2']);
129
+ expect(record.boundaries.operation).toHaveLength(3);
130
+ record.boundaries.operation.forEach((call, index) => {
131
+ expect(call.timing).toEqual(expect.objectContaining({
132
+ startTime: expect.any(Number),
133
+ endTime: expect.any(Number),
134
+ duration: expect.any(Number)
135
+ }));
136
+ // Each call should take longer than the previous
137
+ expect(call.timing.duration).toBeGreaterThanOrEqual(15 + index * 10);
138
+ expect(call.timing.duration).toBeLessThan(50 + index * 10);
139
+ });
140
+ });
141
+ it('should capture timing for parallel boundary calls', async () => {
142
+ const task = (0, index_1.createTask)({
143
+ name: 'timing-test-parallel',
144
+ schema: new schema_1.Schema({ delay: schema_1.Schema.number() }),
145
+ boundaries: {
146
+ operationA: async (delay) => {
147
+ await new Promise(resolve => setTimeout(resolve, delay));
148
+ return 'A';
149
+ },
150
+ operationB: async (delay) => {
151
+ await new Promise(resolve => setTimeout(resolve, delay));
152
+ return 'B';
153
+ }
154
+ },
155
+ fn: async ({ delay }, { operationA, operationB }) => {
156
+ const [resultA, resultB] = await Promise.all([
157
+ operationA(delay),
158
+ operationB(delay)
159
+ ]);
160
+ return { resultA, resultB };
161
+ }
162
+ });
163
+ const [result, error, record] = await task.safeRun({ delay: 50 });
164
+ expect(error).toBeNull();
165
+ expect(result).toEqual({ resultA: 'A', resultB: 'B' });
166
+ expect(record.boundaries.operationA).toHaveLength(1);
167
+ expect(record.boundaries.operationB).toHaveLength(1);
168
+ const callA = record.boundaries.operationA[0];
169
+ const callB = record.boundaries.operationB[0];
170
+ expect(callA.timing.duration).toBeGreaterThanOrEqual(40);
171
+ expect(callB.timing.duration).toBeGreaterThanOrEqual(40);
172
+ // Both calls should overlap in time since they run in parallel
173
+ const startDiff = Math.abs(callA.timing.startTime - callB.timing.startTime);
174
+ expect(startDiff).toBeLessThan(20); // Started within 20ms of each other
175
+ });
176
+ });
177
+ describe('Main function timing capture', () => {
178
+ it('should capture timing for main task function execution', async () => {
179
+ var _a, _b;
180
+ const task = (0, index_1.createTask)({
181
+ name: 'timing-test-main',
182
+ schema: new schema_1.Schema({ delay: schema_1.Schema.number() }),
183
+ boundaries: {},
184
+ fn: async ({ delay }) => {
185
+ await new Promise(resolve => setTimeout(resolve, delay));
186
+ return { completed: true };
187
+ }
188
+ });
189
+ const [result, error, record] = await task.safeRun({ delay: 100 });
190
+ expect(error).toBeNull();
191
+ expect(result).toEqual({ completed: true });
192
+ expect(record.timing).toEqual(expect.objectContaining({
193
+ startTime: expect.any(Number),
194
+ endTime: expect.any(Number),
195
+ duration: expect.any(Number)
196
+ }));
197
+ expect((_a = record.timing) === null || _a === void 0 ? void 0 : _a.duration).toBeGreaterThanOrEqual(90);
198
+ expect((_b = record.timing) === null || _b === void 0 ? void 0 : _b.duration).toBeLessThan(150);
199
+ });
200
+ it('should capture timing even when main function throws error', async () => {
201
+ var _a, _b;
202
+ const task = (0, index_1.createTask)({
203
+ name: 'timing-test-main-error',
204
+ schema: new schema_1.Schema({ delay: schema_1.Schema.number() }),
205
+ boundaries: {},
206
+ fn: async ({ delay }) => {
207
+ await new Promise(resolve => setTimeout(resolve, delay));
208
+ throw new Error('Intentional error');
209
+ }
210
+ });
211
+ const [result, error, record] = await task.safeRun({ delay: 80 });
212
+ expect(result).toBeNull();
213
+ expect(error).not.toBeNull();
214
+ expect(record.timing).toEqual(expect.objectContaining({
215
+ startTime: expect.any(Number),
216
+ endTime: expect.any(Number),
217
+ duration: expect.any(Number)
218
+ }));
219
+ expect((_a = record.timing) === null || _a === void 0 ? void 0 : _a.duration).toBeGreaterThanOrEqual(70);
220
+ expect((_b = record.timing) === null || _b === void 0 ? void 0 : _b.duration).toBeLessThan(120);
221
+ });
222
+ it('should include both main function and boundary timing', async () => {
223
+ var _a, _b;
224
+ const task = (0, index_1.createTask)({
225
+ name: 'timing-test-comprehensive',
226
+ schema: new schema_1.Schema({ delay: schema_1.Schema.number() }),
227
+ boundaries: {
228
+ slowBoundary: async (delay) => {
229
+ await new Promise(resolve => setTimeout(resolve, delay));
230
+ return 'boundary-result';
231
+ }
232
+ },
233
+ fn: async ({ delay }, { slowBoundary }) => {
234
+ await new Promise(resolve => setTimeout(resolve, delay));
235
+ const boundaryResult = await slowBoundary(delay);
236
+ await new Promise(resolve => setTimeout(resolve, delay));
237
+ return { main: 'completed', boundary: boundaryResult };
238
+ }
239
+ });
240
+ const [result, error, record] = await task.safeRun({ delay: 50 });
241
+ expect(error).toBeNull();
242
+ expect(result).toEqual({ main: 'completed', boundary: 'boundary-result' });
243
+ // Main function timing should include all delays
244
+ expect((_a = record.timing) === null || _a === void 0 ? void 0 : _a.duration).toBeGreaterThanOrEqual(140); // 3 * 50ms delays
245
+ expect((_b = record.timing) === null || _b === void 0 ? void 0 : _b.duration).toBeLessThan(200);
246
+ // Boundary timing should only include its delay
247
+ expect(record.boundaries.slowBoundary[0].timing.duration).toBeGreaterThanOrEqual(40);
248
+ expect(record.boundaries.slowBoundary[0].timing.duration).toBeLessThan(80);
249
+ // Boundary timing should be within the main function timing
250
+ const mainTiming = record.timing;
251
+ const boundaryTiming = record.boundaries.slowBoundary[0].timing;
252
+ expect(boundaryTiming.startTime).toBeGreaterThanOrEqual(mainTiming.startTime);
253
+ expect(boundaryTiming.endTime).toBeLessThanOrEqual(mainTiming.endTime);
254
+ });
255
+ });
256
+ describe('Edge cases and error scenarios', () => {
257
+ it('should handle timing when schema validation fails', async () => {
258
+ const task = (0, index_1.createTask)({
259
+ name: 'timing-test-validation-error',
260
+ schema: new schema_1.Schema({ requiredField: schema_1.Schema.string() }),
261
+ boundaries: {},
262
+ fn: async ({ requiredField }) => {
263
+ return { field: requiredField };
264
+ }
265
+ });
266
+ // siabled to test an incorrect execution
267
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
268
+ const [result, error, record] = await task.safeRun({ wrongField: 'test' });
269
+ expect(result).toBeNull();
270
+ expect(error).not.toBeNull();
271
+ expect(record.type).toBe('error');
272
+ // Should not have main function timing since function wasn't executed
273
+ expect(record.timing).toBeUndefined();
274
+ });
275
+ it('should handle timing with very fast operations', async () => {
276
+ const task = (0, index_1.createTask)({
277
+ name: 'timing-test-fast',
278
+ schema: new schema_1.Schema({ input: schema_1.Schema.string() }),
279
+ boundaries: {
280
+ fastOperation: async (data) => {
281
+ return data.toUpperCase(); // Very fast operation
282
+ }
283
+ },
284
+ fn: async ({ input }, { fastOperation }) => {
285
+ const result = await fastOperation(input);
286
+ return { result };
287
+ }
288
+ });
289
+ const [result, error, record] = await task.safeRun({ input: 'test' });
290
+ expect(error).toBeNull();
291
+ expect(result).toEqual({ result: 'TEST' });
292
+ const boundaryCall = record.boundaries.fastOperation[0];
293
+ expect(boundaryCall.timing).toEqual(expect.objectContaining({
294
+ startTime: expect.any(Number),
295
+ endTime: expect.any(Number),
296
+ duration: expect.any(Number)
297
+ }));
298
+ // Even very fast operations should have non-negative duration
299
+ expect(boundaryCall.timing.duration).toBeGreaterThanOrEqual(0);
300
+ expect(boundaryCall.timing.duration).toBeLessThan(50);
301
+ });
302
+ });
303
+ });
304
+ //# sourceMappingURL=timing-capture.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing-capture.test.js","sourceRoot":"","sources":["../../src/test/timing-capture.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=timing-utilities.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing-utilities.test.d.ts","sourceRoot":"","sources":["../../src/test/timing-utilities.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("../types");
4
+ describe('Timing Utilities', () => {
5
+ describe('TimingTracker', () => {
6
+ it('should track timing correctly with proper TypeScript types', () => {
7
+ const tracker = new types_1.TimingTracker();
8
+ tracker.start();
9
+ const timing = tracker.end();
10
+ expect(timing).not.toBeNull();
11
+ if (timing) {
12
+ expect(typeof timing.startTime).toBe('number');
13
+ expect(typeof timing.endTime).toBe('number');
14
+ expect(typeof timing.duration).toBe('number');
15
+ expect(timing.startTime).toBeLessThanOrEqual(timing.endTime);
16
+ expect(timing.duration).toBeGreaterThanOrEqual(0);
17
+ expect(timing.duration).toBe(timing.endTime - timing.startTime);
18
+ }
19
+ });
20
+ it('should return null if end() called without start()', () => {
21
+ const tracker = new types_1.TimingTracker();
22
+ const timing = tracker.end();
23
+ expect(timing).toBeNull();
24
+ });
25
+ it('should create new instances via static method with correct type', () => {
26
+ const tracker = types_1.TimingTracker.create();
27
+ expect(tracker).toBeInstanceOf(types_1.TimingTracker);
28
+ });
29
+ it('should handle multiple start/end cycles', () => {
30
+ const tracker = new types_1.TimingTracker();
31
+ // First cycle
32
+ tracker.start();
33
+ const timing1 = tracker.end();
34
+ expect(timing1).not.toBeNull();
35
+ // Second cycle
36
+ tracker.start();
37
+ const timing2 = tracker.end();
38
+ expect(timing2).not.toBeNull();
39
+ if (timing1 && timing2) {
40
+ expect(timing2.startTime).toBeGreaterThanOrEqual(timing1.endTime);
41
+ }
42
+ });
43
+ });
44
+ describe('TypeScript Type Definitions', () => {
45
+ it('should enforce TimingInfo structure with required properties', () => {
46
+ const timing = {
47
+ startTime: 1000,
48
+ endTime: 2000,
49
+ duration: 1000
50
+ };
51
+ expect(timing.startTime).toBe(1000);
52
+ expect(timing.endTime).toBe(2000);
53
+ expect(timing.duration).toBe(1000);
54
+ // TypeScript should enforce these are numbers
55
+ expect(typeof timing.startTime).toBe('number');
56
+ expect(typeof timing.endTime).toBe('number');
57
+ expect(typeof timing.duration).toBe('number');
58
+ });
59
+ it('should enforce Metric structure with typed properties', () => {
60
+ const metric = {
61
+ type: 'performance',
62
+ name: 'response_time',
63
+ value: 150
64
+ };
65
+ expect(metric.type).toBe('performance');
66
+ expect(metric.name).toBe('response_time');
67
+ expect(metric.value).toBe(150);
68
+ // TypeScript should enforce correct types
69
+ expect(typeof metric.type).toBe('string');
70
+ expect(typeof metric.name).toBe('string');
71
+ expect(typeof metric.value).toBe('number');
72
+ });
73
+ it('should support generic BoundaryTimingRecord with proper typing', () => {
74
+ const stringNumberRecord = {
75
+ input: ['test'],
76
+ output: 42,
77
+ timing: {
78
+ startTime: 1000,
79
+ endTime: 2000,
80
+ duration: 1000
81
+ }
82
+ };
83
+ expect(stringNumberRecord.input).toEqual(['test']);
84
+ expect(stringNumberRecord.output).toBe(42);
85
+ expect(stringNumberRecord.timing.duration).toBe(1000);
86
+ // Test with error record
87
+ const errorRecord = {
88
+ input: ['test'],
89
+ error: 'Something went wrong',
90
+ timing: {
91
+ startTime: 1000,
92
+ endTime: 2000,
93
+ duration: 1000
94
+ }
95
+ };
96
+ expect(errorRecord.input).toEqual(['test']);
97
+ expect(errorRecord.error).toBe('Something went wrong');
98
+ expect(errorRecord.output).toBeUndefined();
99
+ });
100
+ it('should support BaseExecutionRecord with comprehensive typing', () => {
101
+ var _a, _b, _c, _d;
102
+ const executionRecord = {
103
+ input: { userId: 'user123' },
104
+ output: { result: 42 },
105
+ taskName: 'testTask',
106
+ metadata: { environment: 'test' },
107
+ metrics: [
108
+ { type: 'performance', name: 'execution_time', value: 150 }
109
+ ],
110
+ timing: {
111
+ startTime: 1000,
112
+ endTime: 2000,
113
+ duration: 1000
114
+ },
115
+ type: 'success'
116
+ };
117
+ expect(executionRecord.input.userId).toBe('user123');
118
+ expect((_a = executionRecord.output) === null || _a === void 0 ? void 0 : _a.result).toBe(42);
119
+ expect(executionRecord.taskName).toBe('testTask');
120
+ expect((_b = executionRecord.metadata) === null || _b === void 0 ? void 0 : _b.environment).toBe('test');
121
+ expect((_c = executionRecord.metrics) === null || _c === void 0 ? void 0 : _c[0].value).toBe(150);
122
+ expect((_d = executionRecord.timing) === null || _d === void 0 ? void 0 : _d.duration).toBe(1000);
123
+ expect(executionRecord.type).toBe('success');
124
+ });
125
+ });
126
+ });
127
+ //# sourceMappingURL=timing-utilities.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing-utilities.test.js","sourceRoot":"","sources":["../../src/test/timing-utilities.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Shared types for execution timing and metrics
3
+ */
4
+ /**
5
+ * Timing information for tracking start/end times and duration
6
+ */
7
+ export interface TimingInfo {
8
+ /** Unix timestamp in milliseconds when execution started */
9
+ startTime: number;
10
+ /** Unix timestamp in milliseconds when execution ended */
11
+ endTime: number;
12
+ /** Computed duration in milliseconds (endTime - startTime) */
13
+ duration?: number;
14
+ }
15
+ /**
16
+ * Metric data structure for collecting custom measurements
17
+ */
18
+ export interface Metric {
19
+ /** Category of metric (e.g., "performance", "business", "error") */
20
+ type: string;
21
+ /** Specific metric name (e.g., "response_time", "items_processed") */
22
+ name: string;
23
+ /** Numeric value of the metric */
24
+ value: number;
25
+ }
26
+ /**
27
+ * Utility class for capturing timing information
28
+ */
29
+ export declare class TimingTracker {
30
+ private startTime;
31
+ /**
32
+ * Start timing capture
33
+ */
34
+ start(): void;
35
+ /**
36
+ * End timing capture and return timing information
37
+ * @returns TimingInfo object or null if start() was not called
38
+ */
39
+ end(): TimingInfo | null;
40
+ /**
41
+ * Create a new TimingTracker instance
42
+ * @returns New TimingTracker instance
43
+ */
44
+ static create(): TimingTracker;
45
+ }
46
+ /**
47
+ * Enhanced boundary record with timing information
48
+ */
49
+ export interface BoundaryTimingRecord<TInput = unknown[], TOutput = unknown> {
50
+ input: TInput;
51
+ output?: TOutput;
52
+ error?: string;
53
+ timing: TimingInfo;
54
+ }
55
+ /**
56
+ * Base execution record interface with timing and metrics support
57
+ */
58
+ export interface BaseExecutionRecord<InputType = unknown, OutputType = unknown, B = unknown> {
59
+ /** The input arguments passed to the task */
60
+ input: InputType;
61
+ /** The output returned by the task (if successful) */
62
+ output?: OutputType | null;
63
+ /** The error message if the task failed */
64
+ error?: string;
65
+ /** Boundary execution data */
66
+ boundaries?: B;
67
+ /** The name of the task (if set) */
68
+ taskName?: string;
69
+ /** Additional context metadata */
70
+ metadata?: Record<string, string>;
71
+ /** Array of collected metrics */
72
+ metrics?: Metric[];
73
+ /** Main function execution timing */
74
+ timing?: TimingInfo;
75
+ /** The type of execution record - computed from output/error state */
76
+ type: 'success' | 'error' | 'pending';
77
+ }
78
+ /**
79
+ * Validates a metric object to ensure it conforms to the Metric interface
80
+ * @param metric - The metric object to validate
81
+ * @returns true if the metric is valid, false otherwise
82
+ */
83
+ export declare function validateMetric(metric: unknown): metric is Metric;
84
+ /**
85
+ * Creates a validated metric object
86
+ * @param type - The metric type/category
87
+ * @param name - The metric name
88
+ * @param value - The metric value
89
+ * @returns A valid Metric object
90
+ * @throws Error if the metric data is invalid
91
+ */
92
+ export declare function createMetric(type: string, name: string, value: number): Metric;
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAsB;IAEvC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,GAAG,IAAI,UAAU,GAAG,IAAI;IAexB;;;OAGG;IACH,MAAM,CAAC,MAAM,IAAI,aAAa;CAG/B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,MAAM,GAAG,OAAO,EAAE,EAAE,OAAO,GAAG,OAAO;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,SAAS,GAAG,OAAO,EAAE,UAAU,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACzF,6CAA6C;IAC7C,KAAK,EAAE,SAAS,CAAC;IACjB,sDAAsD;IACtD,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,qCAAqC;IACrC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,sEAAsE;IACtE,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CAYhE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ9E"}
package/dist/types.js ADDED
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * Shared types for execution timing and metrics
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TimingTracker = void 0;
7
+ exports.validateMetric = validateMetric;
8
+ exports.createMetric = createMetric;
9
+ /**
10
+ * Utility class for capturing timing information
11
+ */
12
+ class TimingTracker {
13
+ constructor() {
14
+ this.startTime = null;
15
+ }
16
+ /**
17
+ * Start timing capture
18
+ */
19
+ start() {
20
+ this.startTime = Date.now();
21
+ }
22
+ /**
23
+ * End timing capture and return timing information
24
+ * @returns TimingInfo object or null if start() was not called
25
+ */
26
+ end() {
27
+ if (this.startTime === null) {
28
+ return null;
29
+ }
30
+ const endTime = Date.now();
31
+ const result = {
32
+ startTime: this.startTime,
33
+ endTime,
34
+ duration: endTime - this.startTime
35
+ };
36
+ // Reset startTime so subsequent calls return null
37
+ this.startTime = null;
38
+ return result;
39
+ }
40
+ /**
41
+ * Create a new TimingTracker instance
42
+ * @returns New TimingTracker instance
43
+ */
44
+ static create() {
45
+ return new TimingTracker();
46
+ }
47
+ }
48
+ exports.TimingTracker = TimingTracker;
49
+ /**
50
+ * Validates a metric object to ensure it conforms to the Metric interface
51
+ * @param metric - The metric object to validate
52
+ * @returns true if the metric is valid, false otherwise
53
+ */
54
+ function validateMetric(metric) {
55
+ if (typeof metric !== 'object' || metric === null) {
56
+ return false;
57
+ }
58
+ const m = metric;
59
+ return (typeof m.type === 'string' && m.type.length > 0 &&
60
+ typeof m.name === 'string' && m.name.length > 0 &&
61
+ typeof m.value === 'number' && !isNaN(m.value) && isFinite(m.value));
62
+ }
63
+ /**
64
+ * Creates a validated metric object
65
+ * @param type - The metric type/category
66
+ * @param name - The metric name
67
+ * @param value - The metric value
68
+ * @returns A valid Metric object
69
+ * @throws Error if the metric data is invalid
70
+ */
71
+ function createMetric(type, name, value) {
72
+ const metric = { type, name, value };
73
+ if (!validateMetric(metric)) {
74
+ throw new Error(`Invalid metric: type="${type}", name="${name}", value=${value}`);
75
+ }
76
+ return metric;
77
+ }
78
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA0GH,wCAYC;AAUD,oCAQC;AA9GD;;GAEG;AACH,MAAa,aAAa;IAA1B;QACU,cAAS,GAAkB,IAAI,CAAA;IAmCzC,CAAC;IAjCC;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC7B,CAAC;IAED;;;OAGG;IACH,GAAG;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAAA,OAAO,IAAI,CAAA;QAAA,CAAC;QAE1C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO;YACP,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC,SAAS;SACnC,CAAA;QAED,kDAAkD;QAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,aAAa,EAAE,CAAA;IAC5B,CAAC;CACF;AApCD,sCAoCC;AAoCD;;;;GAIG;AACH,SAAgB,cAAc,CAAC,MAAe;IAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,CAAC,GAAG,MAAiC,CAAA;IAE3C,OAAO,CACL,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAC/C,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAC/C,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CACpE,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,YAAY,CAAC,IAAY,EAAE,IAAY,EAAE,KAAa;IACpE,MAAM,MAAM,GAAW,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAE5C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,YAAY,IAAI,YAAY,KAAK,EAAE,CAAC,CAAA;IACnF,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}