@mondaydotcomorg/atp-compiler 0.18.2 → 0.18.4-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/unit/default-compiler.test.ts +259 -0
- package/__tests__/unit/plugin-system.test.ts +401 -0
- package/dist/atp-compiler/src/index.d.ts +8 -0
- package/dist/atp-compiler/src/index.d.ts.map +1 -1
- package/dist/atp-compiler/src/index.js +9 -0
- package/dist/atp-compiler/src/index.js.map +1 -1
- package/dist/atp-compiler/src/plugin-system/create-default-compiler.d.ts +40 -0
- package/dist/atp-compiler/src/plugin-system/create-default-compiler.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/create-default-compiler.js +40 -0
- package/dist/atp-compiler/src/plugin-system/create-default-compiler.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/array-transformer-plugin.d.ts +18 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/array-transformer-plugin.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/array-transformer-plugin.js +45 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/array-transformer-plugin.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/detection-plugin.d.ts +17 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/detection-plugin.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/detection-plugin.js +33 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/detection-plugin.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/index.d.ts +11 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/index.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/index.js +11 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/index.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/loop-transformer-plugin.d.ts +17 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/loop-transformer-plugin.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/loop-transformer-plugin.js +36 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/loop-transformer-plugin.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/promise-transformer-plugin.d.ts +19 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/promise-transformer-plugin.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/promise-transformer-plugin.js +49 -0
- package/dist/atp-compiler/src/plugin-system/default-plugins/promise-transformer-plugin.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/examples/loop-transformer-plugin.d.ts +31 -0
- package/dist/atp-compiler/src/plugin-system/examples/loop-transformer-plugin.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/examples/loop-transformer-plugin.js +60 -0
- package/dist/atp-compiler/src/plugin-system/examples/loop-transformer-plugin.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/examples/security-validator-plugin.d.ts +48 -0
- package/dist/atp-compiler/src/plugin-system/examples/security-validator-plugin.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/examples/security-validator-plugin.js +108 -0
- package/dist/atp-compiler/src/plugin-system/examples/security-validator-plugin.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/examples/timeout-plugin.d.ts +53 -0
- package/dist/atp-compiler/src/plugin-system/examples/timeout-plugin.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/examples/timeout-plugin.js +106 -0
- package/dist/atp-compiler/src/plugin-system/examples/timeout-plugin.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/index.d.ts +14 -0
- package/dist/atp-compiler/src/plugin-system/index.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/index.js +16 -0
- package/dist/atp-compiler/src/plugin-system/index.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/pluggable-compiler.d.ts +102 -0
- package/dist/atp-compiler/src/plugin-system/pluggable-compiler.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/pluggable-compiler.js +280 -0
- package/dist/atp-compiler/src/plugin-system/pluggable-compiler.js.map +1 -0
- package/dist/atp-compiler/src/plugin-system/plugin-api.d.ts +165 -0
- package/dist/atp-compiler/src/plugin-system/plugin-api.d.ts.map +1 -0
- package/dist/atp-compiler/src/plugin-system/plugin-api.js +180 -0
- package/dist/atp-compiler/src/plugin-system/plugin-api.js.map +1 -0
- package/dist/atp-compiler/src/transformer/index.d.ts +15 -1
- package/dist/atp-compiler/src/transformer/index.d.ts.map +1 -1
- package/dist/atp-compiler/src/transformer/index.js +17 -0
- package/dist/atp-compiler/src/transformer/index.js.map +1 -1
- package/dist/atp-compiler/src/types/compiler-interface.d.ts +61 -0
- package/dist/atp-compiler/src/types/compiler-interface.d.ts.map +1 -0
- package/dist/atp-compiler/src/types/compiler-interface.js +18 -0
- package/dist/atp-compiler/src/types/compiler-interface.js.map +1 -0
- package/dist/runtime/src/approval/index.js +2 -1
- package/dist/runtime/src/approval/index.js.map +1 -1
- package/dist/runtime/src/index.d.ts +1 -1
- package/dist/runtime/src/index.d.ts.map +1 -1
- package/dist/runtime/src/index.js +1 -1
- package/dist/runtime/src/index.js.map +1 -1
- package/dist/runtime/src/llm/index.d.ts +1 -1
- package/dist/runtime/src/llm/index.d.ts.map +1 -1
- package/dist/runtime/src/llm/index.js +1 -1
- package/dist/runtime/src/llm/index.js.map +1 -1
- package/dist/runtime/src/llm/replay.d.ts +75 -0
- package/dist/runtime/src/llm/replay.d.ts.map +1 -1
- package/dist/runtime/src/llm/replay.js +187 -5
- package/dist/runtime/src/llm/replay.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -5
- package/src/index.ts +26 -0
- package/src/plugin-system/create-default-compiler.ts +57 -0
- package/src/plugin-system/default-plugins/array-transformer-plugin.ts +57 -0
- package/src/plugin-system/default-plugins/detection-plugin.ts +41 -0
- package/src/plugin-system/default-plugins/index.ts +12 -0
- package/src/plugin-system/default-plugins/loop-transformer-plugin.ts +47 -0
- package/src/plugin-system/default-plugins/promise-transformer-plugin.ts +63 -0
- package/src/plugin-system/examples/loop-transformer-plugin.ts +76 -0
- package/src/plugin-system/examples/security-validator-plugin.ts +168 -0
- package/src/plugin-system/examples/timeout-plugin.ts +158 -0
- package/src/plugin-system/index.ts +19 -0
- package/src/plugin-system/pluggable-compiler.ts +318 -0
- package/src/plugin-system/plugin-api.ts +330 -0
- package/src/transformer/index.ts +21 -1
- package/src/types/compiler-interface.ts +79 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin-based ATP Compiler
|
|
3
|
+
*
|
|
4
|
+
* Extensible compiler that supports custom plugins for detection,
|
|
5
|
+
* transformation, optimization, and validation
|
|
6
|
+
*/
|
|
7
|
+
import { parse } from '@babel/parser';
|
|
8
|
+
import _traverse from '@babel/traverse';
|
|
9
|
+
const traverse = _traverse.default || _traverse;
|
|
10
|
+
import _generate from '@babel/generator';
|
|
11
|
+
const generate = _generate.default || _generate;
|
|
12
|
+
import { DEFAULT_COMPILER_CONFIG } from '../types.js';
|
|
13
|
+
import { TransformationError } from '../runtime/errors.js';
|
|
14
|
+
import { resetIdCounter } from '../runtime/context.js';
|
|
15
|
+
import { PluginRegistry } from './plugin-api.js';
|
|
16
|
+
/**
|
|
17
|
+
* Plugin-based ATP Compiler
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const compiler = new PluggableCompiler({
|
|
22
|
+
* enableBatchParallel: true
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Register custom plugin
|
|
26
|
+
* compiler.use(myCustomPlugin);
|
|
27
|
+
*
|
|
28
|
+
* // Transform code
|
|
29
|
+
* const result = compiler.transform(code);
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export class PluggableCompiler {
|
|
33
|
+
config;
|
|
34
|
+
registry;
|
|
35
|
+
initialized = false;
|
|
36
|
+
/**
|
|
37
|
+
* AST cache - maps code string to parsed AST
|
|
38
|
+
* This avoids re-parsing the same code multiple times
|
|
39
|
+
* (e.g., once in detect() and once in transform())
|
|
40
|
+
*
|
|
41
|
+
* Performance Impact: ~30% reduction in compile time
|
|
42
|
+
*/
|
|
43
|
+
astCache = new Map();
|
|
44
|
+
constructor(config = {}) {
|
|
45
|
+
this.config = { ...DEFAULT_COMPILER_CONFIG, ...config };
|
|
46
|
+
this.registry = new PluginRegistry();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Register a plugin (chainable)
|
|
50
|
+
*/
|
|
51
|
+
use(plugin) {
|
|
52
|
+
this.registry.register(plugin);
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Unregister a plugin by name
|
|
57
|
+
*/
|
|
58
|
+
remove(pluginName) {
|
|
59
|
+
return this.registry.unregister(pluginName);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Initialize all plugins
|
|
63
|
+
*/
|
|
64
|
+
async initialize() {
|
|
65
|
+
if (this.initialized)
|
|
66
|
+
return;
|
|
67
|
+
await this.registry.initializeAll(this.config);
|
|
68
|
+
this.initialized = true;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Detect patterns using all detection plugins
|
|
72
|
+
*/
|
|
73
|
+
async detect(code) {
|
|
74
|
+
if (!this.initialized) {
|
|
75
|
+
await this.initialize();
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const ast = this.parseCode(code);
|
|
79
|
+
const detectors = this.registry.getDetectors();
|
|
80
|
+
// Aggregate results from all detectors
|
|
81
|
+
const allPatterns = new Set();
|
|
82
|
+
let batchableParallel = false;
|
|
83
|
+
for (const detector of detectors) {
|
|
84
|
+
const result = await detector.detect(code, ast);
|
|
85
|
+
result.patterns.forEach((p) => allPatterns.add(p));
|
|
86
|
+
if (result.batchableParallel) {
|
|
87
|
+
batchableParallel = true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
needsTransform: allPatterns.size > 0,
|
|
92
|
+
patterns: Array.from(allPatterns),
|
|
93
|
+
batchableParallel,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return {
|
|
98
|
+
needsTransform: false,
|
|
99
|
+
patterns: [],
|
|
100
|
+
batchableParallel: false,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Transform code using all transformation plugins
|
|
106
|
+
*/
|
|
107
|
+
async transform(code) {
|
|
108
|
+
if (!this.initialized) {
|
|
109
|
+
await this.initialize();
|
|
110
|
+
}
|
|
111
|
+
resetIdCounter();
|
|
112
|
+
// 1. Pre-validation
|
|
113
|
+
await this.runValidation(code, 'pre');
|
|
114
|
+
// 2. Detection
|
|
115
|
+
const detection = await this.detect(code);
|
|
116
|
+
if (!detection.needsTransform) {
|
|
117
|
+
return {
|
|
118
|
+
code,
|
|
119
|
+
transformed: false,
|
|
120
|
+
patterns: [],
|
|
121
|
+
metadata: {
|
|
122
|
+
loopCount: 0,
|
|
123
|
+
arrayMethodCount: 0,
|
|
124
|
+
parallelCallCount: 0,
|
|
125
|
+
batchableCount: 0,
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
// 3. Parse AST
|
|
131
|
+
const ast = this.parseCode(code);
|
|
132
|
+
// 4. Reset all transformers
|
|
133
|
+
const transformers = this.registry.getTransformers();
|
|
134
|
+
for (const transformer of transformers) {
|
|
135
|
+
transformer.reset();
|
|
136
|
+
}
|
|
137
|
+
// 5. Apply all transformation visitors
|
|
138
|
+
// Combine visitors from all plugins, merging handlers for the same node type
|
|
139
|
+
const visitors = {};
|
|
140
|
+
for (const transformer of transformers) {
|
|
141
|
+
const visitor = transformer.getVisitor(this.config);
|
|
142
|
+
// Merge visitors, combining multiple handlers for the same node type
|
|
143
|
+
for (const [nodeType, handler] of Object.entries(visitor)) {
|
|
144
|
+
if (!visitors[nodeType]) {
|
|
145
|
+
visitors[nodeType] = handler;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
// Combine multiple handlers for the same node type
|
|
149
|
+
const existing = visitors[nodeType];
|
|
150
|
+
visitors[nodeType] = (path) => {
|
|
151
|
+
existing(path);
|
|
152
|
+
handler(path);
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
traverse(ast, visitors);
|
|
158
|
+
// 6. Optimization
|
|
159
|
+
let optimizedAst = ast;
|
|
160
|
+
const optimizers = this.registry.getOptimizers();
|
|
161
|
+
for (const optimizer of optimizers) {
|
|
162
|
+
optimizedAst = await optimizer.optimize(optimizedAst, this.config);
|
|
163
|
+
}
|
|
164
|
+
// 7. Generate code
|
|
165
|
+
const output = generate(optimizedAst, {
|
|
166
|
+
sourceMaps: false,
|
|
167
|
+
retainLines: true,
|
|
168
|
+
comments: true,
|
|
169
|
+
});
|
|
170
|
+
// 8. Aggregate metadata
|
|
171
|
+
const metadata = {
|
|
172
|
+
loopCount: 0,
|
|
173
|
+
arrayMethodCount: 0,
|
|
174
|
+
parallelCallCount: 0,
|
|
175
|
+
batchableCount: detection.batchableParallel ? 1 : 0,
|
|
176
|
+
};
|
|
177
|
+
for (const transformer of transformers) {
|
|
178
|
+
const pluginMetadata = transformer.getMetadata();
|
|
179
|
+
metadata.loopCount += pluginMetadata.loopCount || 0;
|
|
180
|
+
metadata.arrayMethodCount += pluginMetadata.arrayMethodCount || 0;
|
|
181
|
+
metadata.parallelCallCount += pluginMetadata.parallelCallCount || 0;
|
|
182
|
+
metadata.batchableCount += pluginMetadata.batchableCount || 0;
|
|
183
|
+
}
|
|
184
|
+
// 9. Post-validation
|
|
185
|
+
await this.runValidation(output.code, 'post');
|
|
186
|
+
return {
|
|
187
|
+
code: output.code,
|
|
188
|
+
transformed: true,
|
|
189
|
+
patterns: detection.patterns,
|
|
190
|
+
metadata,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
195
|
+
// Include context about which phase failed
|
|
196
|
+
const context = detection.patterns.length > 0
|
|
197
|
+
? `[Plugin transformation] ${message}`
|
|
198
|
+
: message;
|
|
199
|
+
throw new TransformationError(context, code, 'plugin-error');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Dispose compiler and all plugins
|
|
204
|
+
*/
|
|
205
|
+
async dispose() {
|
|
206
|
+
await this.registry.disposeAll();
|
|
207
|
+
this.astCache.clear(); // Clear cache on disposal
|
|
208
|
+
this.initialized = false;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Get current configuration
|
|
212
|
+
*/
|
|
213
|
+
getConfig() {
|
|
214
|
+
return { ...this.config };
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Update configuration
|
|
218
|
+
*/
|
|
219
|
+
setConfig(config) {
|
|
220
|
+
this.config = { ...this.config, ...config };
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Parse code to AST with caching
|
|
224
|
+
*
|
|
225
|
+
* Caches parsed AST to avoid re-parsing the same code multiple times.
|
|
226
|
+
* This provides ~30% performance improvement when detect() and transform()
|
|
227
|
+
* are called on the same code.
|
|
228
|
+
*/
|
|
229
|
+
parseCode(code) {
|
|
230
|
+
// Check cache first
|
|
231
|
+
const cached = this.astCache.get(code);
|
|
232
|
+
if (cached) {
|
|
233
|
+
return cached;
|
|
234
|
+
}
|
|
235
|
+
// Parse and cache
|
|
236
|
+
const ast = parse(code, {
|
|
237
|
+
sourceType: 'module',
|
|
238
|
+
plugins: ['typescript'],
|
|
239
|
+
allowAwaitOutsideFunction: true,
|
|
240
|
+
allowReturnOutsideFunction: true,
|
|
241
|
+
});
|
|
242
|
+
this.astCache.set(code, ast);
|
|
243
|
+
return ast;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Clear AST cache
|
|
247
|
+
*
|
|
248
|
+
* Call this method to free memory if you've compiled many different code snippets.
|
|
249
|
+
* The cache is automatically managed and uses Map, so old entries don't leak memory.
|
|
250
|
+
*/
|
|
251
|
+
clearCache() {
|
|
252
|
+
this.astCache.clear();
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get the compiler type identifier (ICompiler interface requirement)
|
|
256
|
+
*/
|
|
257
|
+
getType() {
|
|
258
|
+
return 'PluggableCompiler';
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get cache statistics (for debugging/monitoring)
|
|
262
|
+
*/
|
|
263
|
+
getCacheStats() {
|
|
264
|
+
return {
|
|
265
|
+
size: this.astCache.size,
|
|
266
|
+
enabled: true,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Run validators
|
|
271
|
+
*/
|
|
272
|
+
async runValidation(code, phase) {
|
|
273
|
+
const validators = this.registry.getValidators();
|
|
274
|
+
const ast = this.parseCode(code);
|
|
275
|
+
for (const validator of validators) {
|
|
276
|
+
await validator.validate(code, ast, phase);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=pluggable-compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluggable-compiler.js","sourceRoot":"","sources":["../../../../src/plugin-system/pluggable-compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ATP Compiler Plugin API
|
|
3
|
+
*
|
|
4
|
+
* Extensible plugin system for custom transformations and detections
|
|
5
|
+
*/
|
|
6
|
+
import type { NodePath } from '@babel/traverse';
|
|
7
|
+
import type * as t from '@babel/types';
|
|
8
|
+
import type { CompilerConfig, DetectionResult, TransformMetadata, AsyncPattern } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Base plugin interface
|
|
11
|
+
*/
|
|
12
|
+
export interface CompilerPlugin {
|
|
13
|
+
/**
|
|
14
|
+
* Unique plugin name
|
|
15
|
+
*/
|
|
16
|
+
name: string;
|
|
17
|
+
/**
|
|
18
|
+
* Plugin version (semver)
|
|
19
|
+
*/
|
|
20
|
+
version: string;
|
|
21
|
+
/**
|
|
22
|
+
* Plugin priority (higher = runs first)
|
|
23
|
+
* Built-in plugins: 100
|
|
24
|
+
* User plugins: 50 (default)
|
|
25
|
+
* Low priority: 10
|
|
26
|
+
*/
|
|
27
|
+
priority?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Plugin initialization (optional)
|
|
30
|
+
* Called once when plugin is registered
|
|
31
|
+
*/
|
|
32
|
+
initialize?(config: CompilerConfig): void | Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Plugin cleanup (optional)
|
|
35
|
+
* Called when compiler is disposed
|
|
36
|
+
*/
|
|
37
|
+
dispose?(): void | Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Detection plugin - detects patterns that need transformation
|
|
41
|
+
*/
|
|
42
|
+
export interface DetectionPlugin extends CompilerPlugin {
|
|
43
|
+
/**
|
|
44
|
+
* Detect patterns in code
|
|
45
|
+
*/
|
|
46
|
+
detect(code: string, ast: t.File): DetectionResult | Promise<DetectionResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Custom async patterns this plugin can detect
|
|
49
|
+
*/
|
|
50
|
+
patterns: AsyncPattern[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Transformation plugin - transforms AST nodes
|
|
54
|
+
*/
|
|
55
|
+
export interface TransformationPlugin extends CompilerPlugin {
|
|
56
|
+
/**
|
|
57
|
+
* Visitor pattern for AST traversal
|
|
58
|
+
* Return visitor object compatible with @babel/traverse
|
|
59
|
+
*/
|
|
60
|
+
getVisitor(config: CompilerConfig): BabelVisitor;
|
|
61
|
+
/**
|
|
62
|
+
* Get transformation metadata after transform
|
|
63
|
+
*/
|
|
64
|
+
getMetadata(): Partial<TransformMetadata>;
|
|
65
|
+
/**
|
|
66
|
+
* Reset plugin state (called before each transform)
|
|
67
|
+
*/
|
|
68
|
+
reset(): void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Optimizer plugin - optimizes transformed code
|
|
72
|
+
*/
|
|
73
|
+
export interface OptimizerPlugin extends CompilerPlugin {
|
|
74
|
+
/**
|
|
75
|
+
* Optimize AST after all transformations
|
|
76
|
+
*/
|
|
77
|
+
optimize(ast: t.File, config: CompilerConfig): t.File | Promise<t.File>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Validator plugin - validates code before/after transformation
|
|
81
|
+
*/
|
|
82
|
+
export interface ValidatorPlugin extends CompilerPlugin {
|
|
83
|
+
/**
|
|
84
|
+
* Validate code (throw error if invalid)
|
|
85
|
+
*/
|
|
86
|
+
validate(code: string, ast: t.File, phase: 'pre' | 'post'): void | Promise<void>;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Babel visitor type (simplified)
|
|
90
|
+
*/
|
|
91
|
+
export interface BabelVisitor {
|
|
92
|
+
[key: string]: (path: NodePath<any>) => void;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Plugin context - shared state during transformation
|
|
96
|
+
*/
|
|
97
|
+
export interface PluginContext {
|
|
98
|
+
config: CompilerConfig;
|
|
99
|
+
executionId?: string;
|
|
100
|
+
metadata: TransformMetadata;
|
|
101
|
+
patterns: Set<AsyncPattern>;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Plugin registry for managing plugins
|
|
105
|
+
*/
|
|
106
|
+
export declare class PluginRegistry {
|
|
107
|
+
private detectors;
|
|
108
|
+
private transformers;
|
|
109
|
+
private optimizers;
|
|
110
|
+
private validators;
|
|
111
|
+
/**
|
|
112
|
+
* Register a plugin
|
|
113
|
+
*/
|
|
114
|
+
register(plugin: CompilerPlugin): void;
|
|
115
|
+
/**
|
|
116
|
+
* Find a plugin by name
|
|
117
|
+
*/
|
|
118
|
+
findPlugin(name: string): CompilerPlugin | undefined;
|
|
119
|
+
/**
|
|
120
|
+
* Unregister a plugin by name
|
|
121
|
+
*/
|
|
122
|
+
unregister(name: string): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Get all detection plugins
|
|
125
|
+
*/
|
|
126
|
+
getDetectors(): DetectionPlugin[];
|
|
127
|
+
/**
|
|
128
|
+
* Get all transformation plugins
|
|
129
|
+
*/
|
|
130
|
+
getTransformers(): TransformationPlugin[];
|
|
131
|
+
/**
|
|
132
|
+
* Get all optimizer plugins
|
|
133
|
+
*/
|
|
134
|
+
getOptimizers(): OptimizerPlugin[];
|
|
135
|
+
/**
|
|
136
|
+
* Get all validator plugins
|
|
137
|
+
*/
|
|
138
|
+
getValidators(): ValidatorPlugin[];
|
|
139
|
+
/**
|
|
140
|
+
* Initialize all plugins
|
|
141
|
+
*/
|
|
142
|
+
initializeAll(config: CompilerConfig): Promise<void>;
|
|
143
|
+
/**
|
|
144
|
+
* Dispose all plugins
|
|
145
|
+
*/
|
|
146
|
+
disposeAll(): Promise<void>;
|
|
147
|
+
/**
|
|
148
|
+
* Type guards
|
|
149
|
+
*/
|
|
150
|
+
private isDetectionPlugin;
|
|
151
|
+
private isTransformationPlugin;
|
|
152
|
+
private isOptimizerPlugin;
|
|
153
|
+
private isValidatorPlugin;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Utility function to create a simple transformation plugin
|
|
157
|
+
*/
|
|
158
|
+
export declare function createTransformPlugin(config: {
|
|
159
|
+
name: string;
|
|
160
|
+
version: string;
|
|
161
|
+
priority?: number;
|
|
162
|
+
visitor: BabelVisitor;
|
|
163
|
+
getMetadata?: () => Partial<TransformMetadata>;
|
|
164
|
+
}): TransformationPlugin;
|
|
165
|
+
//# sourceMappingURL=plugin-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-api.d.ts","sourceRoot":"","sources":["../../../../src/plugin-system/plugin-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ATP Compiler Plugin API
|
|
3
|
+
*
|
|
4
|
+
* Extensible plugin system for custom transformations and detections
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Plugin registry for managing plugins
|
|
8
|
+
*/
|
|
9
|
+
export class PluginRegistry {
|
|
10
|
+
detectors = [];
|
|
11
|
+
transformers = [];
|
|
12
|
+
optimizers = [];
|
|
13
|
+
validators = [];
|
|
14
|
+
/**
|
|
15
|
+
* Register a plugin
|
|
16
|
+
*/
|
|
17
|
+
register(plugin) {
|
|
18
|
+
// Check for name conflicts
|
|
19
|
+
if (this.findPlugin(plugin.name)) {
|
|
20
|
+
throw new Error(`Plugin "${plugin.name}" is already registered. ` +
|
|
21
|
+
`Please use a unique name or unregister the existing plugin first.`);
|
|
22
|
+
}
|
|
23
|
+
// Type guards to determine plugin type
|
|
24
|
+
if (this.isDetectionPlugin(plugin)) {
|
|
25
|
+
this.detectors.push(plugin);
|
|
26
|
+
this.detectors.sort((a, b) => (b.priority || 50) - (a.priority || 50));
|
|
27
|
+
}
|
|
28
|
+
if (this.isTransformationPlugin(plugin)) {
|
|
29
|
+
this.transformers.push(plugin);
|
|
30
|
+
this.transformers.sort((a, b) => (b.priority || 50) - (a.priority || 50));
|
|
31
|
+
}
|
|
32
|
+
if (this.isOptimizerPlugin(plugin)) {
|
|
33
|
+
this.optimizers.push(plugin);
|
|
34
|
+
this.optimizers.sort((a, b) => (b.priority || 50) - (a.priority || 50));
|
|
35
|
+
}
|
|
36
|
+
if (this.isValidatorPlugin(plugin)) {
|
|
37
|
+
this.validators.push(plugin);
|
|
38
|
+
this.validators.sort((a, b) => (b.priority || 50) - (a.priority || 50));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Find a plugin by name
|
|
43
|
+
*/
|
|
44
|
+
findPlugin(name) {
|
|
45
|
+
const allPlugins = [
|
|
46
|
+
...this.detectors,
|
|
47
|
+
...this.transformers,
|
|
48
|
+
...this.optimizers,
|
|
49
|
+
...this.validators,
|
|
50
|
+
];
|
|
51
|
+
return allPlugins.find((p) => p.name === name);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Unregister a plugin by name
|
|
55
|
+
*/
|
|
56
|
+
unregister(name) {
|
|
57
|
+
let removed = false;
|
|
58
|
+
this.detectors = this.detectors.filter((p) => {
|
|
59
|
+
if (p.name === name) {
|
|
60
|
+
removed = true;
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return true;
|
|
64
|
+
});
|
|
65
|
+
this.transformers = this.transformers.filter((p) => {
|
|
66
|
+
if (p.name === name) {
|
|
67
|
+
removed = true;
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
});
|
|
72
|
+
this.optimizers = this.optimizers.filter((p) => {
|
|
73
|
+
if (p.name === name) {
|
|
74
|
+
removed = true;
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
});
|
|
79
|
+
this.validators = this.validators.filter((p) => {
|
|
80
|
+
if (p.name === name) {
|
|
81
|
+
removed = true;
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
return true;
|
|
85
|
+
});
|
|
86
|
+
return removed;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get all detection plugins
|
|
90
|
+
*/
|
|
91
|
+
getDetectors() {
|
|
92
|
+
return this.detectors;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get all transformation plugins
|
|
96
|
+
*/
|
|
97
|
+
getTransformers() {
|
|
98
|
+
return this.transformers;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get all optimizer plugins
|
|
102
|
+
*/
|
|
103
|
+
getOptimizers() {
|
|
104
|
+
return this.optimizers;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get all validator plugins
|
|
108
|
+
*/
|
|
109
|
+
getValidators() {
|
|
110
|
+
return this.validators;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Initialize all plugins
|
|
114
|
+
*/
|
|
115
|
+
async initializeAll(config) {
|
|
116
|
+
const allPlugins = [
|
|
117
|
+
...this.detectors,
|
|
118
|
+
...this.transformers,
|
|
119
|
+
...this.optimizers,
|
|
120
|
+
...this.validators,
|
|
121
|
+
];
|
|
122
|
+
for (const plugin of allPlugins) {
|
|
123
|
+
if (plugin.initialize) {
|
|
124
|
+
await plugin.initialize(config);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Dispose all plugins
|
|
130
|
+
*/
|
|
131
|
+
async disposeAll() {
|
|
132
|
+
const allPlugins = [
|
|
133
|
+
...this.detectors,
|
|
134
|
+
...this.transformers,
|
|
135
|
+
...this.optimizers,
|
|
136
|
+
...this.validators,
|
|
137
|
+
];
|
|
138
|
+
for (const plugin of allPlugins) {
|
|
139
|
+
if (plugin.dispose) {
|
|
140
|
+
await plugin.dispose();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Type guards
|
|
146
|
+
*/
|
|
147
|
+
isDetectionPlugin(plugin) {
|
|
148
|
+
return 'detect' in plugin && 'patterns' in plugin;
|
|
149
|
+
}
|
|
150
|
+
isTransformationPlugin(plugin) {
|
|
151
|
+
return 'getVisitor' in plugin && 'getMetadata' in plugin && 'reset' in plugin;
|
|
152
|
+
}
|
|
153
|
+
isOptimizerPlugin(plugin) {
|
|
154
|
+
return 'optimize' in plugin;
|
|
155
|
+
}
|
|
156
|
+
isValidatorPlugin(plugin) {
|
|
157
|
+
return 'validate' in plugin;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Utility function to create a simple transformation plugin
|
|
162
|
+
*/
|
|
163
|
+
export function createTransformPlugin(config) {
|
|
164
|
+
let transformCount = 0;
|
|
165
|
+
return {
|
|
166
|
+
name: config.name,
|
|
167
|
+
version: config.version,
|
|
168
|
+
priority: config.priority || 50,
|
|
169
|
+
getVisitor() {
|
|
170
|
+
return config.visitor;
|
|
171
|
+
},
|
|
172
|
+
getMetadata() {
|
|
173
|
+
return config.getMetadata ? config.getMetadata() : { loopCount: transformCount };
|
|
174
|
+
},
|
|
175
|
+
reset() {
|
|
176
|
+
transformCount = 0;
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=plugin-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-api.js","sourceRoot":"","sources":["../../../../src/plugin-system/plugin-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { TransformResult, CompilerConfig } from '../types.js';
|
|
2
|
-
|
|
2
|
+
import type { ICompiler } from '../types/compiler-interface.js';
|
|
3
|
+
/**
|
|
4
|
+
* ATP Compiler - Standard compiler for transforming code to support resumability
|
|
5
|
+
* Implements ICompiler interface for consistency and dependency injection support
|
|
6
|
+
*/
|
|
7
|
+
export declare class ATPCompiler implements ICompiler {
|
|
3
8
|
private config;
|
|
4
9
|
private detector;
|
|
5
10
|
private loopTransformer;
|
|
@@ -11,6 +16,15 @@ export declare class ATPCompiler {
|
|
|
11
16
|
private isArrayMethodCall;
|
|
12
17
|
private isPromiseAllCall;
|
|
13
18
|
private isPromiseAllSettledCall;
|
|
19
|
+
/**
|
|
20
|
+
* Get the compiler type identifier (ICompiler interface requirement)
|
|
21
|
+
*/
|
|
22
|
+
getType(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Get cache statistics (ICompiler interface requirement)
|
|
25
|
+
* ATPCompiler doesn't cache ASTs, so returns null
|
|
26
|
+
*/
|
|
27
|
+
getCacheStats(): null;
|
|
14
28
|
}
|
|
15
29
|
export * from './detector.js';
|
|
16
30
|
export * from './batch-detector.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transformer/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transformer/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAItF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAEhE;;;GAGG;AACH,qBAAa,WAAY,YAAW,SAAS;IAC5C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAQhD,MAAM,CAAC,IAAI,EAAE,MAAM;IAInB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAgFxC,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,uBAAuB;IAS/B;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;;OAGG;IACH,aAAa;CAGb;AAED,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC"}
|