@mondaydotcomorg/atp-compiler 0.17.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +382 -0
- package/__tests__/integration/all-array-methods-native.test.ts +321 -0
- package/__tests__/integration/all-callback-types.test.ts +406 -0
- package/__tests__/integration/comprehensive-edge-cases.test.ts +701 -0
- package/__tests__/integration/native-behavior-verification.test.ts +340 -0
- package/__tests__/integration/semantic-correctness.test.ts +354 -0
- package/__tests__/integration/threshold-tests.test.ts +529 -0
- package/__tests__/unit/batch-optimizer.test.ts +253 -0
- package/__tests__/unit/checkpoint-manager.test.ts +145 -0
- package/__tests__/unit/detector.test.ts +346 -0
- package/dist/atp-compiler/src/index.d.ts +6 -0
- package/dist/atp-compiler/src/index.d.ts.map +1 -0
- package/dist/atp-compiler/src/index.js +6 -0
- package/dist/atp-compiler/src/index.js.map +1 -0
- package/dist/atp-compiler/src/runtime/batch-parallel.d.ts +3 -0
- package/dist/atp-compiler/src/runtime/batch-parallel.d.ts.map +1 -0
- package/dist/atp-compiler/src/runtime/batch-parallel.js +13 -0
- package/dist/atp-compiler/src/runtime/batch-parallel.js.map +1 -0
- package/dist/atp-compiler/src/runtime/checkpoint-manager.d.ts +19 -0
- package/dist/atp-compiler/src/runtime/checkpoint-manager.d.ts.map +1 -0
- package/dist/atp-compiler/src/runtime/checkpoint-manager.js +81 -0
- package/dist/atp-compiler/src/runtime/checkpoint-manager.js.map +1 -0
- package/dist/atp-compiler/src/runtime/context.d.ts +8 -0
- package/dist/atp-compiler/src/runtime/context.d.ts.map +1 -0
- package/dist/atp-compiler/src/runtime/context.js +25 -0
- package/dist/atp-compiler/src/runtime/context.js.map +1 -0
- package/dist/atp-compiler/src/runtime/errors.d.ts +38 -0
- package/dist/atp-compiler/src/runtime/errors.d.ts.map +1 -0
- package/dist/atp-compiler/src/runtime/errors.js +61 -0
- package/dist/atp-compiler/src/runtime/errors.js.map +1 -0
- package/dist/atp-compiler/src/runtime/index.d.ts +16 -0
- package/dist/atp-compiler/src/runtime/index.d.ts.map +1 -0
- package/dist/atp-compiler/src/runtime/index.js +20 -0
- package/dist/atp-compiler/src/runtime/index.js.map +1 -0
- package/dist/atp-compiler/src/runtime/resumable-arrays.d.ts +9 -0
- package/dist/atp-compiler/src/runtime/resumable-arrays.d.ts.map +1 -0
- package/dist/atp-compiler/src/runtime/resumable-arrays.js +179 -0
- package/dist/atp-compiler/src/runtime/resumable-arrays.js.map +1 -0
- package/dist/atp-compiler/src/runtime/resumable-loops.d.ts +4 -0
- package/dist/atp-compiler/src/runtime/resumable-loops.d.ts.map +1 -0
- package/dist/atp-compiler/src/runtime/resumable-loops.js +61 -0
- package/dist/atp-compiler/src/runtime/resumable-loops.js.map +1 -0
- package/dist/atp-compiler/src/runtime/resumable-parallel.d.ts +3 -0
- package/dist/atp-compiler/src/runtime/resumable-parallel.d.ts.map +1 -0
- package/dist/atp-compiler/src/runtime/resumable-parallel.js +44 -0
- package/dist/atp-compiler/src/runtime/resumable-parallel.js.map +1 -0
- package/dist/atp-compiler/src/transformer/array-transformer-batch.d.ts +13 -0
- package/dist/atp-compiler/src/transformer/array-transformer-batch.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/array-transformer-batch.js +55 -0
- package/dist/atp-compiler/src/transformer/array-transformer-batch.js.map +1 -0
- package/dist/atp-compiler/src/transformer/array-transformer-sequential.d.ts +6 -0
- package/dist/atp-compiler/src/transformer/array-transformer-sequential.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/array-transformer-sequential.js +23 -0
- package/dist/atp-compiler/src/transformer/array-transformer-sequential.js.map +1 -0
- package/dist/atp-compiler/src/transformer/array-transformer-utils.d.ts +18 -0
- package/dist/atp-compiler/src/transformer/array-transformer-utils.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/array-transformer-utils.js +69 -0
- package/dist/atp-compiler/src/transformer/array-transformer-utils.js.map +1 -0
- package/dist/atp-compiler/src/transformer/array-transformer-wrappers.d.ts +26 -0
- package/dist/atp-compiler/src/transformer/array-transformer-wrappers.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/array-transformer-wrappers.js +88 -0
- package/dist/atp-compiler/src/transformer/array-transformer-wrappers.js.map +1 -0
- package/dist/atp-compiler/src/transformer/array-transformer.d.ts +12 -0
- package/dist/atp-compiler/src/transformer/array-transformer.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/array-transformer.js +47 -0
- package/dist/atp-compiler/src/transformer/array-transformer.js.map +1 -0
- package/dist/atp-compiler/src/transformer/batch-detector.d.ts +16 -0
- package/dist/atp-compiler/src/transformer/batch-detector.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/batch-detector.js +131 -0
- package/dist/atp-compiler/src/transformer/batch-detector.js.map +1 -0
- package/dist/atp-compiler/src/transformer/batch-optimizer.d.ts +27 -0
- package/dist/atp-compiler/src/transformer/batch-optimizer.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/batch-optimizer.js +244 -0
- package/dist/atp-compiler/src/transformer/batch-optimizer.js.map +1 -0
- package/dist/atp-compiler/src/transformer/detector.d.ts +9 -0
- package/dist/atp-compiler/src/transformer/detector.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/detector.js +141 -0
- package/dist/atp-compiler/src/transformer/detector.js.map +1 -0
- package/dist/atp-compiler/src/transformer/index.d.ts +22 -0
- package/dist/atp-compiler/src/transformer/index.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/index.js +132 -0
- package/dist/atp-compiler/src/transformer/index.js.map +1 -0
- package/dist/atp-compiler/src/transformer/loop-transformer.d.ts +25 -0
- package/dist/atp-compiler/src/transformer/loop-transformer.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/loop-transformer.js +193 -0
- package/dist/atp-compiler/src/transformer/loop-transformer.js.map +1 -0
- package/dist/atp-compiler/src/transformer/promise-transformer.d.ts +17 -0
- package/dist/atp-compiler/src/transformer/promise-transformer.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/promise-transformer.js +132 -0
- package/dist/atp-compiler/src/transformer/promise-transformer.js.map +1 -0
- package/dist/atp-compiler/src/transformer/utils.d.ts +15 -0
- package/dist/atp-compiler/src/transformer/utils.d.ts.map +1 -0
- package/dist/atp-compiler/src/transformer/utils.js +118 -0
- package/dist/atp-compiler/src/transformer/utils.js.map +1 -0
- package/dist/atp-compiler/src/types.d.ts +57 -0
- package/dist/atp-compiler/src/types.d.ts.map +1 -0
- package/dist/atp-compiler/src/types.js +23 -0
- package/dist/atp-compiler/src/types.js.map +1 -0
- package/dist/protocol/src/auth.d.ts +173 -0
- package/dist/protocol/src/auth.d.ts.map +1 -0
- package/dist/protocol/src/auth.js +202 -0
- package/dist/protocol/src/auth.js.map +1 -0
- package/dist/protocol/src/index.d.ts +7 -0
- package/dist/protocol/src/index.d.ts.map +1 -0
- package/dist/protocol/src/index.js +7 -0
- package/dist/protocol/src/index.js.map +1 -0
- package/dist/protocol/src/oauth.d.ts +63 -0
- package/dist/protocol/src/oauth.d.ts.map +1 -0
- package/dist/protocol/src/oauth.js +5 -0
- package/dist/protocol/src/oauth.js.map +1 -0
- package/dist/protocol/src/providers.d.ts +167 -0
- package/dist/protocol/src/providers.d.ts.map +1 -0
- package/dist/protocol/src/providers.js +33 -0
- package/dist/protocol/src/providers.js.map +1 -0
- package/dist/protocol/src/schemas.d.ts +6 -0
- package/dist/protocol/src/schemas.d.ts.map +1 -0
- package/dist/protocol/src/schemas.js +51 -0
- package/dist/protocol/src/schemas.js.map +1 -0
- package/dist/protocol/src/types.d.ts +489 -0
- package/dist/protocol/src/types.d.ts.map +1 -0
- package/dist/protocol/src/types.js +88 -0
- package/dist/protocol/src/types.js.map +1 -0
- package/dist/protocol/src/validation.d.ts +76 -0
- package/dist/protocol/src/validation.d.ts.map +1 -0
- package/dist/protocol/src/validation.js +129 -0
- package/dist/protocol/src/validation.js.map +1 -0
- package/dist/provenance/src/ast/instrumentor.d.ts +37 -0
- package/dist/provenance/src/ast/instrumentor.d.ts.map +1 -0
- package/dist/provenance/src/ast/instrumentor.js +299 -0
- package/dist/provenance/src/ast/instrumentor.js.map +1 -0
- package/dist/provenance/src/index.d.ts +7 -0
- package/dist/provenance/src/index.d.ts.map +1 -0
- package/dist/provenance/src/index.js +7 -0
- package/dist/provenance/src/index.js.map +1 -0
- package/dist/provenance/src/policies/engine.d.ts +71 -0
- package/dist/provenance/src/policies/engine.d.ts.map +1 -0
- package/dist/provenance/src/policies/engine.js +433 -0
- package/dist/provenance/src/policies/engine.js.map +1 -0
- package/dist/provenance/src/registry.d.ts +94 -0
- package/dist/provenance/src/registry.d.ts.map +1 -0
- package/dist/provenance/src/registry.js +445 -0
- package/dist/provenance/src/registry.js.map +1 -0
- package/dist/provenance/src/tokens.d.ts +49 -0
- package/dist/provenance/src/tokens.d.ts.map +1 -0
- package/dist/provenance/src/tokens.js +239 -0
- package/dist/provenance/src/tokens.js.map +1 -0
- package/dist/provenance/src/types.d.ts +150 -0
- package/dist/provenance/src/types.d.ts.map +1 -0
- package/dist/provenance/src/types.js +47 -0
- package/dist/provenance/src/types.js.map +1 -0
- package/dist/runtime/src/approval/handler.d.ts +12 -0
- package/dist/runtime/src/approval/handler.d.ts.map +1 -0
- package/dist/runtime/src/approval/handler.js +17 -0
- package/dist/runtime/src/approval/handler.js.map +1 -0
- package/dist/runtime/src/approval/index.d.ts +17 -0
- package/dist/runtime/src/approval/index.d.ts.map +1 -0
- package/dist/runtime/src/approval/index.js +94 -0
- package/dist/runtime/src/approval/index.js.map +1 -0
- package/dist/runtime/src/approval/types.d.ts +21 -0
- package/dist/runtime/src/approval/types.d.ts.map +1 -0
- package/dist/runtime/src/approval/types.js +5 -0
- package/dist/runtime/src/approval/types.js.map +1 -0
- package/dist/runtime/src/cache/backends.d.ts +39 -0
- package/dist/runtime/src/cache/backends.d.ts.map +1 -0
- package/dist/runtime/src/cache/backends.js +167 -0
- package/dist/runtime/src/cache/backends.js.map +1 -0
- package/dist/runtime/src/cache/index.d.ts +32 -0
- package/dist/runtime/src/cache/index.d.ts.map +1 -0
- package/dist/runtime/src/cache/index.js +103 -0
- package/dist/runtime/src/cache/index.js.map +1 -0
- package/dist/runtime/src/cache/types.d.ts +20 -0
- package/dist/runtime/src/cache/types.d.ts.map +1 -0
- package/dist/runtime/src/cache/types.js +2 -0
- package/dist/runtime/src/cache/types.js.map +1 -0
- package/dist/runtime/src/embedding/index.d.ts +39 -0
- package/dist/runtime/src/embedding/index.d.ts.map +1 -0
- package/dist/runtime/src/embedding/index.js +162 -0
- package/dist/runtime/src/embedding/index.js.map +1 -0
- package/dist/runtime/src/embedding/types.d.ts +28 -0
- package/dist/runtime/src/embedding/types.d.ts.map +1 -0
- package/dist/runtime/src/embedding/types.js +5 -0
- package/dist/runtime/src/embedding/types.js.map +1 -0
- package/dist/runtime/src/embedding/utils.d.ts +11 -0
- package/dist/runtime/src/embedding/utils.d.ts.map +1 -0
- package/dist/runtime/src/embedding/utils.js +30 -0
- package/dist/runtime/src/embedding/utils.js.map +1 -0
- package/dist/runtime/src/embedding/vector-store.d.ts +64 -0
- package/dist/runtime/src/embedding/vector-store.d.ts.map +1 -0
- package/dist/runtime/src/embedding/vector-store.js +142 -0
- package/dist/runtime/src/embedding/vector-store.js.map +1 -0
- package/dist/runtime/src/index.d.ts +18 -0
- package/dist/runtime/src/index.d.ts.map +1 -0
- package/dist/runtime/src/index.js +17 -0
- package/dist/runtime/src/index.js.map +1 -0
- package/dist/runtime/src/llm/callback.d.ts +13 -0
- package/dist/runtime/src/llm/callback.d.ts.map +1 -0
- package/dist/runtime/src/llm/callback.js +19 -0
- package/dist/runtime/src/llm/callback.js.map +1 -0
- package/dist/runtime/src/llm/index.d.ts +29 -0
- package/dist/runtime/src/llm/index.d.ts.map +1 -0
- package/dist/runtime/src/llm/index.js +118 -0
- package/dist/runtime/src/llm/index.js.map +1 -0
- package/dist/runtime/src/llm/replay.d.ts +47 -0
- package/dist/runtime/src/llm/replay.d.ts.map +1 -0
- package/dist/runtime/src/llm/replay.js +114 -0
- package/dist/runtime/src/llm/replay.js.map +1 -0
- package/dist/runtime/src/llm/types.d.ts +24 -0
- package/dist/runtime/src/llm/types.d.ts.map +1 -0
- package/dist/runtime/src/llm/types.js +2 -0
- package/dist/runtime/src/llm/types.js.map +1 -0
- package/dist/runtime/src/log/index.d.ts +12 -0
- package/dist/runtime/src/log/index.d.ts.map +1 -0
- package/dist/runtime/src/log/index.js +166 -0
- package/dist/runtime/src/log/index.js.map +1 -0
- package/dist/runtime/src/log/types.d.ts +19 -0
- package/dist/runtime/src/log/types.d.ts.map +1 -0
- package/dist/runtime/src/log/types.js +5 -0
- package/dist/runtime/src/log/types.js.map +1 -0
- package/dist/runtime/src/metadata/decorators.d.ts +27 -0
- package/dist/runtime/src/metadata/decorators.d.ts.map +1 -0
- package/dist/runtime/src/metadata/decorators.js +38 -0
- package/dist/runtime/src/metadata/decorators.js.map +1 -0
- package/dist/runtime/src/metadata/generated.d.ts +18 -0
- package/dist/runtime/src/metadata/generated.d.ts.map +1 -0
- package/dist/runtime/src/metadata/generated.js +290 -0
- package/dist/runtime/src/metadata/generated.js.map +1 -0
- package/dist/runtime/src/metadata/index.d.ts +11 -0
- package/dist/runtime/src/metadata/index.d.ts.map +1 -0
- package/dist/runtime/src/metadata/index.js +45 -0
- package/dist/runtime/src/metadata/index.js.map +1 -0
- package/dist/runtime/src/metadata/types.d.ts +22 -0
- package/dist/runtime/src/metadata/types.d.ts.map +1 -0
- package/dist/runtime/src/metadata/types.js +6 -0
- package/dist/runtime/src/metadata/types.js.map +1 -0
- package/dist/runtime/src/pause/index.d.ts +11 -0
- package/dist/runtime/src/pause/index.d.ts.map +1 -0
- package/dist/runtime/src/pause/index.js +15 -0
- package/dist/runtime/src/pause/index.js.map +1 -0
- package/dist/runtime/src/pause/types.d.ts +46 -0
- package/dist/runtime/src/pause/types.d.ts.map +1 -0
- package/dist/runtime/src/pause/types.js +57 -0
- package/dist/runtime/src/pause/types.js.map +1 -0
- package/dist/runtime/src/progress/index.d.ts +19 -0
- package/dist/runtime/src/progress/index.d.ts.map +1 -0
- package/dist/runtime/src/progress/index.js +61 -0
- package/dist/runtime/src/progress/index.js.map +1 -0
- package/dist/runtime/src/progress/types.d.ts +7 -0
- package/dist/runtime/src/progress/types.d.ts.map +1 -0
- package/dist/runtime/src/progress/types.js +2 -0
- package/dist/runtime/src/progress/types.js.map +1 -0
- package/dist/runtime/src/registry.d.ts +16 -0
- package/dist/runtime/src/registry.d.ts.map +1 -0
- package/dist/runtime/src/registry.js +16 -0
- package/dist/runtime/src/registry.js.map +1 -0
- package/dist/runtime/src/utils.d.ts +11 -0
- package/dist/runtime/src/utils.d.ts.map +1 -0
- package/dist/runtime/src/utils.js +31 -0
- package/dist/runtime/src/utils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/jest.config.js +29 -0
- package/package.json +56 -0
- package/project.json +31 -0
- package/src/index.ts +6 -0
- package/src/runtime/batch-parallel.ts +22 -0
- package/src/runtime/checkpoint-manager.ts +105 -0
- package/src/runtime/context.ts +33 -0
- package/src/runtime/errors.ts +79 -0
- package/src/runtime/index.ts +35 -0
- package/src/runtime/resumable-arrays.ts +253 -0
- package/src/runtime/resumable-loops.ts +93 -0
- package/src/runtime/resumable-parallel.ts +57 -0
- package/src/transformer/array-transformer-batch.ts +86 -0
- package/src/transformer/array-transformer-sequential.ts +38 -0
- package/src/transformer/array-transformer-utils.ts +80 -0
- package/src/transformer/array-transformer-wrappers.ts +165 -0
- package/src/transformer/array-transformer.ts +76 -0
- package/src/transformer/batch-detector.ts +166 -0
- package/src/transformer/batch-optimizer.ts +320 -0
- package/src/transformer/detector.ts +171 -0
- package/src/transformer/index.ts +155 -0
- package/src/transformer/loop-transformer.ts +285 -0
- package/src/transformer/promise-transformer.ts +194 -0
- package/src/transformer/utils.ts +147 -0
- package/src/types.ts +101 -0
- package/tsconfig.json +12 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import { AsyncIterationDetector } from '../../src/transformer/detector';
|
|
2
|
+
|
|
3
|
+
describe('AsyncIterationDetector', () => {
|
|
4
|
+
let detector: AsyncIterationDetector;
|
|
5
|
+
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
detector = new AsyncIterationDetector();
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
describe('for-of loops with await', () => {
|
|
11
|
+
it('should detect for-of loop with await inside', () => {
|
|
12
|
+
const code = `
|
|
13
|
+
for (const item of items) {
|
|
14
|
+
await atp.llm.call({ prompt: item });
|
|
15
|
+
}
|
|
16
|
+
`;
|
|
17
|
+
|
|
18
|
+
const result = detector.detect(code);
|
|
19
|
+
|
|
20
|
+
expect(result.needsTransform).toBe(true);
|
|
21
|
+
expect(result.patterns).toContain('for-of-await');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('should not detect for-of loop without await', () => {
|
|
25
|
+
const code = `
|
|
26
|
+
for (const item of items) {
|
|
27
|
+
console.log(item);
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
|
|
31
|
+
const result = detector.detect(code);
|
|
32
|
+
|
|
33
|
+
expect(result.needsTransform).toBe(false);
|
|
34
|
+
expect(result.patterns).not.toContain('for-of-await');
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('should detect nested for-of with await', () => {
|
|
38
|
+
const code = `
|
|
39
|
+
for (const outer of outerItems) {
|
|
40
|
+
for (const inner of innerItems) {
|
|
41
|
+
await api.process(outer, inner);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
|
|
46
|
+
const result = detector.detect(code);
|
|
47
|
+
|
|
48
|
+
expect(result.needsTransform).toBe(true);
|
|
49
|
+
expect(result.patterns).toContain('for-of-await');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
describe('while loops with await', () => {
|
|
54
|
+
it('should detect while loop with await inside', () => {
|
|
55
|
+
const code = `
|
|
56
|
+
while (condition) {
|
|
57
|
+
await atp.llm.call({ prompt: 'test' });
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
60
|
+
|
|
61
|
+
const result = detector.detect(code);
|
|
62
|
+
|
|
63
|
+
expect(result.needsTransform).toBe(true);
|
|
64
|
+
expect(result.patterns).toContain('while-await');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('should not detect while loop without await', () => {
|
|
68
|
+
const code = `
|
|
69
|
+
while (condition) {
|
|
70
|
+
console.log('test');
|
|
71
|
+
}
|
|
72
|
+
`;
|
|
73
|
+
|
|
74
|
+
const result = detector.detect(code);
|
|
75
|
+
|
|
76
|
+
expect(result.needsTransform).toBe(false);
|
|
77
|
+
expect(result.patterns).not.toContain('while-await');
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
describe('array.map with async callback', () => {
|
|
82
|
+
it('should detect map with async callback', () => {
|
|
83
|
+
const code = `
|
|
84
|
+
const results = items.map(async (item) => {
|
|
85
|
+
return await atp.llm.call({ prompt: item });
|
|
86
|
+
});
|
|
87
|
+
`;
|
|
88
|
+
|
|
89
|
+
const result = detector.detect(code);
|
|
90
|
+
|
|
91
|
+
expect(result.needsTransform).toBe(true);
|
|
92
|
+
expect(result.patterns).toContain('map-async');
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('should not detect map with sync callback', () => {
|
|
96
|
+
const code = `
|
|
97
|
+
const results = items.map((item) => {
|
|
98
|
+
return item * 2;
|
|
99
|
+
});
|
|
100
|
+
`;
|
|
101
|
+
|
|
102
|
+
const result = detector.detect(code);
|
|
103
|
+
|
|
104
|
+
expect(result.needsTransform).toBe(false);
|
|
105
|
+
expect(result.patterns).not.toContain('map-async');
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
describe('array.forEach with async callback', () => {
|
|
110
|
+
it('should detect forEach with async callback', () => {
|
|
111
|
+
const code = `
|
|
112
|
+
items.forEach(async (item) => {
|
|
113
|
+
await atp.llm.call({ prompt: item });
|
|
114
|
+
});
|
|
115
|
+
`;
|
|
116
|
+
|
|
117
|
+
const result = detector.detect(code);
|
|
118
|
+
|
|
119
|
+
expect(result.needsTransform).toBe(true);
|
|
120
|
+
expect(result.patterns).toContain('forEach-async');
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
describe('array.filter with async callback', () => {
|
|
125
|
+
it('should detect filter with async callback', () => {
|
|
126
|
+
const code = `
|
|
127
|
+
const filtered = items.filter(async (item) => {
|
|
128
|
+
const result = await atp.llm.call({ prompt: item });
|
|
129
|
+
return result === 'yes';
|
|
130
|
+
});
|
|
131
|
+
`;
|
|
132
|
+
|
|
133
|
+
const result = detector.detect(code);
|
|
134
|
+
|
|
135
|
+
expect(result.needsTransform).toBe(true);
|
|
136
|
+
expect(result.patterns).toContain('filter-async');
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
describe('array.reduce with async callback', () => {
|
|
141
|
+
it('should detect reduce with async callback', () => {
|
|
142
|
+
const code = `
|
|
143
|
+
const sum = items.reduce(async (acc, item) => {
|
|
144
|
+
const result = await atp.llm.call({ prompt: item });
|
|
145
|
+
return acc + result;
|
|
146
|
+
}, 0);
|
|
147
|
+
`;
|
|
148
|
+
|
|
149
|
+
const result = detector.detect(code);
|
|
150
|
+
|
|
151
|
+
expect(result.needsTransform).toBe(true);
|
|
152
|
+
expect(result.patterns).toContain('reduce-async');
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
describe('array.find with async callback', () => {
|
|
157
|
+
it('should detect find with async callback', () => {
|
|
158
|
+
const code = `
|
|
159
|
+
const found = items.find(async (item) => {
|
|
160
|
+
const result = await atp.llm.call({ prompt: item });
|
|
161
|
+
return result === 'match';
|
|
162
|
+
});
|
|
163
|
+
`;
|
|
164
|
+
|
|
165
|
+
const result = detector.detect(code);
|
|
166
|
+
|
|
167
|
+
expect(result.needsTransform).toBe(true);
|
|
168
|
+
expect(result.patterns).toContain('find-async');
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
describe('array.some with async callback', () => {
|
|
173
|
+
it('should detect some with async callback', () => {
|
|
174
|
+
const code = `
|
|
175
|
+
const hasMatch = items.some(async (item) => {
|
|
176
|
+
const result = await atp.llm.call({ prompt: item });
|
|
177
|
+
return result === 'yes';
|
|
178
|
+
});
|
|
179
|
+
`;
|
|
180
|
+
|
|
181
|
+
const result = detector.detect(code);
|
|
182
|
+
|
|
183
|
+
expect(result.needsTransform).toBe(true);
|
|
184
|
+
expect(result.patterns).toContain('some-async');
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
describe('array.every with async callback', () => {
|
|
189
|
+
it('should detect every with async callback', () => {
|
|
190
|
+
const code = `
|
|
191
|
+
const allMatch = items.every(async (item) => {
|
|
192
|
+
const result = await atp.llm.call({ prompt: item });
|
|
193
|
+
return result === 'yes';
|
|
194
|
+
});
|
|
195
|
+
`;
|
|
196
|
+
|
|
197
|
+
const result = detector.detect(code);
|
|
198
|
+
|
|
199
|
+
expect(result.needsTransform).toBe(true);
|
|
200
|
+
expect(result.patterns).toContain('every-async');
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
describe('array.flatMap with async callback', () => {
|
|
205
|
+
it('should detect flatMap with async callback', () => {
|
|
206
|
+
const code = `
|
|
207
|
+
const flattened = items.flatMap(async (item) => {
|
|
208
|
+
const results = await atp.llm.call({ prompt: item });
|
|
209
|
+
return results.split(',');
|
|
210
|
+
});
|
|
211
|
+
`;
|
|
212
|
+
|
|
213
|
+
const result = detector.detect(code);
|
|
214
|
+
|
|
215
|
+
expect(result.needsTransform).toBe(true);
|
|
216
|
+
expect(result.patterns).toContain('flatMap-async');
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
describe('Promise.all', () => {
|
|
221
|
+
it('should detect Promise.all', () => {
|
|
222
|
+
const code = `
|
|
223
|
+
const results = await Promise.all([
|
|
224
|
+
fetch('url1'),
|
|
225
|
+
fetch('url2'),
|
|
226
|
+
]);
|
|
227
|
+
`;
|
|
228
|
+
|
|
229
|
+
const result = detector.detect(code);
|
|
230
|
+
|
|
231
|
+
expect(result.needsTransform).toBe(true);
|
|
232
|
+
expect(result.patterns).toContain('promise-all');
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
it('should detect batchable Promise.all with direct pausable calls', () => {
|
|
236
|
+
const code = `
|
|
237
|
+
const results = await Promise.all([
|
|
238
|
+
atp.llm.call({ prompt: 'Q1' }),
|
|
239
|
+
atp.llm.call({ prompt: 'Q2' }),
|
|
240
|
+
atp.llm.call({ prompt: 'Q3' }),
|
|
241
|
+
]);
|
|
242
|
+
`;
|
|
243
|
+
|
|
244
|
+
const result = detector.detect(code);
|
|
245
|
+
|
|
246
|
+
expect(result.needsTransform).toBe(true);
|
|
247
|
+
expect(result.patterns).toContain('promise-all');
|
|
248
|
+
expect(result.batchableParallel).toBe(true);
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
it('should not mark Promise.all as batchable with complex logic', () => {
|
|
252
|
+
const code = `
|
|
253
|
+
const results = await Promise.all(
|
|
254
|
+
items.map(async (item) => {
|
|
255
|
+
const step1 = await atp.llm.call({ prompt: item });
|
|
256
|
+
return await process(step1);
|
|
257
|
+
})
|
|
258
|
+
);
|
|
259
|
+
`;
|
|
260
|
+
|
|
261
|
+
const result = detector.detect(code);
|
|
262
|
+
|
|
263
|
+
expect(result.needsTransform).toBe(true);
|
|
264
|
+
expect(result.patterns).toContain('promise-all');
|
|
265
|
+
expect(result.batchableParallel).toBe(false);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
describe('Promise.allSettled', () => {
|
|
270
|
+
it('should detect Promise.allSettled', () => {
|
|
271
|
+
const code = `
|
|
272
|
+
const results = await Promise.allSettled([
|
|
273
|
+
fetch('url1'),
|
|
274
|
+
fetch('url2'),
|
|
275
|
+
]);
|
|
276
|
+
`;
|
|
277
|
+
|
|
278
|
+
const result = detector.detect(code);
|
|
279
|
+
|
|
280
|
+
expect(result.needsTransform).toBe(true);
|
|
281
|
+
expect(result.patterns).toContain('promise-allSettled');
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
describe('multiple patterns', () => {
|
|
286
|
+
it('should detect multiple patterns in same code', () => {
|
|
287
|
+
const code = `
|
|
288
|
+
for (const item of items) {
|
|
289
|
+
await atp.llm.call({ prompt: item });
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
const results = items.map(async (item) => {
|
|
293
|
+
return await atp.llm.call({ prompt: item });
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
const parallel = await Promise.all([
|
|
297
|
+
atp.llm.call({ prompt: 'Q1' }),
|
|
298
|
+
atp.llm.call({ prompt: 'Q2' }),
|
|
299
|
+
]);
|
|
300
|
+
`;
|
|
301
|
+
|
|
302
|
+
const result = detector.detect(code);
|
|
303
|
+
|
|
304
|
+
expect(result.needsTransform).toBe(true);
|
|
305
|
+
expect(result.patterns).toContain('for-of-await');
|
|
306
|
+
expect(result.patterns).toContain('map-async');
|
|
307
|
+
expect(result.patterns).toContain('promise-all');
|
|
308
|
+
expect(result.batchableParallel).toBe(true);
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
describe('edge cases', () => {
|
|
313
|
+
it('should handle empty loops', () => {
|
|
314
|
+
const code = `
|
|
315
|
+
for (const item of items) {
|
|
316
|
+
}
|
|
317
|
+
`;
|
|
318
|
+
|
|
319
|
+
const result = detector.detect(code);
|
|
320
|
+
|
|
321
|
+
expect(result.needsTransform).toBe(false);
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
it('should handle malformed code gracefully', () => {
|
|
325
|
+
const code = `this is not valid javascript`;
|
|
326
|
+
|
|
327
|
+
const result = detector.detect(code);
|
|
328
|
+
|
|
329
|
+
expect(result.needsTransform).toBe(false);
|
|
330
|
+
expect(result.patterns).toEqual([]);
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
it('should handle code with no async patterns', () => {
|
|
334
|
+
const code = `
|
|
335
|
+
const x = 1;
|
|
336
|
+
const y = 2;
|
|
337
|
+
console.log(x + y);
|
|
338
|
+
`;
|
|
339
|
+
|
|
340
|
+
const result = detector.detect(code);
|
|
341
|
+
|
|
342
|
+
expect(result.needsTransform).toBe(false);
|
|
343
|
+
expect(result.patterns).toEqual([]);
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './transformer/index.js';
|
|
3
|
+
export * from './runtime/index.js';
|
|
4
|
+
export { ATPCompiler } from './transformer/index.js';
|
|
5
|
+
export { initializeRuntime, cleanupRuntime } from './runtime/index.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './transformer/index.js';
|
|
3
|
+
export * from './runtime/index.js';
|
|
4
|
+
export { ATPCompiler } from './transformer/index.js';
|
|
5
|
+
export { initializeRuntime, cleanupRuntime } from './runtime/index.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-parallel.d.ts","sourceRoot":"","sources":["../../../../src/runtime/batch-parallel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAOjD,wBAAsB,aAAa,CAAC,CAAC,EACpC,UAAU,EAAE,aAAa,EAAE,EAC3B,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,EAAE,CAAC,CAUd"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BatchPauseExecutionError } from './errors.js';
|
|
2
|
+
import { nextSequenceNumber, getCachedResult, getCallSequenceNumber, } from '@mondaydotcomorg/atp-runtime';
|
|
3
|
+
export async function batchParallel(batchCalls, parallelId) {
|
|
4
|
+
const currentSequence = getCallSequenceNumber();
|
|
5
|
+
const cachedResult = getCachedResult(currentSequence);
|
|
6
|
+
if (cachedResult !== undefined) {
|
|
7
|
+
nextSequenceNumber();
|
|
8
|
+
return cachedResult;
|
|
9
|
+
}
|
|
10
|
+
const sequenceForPause = nextSequenceNumber();
|
|
11
|
+
throw new BatchPauseExecutionError(batchCalls, parallelId, sequenceForPause);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=batch-parallel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-parallel.js","sourceRoot":"","sources":["../../../../src/runtime/batch-parallel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EACN,kBAAkB,EAClB,eAAe,EACf,qBAAqB,GACrB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,UAA2B,EAC3B,UAAkB;IAElB,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;IACtD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAChC,kBAAkB,EAAE,CAAC;QACrB,OAAO,YAAmB,CAAC;IAC5B,CAAC;IAED,MAAM,gBAAgB,GAAG,kBAAkB,EAAE,CAAC;IAC9C,MAAM,IAAI,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CacheProvider } from '@mondaydotcomorg/atp-protocol';
|
|
2
|
+
import type { LoopCheckpoint } from '../types.js';
|
|
3
|
+
export declare class CheckpointManager {
|
|
4
|
+
private cache;
|
|
5
|
+
private executionId;
|
|
6
|
+
private prefix;
|
|
7
|
+
constructor(executionId: string, cache: CacheProvider, prefix?: string);
|
|
8
|
+
save(checkpoint: LoopCheckpoint): Promise<void>;
|
|
9
|
+
load(loopId: string): Promise<LoopCheckpoint | null>;
|
|
10
|
+
clear(loopId: string): Promise<void>;
|
|
11
|
+
clearAll(): Promise<void>;
|
|
12
|
+
private getKey;
|
|
13
|
+
getExecutionId(): string;
|
|
14
|
+
}
|
|
15
|
+
export declare function setCheckpointManager(manager: CheckpointManager): void;
|
|
16
|
+
export declare function getCheckpointManager(): CheckpointManager;
|
|
17
|
+
export declare function clearCheckpointManager(): void;
|
|
18
|
+
export declare function hasCheckpointManager(): boolean;
|
|
19
|
+
//# sourceMappingURL=checkpoint-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-manager.d.ts","sourceRoot":"","sources":["../../../../src/runtime/checkpoint-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,SAAe;IAMtE,IAAI,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB/C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAqBpD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/B,OAAO,CAAC,MAAM;IAId,cAAc,IAAI,MAAM;CAGxB;AAID,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAErE;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAKxD;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { CheckpointError, CheckpointOperation } from './errors.js';
|
|
2
|
+
const MAX_CHECKPOINT_SIZE = 10 * 1024 * 1024;
|
|
3
|
+
const CHECKPOINT_TTL = 3600;
|
|
4
|
+
export class CheckpointManager {
|
|
5
|
+
cache;
|
|
6
|
+
executionId;
|
|
7
|
+
prefix;
|
|
8
|
+
constructor(executionId, cache, prefix = 'checkpoint') {
|
|
9
|
+
this.executionId = executionId;
|
|
10
|
+
this.cache = cache;
|
|
11
|
+
this.prefix = prefix;
|
|
12
|
+
}
|
|
13
|
+
async save(checkpoint) {
|
|
14
|
+
const key = this.getKey(checkpoint.loopId);
|
|
15
|
+
try {
|
|
16
|
+
const serialized = JSON.stringify(checkpoint);
|
|
17
|
+
if (serialized.length > MAX_CHECKPOINT_SIZE) {
|
|
18
|
+
throw new CheckpointError(`Checkpoint size ${serialized.length} exceeds maximum ${MAX_CHECKPOINT_SIZE}`, checkpoint.loopId, CheckpointOperation.SAVE);
|
|
19
|
+
}
|
|
20
|
+
await this.cache.set(key, checkpoint, CHECKPOINT_TTL);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (error instanceof CheckpointError) {
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
27
|
+
throw new CheckpointError(message, checkpoint.loopId, CheckpointOperation.SAVE);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async load(loopId) {
|
|
31
|
+
const key = this.getKey(loopId);
|
|
32
|
+
try {
|
|
33
|
+
const checkpoint = await this.cache.get(key);
|
|
34
|
+
if (!checkpoint) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
if (checkpoint.completed && checkpoint.completed instanceof Array) {
|
|
38
|
+
checkpoint.completed = new Set(checkpoint.completed);
|
|
39
|
+
}
|
|
40
|
+
return checkpoint;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
44
|
+
throw new CheckpointError(message, loopId, CheckpointOperation.LOAD);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async clear(loopId) {
|
|
48
|
+
const key = this.getKey(loopId);
|
|
49
|
+
try {
|
|
50
|
+
await this.cache.delete(key);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
54
|
+
throw new CheckpointError(message, loopId, CheckpointOperation.CLEAR);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async clearAll() { }
|
|
58
|
+
getKey(loopId) {
|
|
59
|
+
return `${this.prefix}:${this.executionId}:${loopId}`;
|
|
60
|
+
}
|
|
61
|
+
getExecutionId() {
|
|
62
|
+
return this.executionId;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
let globalCheckpointManager = null;
|
|
66
|
+
export function setCheckpointManager(manager) {
|
|
67
|
+
globalCheckpointManager = manager;
|
|
68
|
+
}
|
|
69
|
+
export function getCheckpointManager() {
|
|
70
|
+
if (!globalCheckpointManager) {
|
|
71
|
+
throw new Error('CheckpointManager not initialized');
|
|
72
|
+
}
|
|
73
|
+
return globalCheckpointManager;
|
|
74
|
+
}
|
|
75
|
+
export function clearCheckpointManager() {
|
|
76
|
+
globalCheckpointManager = null;
|
|
77
|
+
}
|
|
78
|
+
export function hasCheckpointManager() {
|
|
79
|
+
return globalCheckpointManager !== null;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=checkpoint-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-manager.js","sourceRoot":"","sources":["../../../../src/runtime/checkpoint-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RuntimeContext } from '../types.js';
|
|
2
|
+
export declare function setRuntimeContext(context: RuntimeContext): void;
|
|
3
|
+
export declare function getRuntimeContext(): RuntimeContext;
|
|
4
|
+
export declare function clearRuntimeContext(): void;
|
|
5
|
+
export declare function hasRuntimeContext(): boolean;
|
|
6
|
+
export declare function generateUniqueId(prefix: string): string;
|
|
7
|
+
export declare function resetIdCounter(): void;
|
|
8
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/runtime/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAE/D;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAMlD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAID,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const contextStack = [];
|
|
2
|
+
export function setRuntimeContext(context) {
|
|
3
|
+
contextStack.push(context);
|
|
4
|
+
}
|
|
5
|
+
export function getRuntimeContext() {
|
|
6
|
+
const context = contextStack[contextStack.length - 1];
|
|
7
|
+
if (!context) {
|
|
8
|
+
throw new Error('No runtime context available. Compiler runtime not properly initialized.');
|
|
9
|
+
}
|
|
10
|
+
return context;
|
|
11
|
+
}
|
|
12
|
+
export function clearRuntimeContext() {
|
|
13
|
+
contextStack.pop();
|
|
14
|
+
}
|
|
15
|
+
export function hasRuntimeContext() {
|
|
16
|
+
return contextStack.length > 0;
|
|
17
|
+
}
|
|
18
|
+
let idCounter = 0;
|
|
19
|
+
export function generateUniqueId(prefix) {
|
|
20
|
+
return `${prefix}_${Date.now()}_${idCounter++}`;
|
|
21
|
+
}
|
|
22
|
+
export function resetIdCounter() {
|
|
23
|
+
idCounter = 0;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/runtime/context.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAqB,EAAE,CAAC;AAE1C,MAAM,UAAU,iBAAiB,CAAC,OAAuB;IACxD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB;IAClC,YAAY,CAAC,GAAG,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC9C,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,SAAS,EAAE,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,SAAS,GAAG,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { BatchCallInfo } from '../types.js';
|
|
2
|
+
export declare enum CheckpointOperation {
|
|
3
|
+
SAVE = "save",
|
|
4
|
+
LOAD = "load",
|
|
5
|
+
CLEAR = "clear"
|
|
6
|
+
}
|
|
7
|
+
export declare class BatchPauseExecutionError extends Error {
|
|
8
|
+
readonly calls: BatchCallInfo[];
|
|
9
|
+
readonly batchId: string;
|
|
10
|
+
readonly sequenceNumber: number;
|
|
11
|
+
constructor(calls: BatchCallInfo[], batchId: string, sequenceNumber: number);
|
|
12
|
+
}
|
|
13
|
+
export declare class CheckpointError extends Error {
|
|
14
|
+
readonly checkpointId: string;
|
|
15
|
+
readonly operation: CheckpointOperation;
|
|
16
|
+
constructor(message: string, checkpointId: string, operation: CheckpointOperation);
|
|
17
|
+
}
|
|
18
|
+
export declare class TransformationError extends Error {
|
|
19
|
+
readonly code: string;
|
|
20
|
+
readonly pattern: string;
|
|
21
|
+
readonly location?: {
|
|
22
|
+
line: number;
|
|
23
|
+
column: number;
|
|
24
|
+
};
|
|
25
|
+
constructor(message: string, code: string, pattern: string, location?: {
|
|
26
|
+
line: number;
|
|
27
|
+
column: number;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export declare class InfiniteLoopDetectionError extends Error {
|
|
31
|
+
readonly loopId: string;
|
|
32
|
+
readonly iterationCount: number;
|
|
33
|
+
constructor(loopId: string, iterationCount: number);
|
|
34
|
+
}
|
|
35
|
+
export declare function isBatchPauseError(error: unknown): error is BatchPauseExecutionError;
|
|
36
|
+
export declare function isCheckpointError(error: unknown): error is CheckpointError;
|
|
37
|
+
export declare function isTransformationError(error: unknown): error is TransformationError;
|
|
38
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,oBAAY,mBAAmB;IAC9B,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;CACf;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,SAAgB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAE3B,KAAK,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAO3E;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACzC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,SAAS,EAAE,mBAAmB,CAAC;gBAEnC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB;CAMjF;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;gBAG3D,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAS5C;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IACpD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAE3B,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAQlD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,wBAAwB,CAEnF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export var CheckpointOperation;
|
|
2
|
+
(function (CheckpointOperation) {
|
|
3
|
+
CheckpointOperation["SAVE"] = "save";
|
|
4
|
+
CheckpointOperation["LOAD"] = "load";
|
|
5
|
+
CheckpointOperation["CLEAR"] = "clear";
|
|
6
|
+
})(CheckpointOperation || (CheckpointOperation = {}));
|
|
7
|
+
export class BatchPauseExecutionError extends Error {
|
|
8
|
+
calls;
|
|
9
|
+
batchId;
|
|
10
|
+
sequenceNumber;
|
|
11
|
+
constructor(calls, batchId, sequenceNumber) {
|
|
12
|
+
super(`Batch pause for parallel execution (${calls.length} callbacks)`);
|
|
13
|
+
this.name = 'BatchPauseExecutionError';
|
|
14
|
+
this.calls = calls;
|
|
15
|
+
this.batchId = batchId;
|
|
16
|
+
this.sequenceNumber = sequenceNumber;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class CheckpointError extends Error {
|
|
20
|
+
checkpointId;
|
|
21
|
+
operation;
|
|
22
|
+
constructor(message, checkpointId, operation) {
|
|
23
|
+
super(`Checkpoint ${operation} failed for ${checkpointId}: ${message}`);
|
|
24
|
+
this.name = 'CheckpointError';
|
|
25
|
+
this.checkpointId = checkpointId;
|
|
26
|
+
this.operation = operation;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class TransformationError extends Error {
|
|
30
|
+
code;
|
|
31
|
+
pattern;
|
|
32
|
+
location;
|
|
33
|
+
constructor(message, code, pattern, location) {
|
|
34
|
+
const loc = location ? ` at line ${location.line}:${location.column}` : '';
|
|
35
|
+
super(`Transformation failed for ${pattern}${loc}: ${message}`);
|
|
36
|
+
this.name = 'TransformationError';
|
|
37
|
+
this.code = code;
|
|
38
|
+
this.pattern = pattern;
|
|
39
|
+
this.location = location;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export class InfiniteLoopDetectionError extends Error {
|
|
43
|
+
loopId;
|
|
44
|
+
iterationCount;
|
|
45
|
+
constructor(loopId, iterationCount) {
|
|
46
|
+
super(`Infinite loop detected: ${loopId} exceeded ${iterationCount} iterations without completing`);
|
|
47
|
+
this.name = 'InfiniteLoopDetectionError';
|
|
48
|
+
this.loopId = loopId;
|
|
49
|
+
this.iterationCount = iterationCount;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export function isBatchPauseError(error) {
|
|
53
|
+
return error instanceof BatchPauseExecutionError;
|
|
54
|
+
}
|
|
55
|
+
export function isCheckpointError(error) {
|
|
56
|
+
return error instanceof CheckpointError;
|
|
57
|
+
}
|
|
58
|
+
export function isTransformationError(error) {
|
|
59
|
+
return error instanceof TransformationError;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/runtime/errors.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC9B,oCAAa,CAAA;IACb,oCAAa,CAAA;IACb,sCAAe,CAAA;AAChB,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAClC,KAAK,CAAkB;IACvB,OAAO,CAAS;IAChB,cAAc,CAAS;IAEvC,YAAY,KAAsB,EAAE,OAAe,EAAE,cAAsB;QAC1E,KAAK,CAAC,uCAAuC,KAAK,CAAC,MAAM,aAAa,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;CACD;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACzB,YAAY,CAAS;IACrB,SAAS,CAAsB;IAE/C,YAAY,OAAe,EAAE,YAAoB,EAAE,SAA8B;QAChF,KAAK,CAAC,cAAc,SAAS,eAAe,YAAY,KAAK,OAAO,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;CACD;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC7B,IAAI,CAAS;IACb,OAAO,CAAS;IAChB,QAAQ,CAAoC;IAE5D,YACC,OAAe,EACf,IAAY,EACZ,OAAe,EACf,QAA2C;QAE3C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,KAAK,CAAC,6BAA6B,OAAO,GAAG,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;CACD;AAED,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACpC,MAAM,CAAS;IACf,cAAc,CAAS;IAEvC,YAAY,MAAc,EAAE,cAAsB;QACjD,KAAK,CACJ,2BAA2B,MAAM,aAAa,cAAc,gCAAgC,CAC5F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;CACD;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC/C,OAAO,KAAK,YAAY,wBAAwB,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC/C,OAAO,KAAK,YAAY,eAAe,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IACnD,OAAO,KAAK,YAAY,mBAAmB,CAAC;AAC7C,CAAC"}
|