@mondaydotcomorg/atp-compiler 0.19.23 → 0.19.26
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/dist/index.cjs +177 -50
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +177 -50
- package/dist/index.js.map +1 -1
- package/dist/transformer/array-transformer-batch-reconstruct.d.ts +3 -2
- package/dist/transformer/array-transformer-batch-reconstruct.d.ts.map +1 -1
- package/dist/transformer/array-transformer-batch-reconstruct.js +61 -41
- package/dist/transformer/array-transformer-batch-reconstruct.js.map +1 -1
- package/dist/transformer/array-transformer-utils.d.ts +29 -1
- package/dist/transformer/array-transformer-utils.d.ts.map +1 -1
- package/dist/transformer/array-transformer-utils.js +159 -8
- package/dist/transformer/array-transformer-utils.js.map +1 -1
- package/dist/transformer/array-transformer.d.ts.map +1 -1
- package/dist/transformer/array-transformer.js +15 -4
- package/dist/transformer/array-transformer.js.map +1 -1
- package/package.json +5 -5
- package/src/transformer/array-transformer-batch-reconstruct.ts +94 -70
- package/src/transformer/array-transformer-utils.ts +187 -7
- package/src/transformer/array-transformer.ts +20 -5
- package/tsconfig.tsbuildinfo +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/transformer/utils.ts","../src/transformer/detector.ts","../src/runtime/context.ts","../src/transformer/batch-optimizer.ts","../src/transformer/batch-detector.ts","../src/transformer/array-transformer-utils.ts","../src/transformer/loop-transformer.ts","../src/transformer/array-transformer-wrappers.ts","../src/transformer/array-transformer-batch.ts","../src/transformer/array-transformer-sequential.ts","../src/transformer/array-transformer-batch-reconstruct.ts","../src/transformer/array-transformer.ts","../src/runtime/runtime-functions.ts","../src/transformer/promise-transformer.ts","../src/runtime/errors.ts","../src/transformer/index.ts","../src/runtime/checkpoint-manager.ts","../src/runtime/resumable-loops.ts","../src/runtime/resumable-arrays.ts","../src/runtime/resumable-parallel.ts","../src/runtime/batch-parallel.ts","../src/runtime/index.ts","../src/types/compiler-interface.ts","../src/plugin-system/plugin-api.ts","../src/plugin-system/pluggable-compiler.ts","../src/plugin-system/default-plugins/detection-plugin.ts","../src/plugin-system/default-plugins/loop-transformer-plugin.ts","../src/plugin-system/default-plugins/array-transformer-plugin.ts","../src/plugin-system/default-plugins/promise-transformer-plugin.ts","../src/plugin-system/create-default-compiler.ts","../src/plugin-system/examples/timeout-plugin.ts","../src/plugin-system/examples/security-validator-plugin.ts"],"names":["PAUSABLE_CALL_PATTERNS","namespace","method","DEFAULT_COMPILER_CONFIG","enableBatchParallel","maxLoopNesting","checkpointInterval","debugMode","batchSizeThreshold","isPausableCall","node","isAwaitExpression","argument","isCallExpression","isPausableCallExpression","callee","isMemberExpression","fullPath","getMemberExpressionPath","some","pattern","startsWith","parts","current","isIdentifier","property","unshift","name","object","join","containsAwait","hasAwait","checkNode","n","Object","keys","forEach","key","value","Array","isArray","item","type","containsPausableCall","hasPausable","isAsyncFunction","isFunctionDeclaration","isFunctionExpression","isArrowFunctionExpression","async","getNodeLocation","loc","line","start","column","undefined","createRuntimeCall","fnName","args","awaitExpression","callExpression","memberExpression","identifier","wrapInAsyncFunction","body","functionExpression","blockStatement","isArrayMethod","methodName","extractForOfParamName","left","isVariableDeclaration","id","declarations","traverse","_traverse","default","AsyncIterationDetector","detect","code","patterns","batchableParallel","ast","parse","sourceType","plugins","allowAwaitOutsideFunction","allowReturnOutsideFunction","ForOfStatement","path","push","WhileStatement","CallExpression","callback","arguments","isFunction","isPromiseAll","canBatchPromiseAll","isPromiseAllSettled","needsTransform","length","Set","error","arrayArg","isArrayExpression","elements","every","el","isSpreadElement","isDirectPausableCall","contextStack","setRuntimeContext","context","getRuntimeContext","Error","clearRuntimeContext","pop","hasRuntimeContext","idCounter","generateUniqueId","prefix","Date","now","resetIdCounter","BatchOptimizer","arrayMethodsWithEarlyExit","canBatchArrayMethod","canBatch","reason","isBlockStatement","llmCallPattern","hasConditionals","statements","hasLoops","hasTryCatch","stmt","isIfStatement","isSwitchStatement","isTryStatement","isForStatement","isForOfStatement","isForInStatement","isWhileStatement","isDoWhileStatement","isBreakStatement","isContinueStatement","isReturnStatement","pausableCalls","countPausableCalls","lastStmt","isObjectExpression","makeSmartBatchDecision","batchResult","arrayNode","threshold","shouldBatch","strategy","hasEarlyExitBenefit","includes","arraySize","estimateArraySize","canBatchForOfLoop","loopNode","hasBreakOrContinue","containsBreakOrContinue","found","visit","count","BatchParallelDetector","promiseAllNode","extractBatchCalls","calls","callNode","callInfo","extractCallInfo","split","service","payload","extractPayload","operation","extractPayloadNode","objectExpression","firstArg","isExpression","objectExpressionToRecord","isStringLiteral","message","obj","record","prop","properties","isObjectProperty","computed","String","extractValue","isNumericLiteral","isBooleanLiteral","isNullLiteral","map","findLLMCallExpression","call","getArrayMethodName","arrayMethods","getRuntimeMethodName","arrayMethod","mapping","filter","reduce","find","flatMap","canUseBatchParallel","LoopTransformer","transformCount","batchOptimizer","batchDetector","constructor","transformForOfLoop","decision","right","transformForOfToBatch","transformForOfToSequential","loopId","paramName","llmCall","payloadNode","batchCallsArray","arrowFunctionExpression","objectProperty","stringLiteral","batchCall","replaceWith","expressionStatement","bodyStatements","callbackFn","runtimeCall","transformWhileLoop","conditionFn","test","bodyFn","transformForLoop","init","update","initValue","numericLiteral","loopVar","decl","incrementFn","isUpdateExpression","operator","binaryExpression","getTransformCount","resetTransformCount","wrapFilterResult","array","methodId","resultsVar","indexVar","arrayClone","cloneNode","variableDeclaration","variableDeclarator","returnStatement","wrapFindResult","wrapSomeResult","wrapEveryResult","wrapBatchResultIfNeeded","extractBatchCallInfo","params","param","mapperFunction","transformToBatchParallel","onTransform","fallbackTransform","finalCall","transformToSequential","runtimeMethod","transformToBatchWithReconstruction","replace","payloadMapper","clonedBody","resultAccess","traversableNode","functionDeclaration","replaced","file","program","AwaitExpression","awaitPath","arg","info","noScope","reconstructBody","reconstructMapper","resultsDeclaration","reconstructCall","iife","awaitIife","ArrayTransformer","transformArrayMethod","hasObjectOrArrayReturn","success","doTransformToSequential","RuntimeFunction","RESUMABLE_PROMISE_ALL","RESUMABLE_PROMISE_ALL_SETTLED","BATCH_PARALLEL","RESUMABLE_FOR_OF","RESUMABLE_FOR_LOOP","RESUMABLE_WHILE","RESUMABLE_MAP","RESUMABLE_FOR_EACH","RESUMABLE_FILTER","RESUMABLE_REDUCE","RESUMABLE_FIND","RESUMABLE_SOME","RESUMABLE_EVERY","RESUMABLE_FLAT_MAP","IN_ISOLATE_RUNTIME_FUNCTIONS","isInIsolateRuntimeFunction","TOOL_OPERATION_CALL","PromiseTransformer","transformPromiseAll","transformPromiseAllSettled","parallelId","batchId","arrayExpression","nullLiteral","payloadArg","buildBatchCallObject","payloadExpr","payloadToExpression","entries","valueToExpression","booleanLiteral","v","CheckpointOperation","BatchPauseExecutionError","sequenceNumber","CheckpointError","checkpointId","TransformationError","location","InfiniteLoopDetectionError","iterationCount","isBatchPauseError","isCheckpointError","isTransformationError","generate","_generate","ATPCompiler","config","detector","loopTransformer","arrayTransformer","promiseTransformer","transform","detection","transformed","metadata","loopCount","arrayMethodCount","parallelCallCount","batchableCount","ForStatement","isArrayMethodCall","isPromiseAllCall","isPromiseAllSettledCall","output","sourceMaps","retainLines","comments","getType","getCacheStats","MAX_CHECKPOINT_SIZE","CHECKPOINT_TTL","CheckpointManager","cache","executionId","save","checkpoint","getKey","serialized","JSON","stringify","SAVE","set","load","get","completed","LOAD","clear","delete","CLEAR","clearAll","getExecutionId","globalCheckpointManager","setCheckpointManager","manager","getCheckpointManager","clearCheckpointManager","hasCheckpointManager","MAX_ITERATIONS","resumableForOf","items","checkpointManager","startIndex","currentIndex","i","newCheckpoint","timestamp","resumableWhile","iteration","Promise","resolve","resumableForLoop","iterations","resumableMap","mapId","results","resumableForEach","forEachId","resumableFilter","filterId","passed","resumableReduce","initialValue","reduceId","accumulator","resumableFind","findId","resumableSome","someId","result","resumableEvery","everyId","resumableFlatMap","flatMapId","mapped","resumablePromiseAll","promises","resumablePromiseAllSettled","status","batchParallel","batchCalls","currentSequence","getCallSequenceNumber","cachedResult","getCachedResult","nextSequenceNumber","sequenceForPause","initializeRuntime","options","checkpointPrefix","cleanupRuntime","isCompiler","PluginRegistry","detectors","transformers","optimizers","validators","register","plugin","findPlugin","isDetectionPlugin","sort","a","b","priority","isTransformationPlugin","isOptimizerPlugin","isValidatorPlugin","allPlugins","p","unregister","removed","getDetectors","getTransformers","getOptimizers","getValidators","initializeAll","initialize","disposeAll","dispose","createTransformPlugin","version","getVisitor","visitor","getMetadata","reset","PluggableCompiler","registry","initialized","astCache","Map","use","remove","pluginName","parseCode","allPatterns","add","size","from","runValidation","transformer","visitors","nodeType","handler","existing","optimizedAst","optimizer","optimize","pluginMetadata","getConfig","setConfig","cached","clearCache","enabled","phase","validator","validate","DefaultDetectionPlugin","DefaultLoopTransformerPlugin","DefaultArrayTransformerPlugin","DefaultPromiseTransformerPlugin","createDefaultCompiler","compiler","AsyncTimeoutPlugin","timeout","wrapAll","shouldWrap","timeoutPromise","newExpression","raceCall","funcName","getFunctionName","regex","RegExp","SecurityValidatorPlugin","forbiddenPatterns","maxComplexity","maxNesting","forbiddenGlobals","SecurityValidationError","maxNestingFound","complexityScore","enter","depth","scope","getDepth","Math","max","isSwitchCase","isCatchClause","Identifier","hasBinding","parentPath"],"mappings":"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","file":"index.js","sourcesContent":["import type { CacheProvider } from '@mondaydotcomorg/atp-protocol';\n\nexport interface DetectionResult {\n\tneedsTransform: boolean;\n\tpatterns: AsyncPattern[];\n\tbatchableParallel?: boolean;\n}\n\nexport type AsyncPattern =\n\t| 'for-of-await'\n\t| 'while-await'\n\t| 'map-async'\n\t| 'forEach-async'\n\t| 'filter-async'\n\t| 'reduce-async'\n\t| 'find-async'\n\t| 'some-async'\n\t| 'every-async'\n\t| 'flatMap-async'\n\t| 'promise-all'\n\t| 'promise-allSettled';\n\nexport interface TransformResult {\n\tcode: string;\n\ttransformed: boolean;\n\tpatterns: AsyncPattern[];\n\tmetadata: TransformMetadata;\n}\n\nexport interface TransformMetadata {\n\tloopCount: number;\n\tarrayMethodCount: number;\n\tparallelCallCount: number;\n\tbatchableCount: number;\n}\n\nexport interface LoopCheckpoint {\n\tloopId: string;\n\tcurrentIndex: number;\n\tresults?: unknown[];\n\taccumulator?: unknown;\n\tcompleted?: Set<number>;\n\ttimestamp: number;\n}\n\nexport type BatchServiceType = 'llm' | 'approval' | 'embedding' | 'tool';\n\nexport interface BatchCallInfo {\n\ttype: BatchServiceType;\n\toperation: string;\n\tpayload: Record<string, unknown>;\n}\n\nexport interface RuntimeContext {\n\texecutionId: string;\n\tcache?: CacheProvider;\n\tcheckpointPrefix?: string;\n}\n\nexport interface TransformerOptions {\n\tgenerateDebugInfo?: boolean;\n\tmaxLoopNesting?: number;\n\tenableBatchParallel?: boolean;\n\tbatchSizeThreshold?: number;\n}\n\nexport interface PausableCallPattern {\n\tnamespace: string;\n\tmethod: string;\n}\n\nexport const PAUSABLE_CALL_PATTERNS: PausableCallPattern[] = [\n\t{ namespace: 'atp.llm', method: 'call' },\n\t{ namespace: 'atp.llm', method: 'extract' },\n\t{ namespace: 'atp.llm', method: 'classify' },\n\t{ namespace: 'atp.llm', method: 'stream' },\n\t{ namespace: 'atp.llm', method: 'generate' },\n\t{ namespace: 'atp.approval', method: 'request' },\n\t{ namespace: 'atp.approval', method: 'confirm' },\n\t{ namespace: 'atp.approval', method: 'verify' },\n\t{ namespace: 'atp.embedding', method: 'embed' },\n\t{ namespace: 'atp.embedding', method: 'search' },\n\t{ namespace: 'atp.embedding', method: 'create' },\n\t{ namespace: 'atp.embedding', method: 'generate' },\n\t{ namespace: 'atp.embedding', method: 'encode' },\n\t{ namespace: 'api.client', method: '*' },\n];\n\nexport interface CompilerConfig {\n\tenableBatchParallel?: boolean;\n\tmaxLoopNesting?: number;\n\tcheckpointInterval?: number;\n\tdebugMode?: boolean;\n\tbatchSizeThreshold?: number;\n}\n\nexport const DEFAULT_COMPILER_CONFIG: CompilerConfig = {\n\tenableBatchParallel: true,\n\tmaxLoopNesting: 10,\n\tcheckpointInterval: 1,\n\tdebugMode: false,\n\tbatchSizeThreshold: 10,\n};\n","import * as t from '@babel/types';\nimport { PAUSABLE_CALL_PATTERNS } from '../types.js';\n\nexport function isPausableCall(node: t.Node): boolean {\n\tif (!t.isAwaitExpression(node)) {\n\t\treturn false;\n\t}\n\n\tconst argument = node.argument;\n\tif (!t.isCallExpression(argument)) {\n\t\treturn false;\n\t}\n\n\treturn isPausableCallExpression(argument);\n}\n\nexport function isPausableCallExpression(node: t.CallExpression): boolean {\n\tconst callee = node.callee;\n\n\tif (!t.isMemberExpression(callee)) {\n\t\treturn false;\n\t}\n\n\tconst fullPath = getMemberExpressionPath(callee);\n\treturn PAUSABLE_CALL_PATTERNS.some((pattern) =>\n\t\tpattern.method === '*'\n\t\t\t? fullPath.startsWith(`${pattern.namespace}.`)\n\t\t\t: fullPath === `${pattern.namespace}.${pattern.method}`\n\t);\n}\n\nexport function getMemberExpressionPath(node: t.MemberExpression): string {\n\tconst parts: string[] = [];\n\n\tlet current: t.Node = node;\n\twhile (t.isMemberExpression(current)) {\n\t\tif (t.isIdentifier(current.property)) {\n\t\t\tparts.unshift(current.property.name);\n\t\t}\n\t\tcurrent = current.object;\n\t}\n\n\tif (t.isIdentifier(current)) {\n\t\tparts.unshift(current.name);\n\t}\n\n\treturn parts.join('.');\n}\n\nexport function containsAwait(node: t.Node): boolean {\n\tlet hasAwait = false;\n\n\tconst checkNode = (n: t.Node): void => {\n\t\tif (t.isAwaitExpression(n)) {\n\t\t\thasAwait = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (hasAwait) return;\n\n\t\tObject.keys(n).forEach((key) => {\n\t\t\tconst value = (n as any)[key];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\tcheckNode(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\tcheckNode(value);\n\t\t\t}\n\t\t});\n\t};\n\n\tcheckNode(node);\n\treturn hasAwait;\n}\n\nexport function containsPausableCall(node: t.Node): boolean {\n\tlet hasPausable = false;\n\n\tconst checkNode = (n: t.Node): void => {\n\t\tif (t.isAwaitExpression(n) && isPausableCall(n)) {\n\t\t\thasPausable = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (hasPausable) return;\n\n\t\tObject.keys(n).forEach((key) => {\n\t\t\tconst value = (n as any)[key];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\tcheckNode(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\tcheckNode(value);\n\t\t\t}\n\t\t});\n\t};\n\n\tcheckNode(node);\n\treturn hasPausable;\n}\n\nexport function isAsyncFunction(node: t.Node): boolean {\n\treturn (\n\t\t(t.isFunctionDeclaration(node) ||\n\t\t\tt.isFunctionExpression(node) ||\n\t\t\tt.isArrowFunctionExpression(node)) &&\n\t\tnode.async === true\n\t);\n}\n\nexport function getNodeLocation(node: t.Node): { line: number; column: number } | undefined {\n\tif (node.loc) {\n\t\treturn {\n\t\t\tline: node.loc.start.line,\n\t\t\tcolumn: node.loc.start.column,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nexport function createRuntimeCall(fnName: string, args: t.Expression[]): t.AwaitExpression {\n\treturn t.awaitExpression(\n\t\tt.callExpression(t.memberExpression(t.identifier('__runtime'), t.identifier(fnName)), args)\n\t);\n}\n\nexport function wrapInAsyncFunction(body: t.Statement[]): t.FunctionExpression {\n\treturn t.functionExpression(null, [], t.blockStatement(body), false, true);\n}\n\nexport function isArrayMethod(node: t.Node, methodName: string): boolean {\n\tif (!t.isCallExpression(node)) {\n\t\treturn false;\n\t}\n\n\tconst callee = node.callee;\n\tif (!t.isMemberExpression(callee)) {\n\t\treturn false;\n\t}\n\n\treturn t.isIdentifier(callee.property) && callee.property.name === methodName;\n}\n\n/**\n * Extract parameter name from ForOfStatement left side\n */\nexport function extractForOfParamName(left: t.VariableDeclaration | t.LVal): string {\n\tif (t.isVariableDeclaration(left)) {\n\t\tconst id = left.declarations[0]?.id;\n\t\treturn t.isIdentifier(id) ? id.name : 'item';\n\t} else if (t.isIdentifier(left)) {\n\t\treturn left.name;\n\t} else {\n\t\treturn 'item';\n\t}\n}\n","import { parse } from '@babel/parser';\nimport _traverse from '@babel/traverse';\n// @ts-ignore - CommonJS/ESM compatibility\nconst traverse =\n\ttypeof (_traverse as any).default === 'function' ? (_traverse as any).default : _traverse;\nimport * as t from '@babel/types';\nimport type { DetectionResult, AsyncPattern } from '../types.js';\nimport { containsAwait, isArrayMethod, isPausableCallExpression } from './utils.js';\n\nexport class AsyncIterationDetector {\n\tdetect(code: string): DetectionResult {\n\t\tconst patterns: AsyncPattern[] = [];\n\t\tlet batchableParallel = false;\n\n\t\ttry {\n\t\t\tconst ast = parse(code, {\n\t\t\t\tsourceType: 'module',\n\t\t\t\tplugins: ['typescript'],\n\t\t\t\tallowAwaitOutsideFunction: true,\n\t\t\t\tallowReturnOutsideFunction: true,\n\t\t\t});\n\n\t\t\ttraverse(ast, {\n\t\t\t\tForOfStatement: (path: any) => {\n\t\t\t\t\tif (containsAwait(path.node.body)) {\n\t\t\t\t\t\tpatterns.push('for-of-await');\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tWhileStatement: (path: any) => {\n\t\t\t\t\tif (containsAwait(path.node.body)) {\n\t\t\t\t\t\tpatterns.push('while-await');\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tCallExpression: (path: any) => {\n\t\t\t\t\tconst node = path.node;\n\n\t\t\t\t\tif (isArrayMethod(node, 'map')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('map-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'forEach')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('forEach-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'filter')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('filter-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'reduce')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('reduce-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'find')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('find-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'some')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('some-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'every')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('every-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'flatMap')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('flatMap-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.isPromiseAll(node)) {\n\t\t\t\t\t\tpatterns.push('promise-all');\n\t\t\t\t\t\tif (this.canBatchPromiseAll(node)) {\n\t\t\t\t\t\t\tbatchableParallel = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.isPromiseAllSettled(node)) {\n\t\t\t\t\t\tpatterns.push('promise-allSettled');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tneedsTransform: patterns.length > 0,\n\t\t\t\tpatterns: [...new Set(patterns)],\n\t\t\t\tbatchableParallel,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tneedsTransform: false,\n\t\t\t\tpatterns: [],\n\t\t\t\tbatchableParallel: false,\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate isPromiseAll(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'all' })\n\t\t);\n\t}\n\n\tprivate isPromiseAllSettled(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'allSettled' })\n\t\t);\n\t}\n\n\tprivate canBatchPromiseAll(node: t.CallExpression): boolean {\n\t\tconst arrayArg = node.arguments[0];\n\n\t\tif (!t.isArrayExpression(arrayArg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (arrayArg.elements.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn arrayArg.elements.every((el) => {\n\t\t\tif (!el || t.isSpreadElement(el)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn this.isDirectPausableCall(el);\n\t\t});\n\t}\n\n\tprivate isDirectPausableCall(node: t.Node): boolean {\n\t\tif (t.isAwaitExpression(node)) {\n\t\t\tnode = node.argument;\n\t\t}\n\n\t\tif (!t.isCallExpression(node)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn isPausableCallExpression(node);\n\t}\n}\n","import type { RuntimeContext } from '../types.js';\n\nconst contextStack: RuntimeContext[] = [];\n\nexport function setRuntimeContext(context: RuntimeContext): void {\n\tcontextStack.push(context);\n}\n\nexport function getRuntimeContext(): RuntimeContext {\n\tconst context = contextStack[contextStack.length - 1];\n\tif (!context) {\n\t\tthrow new Error('No runtime context available. Compiler runtime not properly initialized.');\n\t}\n\treturn context;\n}\n\nexport function clearRuntimeContext(): void {\n\tcontextStack.pop();\n}\n\nexport function hasRuntimeContext(): boolean {\n\treturn contextStack.length > 0;\n}\n\nlet idCounter = 0;\n\nexport function generateUniqueId(prefix: string): string {\n\treturn `${prefix}_${Date.now()}_${idCounter++}`;\n}\n\nexport function resetIdCounter(): void {\n\tidCounter = 0;\n}\n","import * as t from '@babel/types';\nimport { isPausableCallExpression } from './utils.js';\n\nexport interface BatchOptimizationResult {\n\tcanBatch: boolean;\n\treason?: string;\n\tllmCallPattern?: 'single' | 'multiple' | 'conditional';\n\thasConditionals?: boolean;\n\thasLoops?: boolean;\n}\n\nexport interface SmartBatchDecision {\n\tshouldBatch: boolean;\n\treason: string;\n\tstrategy: 'always-batch' | 'size-dependent' | 'never-batch';\n}\n\nexport class BatchOptimizer {\n\tprivate arrayMethodsWithEarlyExit = ['find', 'some', 'every'];\n\n\tcanBatchArrayMethod(callback: t.Function): BatchOptimizationResult {\n\t\tif (!callback.async) {\n\t\t\treturn { canBatch: false, reason: 'Not async' };\n\t\t}\n\n\t\tconst body = callback.body;\n\n\t\tif (!t.isBlockStatement(body)) {\n\t\t\tif (t.isAwaitExpression(body)) {\n\t\t\t\tif (this.isDirectPausableCall(body.argument)) {\n\t\t\t\t\treturn { canBatch: true, llmCallPattern: 'single', hasConditionals: false };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { canBatch: false, reason: 'Non-block body without direct call' };\n\t\t}\n\n\t\tconst statements = body.body;\n\n\t\tif (statements.length === 0) {\n\t\t\treturn { canBatch: false, reason: 'Empty body' };\n\t\t}\n\n\t\tlet hasConditionals = false;\n\t\tlet hasLoops = false;\n\t\tlet hasTryCatch = false;\n\n\t\tfor (const stmt of statements) {\n\t\t\tif (t.isIfStatement(stmt) || t.isSwitchStatement(stmt)) {\n\t\t\t\thasConditionals = true;\n\t\t\t}\n\n\t\t\tif (t.isTryStatement(stmt)) {\n\t\t\t\thasTryCatch = true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tt.isForStatement(stmt) ||\n\t\t\t\tt.isForOfStatement(stmt) ||\n\t\t\t\tt.isForInStatement(stmt) ||\n\t\t\t\tt.isWhileStatement(stmt) ||\n\t\t\t\tt.isDoWhileStatement(stmt)\n\t\t\t) {\n\t\t\t\thasLoops = true;\n\t\t\t}\n\n\t\t\tif (t.isBreakStatement(stmt) || t.isContinueStatement(stmt)) {\n\t\t\t\treturn { canBatch: false, reason: 'Contains break/continue' };\n\t\t\t}\n\n\t\t\tif (t.isReturnStatement(stmt) && stmt !== statements[statements.length - 1]) {\n\t\t\t\treturn { canBatch: false, reason: 'Early return' };\n\t\t\t}\n\t\t}\n\n\t\tif (hasLoops) {\n\t\t\treturn { canBatch: false, reason: 'Contains loops', hasLoops: true };\n\t\t}\n\n\t\tif (hasTryCatch) {\n\t\t\treturn { canBatch: false, reason: 'Contains try-catch' };\n\t\t}\n\n\t\tconst pausableCalls = this.countPausableCalls(body);\n\t\tif (pausableCalls === 0) {\n\t\t\treturn { canBatch: false, reason: 'No pausable calls' };\n\t\t}\n\n\t\tif (pausableCalls > 1) {\n\t\t\treturn { canBatch: false, reason: 'Multiple pausable calls', llmCallPattern: 'multiple' };\n\t\t}\n\n\t\tif (hasConditionals) {\n\t\t\treturn {\n\t\t\t\tcanBatch: true,\n\t\t\t\tllmCallPattern: 'conditional',\n\t\t\t\thasConditionals: true,\n\t\t\t\treason: 'Simple conditional - can batch but consider array size',\n\t\t\t};\n\t\t}\n\n\t\tconst lastStmt = statements[statements.length - 1];\n\t\tif (t.isReturnStatement(lastStmt) && lastStmt.argument) {\n\t\t\tif (t.isObjectExpression(lastStmt.argument)) {\n\t\t\t\treturn {\n\t\t\t\t\tcanBatch: false,\n\t\t\t\t\treason: 'Return statement is object expression - batch would lose structure',\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (t.isArrayExpression(lastStmt.argument)) {\n\t\t\t\treturn {\n\t\t\t\t\tcanBatch: false,\n\t\t\t\t\treason: 'Return statement is array expression - batch would lose structure',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn { canBatch: true, llmCallPattern: 'single', hasConditionals: false };\n\t}\n\n\t/**\n\t * Smart decision: Should we batch based on array size and method type?\n\t */\n\tmakeSmartBatchDecision(\n\t\tmethodName: string,\n\t\tbatchResult: BatchOptimizationResult,\n\t\tarrayNode: t.Expression,\n\t\tthreshold: number = 10\n\t): SmartBatchDecision {\n\t\tif (!batchResult.canBatch) {\n\t\t\treturn {\n\t\t\t\tshouldBatch: false,\n\t\t\t\treason: 'Complex callback - use sequential',\n\t\t\t\tstrategy: 'never-batch',\n\t\t\t};\n\t\t}\n\n\t\tif (!batchResult.hasConditionals) {\n\t\t\treturn {\n\t\t\t\tshouldBatch: true,\n\t\t\t\treason: 'Simple callback - batching is faster',\n\t\t\t\tstrategy: 'always-batch',\n\t\t\t};\n\t\t}\n\n\t\tconst hasEarlyExitBenefit = this.arrayMethodsWithEarlyExit.includes(methodName);\n\n\t\tif (!hasEarlyExitBenefit) {\n\t\t\tconst arraySize = this.estimateArraySize(arrayNode);\n\n\t\t\tif (arraySize !== null && arraySize < threshold) {\n\t\t\t\treturn {\n\t\t\t\t\tshouldBatch: true,\n\t\t\t\t\treason: `Small array (${arraySize} < ${threshold}) - batch despite conditionals`,\n\t\t\t\t\tstrategy: 'size-dependent',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tshouldBatch: false,\n\t\t\t\treason: 'Conditionals + large/unknown array - sequential for safety',\n\t\t\t\tstrategy: 'size-dependent',\n\t\t\t};\n\t\t}\n\n\t\tconst arraySize = this.estimateArraySize(arrayNode);\n\n\t\tif (arraySize !== null && arraySize < threshold) {\n\t\t\treturn {\n\t\t\t\tshouldBatch: true,\n\t\t\t\treason: `Small array (${arraySize} < ${threshold}) - batch for speed`,\n\t\t\t\tstrategy: 'size-dependent',\n\t\t\t};\n\t\t}\n\n\t\tif (arraySize !== null && arraySize >= threshold) {\n\t\t\treturn {\n\t\t\t\tshouldBatch: false,\n\t\t\t\treason: `Large array (${arraySize} >= ${threshold}) + conditionals - sequential for early-exit savings`,\n\t\t\t\tstrategy: 'size-dependent',\n\t\t\t};\n\t\t}\n\n\t\tif (t.isArrayExpression(arrayNode)) {\n\t\t\treturn {\n\t\t\t\tshouldBatch: true,\n\t\t\t\treason: 'Array literal (likely small) - batch',\n\t\t\t\tstrategy: 'size-dependent',\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tshouldBatch: false,\n\t\t\treason: 'Unknown array size + conditionals - sequential for safety',\n\t\t\tstrategy: 'size-dependent',\n\t\t};\n\t}\n\n\tprivate estimateArraySize(arrayNode: t.Expression): number | null {\n\t\tif (t.isArrayExpression(arrayNode)) {\n\t\t\treturn arrayNode.elements.length;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tcanBatchForOfLoop(loopNode: t.ForOfStatement): BatchOptimizationResult {\n\t\tconst body = loopNode.body;\n\n\t\tif (!t.isBlockStatement(body)) {\n\t\t\treturn { canBatch: false, reason: 'Loop body not a block' };\n\t\t}\n\n\t\tconst statements = body.body;\n\n\t\tif (statements.length === 0) {\n\t\t\treturn { canBatch: false, reason: 'Empty loop body' };\n\t\t}\n\n\t\tconst hasBreakOrContinue = this.containsBreakOrContinue(body);\n\t\tif (hasBreakOrContinue) {\n\t\t\treturn { canBatch: false, reason: 'Contains break/continue' };\n\t\t}\n\n\t\tlet hasConditionals = false;\n\n\t\tfor (const stmt of statements) {\n\t\t\tif (t.isIfStatement(stmt) || t.isSwitchStatement(stmt)) {\n\t\t\t\thasConditionals = true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tt.isForStatement(stmt) ||\n\t\t\t\tt.isForOfStatement(stmt) ||\n\t\t\t\tt.isForInStatement(stmt) ||\n\t\t\t\tt.isWhileStatement(stmt) ||\n\t\t\t\tt.isDoWhileStatement(stmt)\n\t\t\t) {\n\t\t\t\treturn { canBatch: false, reason: 'Contains nested loops', hasLoops: true };\n\t\t\t}\n\t\t}\n\n\t\tconst pausableCalls = this.countPausableCalls(body);\n\t\tif (pausableCalls === 0) {\n\t\t\treturn { canBatch: false, reason: 'No pausable calls' };\n\t\t}\n\n\t\tif (pausableCalls > 1) {\n\t\t\treturn { canBatch: false, reason: 'Multiple pausable calls', llmCallPattern: 'multiple' };\n\t\t}\n\n\t\tif (hasConditionals) {\n\t\t\treturn {\n\t\t\t\tcanBatch: true,\n\t\t\t\tllmCallPattern: 'conditional',\n\t\t\t\thasConditionals: true,\n\t\t\t\treason: 'Simple conditional - can batch but consider array size',\n\t\t\t};\n\t\t}\n\n\t\treturn { canBatch: true, llmCallPattern: 'single', hasConditionals: false };\n\t}\n\n\tprivate containsBreakOrContinue(node: t.Node): boolean {\n\t\tlet found = false;\n\n\t\tconst visit = (n: t.Node) => {\n\t\t\tif (found) return;\n\n\t\t\tif (t.isBreakStatement(n) || t.isContinueStatement(n)) {\n\t\t\t\tfound = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tt.isForStatement(n) ||\n\t\t\t\tt.isForOfStatement(n) ||\n\t\t\t\tt.isForInStatement(n) ||\n\t\t\t\tt.isWhileStatement(n) ||\n\t\t\t\tt.isDoWhileStatement(n)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tObject.keys(n).forEach((key) => {\n\t\t\t\tconst value = (n as any)[key];\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\t\tvisit(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\t\tvisit(value);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tvisit(node);\n\t\treturn found;\n\t}\n\n\tprivate isDirectPausableCall(node: t.Node): boolean {\n\t\tif (!t.isCallExpression(node)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn isPausableCallExpression(node);\n\t}\n\n\tprivate countPausableCalls(body: t.BlockStatement): number {\n\t\tlet count = 0;\n\n\t\tconst visit = (node: t.Node) => {\n\t\t\tif (t.isAwaitExpression(node) && this.isDirectPausableCall(node.argument)) {\n\t\t\t\tcount++;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tObject.keys(node).forEach((key) => {\n\t\t\t\tconst value = (node as any)[key];\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\t\tvisit(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\t\tvisit(value);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tvisit(body);\n\t\treturn count;\n\t}\n}\n","import * as t from '@babel/types';\nimport type { BatchCallInfo, BatchServiceType } from '../types.js';\nimport { isPausableCallExpression, getMemberExpressionPath } from './utils.js';\n\nexport class BatchParallelDetector {\n\tcanBatch(promiseAllNode: t.CallExpression): boolean {\n\t\tconst arrayArg = promiseAllNode.arguments[0];\n\n\t\tif (!t.isArrayExpression(arrayArg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (arrayArg.elements.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn arrayArg.elements.every((el) => {\n\t\t\tif (!el || t.isSpreadElement(el)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn this.isDirectPausableCall(el);\n\t\t});\n\t}\n\n\tprivate isDirectPausableCall(node: t.Node): boolean {\n\t\tif (t.isAwaitExpression(node)) {\n\t\t\tnode = node.argument;\n\t\t}\n\n\t\tif (!t.isCallExpression(node)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn isPausableCallExpression(node);\n\t}\n\n\textractBatchCalls(arrayNode: t.ArrayExpression): BatchCallInfo[] {\n\t\tconst calls: BatchCallInfo[] = [];\n\n\t\tfor (const el of arrayNode.elements) {\n\t\t\tif (!el || t.isSpreadElement(el)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet callNode: t.Node = el;\n\t\t\tif (t.isAwaitExpression(callNode)) {\n\t\t\t\tcallNode = callNode.argument;\n\t\t\t}\n\n\t\t\tif (!t.isCallExpression(callNode)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst callInfo = this.extractCallInfo(callNode);\n\t\t\tif (callInfo) {\n\t\t\t\tcalls.push(callInfo);\n\t\t\t}\n\t\t}\n\n\t\treturn calls;\n\t}\n\n\textractCallInfo(callNode: t.CallExpression): BatchCallInfo | null {\n\t\tif (!t.isMemberExpression(callNode.callee)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst path = getMemberExpressionPath(callNode.callee);\n\t\tconst parts = path.split('.');\n\n\t\tif (parts.length < 3) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst [namespace, service, method] = parts;\n\t\tif (!service || !method) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet type: BatchServiceType;\n\t\tif (namespace === 'atp') {\n\t\t\tif (!['llm', 'approval', 'embedding'].includes(service)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttype = service as BatchServiceType;\n\t\t} else if (namespace === 'api' && service === 'client') {\n\t\t\ttype = 'tool';\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t\tconst payload = this.extractPayload(callNode.arguments as t.Expression[]);\n\n\t\treturn {\n\t\t\ttype,\n\t\t\toperation: method,\n\t\t\tpayload,\n\t\t};\n\t}\n\n\t/**\n\t * Extract payload AST node directly\n\t */\n\textractPayloadNode(callNode: t.CallExpression): t.Expression | null {\n\t\tif (callNode.arguments.length === 0) {\n\t\t\treturn t.objectExpression([]);\n\t\t}\n\n\t\tconst firstArg = callNode.arguments[0];\n\t\tif (!firstArg || t.isSpreadElement(firstArg) || !t.isExpression(firstArg)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn firstArg;\n\t}\n\n\tprivate extractPayload(args: Array<t.Expression | t.SpreadElement>): Record<string, unknown> {\n\t\tif (args.length === 0) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst firstArg = args[0];\n\t\tif (t.isSpreadElement(firstArg)) {\n\t\t\treturn {};\n\t\t}\n\n\t\tif (t.isObjectExpression(firstArg)) {\n\t\t\treturn this.objectExpressionToRecord(firstArg);\n\t\t}\n\n\t\tif (t.isStringLiteral(firstArg)) {\n\t\t\treturn { message: firstArg.value };\n\t\t}\n\n\t\treturn {};\n\t}\n\n\tprivate objectExpressionToRecord(obj: t.ObjectExpression): Record<string, unknown> {\n\t\tconst record: Record<string, unknown> = {};\n\n\t\tfor (const prop of obj.properties) {\n\t\t\tif (t.isObjectProperty(prop) && !prop.computed) {\n\t\t\t\tconst key = t.isIdentifier(prop.key) ? prop.key.name : String(prop.key);\n\t\t\t\tconst value = this.extractValue(prop.value);\n\t\t\t\trecord[key] = value;\n\t\t\t}\n\t\t}\n\n\t\treturn record;\n\t}\n\n\tprivate extractValue(node: t.Node): unknown {\n\t\tif (t.isStringLiteral(node)) {\n\t\t\treturn node.value;\n\t\t}\n\t\tif (t.isNumericLiteral(node)) {\n\t\t\treturn node.value;\n\t\t}\n\t\tif (t.isBooleanLiteral(node)) {\n\t\t\treturn node.value;\n\t\t}\n\t\tif (t.isNullLiteral(node)) {\n\t\t\treturn null;\n\t\t}\n\t\tif (t.isArrayExpression(node)) {\n\t\t\treturn node.elements.map((el) =>\n\t\t\t\tel && !t.isSpreadElement(el) ? this.extractValue(el) : null\n\t\t\t);\n\t\t}\n\t\tif (t.isObjectExpression(node)) {\n\t\t\treturn this.objectExpressionToRecord(node);\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n","import * as t from '@babel/types';\nimport { isArrayMethod } from './utils.js';\n\n/**\n * Find LLM call expression in AST node\n */\nexport function findLLMCallExpression(body: t.Node): t.CallExpression | null {\n\tlet found: t.CallExpression | null = null;\n\n\tconst visit = (node: t.Node) => {\n\t\tif (found) return;\n\n\t\tif (t.isAwaitExpression(node) && t.isCallExpression(node.argument)) {\n\t\t\tconst call = node.argument;\n\t\t\tif (t.isMemberExpression(call.callee)) {\n\t\t\t\tfound = call;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tObject.keys(node).forEach((key) => {\n\t\t\tconst value = (node as any)[key];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\tvisit(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\tvisit(value);\n\t\t\t}\n\t\t});\n\t};\n\n\tvisit(body);\n\treturn found;\n}\n\n/**\n * Get array method name from call expression\n */\nexport function getArrayMethodName(node: t.CallExpression): string | null {\n\tconst arrayMethods = ['map', 'forEach', 'filter', 'reduce', 'find', 'some', 'every', 'flatMap'];\n\tfor (const method of arrayMethods) {\n\t\tif (isArrayMethod(node, method)) {\n\t\t\treturn method;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Get runtime method name for array method\n */\nexport function getRuntimeMethodName(arrayMethod: string): string | null {\n\tconst mapping: Record<string, string> = {\n\t\tmap: 'resumableMap',\n\t\tforEach: 'resumableForEach',\n\t\tfilter: 'resumableFilter',\n\t\treduce: 'resumableReduce',\n\t\tfind: 'resumableFind',\n\t\tsome: 'resumableSome',\n\t\tevery: 'resumableEvery',\n\t\tflatMap: 'resumableFlatMap',\n\t};\n\n\treturn mapping[arrayMethod] || null;\n}\n\n/**\n * Check if method can use batch parallel optimization\n */\nexport function canUseBatchParallel(methodName: string): boolean {\n\treturn ['map', 'forEach', 'filter', 'find', 'some', 'every'].includes(methodName);\n}\n","import * as t from '@babel/types';\nimport { generateUniqueId } from '../runtime/context.js';\nimport { containsAwait, extractForOfParamName } from './utils.js';\nimport { BatchOptimizer } from './batch-optimizer.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport { findLLMCallExpression } from './array-transformer-utils.js';\n\nexport class LoopTransformer {\n\tprivate transformCount = 0;\n\tprivate batchOptimizer: BatchOptimizer;\n\tprivate batchDetector: BatchParallelDetector;\n\tprivate batchSizeThreshold: number;\n\n\tconstructor(batchSizeThreshold: number = 10) {\n\t\tthis.batchOptimizer = new BatchOptimizer();\n\t\tthis.batchDetector = new BatchParallelDetector();\n\t\tthis.batchSizeThreshold = batchSizeThreshold;\n\t}\n\n\ttransformForOfLoop(path: any): boolean {\n\t\tconst node = path.node as t.ForOfStatement;\n\n\t\tif (!containsAwait(node.body)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst batchResult = this.batchOptimizer.canBatchForOfLoop(node);\n\n\t\tif (batchResult.canBatch) {\n\t\t\tconst decision = this.batchOptimizer.makeSmartBatchDecision(\n\t\t\t\t'for...of',\n\t\t\t\tbatchResult,\n\t\t\t\tnode.right,\n\t\t\t\tthis.batchSizeThreshold\n\t\t\t);\n\n\t\t\tif (decision.shouldBatch) {\n\t\t\t\treturn this.transformForOfToBatch(path, node);\n\t\t\t}\n\t\t}\n\n\t\treturn this.transformForOfToSequential(path, node);\n\t}\n\n\t/**\n\t * Transform simple for...of to batch parallel\n\t */\n\tprivate transformForOfToBatch(path: any, node: t.ForOfStatement): boolean {\n\t\tconst loopId = generateUniqueId('for_of_batch');\n\t\tconst right = node.right;\n\t\tconst paramName = extractForOfParamName(node.left);\n\n\t\tconst llmCall = findLLMCallExpression(node.body);\n\t\tif (!llmCall) {\n\t\t\treturn this.transformForOfToSequential(path, node);\n\t\t}\n\n\t\tconst callInfo = this.batchDetector.extractCallInfo(llmCall);\n\t\tif (!callInfo) {\n\t\t\treturn this.transformForOfToSequential(path, node);\n\t\t}\n\n\t\tconst payloadNode = this.batchDetector.extractPayloadNode(llmCall);\n\t\tif (!payloadNode) {\n\t\t\treturn this.transformForOfToSequential(path, node);\n\t\t}\n\n\t\tconst batchCallsArray = t.callExpression(t.memberExpression(right, t.identifier('map')), [\n\t\t\tt.arrowFunctionExpression(\n\t\t\t\t[t.identifier(paramName)],\n\t\t\t\tt.objectExpression([\n\t\t\t\t\tt.objectProperty(t.identifier('type'), t.stringLiteral(callInfo.type)),\n\t\t\t\t\tt.objectProperty(t.identifier('operation'), t.stringLiteral(callInfo.operation)),\n\t\t\t\t\tt.objectProperty(t.identifier('payload'), payloadNode),\n\t\t\t\t])\n\t\t\t),\n\t\t]);\n\n\t\tconst batchCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier('batchParallel')),\n\t\t\t\t[batchCallsArray, t.stringLiteral(loopId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(t.expressionStatement(batchCall));\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Transform for...of to sequential with checkpoints (fallback)\n\t */\n\tprivate transformForOfToSequential(path: any, node: t.ForOfStatement): boolean {\n\t\tconst loopId = generateUniqueId('for_of');\n\t\tconst right = node.right;\n\t\tconst paramName = extractForOfParamName(node.left);\n\n\t\tconst bodyStatements = t.isBlockStatement(node.body) ? node.body.body : [node.body];\n\n\t\tconst callbackFn = t.arrowFunctionExpression(\n\t\t\t[t.identifier(paramName), t.identifier('__index')],\n\t\t\tt.blockStatement(bodyStatements),\n\t\t\ttrue\n\t\t);\n\n\t\tconst runtimeCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier('resumableForOf')),\n\t\t\t\t[right, callbackFn, t.stringLiteral(loopId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(t.expressionStatement(runtimeCall));\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\ttransformWhileLoop(path: any): boolean {\n\t\tconst node = path.node as t.WhileStatement;\n\n\t\tif (!containsAwait(node.body)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst loopId = generateUniqueId('while');\n\n\t\tconst conditionFn = t.arrowFunctionExpression([], node.test, false);\n\n\t\tconst bodyStatements = t.isBlockStatement(node.body) ? node.body.body : [node.body];\n\n\t\tconst bodyFn = t.arrowFunctionExpression(\n\t\t\t[t.identifier('__iteration')],\n\t\t\tt.blockStatement(bodyStatements),\n\t\t\ttrue\n\t\t);\n\n\t\tconst runtimeCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier('resumableWhile')),\n\t\t\t\t[conditionFn, bodyFn, t.stringLiteral(loopId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(t.expressionStatement(runtimeCall));\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\ttransformForLoop(path: any): boolean {\n\t\tconst node = path.node as t.ForStatement;\n\n\t\tif (!containsAwait(node.body)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!node.init || !node.test || !node.update) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst loopId = generateUniqueId('for');\n\n\t\tlet initValue: t.Expression = t.numericLiteral(0);\n\t\tlet loopVar = '__i';\n\n\t\tif (t.isVariableDeclaration(node.init)) {\n\t\t\tconst decl = node.init.declarations[0];\n\t\t\tif (decl && t.isIdentifier(decl.id) && decl.init) {\n\t\t\t\tloopVar = decl.id.name;\n\t\t\t\tinitValue = decl.init;\n\t\t\t}\n\t\t}\n\n\t\tconst conditionFn = t.arrowFunctionExpression([t.identifier(loopVar)], node.test, false);\n\n\t\tconst bodyStatements = t.isBlockStatement(node.body) ? node.body.body : [node.body];\n\n\t\tconst bodyFn = t.arrowFunctionExpression(\n\t\t\t[t.identifier(loopVar)],\n\t\t\tt.blockStatement(bodyStatements),\n\t\t\ttrue\n\t\t);\n\n\t\tlet incrementFn: t.Expression;\n\t\tif (t.isUpdateExpression(node.update)) {\n\t\t\tif (node.update.operator === '++') {\n\t\t\t\tincrementFn = t.arrowFunctionExpression(\n\t\t\t\t\t[t.identifier(loopVar)],\n\t\t\t\t\tt.binaryExpression('+', t.identifier(loopVar), t.numericLiteral(1)),\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t} else if (node.update.operator === '--') {\n\t\t\t\tincrementFn = t.arrowFunctionExpression(\n\t\t\t\t\t[t.identifier(loopVar)],\n\t\t\t\t\tt.binaryExpression('-', t.identifier(loopVar), t.numericLiteral(1)),\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst runtimeCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier('resumableForLoop')),\n\t\t\t\t[initValue, conditionFn, incrementFn, bodyFn, t.stringLiteral(loopId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(t.expressionStatement(runtimeCall));\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\tgetTransformCount(): number {\n\t\treturn this.transformCount;\n\t}\n\n\tresetTransformCount(): void {\n\t\tthis.transformCount = 0;\n\t}\n}\n","import * as t from '@babel/types';\n\n/**\n * Wrap batch result with post-processing for filter()\n * Filter must return filtered ITEMS, not boolean results\n */\nexport function wrapFilterResult(\n\tbatchCall: t.AwaitExpression,\n\tarray: t.Expression,\n\tmethodId: string\n): t.Expression {\n\tconst resultsVar = `__filter_results_${methodId}`;\n\tconst indexVar = `__i_${methodId}`;\n\tconst arrayClone = t.cloneNode(array, true);\n\n\treturn t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.arrowFunctionExpression(\n\t\t\t\t[],\n\t\t\t\tt.blockStatement([\n\t\t\t\t\tt.variableDeclaration('const', [\n\t\t\t\t\t\tt.variableDeclarator(t.identifier(resultsVar), batchCall.argument),\n\t\t\t\t\t]),\n\t\t\t\t\tt.returnStatement(\n\t\t\t\t\t\tt.callExpression(t.memberExpression(arrayClone, t.identifier('filter')), [\n\t\t\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t\t\t[t.identifier('_'), t.identifier(indexVar)],\n\t\t\t\t\t\t\t\tt.callExpression(t.identifier('Boolean'), [\n\t\t\t\t\t\t\t\t\tt.memberExpression(t.identifier(resultsVar), t.identifier(indexVar), true),\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t\ttrue\n\t\t\t),\n\t\t\t[]\n\t\t)\n\t);\n}\n\n/**\n * Wrap batch result with post-processing for find()\n * Find must return first matching ITEM (not boolean)\n */\nexport function wrapFindResult(\n\tbatchCall: t.AwaitExpression,\n\tarray: t.Expression,\n\tmethodId: string\n): t.Expression {\n\tconst resultsVar = `__find_results_${methodId}`;\n\tconst arrayClone = t.cloneNode(array, true);\n\n\treturn t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.arrowFunctionExpression(\n\t\t\t\t[],\n\t\t\t\tt.blockStatement([\n\t\t\t\t\tt.variableDeclaration('const', [\n\t\t\t\t\t\tt.variableDeclarator(t.identifier(resultsVar), batchCall.argument),\n\t\t\t\t\t]),\n\t\t\t\t\tt.returnStatement(\n\t\t\t\t\t\tt.callExpression(t.memberExpression(arrayClone, t.identifier('find')), [\n\t\t\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t\t\t[t.identifier('_'), t.identifier('__i')],\n\t\t\t\t\t\t\t\tt.callExpression(t.identifier('Boolean'), [\n\t\t\t\t\t\t\t\t\tt.memberExpression(t.identifier(resultsVar), t.identifier('__i'), true),\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t\ttrue\n\t\t\t),\n\t\t\t[]\n\t\t)\n\t);\n}\n\n/**\n * Wrap batch result with post-processing for some()\n * Some must return boolean: true if ANY result is truthy\n */\nexport function wrapSomeResult(batchCall: t.AwaitExpression, methodId: string): t.Expression {\n\tconst resultsVar = `__some_results_${methodId}`;\n\n\treturn t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.arrowFunctionExpression(\n\t\t\t\t[],\n\t\t\t\tt.blockStatement([\n\t\t\t\t\tt.variableDeclaration('const', [\n\t\t\t\t\t\tt.variableDeclarator(t.identifier(resultsVar), batchCall.argument),\n\t\t\t\t\t]),\n\t\t\t\t\tt.returnStatement(\n\t\t\t\t\t\tt.callExpression(t.memberExpression(t.identifier(resultsVar), t.identifier('some')), [\n\t\t\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t\t\t[t.identifier('r')],\n\t\t\t\t\t\t\t\tt.callExpression(t.identifier('Boolean'), [t.identifier('r')])\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t\ttrue\n\t\t\t),\n\t\t\t[]\n\t\t)\n\t);\n}\n\n/**\n * Wrap batch result with post-processing for every()\n * Every must return boolean: true if ALL results are truthy\n */\nexport function wrapEveryResult(batchCall: t.AwaitExpression, methodId: string): t.Expression {\n\tconst resultsVar = `__every_results_${methodId}`;\n\n\treturn t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.arrowFunctionExpression(\n\t\t\t\t[],\n\t\t\t\tt.blockStatement([\n\t\t\t\t\tt.variableDeclaration('const', [\n\t\t\t\t\t\tt.variableDeclarator(t.identifier(resultsVar), batchCall.argument),\n\t\t\t\t\t]),\n\t\t\t\t\tt.returnStatement(\n\t\t\t\t\t\tt.callExpression(t.memberExpression(t.identifier(resultsVar), t.identifier('every')), [\n\t\t\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t\t\t[t.identifier('r')],\n\t\t\t\t\t\t\t\tt.callExpression(t.identifier('Boolean'), [t.identifier('r')])\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t\ttrue\n\t\t\t),\n\t\t\t[]\n\t\t)\n\t);\n}\n\n/**\n * Wrap batch result if method needs post-processing\n */\nexport function wrapBatchResultIfNeeded(\n\tbatchCall: t.AwaitExpression,\n\tmethodName: string,\n\tarray: t.Expression,\n\tmethodId: string\n): t.Expression {\n\tswitch (methodName) {\n\t\tcase 'filter':\n\t\t\treturn wrapFilterResult(batchCall, array, methodId);\n\t\tcase 'find':\n\t\t\treturn wrapFindResult(batchCall, array, methodId);\n\t\tcase 'some':\n\t\t\treturn wrapSomeResult(batchCall, methodId);\n\t\tcase 'every':\n\t\t\treturn wrapEveryResult(batchCall, methodId);\n\t\tcase 'forEach':\n\t\t\treturn batchCall;\n\t\tdefault:\n\t\t\treturn batchCall;\n\t}\n}\n","import * as t from '@babel/types';\nimport { generateUniqueId } from '../runtime/context.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport { findLLMCallExpression } from './array-transformer-utils.js';\nimport { wrapBatchResultIfNeeded } from './array-transformer-wrappers.js';\n\n/**\n * Extract batch call info from callback\n */\nexport function extractBatchCallInfo(\n\tcallback: t.Function,\n\tbatchDetector: BatchParallelDetector\n): {\n\tmapperFunction: t.ArrowFunctionExpression;\n} | null {\n\tconst paramName = callback.params[0];\n\tif (!t.isIdentifier(paramName)) {\n\t\treturn null;\n\t}\n\n\tconst param = paramName.name;\n\n\tconst llmCall = findLLMCallExpression(callback.body);\n\tif (!llmCall) {\n\t\treturn null;\n\t}\n\n\tconst callInfo = batchDetector.extractCallInfo(llmCall);\n\tif (!callInfo) {\n\t\treturn null;\n\t}\n\n\tconst payloadNode = batchDetector.extractPayloadNode(llmCall);\n\tif (!payloadNode) {\n\t\treturn null;\n\t}\n\n\tconst mapperFunction = t.arrowFunctionExpression(\n\t\t[t.identifier(param)],\n\t\tt.objectExpression([\n\t\t\tt.objectProperty(t.identifier('type'), t.stringLiteral(callInfo.type)),\n\t\t\tt.objectProperty(t.identifier('operation'), t.stringLiteral(callInfo.operation)),\n\t\t\tt.objectProperty(t.identifier('payload'), payloadNode),\n\t\t])\n\t);\n\n\treturn { mapperFunction };\n}\n\n/**\n * Transform simple array method to batch parallel execution\n */\nexport function transformToBatchParallel(\n\tpath: any,\n\tnode: t.CallExpression,\n\tmethodName: string,\n\tcallback: t.Function,\n\tbatchDetector: BatchParallelDetector,\n\tonTransform: () => void,\n\tfallbackTransform: () => boolean\n): boolean {\n\tconst methodId = generateUniqueId(`${methodName}_batch`);\n\tconst array = (node.callee as t.MemberExpression).object;\n\n\tconst callInfo = extractBatchCallInfo(callback, batchDetector);\n\tif (!callInfo) {\n\t\treturn fallbackTransform();\n\t}\n\n\tconst batchCallsArray = t.callExpression(t.memberExpression(array, t.identifier('map')), [\n\t\tcallInfo.mapperFunction,\n\t]);\n\n\tconst batchCall = t.awaitExpression(\n\t\tt.callExpression(t.memberExpression(t.identifier('__runtime'), t.identifier('batchParallel')), [\n\t\t\tbatchCallsArray,\n\t\t\tt.stringLiteral(methodId),\n\t\t])\n\t);\n\n\tconst finalCall = wrapBatchResultIfNeeded(batchCall, methodName, array, methodId);\n\n\tpath.replaceWith(finalCall);\n\tonTransform();\n\treturn true;\n}\n","import * as t from '@babel/types';\nimport { generateUniqueId } from '../runtime/context.js';\nimport { getRuntimeMethodName } from './array-transformer-utils.js';\n\n/**\n * Transform to sequential execution with checkpoints (fallback)\n */\nexport function transformToSequential(\n\tpath: any,\n\tnode: t.CallExpression,\n\tmethodName: string,\n\tcallback: t.Function,\n\tonTransform: () => void\n): boolean {\n\tconst runtimeMethod = getRuntimeMethodName(methodName);\n\tif (!runtimeMethod) {\n\t\treturn false;\n\t}\n\n\tconst methodId = generateUniqueId(methodName);\n\tconst array = (node.callee as t.MemberExpression).object;\n\tconst args: t.Expression[] = [array, callback as t.Expression, t.stringLiteral(methodId)];\n\n\tif (methodName === 'reduce' && node.arguments[1]) {\n\t\targs.push(node.arguments[1] as t.Expression);\n\t}\n\n\tconst runtimeCall = t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier(runtimeMethod)),\n\t\t\targs\n\t\t)\n\t);\n\n\tpath.replaceWith(runtimeCall);\n\tonTransform();\n\treturn true;\n}\n","import * as t from '@babel/types';\nimport _traverse from '@babel/traverse';\nconst traverse = typeof (_traverse as any).default === 'function' ? (_traverse as any).default : _traverse;\nimport { generateUniqueId } from '../runtime/context.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport { findLLMCallExpression } from './array-transformer-utils.js';\n\n/**\n * Transform array method to batch LLM calls while preserving callback logic.\n * \n * This creates a two-step transformation:\n * 1. Batch all LLM calls in parallel\n * 2. Reconstruct objects using the batched results \n */\nexport function transformToBatchWithReconstruction(\n\tpath: any,\n\tnode: t.CallExpression,\n\tmethodName: string,\n\tcallback: t.Function,\n\tbatchDetector: BatchParallelDetector,\n\tonTransform: () => void\n): boolean {\n\tif (methodName !== 'map') {\n\t\treturn false;\n\t}\n\n\tconst paramName = callback.params[0];\n\tif (!t.isIdentifier(paramName)) {\n\t\treturn false;\n\t}\n\n\tconst param = paramName.name;\n\tconst array = (node.callee as t.MemberExpression).object;\n\n\tconst llmCall = findLLMCallExpression(callback.body);\n\tif (!llmCall) {\n\t\treturn false;\n\t}\n\n\tconst callInfo = batchDetector.extractCallInfo(llmCall);\n\tif (!callInfo) {\n\t\treturn false;\n\t}\n\n\tconst payloadNode = batchDetector.extractPayloadNode(llmCall);\n\tif (!payloadNode) {\n\t\treturn false;\n\t}\n\n\tconst methodId = generateUniqueId(`${methodName}_batch_reconstruct`);\n\tconst resultsVar = `__batch_results_${methodId.replace(/[^a-zA-Z0-9]/g, '_')}`;\n\tconst indexVar = '__idx';\n\n\tconst payloadMapper = t.arrowFunctionExpression(\n\t\t[t.identifier(param)],\n\t\tt.objectExpression([\n\t\t\tt.objectProperty(t.identifier('type'), t.stringLiteral(callInfo.type)),\n\t\t\tt.objectProperty(t.identifier('operation'), t.stringLiteral(callInfo.operation)),\n\t\t\tt.objectProperty(t.identifier('payload'), t.cloneNode(payloadNode, true)),\n\t\t])\n\t);\n\n\tconst clonedBody = t.cloneNode(callback.body, true);\n\t\n\tconst resultAccess = t.memberExpression(\n\t\tt.identifier(resultsVar),\n\t\tt.identifier(indexVar),\n\t\ttrue\n\t);\n\n\tlet traversableNode: t.Statement;\n\tif (t.isBlockStatement(clonedBody)) {\n\t\ttraversableNode = t.functionDeclaration(\n\t\t\tt.identifier('__temp'),\n\t\t\t[],\n\t\t\tclonedBody\n\t\t);\n\t} else {\n\t\ttraversableNode = t.expressionStatement(clonedBody as t.Expression);\n\t}\n\n\tlet replaced = false;\n\ttraverse(t.file(t.program([traversableNode])), {\n\t\tAwaitExpression(awaitPath: any) {\n\t\t\tif (replaced) return;\n\t\t\tconst arg = awaitPath.node.argument;\n\t\t\tif (t.isCallExpression(arg)) {\n\t\t\t\tconst info = batchDetector.extractCallInfo(arg);\n\t\t\t\tif (info && info.type === callInfo.type && info.operation === callInfo.operation) {\n\t\t\t\t\tawaitPath.replaceWith(resultAccess);\n\t\t\t\t\treplaced = true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tnoScope: true,\n\t});\n\n\tif (!replaced) {\n\t\treturn false;\n\t}\n\n\tlet reconstructBody: t.BlockStatement | t.Expression;\n\tif (t.isBlockStatement(clonedBody)) {\n\t\treconstructBody = clonedBody;\n\t} else {\n\t\treconstructBody = clonedBody as t.Expression;\n\t}\n\n\tconst reconstructMapper = t.arrowFunctionExpression(\n\t\t[t.identifier(param), t.identifier(indexVar)],\n\t\treconstructBody\n\t);\n\treconstructMapper.async = false;\n\n\tconst batchCall = t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier('batchParallel')),\n\t\t\t[\n\t\t\t\tt.callExpression(\n\t\t\t\t\tt.memberExpression(t.cloneNode(array, true), t.identifier('map')),\n\t\t\t\t\t[payloadMapper]\n\t\t\t\t),\n\t\t\t\tt.stringLiteral(methodId),\n\t\t\t]\n\t\t)\n\t);\n\n\tconst resultsDeclaration = t.variableDeclaration('const', [\n\t\tt.variableDeclarator(t.identifier(resultsVar), batchCall),\n\t]);\n\n\tconst reconstructCall = t.callExpression(\n\t\tt.memberExpression(t.cloneNode(array, true), t.identifier('map')),\n\t\t[reconstructMapper]\n\t);\n\n\tconst iife = t.callExpression(\n\t\tt.arrowFunctionExpression(\n\t\t\t[],\n\t\t\tt.blockStatement([\n\t\t\t\tresultsDeclaration,\n\t\t\t\tt.returnStatement(reconstructCall),\n\t\t\t]),\n\t\t\ttrue\n\t\t),\n\t\t[]\n\t);\n\n\tconst awaitIife = t.awaitExpression(iife);\n\n\tpath.replaceWith(awaitIife);\n\tonTransform();\n\treturn true;\n}\n\n","import * as t from '@babel/types';\nimport { BatchOptimizer } from './batch-optimizer.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport {\n\tgetArrayMethodName,\n\tcanUseBatchParallel,\n\tfindLLMCallExpression,\n} from './array-transformer-utils.js';\nimport { transformToBatchParallel } from './array-transformer-batch.js';\nimport { transformToSequential } from './array-transformer-sequential.js';\nimport { transformToBatchWithReconstruction } from './array-transformer-batch-reconstruct.js';\n\nexport class ArrayTransformer {\n\tprivate transformCount = 0;\n\tprivate batchOptimizer: BatchOptimizer;\n\tprivate batchDetector: BatchParallelDetector;\n\tprivate batchSizeThreshold: number;\n\n\tconstructor(batchSizeThreshold: number = 10) {\n\t\tthis.batchOptimizer = new BatchOptimizer();\n\t\tthis.batchDetector = new BatchParallelDetector();\n\t\tthis.batchSizeThreshold = batchSizeThreshold;\n\t}\n\n\ttransformArrayMethod(path: any): boolean {\n\t\tconst node = path.node as t.CallExpression;\n\n\t\tconst methodName = getArrayMethodName(node);\n\t\tif (!methodName) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst callback = node.arguments[0];\n\t\tif (!callback || !t.isFunction(callback) || !callback.async) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst batchResult = this.batchOptimizer.canBatchArrayMethod(callback);\n\n\t\tif (!batchResult.canBatch && methodName === 'map') {\n\t\t\tconst reason = batchResult.reason || '';\n\t\t\tconst hasObjectOrArrayReturn =\n\t\t\t\treason.includes('object expression') || reason.includes('array expression');\n\n\t\t\tif (hasObjectOrArrayReturn) {\n\t\t\t\tconst llmCall = findLLMCallExpression(callback.body);\n\t\t\t\tif (llmCall) {\n\t\t\t\t\tconst success = transformToBatchWithReconstruction(\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmethodName,\n\t\t\t\t\t\tcallback,\n\t\t\t\t\t\tthis.batchDetector,\n\t\t\t\t\t\t() => this.transformCount++\n\t\t\t\t\t);\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (batchResult.canBatch && canUseBatchParallel(methodName)) {\n\t\t\tconst array = (node.callee as t.MemberExpression).object;\n\t\t\tconst decision = this.batchOptimizer.makeSmartBatchDecision(\n\t\t\t\tmethodName,\n\t\t\t\tbatchResult,\n\t\t\t\tarray,\n\t\t\t\tthis.batchSizeThreshold\n\t\t\t);\n\n\t\t\tif (decision.shouldBatch) {\n\t\t\t\treturn transformToBatchParallel(\n\t\t\t\t\tpath,\n\t\t\t\t\tnode,\n\t\t\t\t\tmethodName,\n\t\t\t\t\tcallback,\n\t\t\t\t\tthis.batchDetector,\n\t\t\t\t\t() => this.transformCount++,\n\t\t\t\t\t() => this.doTransformToSequential(path, node, methodName, callback)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn this.doTransformToSequential(path, node, methodName, callback);\n\t}\n\n\tprivate doTransformToSequential(\n\t\tpath: any,\n\t\tnode: t.CallExpression,\n\t\tmethodName: string,\n\t\tcallback: t.Function\n\t): boolean {\n\t\treturn transformToSequential(path, node, methodName, callback, () => this.transformCount++);\n\t}\n\n\tgetTransformCount(): number {\n\t\treturn this.transformCount;\n\t}\n\n\tresetTransformCount(): void {\n\t\tthis.transformCount = 0;\n\t}\n}\n","/**\n * Runtime Function Names\n *\n * These constants define the names of runtime functions used by the ATP compiler\n * when transforming code. They must match the implementations provided by the server.\n */\n\n/**\n * Promise-related runtime functions\n */\nexport const RuntimeFunction = {\n\t// Promise operations\n\tRESUMABLE_PROMISE_ALL: 'resumablePromiseAll',\n\tRESUMABLE_PROMISE_ALL_SETTLED: 'resumablePromiseAllSettled',\n\tBATCH_PARALLEL: 'batchParallel',\n\n\t// Loop operations\n\tRESUMABLE_FOR_OF: 'resumableForOf',\n\tRESUMABLE_FOR_LOOP: 'resumableForLoop',\n\tRESUMABLE_WHILE: 'resumableWhile',\n\n\t// Array method operations\n\tRESUMABLE_MAP: 'resumableMap',\n\tRESUMABLE_FOR_EACH: 'resumableForEach',\n\tRESUMABLE_FILTER: 'resumableFilter',\n\tRESUMABLE_REDUCE: 'resumableReduce',\n\tRESUMABLE_FIND: 'resumableFind',\n\tRESUMABLE_SOME: 'resumableSome',\n\tRESUMABLE_EVERY: 'resumableEvery',\n\tRESUMABLE_FLAT_MAP: 'resumableFlatMap',\n} as const;\n\nexport type RuntimeFunctionType = (typeof RuntimeFunction)[keyof typeof RuntimeFunction];\n\n/**\n * Runtime functions that must execute inside the isolate (cannot cross boundary).\n * These receive Promise arguments or callback functions that can't be cloned.\n *\n * NOTE: BATCH_PARALLEL is NOT included because it receives serializable callback\n * descriptors and needs to communicate with the host for callback execution.\n */\nexport const IN_ISOLATE_RUNTIME_FUNCTIONS: readonly RuntimeFunctionType[] = [\n\tRuntimeFunction.RESUMABLE_PROMISE_ALL,\n\tRuntimeFunction.RESUMABLE_PROMISE_ALL_SETTLED,\n\tRuntimeFunction.RESUMABLE_FOR_OF,\n\tRuntimeFunction.RESUMABLE_FOR_LOOP,\n\tRuntimeFunction.RESUMABLE_WHILE,\n\tRuntimeFunction.RESUMABLE_MAP,\n\tRuntimeFunction.RESUMABLE_FOR_EACH,\n\tRuntimeFunction.RESUMABLE_FILTER,\n\tRuntimeFunction.RESUMABLE_REDUCE,\n\tRuntimeFunction.RESUMABLE_FIND,\n\tRuntimeFunction.RESUMABLE_SOME,\n\tRuntimeFunction.RESUMABLE_EVERY,\n\tRuntimeFunction.RESUMABLE_FLAT_MAP,\n];\n\n/**\n * Check if a runtime function must execute inside the isolate\n */\nexport function isInIsolateRuntimeFunction(name: string): boolean {\n\treturn IN_ISOLATE_RUNTIME_FUNCTIONS.includes(name as RuntimeFunctionType);\n}\n","import * as t from '@babel/types';\nimport { generateUniqueId } from '../runtime/context.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport { RuntimeFunction } from '../runtime/runtime-functions.js';\nimport type { BatchCallInfo } from '../types.js';\n\nconst TOOL_OPERATION_CALL = 'call';\n\nexport class PromiseTransformer {\n\tprivate transformCount = 0;\n\tprivate batchDetector: BatchParallelDetector;\n\tprivate enableBatchParallel: boolean;\n\n\tconstructor(enableBatchParallel = true) {\n\t\tthis.batchDetector = new BatchParallelDetector();\n\t\tthis.enableBatchParallel = enableBatchParallel;\n\t}\n\n\ttransformPromiseAll(path: any): boolean {\n\t\tconst node = path.node as t.CallExpression;\n\n\t\tif (!this.isPromiseAll(node)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst arrayArg = node.arguments[0];\n\n\t\tif (this.enableBatchParallel && this.batchDetector.canBatch(node)) {\n\t\t\treturn this.transformToBatchParallel(path, node);\n\t\t}\n\n\t\tif (t.isArrayExpression(arrayArg)) {\n\t\t\treturn this.transformToSequential(path, node);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\ttransformPromiseAllSettled(path: any): boolean {\n\t\tconst node = path.node as t.CallExpression;\n\n\t\tif (!this.isPromiseAllSettled(node)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst arrayArg = node.arguments[0];\n\n\t\tif (t.isArrayExpression(arrayArg)) {\n\t\t\tconst parallelId = generateUniqueId('allSettled');\n\n\t\t\tconst runtimeCall = t.awaitExpression(\n\t\t\t\tt.callExpression(\n\t\t\t\t\tt.memberExpression(\n\t\t\t\t\t\tt.identifier('__runtime'),\n\t\t\t\t\t\tt.identifier(RuntimeFunction.RESUMABLE_PROMISE_ALL_SETTLED)\n\t\t\t\t\t),\n\t\t\t\t\t[arrayArg, t.stringLiteral(parallelId)]\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tpath.replaceWith(runtimeCall);\n\t\t\tthis.transformCount++;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate transformToBatchParallel(path: any, node: t.CallExpression): boolean {\n\t\tconst arrayArg = node.arguments[0];\n\t\tif (!t.isArrayExpression(arrayArg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst batchId = generateUniqueId('batch');\n\n\t\tconst batchCallsArray = t.arrayExpression(\n\t\t\tarrayArg.elements.map((el) => {\n\t\t\t\tif (!el || t.isSpreadElement(el)) {\n\t\t\t\t\treturn t.nullLiteral();\n\t\t\t\t}\n\n\t\t\t\tlet callNode: t.Node = el;\n\t\t\t\tif (t.isAwaitExpression(callNode)) {\n\t\t\t\t\tcallNode = callNode.argument;\n\t\t\t\t}\n\n\t\t\t\tif (!t.isCallExpression(callNode) || !t.isMemberExpression(callNode.callee)) {\n\t\t\t\t\treturn t.nullLiteral();\n\t\t\t\t}\n\n\t\t\t\tconst callInfo = this.batchDetector.extractCallInfo(callNode);\n\t\t\t\tif (!callInfo) {\n\t\t\t\t\treturn t.nullLiteral();\n\t\t\t\t}\n\n\t\t\t\tconst payloadArg = callNode.arguments[0];\n\t\t\t\treturn this.buildBatchCallObject(callInfo, payloadArg);\n\t\t\t})\n\t\t);\n\n\t\tconst runtimeCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier(RuntimeFunction.BATCH_PARALLEL)),\n\t\t\t\t[batchCallsArray, t.stringLiteral(batchId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(runtimeCall);\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Builds the AST for a batch call object.\n\t * For client tools, wraps payload with toolName and input structure.\n\t */\n\tprivate buildBatchCallObject(\n\t\tcallInfo: BatchCallInfo,\n\t\tpayloadArg: t.Node | undefined\n\t): t.ObjectExpression {\n\t\tconst payloadExpr =\n\t\t\tpayloadArg && t.isExpression(payloadArg) ? payloadArg : t.objectExpression([]);\n\n\t\tif (callInfo.type === 'tool') {\n\t\t\t// Client tools: operation is always 'call', payload contains toolName and input\n\t\t\treturn t.objectExpression([\n\t\t\t\tt.objectProperty(t.identifier('type'), t.stringLiteral(callInfo.type)),\n\t\t\t\tt.objectProperty(t.identifier('operation'), t.stringLiteral(TOOL_OPERATION_CALL)),\n\t\t\t\tt.objectProperty(\n\t\t\t\t\tt.identifier('payload'),\n\t\t\t\t\tt.objectExpression([\n\t\t\t\t\t\tt.objectProperty(t.identifier('toolName'), t.stringLiteral(callInfo.operation)),\n\t\t\t\t\t\tt.objectProperty(t.identifier('input'), payloadExpr),\n\t\t\t\t\t])\n\t\t\t\t),\n\t\t\t]);\n\t\t}\n\n\t\t// Standard services (llm, approval, embedding)\n\t\treturn t.objectExpression([\n\t\t\tt.objectProperty(t.identifier('type'), t.stringLiteral(callInfo.type)),\n\t\t\tt.objectProperty(t.identifier('operation'), t.stringLiteral(callInfo.operation)),\n\t\t\tt.objectProperty(t.identifier('payload'), payloadExpr),\n\t\t]);\n\t}\n\n\tprivate transformToSequential(path: any, node: t.CallExpression): boolean {\n\t\tconst arrayArg = node.arguments[0];\n\t\tif (!t.isArrayExpression(arrayArg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst parallelId = generateUniqueId('parallel');\n\n\t\tconst runtimeCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier(RuntimeFunction.RESUMABLE_PROMISE_ALL)),\n\t\t\t\t[arrayArg, t.stringLiteral(parallelId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(runtimeCall);\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\tprivate payloadToExpression(payload: Record<string, unknown>): t.ObjectExpression {\n\t\tconst properties: t.ObjectProperty[] = [];\n\n\t\tfor (const [key, value] of Object.entries(payload)) {\n\t\t\tproperties.push(t.objectProperty(t.identifier(key), this.valueToExpression(value)));\n\t\t}\n\n\t\treturn t.objectExpression(properties);\n\t}\n\n\tprivate valueToExpression(value: unknown): t.Expression {\n\t\tif (typeof value === 'string') {\n\t\t\treturn t.stringLiteral(value);\n\t\t}\n\t\tif (typeof value === 'number') {\n\t\t\treturn t.numericLiteral(value);\n\t\t}\n\t\tif (typeof value === 'boolean') {\n\t\t\treturn t.booleanLiteral(value);\n\t\t}\n\t\tif (value === null) {\n\t\t\treturn t.nullLiteral();\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\treturn t.arrayExpression(value.map((v) => this.valueToExpression(v)));\n\t\t}\n\t\tif (typeof value === 'object') {\n\t\t\treturn this.payloadToExpression(value as Record<string, unknown>);\n\t\t}\n\n\t\treturn t.identifier('undefined');\n\t}\n\n\tprivate isPromiseAll(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'all' })\n\t\t);\n\t}\n\n\tprivate isPromiseAllSettled(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'allSettled' })\n\t\t);\n\t}\n\n\tgetTransformCount(): number {\n\t\treturn this.transformCount;\n\t}\n\n\tresetTransformCount(): void {\n\t\tthis.transformCount = 0;\n\t}\n}\n","import type { BatchCallInfo } from '../types.js';\n\nexport enum CheckpointOperation {\n\tSAVE = 'save',\n\tLOAD = 'load',\n\tCLEAR = 'clear',\n}\n\nexport class BatchPauseExecutionError extends Error {\n\tpublic readonly calls: BatchCallInfo[];\n\tpublic readonly batchId: string;\n\tpublic readonly sequenceNumber: number;\n\n\tconstructor(calls: BatchCallInfo[], batchId: string, sequenceNumber: number) {\n\t\tsuper(`Batch pause for parallel execution (${calls.length} callbacks)`);\n\t\tthis.name = 'BatchPauseExecutionError';\n\t\tthis.calls = calls;\n\t\tthis.batchId = batchId;\n\t\tthis.sequenceNumber = sequenceNumber;\n\t}\n}\n\nexport class CheckpointError extends Error {\n\tpublic readonly checkpointId: string;\n\tpublic readonly operation: CheckpointOperation;\n\n\tconstructor(message: string, checkpointId: string, operation: CheckpointOperation) {\n\t\tsuper(`Checkpoint ${operation} failed for ${checkpointId}: ${message}`);\n\t\tthis.name = 'CheckpointError';\n\t\tthis.checkpointId = checkpointId;\n\t\tthis.operation = operation;\n\t}\n}\n\nexport class TransformationError extends Error {\n\tpublic readonly code: string;\n\tpublic readonly pattern: string;\n\tpublic readonly location?: { line: number; column: number };\n\n\tconstructor(\n\t\tmessage: string,\n\t\tcode: string,\n\t\tpattern: string,\n\t\tlocation?: { line: number; column: number }\n\t) {\n\t\tconst loc = location ? ` at line ${location.line}:${location.column}` : '';\n\t\tsuper(`Transformation failed for ${pattern}${loc}: ${message}`);\n\t\tthis.name = 'TransformationError';\n\t\tthis.code = code;\n\t\tthis.pattern = pattern;\n\t\tthis.location = location;\n\t}\n}\n\nexport class InfiniteLoopDetectionError extends Error {\n\tpublic readonly loopId: string;\n\tpublic readonly iterationCount: number;\n\n\tconstructor(loopId: string, iterationCount: number) {\n\t\tsuper(\n\t\t\t`Infinite loop detected: ${loopId} exceeded ${iterationCount} iterations without completing`\n\t\t);\n\t\tthis.name = 'InfiniteLoopDetectionError';\n\t\tthis.loopId = loopId;\n\t\tthis.iterationCount = iterationCount;\n\t}\n}\n\nexport function isBatchPauseError(error: unknown): error is BatchPauseExecutionError {\n\treturn error instanceof BatchPauseExecutionError;\n}\n\nexport function isCheckpointError(error: unknown): error is CheckpointError {\n\treturn error instanceof CheckpointError;\n}\n\nexport function isTransformationError(error: unknown): error is TransformationError {\n\treturn error instanceof TransformationError;\n}\n","import { parse } from '@babel/parser';\nimport _traverse from '@babel/traverse';\nconst traverse = (_traverse as any).default || _traverse;\nimport _generate from '@babel/generator';\nconst generate = (_generate as any).default || _generate;\nimport * as t from '@babel/types';\nimport { AsyncIterationDetector } from './detector.js';\nimport { LoopTransformer } from './loop-transformer.js';\nimport { ArrayTransformer } from './array-transformer.js';\nimport { PromiseTransformer } from './promise-transformer.js';\nimport type { TransformResult, CompilerConfig, TransformMetadata } from '../types.js';\nimport { DEFAULT_COMPILER_CONFIG } from '../types.js';\nimport { TransformationError } from '../runtime/errors.js';\nimport { resetIdCounter } from '../runtime/context.js';\nimport type { ICompiler } from '../types/compiler-interface.js';\n\n/**\n * ATP Compiler - Standard compiler for transforming code to support resumability\n * Implements ICompiler interface for consistency and dependency injection support\n */\nexport class ATPCompiler implements ICompiler {\n\tprivate config: CompilerConfig;\n\tprivate detector: AsyncIterationDetector;\n\tprivate loopTransformer: LoopTransformer;\n\tprivate arrayTransformer: ArrayTransformer;\n\tprivate promiseTransformer: PromiseTransformer;\n\n\tconstructor(config: Partial<CompilerConfig> = {}) {\n\t\tthis.config = { ...DEFAULT_COMPILER_CONFIG, ...config };\n\t\tthis.detector = new AsyncIterationDetector();\n\t\tthis.loopTransformer = new LoopTransformer(this.config.batchSizeThreshold);\n\t\tthis.arrayTransformer = new ArrayTransformer(this.config.batchSizeThreshold);\n\t\tthis.promiseTransformer = new PromiseTransformer(this.config.enableBatchParallel);\n\t}\n\n\tdetect(code: string) {\n\t\treturn this.detector.detect(code);\n\t}\n\n\ttransform(code: string): TransformResult {\n\t\tresetIdCounter();\n\n\t\tconst detection = this.detector.detect(code);\n\n\t\tif (!detection.needsTransform) {\n\t\t\treturn {\n\t\t\t\tcode,\n\t\t\t\ttransformed: false,\n\t\t\t\tpatterns: [],\n\t\t\t\tmetadata: {\n\t\t\t\t\tloopCount: 0,\n\t\t\t\t\tarrayMethodCount: 0,\n\t\t\t\t\tparallelCallCount: 0,\n\t\t\t\t\tbatchableCount: 0,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tconst ast = parse(code, {\n\t\t\t\tsourceType: 'module',\n\t\t\t\tplugins: ['typescript'],\n\t\t\t\tallowAwaitOutsideFunction: true,\n\t\t\t\tallowReturnOutsideFunction: true,\n\t\t\t});\n\n\t\t\tthis.loopTransformer.resetTransformCount();\n\t\t\tthis.arrayTransformer.resetTransformCount();\n\t\t\tthis.promiseTransformer.resetTransformCount();\n\n\t\t\ttraverse(ast, {\n\t\t\t\tForOfStatement: (path: any) => {\n\t\t\t\t\tthis.loopTransformer.transformForOfLoop(path);\n\t\t\t\t},\n\n\t\t\t\tWhileStatement: (path: any) => {\n\t\t\t\t\tthis.loopTransformer.transformWhileLoop(path);\n\t\t\t\t},\n\n\t\t\t\tForStatement: (path: any) => {\n\t\t\t\t\tthis.loopTransformer.transformForLoop(path);\n\t\t\t\t},\n\n\t\t\t\tCallExpression: (path: any) => {\n\t\t\t\t\tif (this.isArrayMethodCall(path.node)) {\n\t\t\t\t\t\tthis.arrayTransformer.transformArrayMethod(path);\n\t\t\t\t\t} else if (this.isPromiseAllCall(path.node)) {\n\t\t\t\t\t\tthis.promiseTransformer.transformPromiseAll(path);\n\t\t\t\t\t} else if (this.isPromiseAllSettledCall(path.node)) {\n\t\t\t\t\t\tthis.promiseTransformer.transformPromiseAllSettled(path);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconst output = generate(ast, {\n\t\t\t\tsourceMaps: false,\n\t\t\t\tretainLines: true,\n\t\t\t\tcomments: true,\n\t\t\t});\n\n\t\t\tconst metadata: TransformMetadata = {\n\t\t\t\tloopCount: this.loopTransformer.getTransformCount(),\n\t\t\t\tarrayMethodCount: this.arrayTransformer.getTransformCount(),\n\t\t\t\tparallelCallCount: this.promiseTransformer.getTransformCount(),\n\t\t\t\tbatchableCount: detection.batchableParallel ? 1 : 0,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\tcode: output.code,\n\t\t\t\ttransformed: true,\n\t\t\t\tpatterns: detection.patterns,\n\t\t\t\tmetadata,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new TransformationError(message, code, 'unknown');\n\t\t}\n\t}\n\n\tprivate isArrayMethodCall(node: t.CallExpression): boolean {\n\t\tif (!t.isMemberExpression(node.callee)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst property = node.callee.property;\n\t\tif (!t.isIdentifier(property)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst arrayMethods = ['map', 'forEach', 'filter', 'reduce', 'find', 'some', 'every', 'flatMap'];\n\n\t\treturn arrayMethods.includes(property.name);\n\t}\n\n\tprivate isPromiseAllCall(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'all' })\n\t\t);\n\t}\n\n\tprivate isPromiseAllSettledCall(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'allSettled' })\n\t\t);\n\t}\n\n\t/**\n\t * Get the compiler type identifier (ICompiler interface requirement)\n\t */\n\tgetType(): string {\n\t\treturn 'ATPCompiler';\n\t}\n\n\t/**\n\t * Get cache statistics (ICompiler interface requirement)\n\t * ATPCompiler doesn't cache ASTs, so returns null\n\t */\n\tgetCacheStats() {\n\t\treturn null;\n\t}\n}\n\nexport * from './detector.js';\nexport * from './batch-detector.js';\nexport * from './batch-optimizer.js';\nexport * from './loop-transformer.js';\nexport * from './array-transformer.js';\nexport * from './array-transformer-batch-reconstruct.js';\nexport * from './promise-transformer.js';\nexport * from './utils.js';\n","import type { CacheProvider } from '@mondaydotcomorg/atp-protocol';\nimport type { LoopCheckpoint } from '../types.js';\nimport { CheckpointError, CheckpointOperation } from './errors.js';\n\nconst MAX_CHECKPOINT_SIZE = 10 * 1024 * 1024;\nconst CHECKPOINT_TTL = 3600;\n\nexport class CheckpointManager {\n\tprivate cache: CacheProvider;\n\tprivate executionId: string;\n\tprivate prefix: string;\n\n\tconstructor(executionId: string, cache: CacheProvider, prefix = 'checkpoint') {\n\t\tthis.executionId = executionId;\n\t\tthis.cache = cache;\n\t\tthis.prefix = prefix;\n\t}\n\n\tasync save(checkpoint: LoopCheckpoint): Promise<void> {\n\t\tconst key = this.getKey(checkpoint.loopId);\n\n\t\ttry {\n\t\t\tconst serialized = JSON.stringify(checkpoint);\n\n\t\t\tif (serialized.length > MAX_CHECKPOINT_SIZE) {\n\t\t\t\tthrow new CheckpointError(\n\t\t\t\t\t`Checkpoint size ${serialized.length} exceeds maximum ${MAX_CHECKPOINT_SIZE}`,\n\t\t\t\t\tcheckpoint.loopId,\n\t\t\t\t\tCheckpointOperation.SAVE\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait this.cache.set(key, checkpoint, CHECKPOINT_TTL);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CheckpointError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new CheckpointError(message, checkpoint.loopId, CheckpointOperation.SAVE);\n\t\t}\n\t}\n\n\tasync load(loopId: string): Promise<LoopCheckpoint | null> {\n\t\tconst key = this.getKey(loopId);\n\n\t\ttry {\n\t\t\tconst checkpoint = await this.cache.get<LoopCheckpoint>(key);\n\n\t\t\tif (!checkpoint) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (checkpoint.completed && checkpoint.completed instanceof Array) {\n\t\t\t\tcheckpoint.completed = new Set(checkpoint.completed);\n\t\t\t}\n\n\t\t\treturn checkpoint;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new CheckpointError(message, loopId, CheckpointOperation.LOAD);\n\t\t}\n\t}\n\n\tasync clear(loopId: string): Promise<void> {\n\t\tconst key = this.getKey(loopId);\n\n\t\ttry {\n\t\t\tawait this.cache.delete(key);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new CheckpointError(message, loopId, CheckpointOperation.CLEAR);\n\t\t}\n\t}\n\n\tasync clearAll(): Promise<void> {}\n\n\tprivate getKey(loopId: string): string {\n\t\treturn `${this.prefix}:${this.executionId}:${loopId}`;\n\t}\n\n\tgetExecutionId(): string {\n\t\treturn this.executionId;\n\t}\n}\n\nlet globalCheckpointManager: CheckpointManager | null = null;\n\nexport function setCheckpointManager(manager: CheckpointManager): void {\n\tglobalCheckpointManager = manager;\n}\n\nexport function getCheckpointManager(): CheckpointManager {\n\tif (!globalCheckpointManager) {\n\t\tthrow new Error('CheckpointManager not initialized');\n\t}\n\treturn globalCheckpointManager;\n}\n\nexport function clearCheckpointManager(): void {\n\tglobalCheckpointManager = null;\n}\n\nexport function hasCheckpointManager(): boolean {\n\treturn globalCheckpointManager !== null;\n}\n","import { getCheckpointManager } from './checkpoint-manager.js';\nimport type { LoopCheckpoint } from '../types.js';\nimport { InfiniteLoopDetectionError } from './errors.js';\n\nconst MAX_ITERATIONS = 1000000;\n\nexport async function resumableForOf<T>(\n\titems: T[],\n\tcallback: (item: T, index: number) => Promise<void>,\n\tloopId: string\n): Promise<void> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(loopId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(loopId, i);\n\t\t}\n\n\t\tawait callback(items[i]!, i);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(loopId);\n}\n\nexport async function resumableWhile(\n\tconditionFn: () => boolean | Promise<boolean>,\n\tbodyFn: (iteration: number) => Promise<void>,\n\tloopId: string\n): Promise<void> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(loopId);\n\tlet iteration = checkpoint?.currentIndex || 0;\n\n\twhile (await Promise.resolve(conditionFn())) {\n\t\tif (iteration > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(loopId, iteration);\n\t\t}\n\n\t\tawait bodyFn(iteration);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId,\n\t\t\tcurrentIndex: iteration + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\n\t\titeration++;\n\t}\n\n\tawait checkpointManager.clear(loopId);\n}\n\nexport async function resumableForLoop(\n\tinitValue: number,\n\tconditionFn: (i: number) => boolean,\n\tincrementFn: (i: number) => number,\n\tbodyFn: (i: number) => Promise<void>,\n\tloopId: string\n): Promise<void> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(loopId);\n\tlet i = checkpoint?.currentIndex !== undefined ? checkpoint.currentIndex : initValue;\n\n\tlet iterations = 0;\n\twhile (conditionFn(i)) {\n\t\tif (iterations++ > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(loopId, iterations);\n\t\t}\n\n\t\tawait bodyFn(i);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId,\n\t\t\tcurrentIndex: incrementFn(i),\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\n\t\ti = incrementFn(i);\n\t}\n\n\tawait checkpointManager.clear(loopId);\n}\n","import { getCheckpointManager } from './checkpoint-manager.js';\nimport type { LoopCheckpoint } from '../types.js';\nimport { InfiniteLoopDetectionError } from './errors.js';\n\nconst MAX_ITERATIONS = 1000000;\n\nexport async function resumableMap<T, R>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<R>,\n\tmapId: string\n): Promise<R[]> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(mapId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tconst results = (checkpoint?.results as R[]) || [];\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(mapId, i);\n\t\t}\n\n\t\tresults[i] = await callback(items[i]!, i, items);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: mapId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\tresults: results,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(mapId);\n\treturn results;\n}\n\nexport async function resumableForEach<T>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<void>,\n\tforEachId: string\n): Promise<void> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(forEachId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(forEachId, i);\n\t\t}\n\n\t\tawait callback(items[i]!, i, items);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: forEachId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(forEachId);\n}\n\nexport async function resumableFilter<T>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<boolean>,\n\tfilterId: string\n): Promise<T[]> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(filterId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tconst results = (checkpoint?.results as T[]) || [];\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(filterId, i);\n\t\t}\n\n\t\tconst passed = await callback(items[i]!, i, items);\n\t\tif (passed) {\n\t\t\tresults.push(items[i]!);\n\t\t}\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: filterId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\tresults: results,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(filterId);\n\treturn results;\n}\n\nexport async function resumableReduce<T, R>(\n\titems: T[],\n\tcallback: (accumulator: R, item: T, index: number, array: T[]) => Promise<R>,\n\tinitialValue: R,\n\treduceId: string\n): Promise<R> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(reduceId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tlet accumulator = (checkpoint?.accumulator as R) ?? initialValue;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(reduceId, i);\n\t\t}\n\n\t\taccumulator = await callback(accumulator, items[i]!, i, items);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: reduceId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\taccumulator: accumulator,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(reduceId);\n\treturn accumulator;\n}\n\nexport async function resumableFind<T>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<boolean>,\n\tfindId: string\n): Promise<T | undefined> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(findId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(findId, i);\n\t\t}\n\n\t\tconst found = await callback(items[i]!, i, items);\n\t\tif (found) {\n\t\t\tawait checkpointManager.clear(findId);\n\t\t\treturn items[i];\n\t\t}\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: findId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(findId);\n\treturn undefined;\n}\n\nexport async function resumableSome<T>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<boolean>,\n\tsomeId: string\n): Promise<boolean> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(someId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(someId, i);\n\t\t}\n\n\t\tconst result = await callback(items[i]!, i, items);\n\t\tif (result) {\n\t\t\tawait checkpointManager.clear(someId);\n\t\t\treturn true;\n\t\t}\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: someId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(someId);\n\treturn false;\n}\n\nexport async function resumableEvery<T>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<boolean>,\n\teveryId: string\n): Promise<boolean> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(everyId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(everyId, i);\n\t\t}\n\n\t\tconst result = await callback(items[i]!, i, items);\n\t\tif (!result) {\n\t\t\tawait checkpointManager.clear(everyId);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: everyId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(everyId);\n\treturn true;\n}\n\nexport async function resumableFlatMap<T, R>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<R[]>,\n\tflatMapId: string\n): Promise<R[]> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(flatMapId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tconst results = (checkpoint?.results as R[]) || [];\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(flatMapId, i);\n\t\t}\n\n\t\tconst mapped = await callback(items[i]!, i, items);\n\t\tresults.push(...mapped);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: flatMapId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\tresults: results,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(flatMapId);\n\treturn results;\n}\n","import { getCheckpointManager } from './checkpoint-manager.js';\nimport type { LoopCheckpoint } from '../types.js';\n\nexport async function resumablePromiseAll<T>(\n\tpromises: Promise<T>[],\n\tparallelId: string\n): Promise<T[]> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(parallelId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tconst results = (checkpoint?.results as T[]) || [];\n\n\tfor (let i = startIndex; i < promises.length; i++) {\n\t\tresults[i] = (await promises[i]) as T;\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: parallelId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\tresults: results,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(parallelId);\n\treturn results;\n}\n\nexport async function resumablePromiseAllSettled<T>(\n\tpromises: Promise<T>[],\n\tparallelId: string\n): Promise<PromiseSettledResult<T>[]> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(parallelId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tconst results = (checkpoint?.results as PromiseSettledResult<T>[]) || [];\n\n\tfor (let i = startIndex; i < promises.length; i++) {\n\t\ttry {\n\t\t\tconst value = (await promises[i]) as T;\n\t\t\tresults[i] = { status: 'fulfilled', value };\n\t\t} catch (reason) {\n\t\t\tresults[i] = { status: 'rejected', reason };\n\t\t}\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: parallelId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\tresults: results,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(parallelId);\n\treturn results;\n}\n","import { BatchPauseExecutionError } from './errors.js';\nimport type { BatchCallInfo } from '../types.js';\nimport {\n\tnextSequenceNumber,\n\tgetCachedResult,\n\tgetCallSequenceNumber,\n} from '@mondaydotcomorg/atp-runtime';\n\nexport async function batchParallel<T>(\n\tbatchCalls: BatchCallInfo[],\n\tparallelId: string\n): Promise<T[]> {\n\tconst currentSequence = getCallSequenceNumber();\n\tconst cachedResult = getCachedResult(currentSequence);\n\tif (cachedResult !== undefined) {\n\t\tnextSequenceNumber();\n\t\treturn cachedResult as T[];\n\t}\n\n\tconst sequenceForPause = nextSequenceNumber();\n\tthrow new BatchPauseExecutionError(batchCalls, parallelId, sequenceForPause);\n}\n","export * from './errors.js';\nexport * from './context.js';\nexport * from './checkpoint-manager.js';\nexport * from './resumable-loops.js';\nexport * from './resumable-arrays.js';\nexport * from './resumable-parallel.js';\nexport * from './batch-parallel.js';\nexport * from './runtime-functions.js';\n\nimport type { CacheProvider } from '@mondaydotcomorg/atp-protocol';\nimport { CheckpointManager, setCheckpointManager } from './checkpoint-manager.js';\nimport { setRuntimeContext } from './context.js';\n\nexport interface InitializeRuntimeOptions {\n\texecutionId: string;\n\tcache: CacheProvider;\n\tcheckpointPrefix?: string;\n}\n\nexport function initializeRuntime(options: InitializeRuntimeOptions): void {\n\tconst checkpointManager = new CheckpointManager(\n\t\toptions.executionId,\n\t\toptions.cache,\n\t\toptions.checkpointPrefix\n\t);\n\n\tsetCheckpointManager(checkpointManager);\n\n\tsetRuntimeContext({\n\t\texecutionId: options.executionId,\n\t\tcache: options.cache,\n\t\tcheckpointPrefix: options.checkpointPrefix,\n\t});\n}\n\nexport function cleanupRuntime(): void {}\n","/**\n * Core compiler interface for ATP\n * All ATP compilers must implement this interface to ensure consistency\n */\n\nimport type { DetectionResult, TransformResult } from '../types.js';\n\n/**\n * ICompiler - The core interface that all ATP compilers must implement\n *\n * This interface defines the contract for any compiler in the ATP system,\n * enabling dependency injection and easy extensibility.\n *\n * @example\n * ```typescript\n * class MyCustomCompiler implements ICompiler {\n * detect(code: string): DetectionResult {\n * // Detection logic\n * }\n *\n * transform(code: string): TransformResult {\n * // Transformation logic\n * }\n *\n * getType(): string {\n * return 'MyCustomCompiler';\n * }\n * }\n * ```\n */\nexport interface ICompiler {\n\t/**\n\t * Detect if code needs transformation and what patterns it contains\n\t * Can be synchronous or asynchronous\n\t */\n\tdetect(code: string): DetectionResult | Promise<DetectionResult>;\n\n\t/**\n\t * Transform the code based on detected patterns\n\t * Can be synchronous or asynchronous\n\t */\n\ttransform(code: string): TransformResult | Promise<TransformResult>;\n\n\t/**\n\t * Get the compiler type identifier\n\t */\n\tgetType(): string;\n\n\t/**\n\t * Get cache statistics (optional)\n\t * Useful for performance monitoring and debugging\n\t */\n\tgetCacheStats?(): CacheStats | null;\n}\n\n/**\n * Cache statistics structure\n */\nexport interface CacheStats {\n\tsize: number;\n\tenabled: boolean;\n}\n\n/**\n * Type guard to check if an object implements ICompiler\n */\nexport function isCompiler(obj: unknown): obj is ICompiler {\n\treturn (\n\t\ttypeof obj === 'object' &&\n\t\tobj !== null &&\n\t\t'detect' in obj &&\n\t\t'transform' in obj &&\n\t\t'getType' in obj &&\n\t\ttypeof (obj as any).detect === 'function' &&\n\t\ttypeof (obj as any).transform === 'function' &&\n\t\ttypeof (obj as any).getType === 'function'\n\t);\n}\n","/**\n * ATP Compiler Plugin API\n *\n * Extensible plugin system for custom transformations and detections\n */\n\nimport type { NodePath } from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport type { CompilerConfig, DetectionResult, TransformMetadata, AsyncPattern } from '../types.js';\n\n/**\n * Base plugin interface\n */\nexport interface CompilerPlugin {\n\t/**\n\t * Unique plugin name\n\t */\n\tname: string;\n\n\t/**\n\t * Plugin version (semver)\n\t */\n\tversion: string;\n\n\t/**\n\t * Plugin priority (higher = runs first)\n\t * Built-in plugins: 100\n\t * User plugins: 50 (default)\n\t * Low priority: 10\n\t */\n\tpriority?: number;\n\n\t/**\n\t * Plugin initialization (optional)\n\t * Called once when plugin is registered\n\t */\n\tinitialize?(config: CompilerConfig): void | Promise<void>;\n\n\t/**\n\t * Plugin cleanup (optional)\n\t * Called when compiler is disposed\n\t */\n\tdispose?(): void | Promise<void>;\n}\n\n/**\n * Detection plugin - detects patterns that need transformation\n */\nexport interface DetectionPlugin extends CompilerPlugin {\n\t/**\n\t * Detect patterns in code\n\t */\n\tdetect(code: string, ast: t.File): DetectionResult | Promise<DetectionResult>;\n\n\t/**\n\t * Custom async patterns this plugin can detect\n\t */\n\tpatterns: AsyncPattern[];\n}\n\n/**\n * Transformation plugin - transforms AST nodes\n */\nexport interface TransformationPlugin extends CompilerPlugin {\n\t/**\n\t * Visitor pattern for AST traversal\n\t * Return visitor object compatible with @babel/traverse\n\t */\n\tgetVisitor(config: CompilerConfig): BabelVisitor;\n\n\t/**\n\t * Get transformation metadata after transform\n\t */\n\tgetMetadata(): Partial<TransformMetadata>;\n\n\t/**\n\t * Reset plugin state (called before each transform)\n\t */\n\treset(): void;\n}\n\n/**\n * Optimizer plugin - optimizes transformed code\n */\nexport interface OptimizerPlugin extends CompilerPlugin {\n\t/**\n\t * Optimize AST after all transformations\n\t */\n\toptimize(ast: t.File, config: CompilerConfig): t.File | Promise<t.File>;\n}\n\n/**\n * Validator plugin - validates code before/after transformation\n */\nexport interface ValidatorPlugin extends CompilerPlugin {\n\t/**\n\t * Validate code (throw error if invalid)\n\t */\n\tvalidate(code: string, ast: t.File, phase: 'pre' | 'post'): void | Promise<void>;\n}\n\n/**\n * Babel visitor type (simplified)\n */\nexport interface BabelVisitor {\n\t[key: string]: (path: NodePath<any>) => void;\n}\n\n/**\n * Plugin context - shared state during transformation\n */\nexport interface PluginContext {\n\tconfig: CompilerConfig;\n\texecutionId?: string;\n\tmetadata: TransformMetadata;\n\tpatterns: Set<AsyncPattern>;\n}\n\n/**\n * Plugin registry for managing plugins\n */\nexport class PluginRegistry {\n\tprivate detectors: DetectionPlugin[] = [];\n\tprivate transformers: TransformationPlugin[] = [];\n\tprivate optimizers: OptimizerPlugin[] = [];\n\tprivate validators: ValidatorPlugin[] = [];\n\n\t/**\n\t * Register a plugin\n\t */\n\tregister(plugin: CompilerPlugin): void {\n\t\t// Check for name conflicts\n\t\tif (this.findPlugin(plugin.name)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Plugin \"${plugin.name}\" is already registered. ` +\n\t\t\t\t\t`Please use a unique name or unregister the existing plugin first.`\n\t\t\t);\n\t\t}\n\n\t\t// Type guards to determine plugin type\n\t\tif (this.isDetectionPlugin(plugin)) {\n\t\t\tthis.detectors.push(plugin);\n\t\t\tthis.detectors.sort((a, b) => (b.priority || 50) - (a.priority || 50));\n\t\t}\n\n\t\tif (this.isTransformationPlugin(plugin)) {\n\t\t\tthis.transformers.push(plugin);\n\t\t\tthis.transformers.sort((a, b) => (b.priority || 50) - (a.priority || 50));\n\t\t}\n\n\t\tif (this.isOptimizerPlugin(plugin)) {\n\t\t\tthis.optimizers.push(plugin);\n\t\t\tthis.optimizers.sort((a, b) => (b.priority || 50) - (a.priority || 50));\n\t\t}\n\n\t\tif (this.isValidatorPlugin(plugin)) {\n\t\t\tthis.validators.push(plugin);\n\t\t\tthis.validators.sort((a, b) => (b.priority || 50) - (a.priority || 50));\n\t\t}\n\t}\n\n\t/**\n\t * Find a plugin by name\n\t */\n\tfindPlugin(name: string): CompilerPlugin | undefined {\n\t\tconst allPlugins = [\n\t\t\t...this.detectors,\n\t\t\t...this.transformers,\n\t\t\t...this.optimizers,\n\t\t\t...this.validators,\n\t\t];\n\t\treturn allPlugins.find((p) => p.name === name);\n\t}\n\n\t/**\n\t * Unregister a plugin by name\n\t */\n\tunregister(name: string): boolean {\n\t\tlet removed = false;\n\n\t\tthis.detectors = this.detectors.filter((p) => {\n\t\t\tif (p.name === name) {\n\t\t\t\tremoved = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.transformers = this.transformers.filter((p) => {\n\t\t\tif (p.name === name) {\n\t\t\t\tremoved = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.optimizers = this.optimizers.filter((p) => {\n\t\t\tif (p.name === name) {\n\t\t\t\tremoved = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.validators = this.validators.filter((p) => {\n\t\t\tif (p.name === name) {\n\t\t\t\tremoved = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\treturn removed;\n\t}\n\n\t/**\n\t * Get all detection plugins\n\t */\n\tgetDetectors(): DetectionPlugin[] {\n\t\treturn this.detectors;\n\t}\n\n\t/**\n\t * Get all transformation plugins\n\t */\n\tgetTransformers(): TransformationPlugin[] {\n\t\treturn this.transformers;\n\t}\n\n\t/**\n\t * Get all optimizer plugins\n\t */\n\tgetOptimizers(): OptimizerPlugin[] {\n\t\treturn this.optimizers;\n\t}\n\n\t/**\n\t * Get all validator plugins\n\t */\n\tgetValidators(): ValidatorPlugin[] {\n\t\treturn this.validators;\n\t}\n\n\t/**\n\t * Initialize all plugins\n\t */\n\tasync initializeAll(config: CompilerConfig): Promise<void> {\n\t\tconst allPlugins = [\n\t\t\t...this.detectors,\n\t\t\t...this.transformers,\n\t\t\t...this.optimizers,\n\t\t\t...this.validators,\n\t\t];\n\n\t\tfor (const plugin of allPlugins) {\n\t\t\tif (plugin.initialize) {\n\t\t\t\tawait plugin.initialize(config);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Dispose all plugins\n\t */\n\tasync disposeAll(): Promise<void> {\n\t\tconst allPlugins = [\n\t\t\t...this.detectors,\n\t\t\t...this.transformers,\n\t\t\t...this.optimizers,\n\t\t\t...this.validators,\n\t\t];\n\n\t\tfor (const plugin of allPlugins) {\n\t\t\tif (plugin.dispose) {\n\t\t\t\tawait plugin.dispose();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Type guards\n\t */\n\tprivate isDetectionPlugin(plugin: CompilerPlugin): plugin is DetectionPlugin {\n\t\treturn 'detect' in plugin && 'patterns' in plugin;\n\t}\n\n\tprivate isTransformationPlugin(plugin: CompilerPlugin): plugin is TransformationPlugin {\n\t\treturn 'getVisitor' in plugin && 'getMetadata' in plugin && 'reset' in plugin;\n\t}\n\n\tprivate isOptimizerPlugin(plugin: CompilerPlugin): plugin is OptimizerPlugin {\n\t\treturn 'optimize' in plugin;\n\t}\n\n\tprivate isValidatorPlugin(plugin: CompilerPlugin): plugin is ValidatorPlugin {\n\t\treturn 'validate' in plugin;\n\t}\n}\n\n/**\n * Utility function to create a simple transformation plugin\n */\nexport function createTransformPlugin(config: {\n\tname: string;\n\tversion: string;\n\tpriority?: number;\n\tvisitor: BabelVisitor;\n\tgetMetadata?: () => Partial<TransformMetadata>;\n}): TransformationPlugin {\n\tlet transformCount = 0;\n\n\treturn {\n\t\tname: config.name,\n\t\tversion: config.version,\n\t\tpriority: config.priority || 50,\n\n\t\tgetVisitor() {\n\t\t\treturn config.visitor;\n\t\t},\n\n\t\tgetMetadata() {\n\t\t\treturn config.getMetadata ? config.getMetadata() : { loopCount: transformCount };\n\t\t},\n\n\t\treset() {\n\t\t\ttransformCount = 0;\n\t\t},\n\t};\n}\n","/**\n * Plugin-based ATP Compiler\n *\n * Extensible compiler that supports custom plugins for detection,\n * transformation, optimization, and validation\n */\n\nimport { parse } from '@babel/parser';\nimport _traverse from '@babel/traverse';\nconst traverse = (_traverse as any).default || _traverse;\nimport _generate from '@babel/generator';\nconst generate = (_generate as any).default || _generate;\nimport type * as t from '@babel/types';\nimport type {\n\tTransformResult,\n\tCompilerConfig,\n\tTransformMetadata,\n\tDetectionResult,\n} from '../types.js';\nimport { DEFAULT_COMPILER_CONFIG } from '../types.js';\nimport { TransformationError } from '../runtime/errors.js';\nimport { resetIdCounter } from '../runtime/context.js';\nimport { PluginRegistry, type CompilerPlugin, type PluginContext } from './plugin-api.js';\nimport type { ICompiler } from '../types/compiler-interface.js';\n\n/**\n * Plugin-based ATP Compiler\n *\n * @example\n * ```typescript\n * const compiler = new PluggableCompiler({\n * enableBatchParallel: true\n * });\n *\n * // Register custom plugin\n * compiler.use(myCustomPlugin);\n *\n * // Transform code\n * const result = compiler.transform(code);\n * ```\n */\nexport class PluggableCompiler implements ICompiler {\n\tprivate config: CompilerConfig;\n\tprivate registry: PluginRegistry;\n\tprivate initialized: boolean = false;\n\n\t/**\n\t * AST cache - maps code string to parsed AST\n\t * This avoids re-parsing the same code multiple times\n\t * (e.g., once in detect() and once in transform())\n\t *\n\t * Performance Impact: ~30% reduction in compile time\n\t */\n\tprivate astCache: Map<string, t.File> = new Map();\n\n\tconstructor(config: Partial<CompilerConfig> = {}) {\n\t\tthis.config = { ...DEFAULT_COMPILER_CONFIG, ...config };\n\t\tthis.registry = new PluginRegistry();\n\t}\n\n\t/**\n\t * Register a plugin (chainable)\n\t */\n\tuse(plugin: CompilerPlugin): this {\n\t\tthis.registry.register(plugin);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregister a plugin by name\n\t */\n\tremove(pluginName: string): boolean {\n\t\treturn this.registry.unregister(pluginName);\n\t}\n\n\t/**\n\t * Initialize all plugins\n\t */\n\tasync initialize(): Promise<void> {\n\t\tif (this.initialized) return;\n\t\tawait this.registry.initializeAll(this.config);\n\t\tthis.initialized = true;\n\t}\n\n\t/**\n\t * Detect patterns using all detection plugins\n\t */\n\tasync detect(code: string): Promise<DetectionResult> {\n\t\tif (!this.initialized) {\n\t\t\tawait this.initialize();\n\t\t}\n\n\t\ttry {\n\t\t\tconst ast = this.parseCode(code);\n\t\t\tconst detectors = this.registry.getDetectors();\n\n\t\t\t// Aggregate results from all detectors\n\t\t\tconst allPatterns = new Set<string>();\n\t\t\tlet batchableParallel = false;\n\n\t\t\tfor (const detector of detectors) {\n\t\t\t\tconst result = await detector.detect(code, ast);\n\t\t\t\tresult.patterns.forEach((p) => allPatterns.add(p));\n\t\t\t\tif (result.batchableParallel) {\n\t\t\t\t\tbatchableParallel = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tneedsTransform: allPatterns.size > 0,\n\t\t\t\tpatterns: Array.from(allPatterns) as any[],\n\t\t\t\tbatchableParallel,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tneedsTransform: false,\n\t\t\t\tpatterns: [],\n\t\t\t\tbatchableParallel: false,\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Transform code using all transformation plugins\n\t */\n\tasync transform(code: string): Promise<TransformResult> {\n\t\tif (!this.initialized) {\n\t\t\tawait this.initialize();\n\t\t}\n\n\t\tresetIdCounter();\n\n\t\t// 1. Pre-validation\n\t\tawait this.runValidation(code, 'pre');\n\n\t\t// 2. Detection\n\t\tconst detection = await this.detect(code);\n\n\t\tif (!detection.needsTransform) {\n\t\t\treturn {\n\t\t\t\tcode,\n\t\t\t\ttransformed: false,\n\t\t\t\tpatterns: [],\n\t\t\t\tmetadata: {\n\t\t\t\t\tloopCount: 0,\n\t\t\t\t\tarrayMethodCount: 0,\n\t\t\t\t\tparallelCallCount: 0,\n\t\t\t\t\tbatchableCount: 0,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\t// 3. Parse AST\n\t\t\tconst ast = this.parseCode(code);\n\n\t\t\t// 4. Reset all transformers\n\t\t\tconst transformers = this.registry.getTransformers();\n\t\t\tfor (const transformer of transformers) {\n\t\t\t\ttransformer.reset();\n\t\t\t}\n\n\t\t\t// 5. Apply all transformation visitors\n\t\t\t// Combine visitors from all plugins, merging handlers for the same node type\n\t\t\tconst visitors: any = {};\n\t\t\tfor (const transformer of transformers) {\n\t\t\t\tconst visitor = transformer.getVisitor(this.config);\n\n\t\t\t\t// Merge visitors, combining multiple handlers for the same node type\n\t\t\t\tfor (const [nodeType, handler] of Object.entries(visitor)) {\n\t\t\t\t\tif (!visitors[nodeType]) {\n\t\t\t\t\t\tvisitors[nodeType] = handler;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Combine multiple handlers for the same node type\n\t\t\t\t\t\tconst existing = visitors[nodeType];\n\t\t\t\t\t\tvisitors[nodeType] = (path: any) => {\n\t\t\t\t\t\t\texisting(path);\n\t\t\t\t\t\t\t(handler as any)(path);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttraverse(ast, visitors);\n\n\t\t\t// 6. Optimization\n\t\t\tlet optimizedAst = ast;\n\t\t\tconst optimizers = this.registry.getOptimizers();\n\t\t\tfor (const optimizer of optimizers) {\n\t\t\t\toptimizedAst = await optimizer.optimize(optimizedAst, this.config);\n\t\t\t}\n\n\t\t\t// 7. Generate code\n\t\t\tconst output = generate(optimizedAst, {\n\t\t\t\tsourceMaps: false,\n\t\t\t\tretainLines: true,\n\t\t\t\tcomments: true,\n\t\t\t});\n\n\t\t\t// 8. Aggregate metadata\n\t\t\tconst metadata: TransformMetadata = {\n\t\t\t\tloopCount: 0,\n\t\t\t\tarrayMethodCount: 0,\n\t\t\t\tparallelCallCount: 0,\n\t\t\t\tbatchableCount: detection.batchableParallel ? 1 : 0,\n\t\t\t};\n\n\t\t\tfor (const transformer of transformers) {\n\t\t\t\tconst pluginMetadata = transformer.getMetadata();\n\t\t\t\tmetadata.loopCount += pluginMetadata.loopCount || 0;\n\t\t\t\tmetadata.arrayMethodCount += pluginMetadata.arrayMethodCount || 0;\n\t\t\t\tmetadata.parallelCallCount += pluginMetadata.parallelCallCount || 0;\n\t\t\t\tmetadata.batchableCount += pluginMetadata.batchableCount || 0;\n\t\t\t}\n\n\t\t\t// 9. Post-validation\n\t\t\tawait this.runValidation(output.code, 'post');\n\n\t\t\treturn {\n\t\t\t\tcode: output.code,\n\t\t\t\ttransformed: true,\n\t\t\t\tpatterns: detection.patterns,\n\t\t\t\tmetadata,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t// Include context about which phase failed\n\t\t\tconst context =\n\t\t\t\tdetection.patterns.length > 0 ? `[Plugin transformation] ${message}` : message;\n\t\t\tthrow new TransformationError(context, code, 'plugin-error');\n\t\t}\n\t}\n\n\t/**\n\t * Dispose compiler and all plugins\n\t */\n\tasync dispose(): Promise<void> {\n\t\tawait this.registry.disposeAll();\n\t\tthis.astCache.clear(); // Clear cache on disposal\n\t\tthis.initialized = false;\n\t}\n\n\t/**\n\t * Get current configuration\n\t */\n\tgetConfig(): CompilerConfig {\n\t\treturn { ...this.config };\n\t}\n\n\t/**\n\t * Update configuration\n\t */\n\tsetConfig(config: Partial<CompilerConfig>): void {\n\t\tthis.config = { ...this.config, ...config };\n\t}\n\n\t/**\n\t * Parse code to AST with caching\n\t *\n\t * Caches parsed AST to avoid re-parsing the same code multiple times.\n\t * This provides ~30% performance improvement when detect() and transform()\n\t * are called on the same code.\n\t */\n\tprivate parseCode(code: string): t.File {\n\t\t// Check cache first\n\t\tconst cached = this.astCache.get(code);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\n\t\t// Parse and cache\n\t\tconst ast = parse(code, {\n\t\t\tsourceType: 'module',\n\t\t\tplugins: ['typescript'],\n\t\t\tallowAwaitOutsideFunction: true,\n\t\t\tallowReturnOutsideFunction: true,\n\t\t}) as t.File;\n\n\t\tthis.astCache.set(code, ast);\n\t\treturn ast;\n\t}\n\n\t/**\n\t * Clear AST cache\n\t *\n\t * Call this method to free memory if you've compiled many different code snippets.\n\t * The cache is automatically managed and uses Map, so old entries don't leak memory.\n\t */\n\tclearCache(): void {\n\t\tthis.astCache.clear();\n\t}\n\n\t/**\n\t * Get the compiler type identifier (ICompiler interface requirement)\n\t */\n\tgetType(): string {\n\t\treturn 'PluggableCompiler';\n\t}\n\n\t/**\n\t * Get cache statistics (for debugging/monitoring)\n\t */\n\tgetCacheStats(): { size: number; enabled: boolean } {\n\t\treturn {\n\t\t\tsize: this.astCache.size,\n\t\t\tenabled: true,\n\t\t};\n\t}\n\n\t/**\n\t * Run validators\n\t */\n\tprivate async runValidation(code: string, phase: 'pre' | 'post'): Promise<void> {\n\t\tconst validators = this.registry.getValidators();\n\t\tconst ast = this.parseCode(code);\n\n\t\tfor (const validator of validators) {\n\t\t\tawait validator.validate(code, ast, phase);\n\t\t}\n\t}\n}\n","/**\n * Default Detection Plugin\n * Wraps the existing AsyncIterationDetector\n */\n\nimport type * as t from '@babel/types';\nimport type { DetectionPlugin } from '../plugin-api.js';\nimport type { CompilerConfig, AsyncPattern, DetectionResult } from '../../types.js';\nimport { AsyncIterationDetector } from '../../transformer/detector.js';\n\nexport class DefaultDetectionPlugin implements DetectionPlugin {\n\tname = 'atp-default-detector';\n\tversion = '1.0.0';\n\tpriority = 100;\n\tpatterns: AsyncPattern[] = [\n\t\t'for-of-await',\n\t\t'while-await',\n\t\t'map-async',\n\t\t'forEach-async',\n\t\t'filter-async',\n\t\t'reduce-async',\n\t\t'find-async',\n\t\t'some-async',\n\t\t'every-async',\n\t\t'flatMap-async',\n\t\t'promise-all',\n\t\t'promise-allSettled',\n\t];\n\n\tprivate detector: AsyncIterationDetector;\n\n\tconstructor() {\n\t\tthis.detector = new AsyncIterationDetector();\n\t}\n\n\tasync detect(code: string, ast: t.File): Promise<DetectionResult> {\n\t\t// Use existing detector\n\t\treturn this.detector.detect(code);\n\t}\n}\n","/**\n * Default Loop Transformer Plugin\n * Wraps the existing LoopTransformer\n */\n\nimport type { TransformationPlugin, BabelVisitor } from '../plugin-api.js';\nimport type { CompilerConfig, TransformMetadata } from '../../types.js';\nimport { LoopTransformer } from '../../transformer/loop-transformer.js';\n\nexport class DefaultLoopTransformerPlugin implements TransformationPlugin {\n\tname = 'atp-loop-transformer';\n\tversion = '1.0.0';\n\tpriority = 100;\n\n\tprivate transformer: LoopTransformer;\n\n\tconstructor(batchSizeThreshold?: number) {\n\t\tthis.transformer = new LoopTransformer(batchSizeThreshold);\n\t}\n\n\tgetVisitor(config: CompilerConfig): BabelVisitor {\n\t\treturn {\n\t\t\tForOfStatement: (path: any) => {\n\t\t\t\tthis.transformer.transformForOfLoop(path);\n\t\t\t},\n\n\t\t\tWhileStatement: (path: any) => {\n\t\t\t\tthis.transformer.transformWhileLoop(path);\n\t\t\t},\n\n\t\t\tForStatement: (path: any) => {\n\t\t\t\tthis.transformer.transformForLoop(path);\n\t\t\t},\n\t\t};\n\t}\n\n\tgetMetadata(): Partial<TransformMetadata> {\n\t\treturn {\n\t\t\tloopCount: this.transformer.getTransformCount(),\n\t\t};\n\t}\n\n\treset(): void {\n\t\tthis.transformer.resetTransformCount();\n\t}\n}\n","/**\n * Default Array Transformer Plugin\n * Wraps the existing ArrayTransformer\n */\n\nimport * as t from '@babel/types';\nimport type { TransformationPlugin, BabelVisitor } from '../plugin-api.js';\nimport type { CompilerConfig, TransformMetadata } from '../../types.js';\nimport { ArrayTransformer } from '../../transformer/array-transformer.js';\n\nexport class DefaultArrayTransformerPlugin implements TransformationPlugin {\n\tname = 'atp-array-transformer';\n\tversion = '1.0.0';\n\tpriority = 100;\n\n\tprivate transformer: ArrayTransformer;\n\n\tconstructor(batchSizeThreshold?: number) {\n\t\tthis.transformer = new ArrayTransformer(batchSizeThreshold);\n\t}\n\n\tgetVisitor(config: CompilerConfig): BabelVisitor {\n\t\treturn {\n\t\t\tCallExpression: (path: any) => {\n\t\t\t\tconst node = path.node;\n\t\t\t\tif (this.isArrayMethodCall(node)) {\n\t\t\t\t\tthis.transformer.transformArrayMethod(path);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tgetMetadata(): Partial<TransformMetadata> {\n\t\treturn {\n\t\t\tarrayMethodCount: this.transformer.getTransformCount(),\n\t\t};\n\t}\n\n\treset(): void {\n\t\tthis.transformer.resetTransformCount();\n\t}\n\n\tprivate isArrayMethodCall(node: t.CallExpression): boolean {\n\t\tif (!t.isMemberExpression(node.callee)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst property = node.callee.property;\n\t\tif (!t.isIdentifier(property)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst arrayMethods = ['map', 'forEach', 'filter', 'reduce', 'find', 'some', 'every', 'flatMap'];\n\t\treturn arrayMethods.includes(property.name);\n\t}\n}\n","/**\n * Default Promise Transformer Plugin\n * Wraps the existing PromiseTransformer\n */\n\nimport * as t from '@babel/types';\nimport type { TransformationPlugin, BabelVisitor } from '../plugin-api.js';\nimport type { CompilerConfig, TransformMetadata } from '../../types.js';\nimport { PromiseTransformer } from '../../transformer/promise-transformer.js';\n\nexport class DefaultPromiseTransformerPlugin implements TransformationPlugin {\n\tname = 'atp-promise-transformer';\n\tversion = '1.0.0';\n\tpriority = 100;\n\n\tprivate transformer: PromiseTransformer;\n\n\tconstructor(enableBatchParallel?: boolean) {\n\t\tthis.transformer = new PromiseTransformer(enableBatchParallel);\n\t}\n\n\tgetVisitor(config: CompilerConfig): BabelVisitor {\n\t\treturn {\n\t\t\tCallExpression: (path: any) => {\n\t\t\t\tconst node = path.node;\n\t\t\t\tif (this.isPromiseAllCall(node)) {\n\t\t\t\t\tthis.transformer.transformPromiseAll(path);\n\t\t\t\t} else if (this.isPromiseAllSettledCall(node)) {\n\t\t\t\t\tthis.transformer.transformPromiseAllSettled(path);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tgetMetadata(): Partial<TransformMetadata> {\n\t\treturn {\n\t\t\tparallelCallCount: this.transformer.getTransformCount(),\n\t\t};\n\t}\n\n\treset(): void {\n\t\tthis.transformer.resetTransformCount();\n\t}\n\n\tprivate isPromiseAllCall(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'all' })\n\t\t);\n\t}\n\n\tprivate isPromiseAllSettledCall(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'allSettled' })\n\t\t);\n\t}\n}\n","/**\n * Factory function to create a PluggableCompiler with all default plugins\n *\n * This makes PluggableCompiler a drop-in replacement for ATPCompiler\n */\n\nimport { PluggableCompiler } from './pluggable-compiler.js';\nimport { DefaultDetectionPlugin } from './default-plugins/detection-plugin.js';\nimport { DefaultLoopTransformerPlugin } from './default-plugins/loop-transformer-plugin.js';\nimport { DefaultArrayTransformerPlugin } from './default-plugins/array-transformer-plugin.js';\nimport { DefaultPromiseTransformerPlugin } from './default-plugins/promise-transformer-plugin.js';\nimport type { CompilerConfig } from '../types.js';\n\n/**\n * Create a PluggableCompiler with all default ATP transformations\n *\n * This provides the same functionality as ATPCompiler but with plugin extensibility.\n *\n * @example\n * ```typescript\n * // Drop-in replacement for ATPCompiler\n * const compiler = createDefaultCompiler({\n * enableBatchParallel: true,\n * maxBatchSize: 10,\n * });\n *\n * // Works exactly like ATPCompiler\n * const result = await compiler.transform(code);\n *\n * // But you can also add custom plugins!\n * compiler.use(myCustomPlugin);\n * ```\n */\nexport function createDefaultCompiler(config: Partial<CompilerConfig> = {}): PluggableCompiler {\n\tconst compiler = new PluggableCompiler(config);\n\n\t// Register default plugins that provide all ATP compiler functionality\n\tcompiler.use(new DefaultDetectionPlugin());\n\tcompiler.use(new DefaultLoopTransformerPlugin(config.batchSizeThreshold));\n\tcompiler.use(new DefaultArrayTransformerPlugin(config.batchSizeThreshold));\n\tcompiler.use(new DefaultPromiseTransformerPlugin(config.enableBatchParallel));\n\n\treturn compiler;\n}\n\n/**\n * Type alias for backward compatibility\n *\n * This allows:\n * ```typescript\n * import type { ATPCompilerLike } from '@mondaydotcomorg/atp-compiler';\n *\n * const compiler: ATPCompilerLike = createDefaultCompiler();\n * ```\n */\nexport type ATPCompilerLike = PluggableCompiler;\n","/**\n * Example Plugin: Async Timeout Wrapper\n *\n * Automatically wraps await expressions with timeout protection\n *\n * @example\n * // Before:\n * const result = await fetch('https://api.example.com');\n *\n * // After:\n * const result = await Promise.race([\n * fetch('https://api.example.com'),\n * new Promise((_, reject) =>\n * setTimeout(() => reject(new Error('Timeout')), 5000)\n * )\n * ]);\n */\n\nimport * as t from '@babel/types';\nimport type { NodePath } from '@babel/traverse';\nimport type { TransformationPlugin, BabelVisitor } from '../plugin-api.js';\nimport type { CompilerConfig, TransformMetadata } from '../../types.js';\n\nexport interface TimeoutPluginOptions {\n\t/**\n\t * Default timeout in milliseconds\n\t */\n\ttimeout?: number;\n\n\t/**\n\t * Patterns to match (namespace.method)\n\t */\n\tpatterns?: string[];\n\n\t/**\n\t * Whether to add timeout to all await expressions\n\t */\n\twrapAll?: boolean;\n}\n\nexport class AsyncTimeoutPlugin implements TransformationPlugin {\n\tname = 'async-timeout';\n\tversion = '1.0.0';\n\tpriority = 40; // Run after main transformations\n\n\tprivate options: TimeoutPluginOptions;\n\tprivate transformCount = 0;\n\n\tconstructor(options: TimeoutPluginOptions = {}) {\n\t\tthis.options = {\n\t\t\ttimeout: options.timeout || 5000,\n\t\t\tpatterns: options.patterns || ['fetch', 'axios.*', 'http.*'],\n\t\t\twrapAll: options.wrapAll || false,\n\t\t};\n\t}\n\n\tgetVisitor(config: CompilerConfig): BabelVisitor {\n\t\treturn {\n\t\t\tAwaitExpression: (path: NodePath<t.AwaitExpression>) => {\n\t\t\t\t// Check if should wrap this await\n\t\t\t\tif (!this.shouldWrap(path.node.argument)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Create timeout promise\n\t\t\t\tconst timeoutPromise = t.newExpression(t.identifier('Promise'), [\n\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t[t.identifier('_'), t.identifier('reject')],\n\t\t\t\t\t\tt.blockStatement([\n\t\t\t\t\t\t\tt.expressionStatement(\n\t\t\t\t\t\t\t\tt.callExpression(t.identifier('setTimeout'), [\n\t\t\t\t\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t\t\t\t\tt.callExpression(t.identifier('reject'), [\n\t\t\t\t\t\t\t\t\t\t\tt.newExpression(t.identifier('Error'), [\n\t\t\t\t\t\t\t\t\t\t\t\tt.stringLiteral(`Timeout after ${this.options.timeout}ms`),\n\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tt.numericLiteral(this.options.timeout!),\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t]);\n\n\t\t\t\t// Wrap in Promise.race\n\t\t\t\tconst raceCall = t.callExpression(\n\t\t\t\t\tt.memberExpression(t.identifier('Promise'), t.identifier('race')),\n\t\t\t\t\t[t.arrayExpression([path.node.argument, timeoutPromise])]\n\t\t\t\t);\n\n\t\t\t\t// Replace await expression\n\t\t\t\tpath.node.argument = raceCall;\n\t\t\t\tthis.transformCount++;\n\t\t\t},\n\t\t};\n\t}\n\n\tgetMetadata(): Partial<TransformMetadata> {\n\t\treturn {\n\t\t\t// Custom metadata\n\t\t\tloopCount: 0,\n\t\t\tarrayMethodCount: 0,\n\t\t\tparallelCallCount: this.transformCount,\n\t\t\tbatchableCount: 0,\n\t\t};\n\t}\n\n\treset(): void {\n\t\tthis.transformCount = 0;\n\t}\n\n\t/**\n\t * Check if this await should be wrapped with timeout\n\t */\n\tprivate shouldWrap(node: t.Expression): boolean {\n\t\tif (this.options.wrapAll) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Check if matches patterns\n\t\tif (t.isCallExpression(node)) {\n\t\t\tconst funcName = this.getFunctionName(node);\n\t\t\tif (funcName) {\n\t\t\t\treturn this.options.patterns!.some((pattern) => {\n\t\t\t\t\tconst regex = new RegExp(pattern.replace('*', '.*'));\n\t\t\t\t\treturn regex.test(funcName);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Get function name from call expression\n\t */\n\tprivate getFunctionName(node: t.CallExpression): string | null {\n\t\tif (t.isIdentifier(node.callee)) {\n\t\t\treturn node.callee.name;\n\t\t}\n\n\t\tif (t.isMemberExpression(node.callee)) {\n\t\t\tconst obj = t.isIdentifier(node.callee.object) ? node.callee.object.name : '';\n\t\t\tconst prop = t.isIdentifier(node.callee.property) ? node.callee.property.name : '';\n\t\t\treturn `${obj}.${prop}`;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n","/**\n * Example Plugin: Security Validator\n *\n * Validates code for security issues before transformation\n *\n * @example\n * const compiler = new PluggableCompiler();\n * compiler.use(new SecurityValidatorPlugin({\n * forbiddenPatterns: [/eval\\s*\\(/],\n * maxComplexity: 20\n * }));\n */\n\nimport type * as t from '@babel/types';\nimport _traverse from '@babel/traverse';\nconst traverse = (_traverse as any).default || _traverse;\nimport type { ValidatorPlugin } from '../plugin-api.js';\nimport type { CompilerConfig } from '../../types.js';\n\nexport interface SecurityValidatorOptions {\n\t/**\n\t * Forbidden patterns (regex)\n\t */\n\tforbiddenPatterns?: RegExp[];\n\n\t/**\n\t * Maximum cyclomatic complexity\n\t */\n\tmaxComplexity?: number;\n\n\t/**\n\t * Maximum nesting depth\n\t */\n\tmaxNesting?: number;\n\n\t/**\n\t * Forbidden global access\n\t */\n\tforbiddenGlobals?: string[];\n}\n\nexport class SecurityValidatorPlugin implements ValidatorPlugin {\n\tname = 'security-validator';\n\tversion = '1.0.0';\n\tpriority = 100; // Run first\n\n\tprivate options: SecurityValidatorOptions;\n\n\tconstructor(options: SecurityValidatorOptions = {}) {\n\t\tthis.options = {\n\t\t\tforbiddenPatterns: options.forbiddenPatterns || [\n\t\t\t\t/\\beval\\s*\\(/,\n\t\t\t\t/new\\s+Function\\s*\\(/,\n\t\t\t\t/constructor\\s*\\[\\s*['\"`]constructor['\"`]\\s*\\]/,\n\t\t\t],\n\t\t\tmaxComplexity: options.maxComplexity || 50,\n\t\t\tmaxNesting: options.maxNesting || 10,\n\t\t\tforbiddenGlobals: options.forbiddenGlobals || [\n\t\t\t\t'process',\n\t\t\t\t'require',\n\t\t\t\t'__dirname',\n\t\t\t\t'__filename',\n\t\t\t],\n\t\t};\n\t}\n\n\tasync validate(code: string, ast: t.File, phase: 'pre' | 'post'): Promise<void> {\n\t\t// Only validate before transformation\n\t\tif (phase === 'post') {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Check forbidden patterns\n\t\tfor (const pattern of this.options.forbiddenPatterns!) {\n\t\t\tif (pattern.test(code)) {\n\t\t\t\tthrow new SecurityValidationError(\n\t\t\t\t\t`Forbidden pattern detected: ${pattern}`,\n\t\t\t\t\t'forbidden-pattern'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// 2. Check complexity and nesting\n\t\tlet maxNestingFound = 0;\n\t\tlet complexityScore = 0;\n\n\t\ttraverse(ast, {\n\t\t\tenter(path: any) {\n\t\t\t\tconst depth = path.scope.path.node ? getDepth(path) : 0;\n\t\t\t\tmaxNestingFound = Math.max(maxNestingFound, depth);\n\n\t\t\t\t// Increment complexity for control flow\n\t\t\t\tif (\n\t\t\t\t\tpath.isIfStatement() ||\n\t\t\t\t\tpath.isWhileStatement() ||\n\t\t\t\t\tpath.isForStatement() ||\n\t\t\t\t\tpath.isForOfStatement() ||\n\t\t\t\t\tpath.isSwitchCase() ||\n\t\t\t\t\tpath.isCatchClause()\n\t\t\t\t) {\n\t\t\t\t\tcomplexityScore++;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 3. Check forbidden globals\n\t\t\tIdentifier: (path: any) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.options.forbiddenGlobals!.includes(path.node.name) &&\n\t\t\t\t\t!path.scope.hasBinding(path.node.name)\n\t\t\t\t) {\n\t\t\t\t\tthrow new SecurityValidationError(\n\t\t\t\t\t\t`Access to forbidden global: ${path.node.name}`,\n\t\t\t\t\t\t'forbidden-global'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\n\t\tif (maxNestingFound > this.options.maxNesting!) {\n\t\t\tthrow new SecurityValidationError(\n\t\t\t\t`Maximum nesting depth exceeded: ${maxNestingFound} > ${this.options.maxNesting}`,\n\t\t\t\t'max-nesting'\n\t\t\t);\n\t\t}\n\n\t\tif (complexityScore > this.options.maxComplexity!) {\n\t\t\tthrow new SecurityValidationError(\n\t\t\t\t`Maximum complexity exceeded: ${complexityScore} > ${this.options.maxComplexity}`,\n\t\t\t\t'max-complexity'\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Security validation error\n */\nexport class SecurityValidationError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic code: string\n\t) {\n\t\tsuper(message);\n\t\tthis.name = 'SecurityValidationError';\n\t}\n}\n\n/**\n * Get nesting depth of a path\n */\nfunction getDepth(path: any): number {\n\tlet depth = 0;\n\tlet current = path;\n\n\twhile (current.parentPath) {\n\t\tif (\n\t\t\tcurrent.isBlockStatement() ||\n\t\t\tcurrent.isFunctionDeclaration() ||\n\t\t\tcurrent.isArrowFunctionExpression()\n\t\t) {\n\t\t\tdepth++;\n\t\t}\n\t\tcurrent = current.parentPath;\n\t}\n\n\treturn depth;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/transformer/utils.ts","../src/transformer/detector.ts","../src/runtime/context.ts","../src/transformer/batch-optimizer.ts","../src/transformer/batch-detector.ts","../src/transformer/array-transformer-utils.ts","../src/transformer/loop-transformer.ts","../src/transformer/array-transformer-wrappers.ts","../src/transformer/array-transformer-batch.ts","../src/transformer/array-transformer-sequential.ts","../src/transformer/array-transformer-batch-reconstruct.ts","../src/transformer/array-transformer.ts","../src/runtime/runtime-functions.ts","../src/transformer/promise-transformer.ts","../src/runtime/errors.ts","../src/transformer/index.ts","../src/runtime/checkpoint-manager.ts","../src/runtime/resumable-loops.ts","../src/runtime/resumable-arrays.ts","../src/runtime/resumable-parallel.ts","../src/runtime/batch-parallel.ts","../src/runtime/index.ts","../src/types/compiler-interface.ts","../src/plugin-system/plugin-api.ts","../src/plugin-system/pluggable-compiler.ts","../src/plugin-system/default-plugins/detection-plugin.ts","../src/plugin-system/default-plugins/loop-transformer-plugin.ts","../src/plugin-system/default-plugins/array-transformer-plugin.ts","../src/plugin-system/default-plugins/promise-transformer-plugin.ts","../src/plugin-system/create-default-compiler.ts","../src/plugin-system/examples/timeout-plugin.ts","../src/plugin-system/examples/security-validator-plugin.ts"],"names":["PAUSABLE_CALL_PATTERNS","namespace","method","DEFAULT_COMPILER_CONFIG","enableBatchParallel","maxLoopNesting","checkpointInterval","debugMode","batchSizeThreshold","isPausableCall","node","isAwaitExpression","argument","isCallExpression","isPausableCallExpression","callee","isMemberExpression","fullPath","getMemberExpressionPath","some","pattern","startsWith","parts","current","isIdentifier","property","unshift","name","object","join","containsAwait","hasAwait","checkNode","n","Object","keys","forEach","key","value","Array","isArray","item","type","containsPausableCall","hasPausable","isAsyncFunction","isFunctionDeclaration","isFunctionExpression","isArrowFunctionExpression","async","getNodeLocation","loc","line","start","column","undefined","createRuntimeCall","fnName","args","awaitExpression","callExpression","memberExpression","identifier","wrapInAsyncFunction","body","functionExpression","blockStatement","isArrayMethod","methodName","extractForOfParamName","left","isVariableDeclaration","id","declarations","traverse","_traverse","default","AsyncIterationDetector","detect","code","patterns","batchableParallel","ast","parse","sourceType","plugins","allowAwaitOutsideFunction","allowReturnOutsideFunction","ForOfStatement","path","push","WhileStatement","CallExpression","callback","arguments","isFunction","isPromiseAll","canBatchPromiseAll","isPromiseAllSettled","needsTransform","length","Set","error","arrayArg","isArrayExpression","elements","every","el","isSpreadElement","isDirectPausableCall","contextStack","setRuntimeContext","context","getRuntimeContext","Error","clearRuntimeContext","pop","hasRuntimeContext","idCounter","generateUniqueId","prefix","Date","now","resetIdCounter","BatchOptimizer","arrayMethodsWithEarlyExit","canBatchArrayMethod","canBatch","reason","isBlockStatement","llmCallPattern","hasConditionals","statements","hasLoops","hasTryCatch","stmt","isIfStatement","isSwitchStatement","isTryStatement","isForStatement","isForOfStatement","isForInStatement","isWhileStatement","isDoWhileStatement","isBreakStatement","isContinueStatement","isReturnStatement","pausableCalls","countPausableCalls","lastStmt","isObjectExpression","makeSmartBatchDecision","batchResult","arrayNode","threshold","shouldBatch","strategy","hasEarlyExitBenefit","includes","arraySize","estimateArraySize","canBatchForOfLoop","loopNode","hasBreakOrContinue","containsBreakOrContinue","found","visit","count","BatchParallelDetector","promiseAllNode","extractBatchCalls","calls","callNode","callInfo","extractCallInfo","split","service","payload","extractPayload","operation","extractPayloadNode","objectExpression","firstArg","isExpression","objectExpressionToRecord","isStringLiteral","message","obj","record","prop","properties","isObjectProperty","computed","String","extractValue","isNumericLiteral","isBooleanLiteral","isNullLiteral","map","collectReferencedIdentifiers","identifiers","add","collectLocalVariables","locals","decl","isObjectPattern","isRestElement","isArrayPattern","elem","hasLLMCallDependencies","batchDetector","itemParamName","localVariables","size","allCalls","findAllAwaitedMemberCalls","call","payloadNode","referencedIds","has","findAllLLMCallExpressions","llmCalls","findLLMCallExpression","getArrayMethodName","arrayMethods","getRuntimeMethodName","arrayMethod","mapping","filter","reduce","find","flatMap","canUseBatchParallel","LoopTransformer","transformCount","batchOptimizer","constructor","transformForOfLoop","decision","right","transformForOfToBatch","transformForOfToSequential","loopId","paramName","llmCall","batchCallsArray","arrowFunctionExpression","objectProperty","stringLiteral","batchCall","replaceWith","expressionStatement","bodyStatements","callbackFn","runtimeCall","transformWhileLoop","conditionFn","test","bodyFn","transformForLoop","init","update","initValue","numericLiteral","loopVar","incrementFn","isUpdateExpression","operator","binaryExpression","getTransformCount","resetTransformCount","wrapFilterResult","array","methodId","resultsVar","indexVar","arrayClone","cloneNode","variableDeclaration","variableDeclarator","returnStatement","wrapFindResult","wrapSomeResult","wrapEveryResult","wrapBatchResultIfNeeded","extractBatchCallInfo","params","param","mapperFunction","transformToBatchParallel","onTransform","fallbackTransform","finalCall","transformToSequential","runtimeMethod","transformToBatchWithReconstruction","originalIndexParam","batchDeclarations","resultVarByCallIndex","Map","i","replace","set","payloadMapper","clonedBody","traversableNode","functionDeclaration","replacementCount","file","program","AwaitExpression","awaitPath","arg","info","matchedIndex","original","get","delete","resultAccess","noScope","reconstructBody","reconstructMapper","reconstructCall","iife","awaitIife","ArrayTransformer","transformArrayMethod","canTryBatchReconstruct","itemParam","hasDependencies","success","doTransformToSequential","RuntimeFunction","RESUMABLE_PROMISE_ALL","RESUMABLE_PROMISE_ALL_SETTLED","BATCH_PARALLEL","RESUMABLE_FOR_OF","RESUMABLE_FOR_LOOP","RESUMABLE_WHILE","RESUMABLE_MAP","RESUMABLE_FOR_EACH","RESUMABLE_FILTER","RESUMABLE_REDUCE","RESUMABLE_FIND","RESUMABLE_SOME","RESUMABLE_EVERY","RESUMABLE_FLAT_MAP","IN_ISOLATE_RUNTIME_FUNCTIONS","isInIsolateRuntimeFunction","TOOL_OPERATION_CALL","PromiseTransformer","transformPromiseAll","transformPromiseAllSettled","parallelId","batchId","arrayExpression","nullLiteral","payloadArg","buildBatchCallObject","payloadExpr","payloadToExpression","entries","valueToExpression","booleanLiteral","v","CheckpointOperation","BatchPauseExecutionError","sequenceNumber","CheckpointError","checkpointId","TransformationError","location","InfiniteLoopDetectionError","iterationCount","isBatchPauseError","isCheckpointError","isTransformationError","generate","_generate","ATPCompiler","config","detector","loopTransformer","arrayTransformer","promiseTransformer","transform","detection","transformed","metadata","loopCount","arrayMethodCount","parallelCallCount","batchableCount","ForStatement","isArrayMethodCall","isPromiseAllCall","isPromiseAllSettledCall","output","sourceMaps","retainLines","comments","getType","getCacheStats","MAX_CHECKPOINT_SIZE","CHECKPOINT_TTL","CheckpointManager","cache","executionId","save","checkpoint","getKey","serialized","JSON","stringify","SAVE","load","completed","LOAD","clear","CLEAR","clearAll","getExecutionId","globalCheckpointManager","setCheckpointManager","manager","getCheckpointManager","clearCheckpointManager","hasCheckpointManager","MAX_ITERATIONS","resumableForOf","items","checkpointManager","startIndex","currentIndex","newCheckpoint","timestamp","resumableWhile","iteration","Promise","resolve","resumableForLoop","iterations","resumableMap","mapId","results","resumableForEach","forEachId","resumableFilter","filterId","passed","resumableReduce","initialValue","reduceId","accumulator","resumableFind","findId","resumableSome","someId","result","resumableEvery","everyId","resumableFlatMap","flatMapId","mapped","resumablePromiseAll","promises","resumablePromiseAllSettled","status","batchParallel","batchCalls","currentSequence","getCallSequenceNumber","cachedResult","getCachedResult","nextSequenceNumber","sequenceForPause","initializeRuntime","options","checkpointPrefix","cleanupRuntime","isCompiler","PluginRegistry","detectors","transformers","optimizers","validators","register","plugin","findPlugin","isDetectionPlugin","sort","a","b","priority","isTransformationPlugin","isOptimizerPlugin","isValidatorPlugin","allPlugins","p","unregister","removed","getDetectors","getTransformers","getOptimizers","getValidators","initializeAll","initialize","disposeAll","dispose","createTransformPlugin","version","getVisitor","visitor","getMetadata","reset","PluggableCompiler","registry","initialized","astCache","use","remove","pluginName","parseCode","allPatterns","from","runValidation","transformer","visitors","nodeType","handler","existing","optimizedAst","optimizer","optimize","pluginMetadata","getConfig","setConfig","cached","clearCache","enabled","phase","validator","validate","DefaultDetectionPlugin","DefaultLoopTransformerPlugin","DefaultArrayTransformerPlugin","DefaultPromiseTransformerPlugin","createDefaultCompiler","compiler","AsyncTimeoutPlugin","timeout","wrapAll","shouldWrap","timeoutPromise","newExpression","raceCall","funcName","getFunctionName","regex","RegExp","SecurityValidatorPlugin","forbiddenPatterns","maxComplexity","maxNesting","forbiddenGlobals","SecurityValidationError","maxNestingFound","complexityScore","enter","depth","scope","getDepth","Math","max","isSwitchCase","isCatchClause","Identifier","hasBinding","parentPath"],"mappings":"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","file":"index.js","sourcesContent":["import type { CacheProvider } from '@mondaydotcomorg/atp-protocol';\n\nexport interface DetectionResult {\n\tneedsTransform: boolean;\n\tpatterns: AsyncPattern[];\n\tbatchableParallel?: boolean;\n}\n\nexport type AsyncPattern =\n\t| 'for-of-await'\n\t| 'while-await'\n\t| 'map-async'\n\t| 'forEach-async'\n\t| 'filter-async'\n\t| 'reduce-async'\n\t| 'find-async'\n\t| 'some-async'\n\t| 'every-async'\n\t| 'flatMap-async'\n\t| 'promise-all'\n\t| 'promise-allSettled';\n\nexport interface TransformResult {\n\tcode: string;\n\ttransformed: boolean;\n\tpatterns: AsyncPattern[];\n\tmetadata: TransformMetadata;\n}\n\nexport interface TransformMetadata {\n\tloopCount: number;\n\tarrayMethodCount: number;\n\tparallelCallCount: number;\n\tbatchableCount: number;\n}\n\nexport interface LoopCheckpoint {\n\tloopId: string;\n\tcurrentIndex: number;\n\tresults?: unknown[];\n\taccumulator?: unknown;\n\tcompleted?: Set<number>;\n\ttimestamp: number;\n}\n\nexport type BatchServiceType = 'llm' | 'approval' | 'embedding' | 'tool';\n\nexport interface BatchCallInfo {\n\ttype: BatchServiceType;\n\toperation: string;\n\tpayload: Record<string, unknown>;\n}\n\nexport interface RuntimeContext {\n\texecutionId: string;\n\tcache?: CacheProvider;\n\tcheckpointPrefix?: string;\n}\n\nexport interface TransformerOptions {\n\tgenerateDebugInfo?: boolean;\n\tmaxLoopNesting?: number;\n\tenableBatchParallel?: boolean;\n\tbatchSizeThreshold?: number;\n}\n\nexport interface PausableCallPattern {\n\tnamespace: string;\n\tmethod: string;\n}\n\nexport const PAUSABLE_CALL_PATTERNS: PausableCallPattern[] = [\n\t{ namespace: 'atp.llm', method: 'call' },\n\t{ namespace: 'atp.llm', method: 'extract' },\n\t{ namespace: 'atp.llm', method: 'classify' },\n\t{ namespace: 'atp.llm', method: 'stream' },\n\t{ namespace: 'atp.llm', method: 'generate' },\n\t{ namespace: 'atp.approval', method: 'request' },\n\t{ namespace: 'atp.approval', method: 'confirm' },\n\t{ namespace: 'atp.approval', method: 'verify' },\n\t{ namespace: 'atp.embedding', method: 'embed' },\n\t{ namespace: 'atp.embedding', method: 'search' },\n\t{ namespace: 'atp.embedding', method: 'create' },\n\t{ namespace: 'atp.embedding', method: 'generate' },\n\t{ namespace: 'atp.embedding', method: 'encode' },\n\t{ namespace: 'api.client', method: '*' },\n];\n\nexport interface CompilerConfig {\n\tenableBatchParallel?: boolean;\n\tmaxLoopNesting?: number;\n\tcheckpointInterval?: number;\n\tdebugMode?: boolean;\n\tbatchSizeThreshold?: number;\n}\n\nexport const DEFAULT_COMPILER_CONFIG: CompilerConfig = {\n\tenableBatchParallel: true,\n\tmaxLoopNesting: 10,\n\tcheckpointInterval: 1,\n\tdebugMode: false,\n\tbatchSizeThreshold: 10,\n};\n","import * as t from '@babel/types';\nimport { PAUSABLE_CALL_PATTERNS } from '../types.js';\n\nexport function isPausableCall(node: t.Node): boolean {\n\tif (!t.isAwaitExpression(node)) {\n\t\treturn false;\n\t}\n\n\tconst argument = node.argument;\n\tif (!t.isCallExpression(argument)) {\n\t\treturn false;\n\t}\n\n\treturn isPausableCallExpression(argument);\n}\n\nexport function isPausableCallExpression(node: t.CallExpression): boolean {\n\tconst callee = node.callee;\n\n\tif (!t.isMemberExpression(callee)) {\n\t\treturn false;\n\t}\n\n\tconst fullPath = getMemberExpressionPath(callee);\n\treturn PAUSABLE_CALL_PATTERNS.some((pattern) =>\n\t\tpattern.method === '*'\n\t\t\t? fullPath.startsWith(`${pattern.namespace}.`)\n\t\t\t: fullPath === `${pattern.namespace}.${pattern.method}`\n\t);\n}\n\nexport function getMemberExpressionPath(node: t.MemberExpression): string {\n\tconst parts: string[] = [];\n\n\tlet current: t.Node = node;\n\twhile (t.isMemberExpression(current)) {\n\t\tif (t.isIdentifier(current.property)) {\n\t\t\tparts.unshift(current.property.name);\n\t\t}\n\t\tcurrent = current.object;\n\t}\n\n\tif (t.isIdentifier(current)) {\n\t\tparts.unshift(current.name);\n\t}\n\n\treturn parts.join('.');\n}\n\nexport function containsAwait(node: t.Node): boolean {\n\tlet hasAwait = false;\n\n\tconst checkNode = (n: t.Node): void => {\n\t\tif (t.isAwaitExpression(n)) {\n\t\t\thasAwait = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (hasAwait) return;\n\n\t\tObject.keys(n).forEach((key) => {\n\t\t\tconst value = (n as any)[key];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\tcheckNode(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\tcheckNode(value);\n\t\t\t}\n\t\t});\n\t};\n\n\tcheckNode(node);\n\treturn hasAwait;\n}\n\nexport function containsPausableCall(node: t.Node): boolean {\n\tlet hasPausable = false;\n\n\tconst checkNode = (n: t.Node): void => {\n\t\tif (t.isAwaitExpression(n) && isPausableCall(n)) {\n\t\t\thasPausable = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (hasPausable) return;\n\n\t\tObject.keys(n).forEach((key) => {\n\t\t\tconst value = (n as any)[key];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\tcheckNode(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\tcheckNode(value);\n\t\t\t}\n\t\t});\n\t};\n\n\tcheckNode(node);\n\treturn hasPausable;\n}\n\nexport function isAsyncFunction(node: t.Node): boolean {\n\treturn (\n\t\t(t.isFunctionDeclaration(node) ||\n\t\t\tt.isFunctionExpression(node) ||\n\t\t\tt.isArrowFunctionExpression(node)) &&\n\t\tnode.async === true\n\t);\n}\n\nexport function getNodeLocation(node: t.Node): { line: number; column: number } | undefined {\n\tif (node.loc) {\n\t\treturn {\n\t\t\tline: node.loc.start.line,\n\t\t\tcolumn: node.loc.start.column,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nexport function createRuntimeCall(fnName: string, args: t.Expression[]): t.AwaitExpression {\n\treturn t.awaitExpression(\n\t\tt.callExpression(t.memberExpression(t.identifier('__runtime'), t.identifier(fnName)), args)\n\t);\n}\n\nexport function wrapInAsyncFunction(body: t.Statement[]): t.FunctionExpression {\n\treturn t.functionExpression(null, [], t.blockStatement(body), false, true);\n}\n\nexport function isArrayMethod(node: t.Node, methodName: string): boolean {\n\tif (!t.isCallExpression(node)) {\n\t\treturn false;\n\t}\n\n\tconst callee = node.callee;\n\tif (!t.isMemberExpression(callee)) {\n\t\treturn false;\n\t}\n\n\treturn t.isIdentifier(callee.property) && callee.property.name === methodName;\n}\n\n/**\n * Extract parameter name from ForOfStatement left side\n */\nexport function extractForOfParamName(left: t.VariableDeclaration | t.LVal): string {\n\tif (t.isVariableDeclaration(left)) {\n\t\tconst id = left.declarations[0]?.id;\n\t\treturn t.isIdentifier(id) ? id.name : 'item';\n\t} else if (t.isIdentifier(left)) {\n\t\treturn left.name;\n\t} else {\n\t\treturn 'item';\n\t}\n}\n","import { parse } from '@babel/parser';\nimport _traverse from '@babel/traverse';\n// @ts-ignore - CommonJS/ESM compatibility\nconst traverse =\n\ttypeof (_traverse as any).default === 'function' ? (_traverse as any).default : _traverse;\nimport * as t from '@babel/types';\nimport type { DetectionResult, AsyncPattern } from '../types.js';\nimport { containsAwait, isArrayMethod, isPausableCallExpression } from './utils.js';\n\nexport class AsyncIterationDetector {\n\tdetect(code: string): DetectionResult {\n\t\tconst patterns: AsyncPattern[] = [];\n\t\tlet batchableParallel = false;\n\n\t\ttry {\n\t\t\tconst ast = parse(code, {\n\t\t\t\tsourceType: 'module',\n\t\t\t\tplugins: ['typescript'],\n\t\t\t\tallowAwaitOutsideFunction: true,\n\t\t\t\tallowReturnOutsideFunction: true,\n\t\t\t});\n\n\t\t\ttraverse(ast, {\n\t\t\t\tForOfStatement: (path: any) => {\n\t\t\t\t\tif (containsAwait(path.node.body)) {\n\t\t\t\t\t\tpatterns.push('for-of-await');\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tWhileStatement: (path: any) => {\n\t\t\t\t\tif (containsAwait(path.node.body)) {\n\t\t\t\t\t\tpatterns.push('while-await');\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tCallExpression: (path: any) => {\n\t\t\t\t\tconst node = path.node;\n\n\t\t\t\t\tif (isArrayMethod(node, 'map')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('map-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'forEach')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('forEach-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'filter')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('filter-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'reduce')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('reduce-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'find')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('find-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'some')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('some-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'every')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('every-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isArrayMethod(node, 'flatMap')) {\n\t\t\t\t\t\tconst callback = node.arguments[0];\n\t\t\t\t\t\tif (callback && t.isFunction(callback) && callback.async) {\n\t\t\t\t\t\t\tpatterns.push('flatMap-async');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.isPromiseAll(node)) {\n\t\t\t\t\t\tpatterns.push('promise-all');\n\t\t\t\t\t\tif (this.canBatchPromiseAll(node)) {\n\t\t\t\t\t\t\tbatchableParallel = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.isPromiseAllSettled(node)) {\n\t\t\t\t\t\tpatterns.push('promise-allSettled');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tneedsTransform: patterns.length > 0,\n\t\t\t\tpatterns: [...new Set(patterns)],\n\t\t\t\tbatchableParallel,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tneedsTransform: false,\n\t\t\t\tpatterns: [],\n\t\t\t\tbatchableParallel: false,\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate isPromiseAll(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'all' })\n\t\t);\n\t}\n\n\tprivate isPromiseAllSettled(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'allSettled' })\n\t\t);\n\t}\n\n\tprivate canBatchPromiseAll(node: t.CallExpression): boolean {\n\t\tconst arrayArg = node.arguments[0];\n\n\t\tif (!t.isArrayExpression(arrayArg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (arrayArg.elements.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn arrayArg.elements.every((el) => {\n\t\t\tif (!el || t.isSpreadElement(el)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn this.isDirectPausableCall(el);\n\t\t});\n\t}\n\n\tprivate isDirectPausableCall(node: t.Node): boolean {\n\t\tif (t.isAwaitExpression(node)) {\n\t\t\tnode = node.argument;\n\t\t}\n\n\t\tif (!t.isCallExpression(node)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn isPausableCallExpression(node);\n\t}\n}\n","import type { RuntimeContext } from '../types.js';\n\nconst contextStack: RuntimeContext[] = [];\n\nexport function setRuntimeContext(context: RuntimeContext): void {\n\tcontextStack.push(context);\n}\n\nexport function getRuntimeContext(): RuntimeContext {\n\tconst context = contextStack[contextStack.length - 1];\n\tif (!context) {\n\t\tthrow new Error('No runtime context available. Compiler runtime not properly initialized.');\n\t}\n\treturn context;\n}\n\nexport function clearRuntimeContext(): void {\n\tcontextStack.pop();\n}\n\nexport function hasRuntimeContext(): boolean {\n\treturn contextStack.length > 0;\n}\n\nlet idCounter = 0;\n\nexport function generateUniqueId(prefix: string): string {\n\treturn `${prefix}_${Date.now()}_${idCounter++}`;\n}\n\nexport function resetIdCounter(): void {\n\tidCounter = 0;\n}\n","import * as t from '@babel/types';\nimport { isPausableCallExpression } from './utils.js';\n\nexport interface BatchOptimizationResult {\n\tcanBatch: boolean;\n\treason?: string;\n\tllmCallPattern?: 'single' | 'multiple' | 'conditional';\n\thasConditionals?: boolean;\n\thasLoops?: boolean;\n}\n\nexport interface SmartBatchDecision {\n\tshouldBatch: boolean;\n\treason: string;\n\tstrategy: 'always-batch' | 'size-dependent' | 'never-batch';\n}\n\nexport class BatchOptimizer {\n\tprivate arrayMethodsWithEarlyExit = ['find', 'some', 'every'];\n\n\tcanBatchArrayMethod(callback: t.Function): BatchOptimizationResult {\n\t\tif (!callback.async) {\n\t\t\treturn { canBatch: false, reason: 'Not async' };\n\t\t}\n\n\t\tconst body = callback.body;\n\n\t\tif (!t.isBlockStatement(body)) {\n\t\t\tif (t.isAwaitExpression(body)) {\n\t\t\t\tif (this.isDirectPausableCall(body.argument)) {\n\t\t\t\t\treturn { canBatch: true, llmCallPattern: 'single', hasConditionals: false };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { canBatch: false, reason: 'Non-block body without direct call' };\n\t\t}\n\n\t\tconst statements = body.body;\n\n\t\tif (statements.length === 0) {\n\t\t\treturn { canBatch: false, reason: 'Empty body' };\n\t\t}\n\n\t\tlet hasConditionals = false;\n\t\tlet hasLoops = false;\n\t\tlet hasTryCatch = false;\n\n\t\tfor (const stmt of statements) {\n\t\t\tif (t.isIfStatement(stmt) || t.isSwitchStatement(stmt)) {\n\t\t\t\thasConditionals = true;\n\t\t\t}\n\n\t\t\tif (t.isTryStatement(stmt)) {\n\t\t\t\thasTryCatch = true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tt.isForStatement(stmt) ||\n\t\t\t\tt.isForOfStatement(stmt) ||\n\t\t\t\tt.isForInStatement(stmt) ||\n\t\t\t\tt.isWhileStatement(stmt) ||\n\t\t\t\tt.isDoWhileStatement(stmt)\n\t\t\t) {\n\t\t\t\thasLoops = true;\n\t\t\t}\n\n\t\t\tif (t.isBreakStatement(stmt) || t.isContinueStatement(stmt)) {\n\t\t\t\treturn { canBatch: false, reason: 'Contains break/continue' };\n\t\t\t}\n\n\t\t\tif (t.isReturnStatement(stmt) && stmt !== statements[statements.length - 1]) {\n\t\t\t\treturn { canBatch: false, reason: 'Early return' };\n\t\t\t}\n\t\t}\n\n\t\tif (hasLoops) {\n\t\t\treturn { canBatch: false, reason: 'Contains loops', hasLoops: true };\n\t\t}\n\n\t\tif (hasTryCatch) {\n\t\t\treturn { canBatch: false, reason: 'Contains try-catch' };\n\t\t}\n\n\t\tconst pausableCalls = this.countPausableCalls(body);\n\t\tif (pausableCalls === 0) {\n\t\t\treturn { canBatch: false, reason: 'No pausable calls' };\n\t\t}\n\n\t\tif (pausableCalls > 1) {\n\t\t\treturn { canBatch: false, reason: 'Multiple pausable calls', llmCallPattern: 'multiple' };\n\t\t}\n\n\t\tif (hasConditionals) {\n\t\t\treturn {\n\t\t\t\tcanBatch: true,\n\t\t\t\tllmCallPattern: 'conditional',\n\t\t\t\thasConditionals: true,\n\t\t\t\treason: 'Simple conditional - can batch but consider array size',\n\t\t\t};\n\t\t}\n\n\t\tconst lastStmt = statements[statements.length - 1];\n\t\tif (t.isReturnStatement(lastStmt) && lastStmt.argument) {\n\t\t\tif (t.isObjectExpression(lastStmt.argument)) {\n\t\t\t\treturn {\n\t\t\t\t\tcanBatch: false,\n\t\t\t\t\treason: 'Return statement is object expression - batch would lose structure',\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (t.isArrayExpression(lastStmt.argument)) {\n\t\t\t\treturn {\n\t\t\t\t\tcanBatch: false,\n\t\t\t\t\treason: 'Return statement is array expression - batch would lose structure',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn { canBatch: true, llmCallPattern: 'single', hasConditionals: false };\n\t}\n\n\t/**\n\t * Smart decision: Should we batch based on array size and method type?\n\t */\n\tmakeSmartBatchDecision(\n\t\tmethodName: string,\n\t\tbatchResult: BatchOptimizationResult,\n\t\tarrayNode: t.Expression,\n\t\tthreshold: number = 10\n\t): SmartBatchDecision {\n\t\tif (!batchResult.canBatch) {\n\t\t\treturn {\n\t\t\t\tshouldBatch: false,\n\t\t\t\treason: 'Complex callback - use sequential',\n\t\t\t\tstrategy: 'never-batch',\n\t\t\t};\n\t\t}\n\n\t\tif (!batchResult.hasConditionals) {\n\t\t\treturn {\n\t\t\t\tshouldBatch: true,\n\t\t\t\treason: 'Simple callback - batching is faster',\n\t\t\t\tstrategy: 'always-batch',\n\t\t\t};\n\t\t}\n\n\t\tconst hasEarlyExitBenefit = this.arrayMethodsWithEarlyExit.includes(methodName);\n\n\t\tif (!hasEarlyExitBenefit) {\n\t\t\tconst arraySize = this.estimateArraySize(arrayNode);\n\n\t\t\tif (arraySize !== null && arraySize < threshold) {\n\t\t\t\treturn {\n\t\t\t\t\tshouldBatch: true,\n\t\t\t\t\treason: `Small array (${arraySize} < ${threshold}) - batch despite conditionals`,\n\t\t\t\t\tstrategy: 'size-dependent',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tshouldBatch: false,\n\t\t\t\treason: 'Conditionals + large/unknown array - sequential for safety',\n\t\t\t\tstrategy: 'size-dependent',\n\t\t\t};\n\t\t}\n\n\t\tconst arraySize = this.estimateArraySize(arrayNode);\n\n\t\tif (arraySize !== null && arraySize < threshold) {\n\t\t\treturn {\n\t\t\t\tshouldBatch: true,\n\t\t\t\treason: `Small array (${arraySize} < ${threshold}) - batch for speed`,\n\t\t\t\tstrategy: 'size-dependent',\n\t\t\t};\n\t\t}\n\n\t\tif (arraySize !== null && arraySize >= threshold) {\n\t\t\treturn {\n\t\t\t\tshouldBatch: false,\n\t\t\t\treason: `Large array (${arraySize} >= ${threshold}) + conditionals - sequential for early-exit savings`,\n\t\t\t\tstrategy: 'size-dependent',\n\t\t\t};\n\t\t}\n\n\t\tif (t.isArrayExpression(arrayNode)) {\n\t\t\treturn {\n\t\t\t\tshouldBatch: true,\n\t\t\t\treason: 'Array literal (likely small) - batch',\n\t\t\t\tstrategy: 'size-dependent',\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tshouldBatch: false,\n\t\t\treason: 'Unknown array size + conditionals - sequential for safety',\n\t\t\tstrategy: 'size-dependent',\n\t\t};\n\t}\n\n\tprivate estimateArraySize(arrayNode: t.Expression): number | null {\n\t\tif (t.isArrayExpression(arrayNode)) {\n\t\t\treturn arrayNode.elements.length;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tcanBatchForOfLoop(loopNode: t.ForOfStatement): BatchOptimizationResult {\n\t\tconst body = loopNode.body;\n\n\t\tif (!t.isBlockStatement(body)) {\n\t\t\treturn { canBatch: false, reason: 'Loop body not a block' };\n\t\t}\n\n\t\tconst statements = body.body;\n\n\t\tif (statements.length === 0) {\n\t\t\treturn { canBatch: false, reason: 'Empty loop body' };\n\t\t}\n\n\t\tconst hasBreakOrContinue = this.containsBreakOrContinue(body);\n\t\tif (hasBreakOrContinue) {\n\t\t\treturn { canBatch: false, reason: 'Contains break/continue' };\n\t\t}\n\n\t\tlet hasConditionals = false;\n\n\t\tfor (const stmt of statements) {\n\t\t\tif (t.isIfStatement(stmt) || t.isSwitchStatement(stmt)) {\n\t\t\t\thasConditionals = true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tt.isForStatement(stmt) ||\n\t\t\t\tt.isForOfStatement(stmt) ||\n\t\t\t\tt.isForInStatement(stmt) ||\n\t\t\t\tt.isWhileStatement(stmt) ||\n\t\t\t\tt.isDoWhileStatement(stmt)\n\t\t\t) {\n\t\t\t\treturn { canBatch: false, reason: 'Contains nested loops', hasLoops: true };\n\t\t\t}\n\t\t}\n\n\t\tconst pausableCalls = this.countPausableCalls(body);\n\t\tif (pausableCalls === 0) {\n\t\t\treturn { canBatch: false, reason: 'No pausable calls' };\n\t\t}\n\n\t\tif (pausableCalls > 1) {\n\t\t\treturn { canBatch: false, reason: 'Multiple pausable calls', llmCallPattern: 'multiple' };\n\t\t}\n\n\t\tif (hasConditionals) {\n\t\t\treturn {\n\t\t\t\tcanBatch: true,\n\t\t\t\tllmCallPattern: 'conditional',\n\t\t\t\thasConditionals: true,\n\t\t\t\treason: 'Simple conditional - can batch but consider array size',\n\t\t\t};\n\t\t}\n\n\t\treturn { canBatch: true, llmCallPattern: 'single', hasConditionals: false };\n\t}\n\n\tprivate containsBreakOrContinue(node: t.Node): boolean {\n\t\tlet found = false;\n\n\t\tconst visit = (n: t.Node) => {\n\t\t\tif (found) return;\n\n\t\t\tif (t.isBreakStatement(n) || t.isContinueStatement(n)) {\n\t\t\t\tfound = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tt.isForStatement(n) ||\n\t\t\t\tt.isForOfStatement(n) ||\n\t\t\t\tt.isForInStatement(n) ||\n\t\t\t\tt.isWhileStatement(n) ||\n\t\t\t\tt.isDoWhileStatement(n)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tObject.keys(n).forEach((key) => {\n\t\t\t\tconst value = (n as any)[key];\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\t\tvisit(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\t\tvisit(value);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tvisit(node);\n\t\treturn found;\n\t}\n\n\tprivate isDirectPausableCall(node: t.Node): boolean {\n\t\tif (!t.isCallExpression(node)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn isPausableCallExpression(node);\n\t}\n\n\tprivate countPausableCalls(body: t.BlockStatement): number {\n\t\tlet count = 0;\n\n\t\tconst visit = (node: t.Node) => {\n\t\t\tif (t.isAwaitExpression(node) && this.isDirectPausableCall(node.argument)) {\n\t\t\t\tcount++;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tObject.keys(node).forEach((key) => {\n\t\t\t\tconst value = (node as any)[key];\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\t\tvisit(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\t\tvisit(value);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tvisit(body);\n\t\treturn count;\n\t}\n}\n","import * as t from '@babel/types';\nimport type { BatchCallInfo, BatchServiceType } from '../types.js';\nimport { isPausableCallExpression, getMemberExpressionPath } from './utils.js';\n\nexport class BatchParallelDetector {\n\tcanBatch(promiseAllNode: t.CallExpression): boolean {\n\t\tconst arrayArg = promiseAllNode.arguments[0];\n\n\t\tif (!t.isArrayExpression(arrayArg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (arrayArg.elements.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn arrayArg.elements.every((el) => {\n\t\t\tif (!el || t.isSpreadElement(el)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn this.isDirectPausableCall(el);\n\t\t});\n\t}\n\n\tprivate isDirectPausableCall(node: t.Node): boolean {\n\t\tif (t.isAwaitExpression(node)) {\n\t\t\tnode = node.argument;\n\t\t}\n\n\t\tif (!t.isCallExpression(node)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn isPausableCallExpression(node);\n\t}\n\n\textractBatchCalls(arrayNode: t.ArrayExpression): BatchCallInfo[] {\n\t\tconst calls: BatchCallInfo[] = [];\n\n\t\tfor (const el of arrayNode.elements) {\n\t\t\tif (!el || t.isSpreadElement(el)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet callNode: t.Node = el;\n\t\t\tif (t.isAwaitExpression(callNode)) {\n\t\t\t\tcallNode = callNode.argument;\n\t\t\t}\n\n\t\t\tif (!t.isCallExpression(callNode)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst callInfo = this.extractCallInfo(callNode);\n\t\t\tif (callInfo) {\n\t\t\t\tcalls.push(callInfo);\n\t\t\t}\n\t\t}\n\n\t\treturn calls;\n\t}\n\n\textractCallInfo(callNode: t.CallExpression): BatchCallInfo | null {\n\t\tif (!t.isMemberExpression(callNode.callee)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst path = getMemberExpressionPath(callNode.callee);\n\t\tconst parts = path.split('.');\n\n\t\tif (parts.length < 3) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst [namespace, service, method] = parts;\n\t\tif (!service || !method) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet type: BatchServiceType;\n\t\tif (namespace === 'atp') {\n\t\t\tif (!['llm', 'approval', 'embedding'].includes(service)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttype = service as BatchServiceType;\n\t\t} else if (namespace === 'api' && service === 'client') {\n\t\t\ttype = 'tool';\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t\tconst payload = this.extractPayload(callNode.arguments as t.Expression[]);\n\n\t\treturn {\n\t\t\ttype,\n\t\t\toperation: method,\n\t\t\tpayload,\n\t\t};\n\t}\n\n\t/**\n\t * Extract payload AST node directly\n\t */\n\textractPayloadNode(callNode: t.CallExpression): t.Expression | null {\n\t\tif (callNode.arguments.length === 0) {\n\t\t\treturn t.objectExpression([]);\n\t\t}\n\n\t\tconst firstArg = callNode.arguments[0];\n\t\tif (!firstArg || t.isSpreadElement(firstArg) || !t.isExpression(firstArg)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn firstArg;\n\t}\n\n\tprivate extractPayload(args: Array<t.Expression | t.SpreadElement>): Record<string, unknown> {\n\t\tif (args.length === 0) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst firstArg = args[0];\n\t\tif (t.isSpreadElement(firstArg)) {\n\t\t\treturn {};\n\t\t}\n\n\t\tif (t.isObjectExpression(firstArg)) {\n\t\t\treturn this.objectExpressionToRecord(firstArg);\n\t\t}\n\n\t\tif (t.isStringLiteral(firstArg)) {\n\t\t\treturn { message: firstArg.value };\n\t\t}\n\n\t\treturn {};\n\t}\n\n\tprivate objectExpressionToRecord(obj: t.ObjectExpression): Record<string, unknown> {\n\t\tconst record: Record<string, unknown> = {};\n\n\t\tfor (const prop of obj.properties) {\n\t\t\tif (t.isObjectProperty(prop) && !prop.computed) {\n\t\t\t\tconst key = t.isIdentifier(prop.key) ? prop.key.name : String(prop.key);\n\t\t\t\tconst value = this.extractValue(prop.value);\n\t\t\t\trecord[key] = value;\n\t\t\t}\n\t\t}\n\n\t\treturn record;\n\t}\n\n\tprivate extractValue(node: t.Node): unknown {\n\t\tif (t.isStringLiteral(node)) {\n\t\t\treturn node.value;\n\t\t}\n\t\tif (t.isNumericLiteral(node)) {\n\t\t\treturn node.value;\n\t\t}\n\t\tif (t.isBooleanLiteral(node)) {\n\t\t\treturn node.value;\n\t\t}\n\t\tif (t.isNullLiteral(node)) {\n\t\t\treturn null;\n\t\t}\n\t\tif (t.isArrayExpression(node)) {\n\t\t\treturn node.elements.map((el) =>\n\t\t\t\tel && !t.isSpreadElement(el) ? this.extractValue(el) : null\n\t\t\t);\n\t\t}\n\t\tif (t.isObjectExpression(node)) {\n\t\t\treturn this.objectExpressionToRecord(node);\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n","import * as t from '@babel/types';\nimport { isArrayMethod } from './utils.js';\nimport type { BatchParallelDetector } from './batch-detector.js';\nimport type { BatchCallInfo } from '../types.js';\n\nexport interface LLMCallInfo {\n\tcallNode: t.CallExpression;\n\tcallInfo: BatchCallInfo;\n\tpayloadNode: t.Expression;\n\t// Unique key for grouping: \"type:operation\"\n\tkey: string;\n}\n\n/**\n * Collect all identifiers referenced in an expression\n */\nfunction collectReferencedIdentifiers(node: t.Node): Set<string> {\n\tconst identifiers = new Set<string>();\n\n\tconst visit = (n: t.Node) => {\n\t\tif (t.isIdentifier(n)) {\n\t\t\tidentifiers.add(n.name);\n\t\t}\n\n\t\t// Continue traversing\n\t\tObject.keys(n).forEach((key) => {\n\t\t\t// Skip 'type' and other metadata fields\n\t\t\tif (key === 'type' || key === 'loc' || key === 'start' || key === 'end') return;\n\t\t\tconst value = (n as any)[key];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\tvisit(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\tvisit(value);\n\t\t\t}\n\t\t});\n\t};\n\n\tvisit(node);\n\treturn identifiers;\n}\n\n/**\n * Collect all variable names declared inside a callback body.\n * This includes: const/let/var declarations, function parameters, etc.\n */\nfunction collectLocalVariables(body: t.Node): Set<string> {\n\tconst locals = new Set<string>();\n\n\tconst visit = (node: t.Node) => {\n\t\t// Variable declarations: const x = ..., let y = ..., var z = ...\n\t\tif (t.isVariableDeclaration(node)) {\n\t\t\tfor (const decl of node.declarations) {\n\t\t\t\tif (t.isIdentifier(decl.id)) {\n\t\t\t\t\tlocals.add(decl.id.name);\n\t\t\t\t} else if (t.isObjectPattern(decl.id)) {\n\t\t\t\t\t// Destructuring: const { a, b } = ...\n\t\t\t\t\tfor (const prop of decl.id.properties) {\n\t\t\t\t\t\tif (t.isObjectProperty(prop) && t.isIdentifier(prop.value)) {\n\t\t\t\t\t\t\tlocals.add(prop.value.name);\n\t\t\t\t\t\t} else if (t.isRestElement(prop) && t.isIdentifier(prop.argument)) {\n\t\t\t\t\t\t\tlocals.add(prop.argument.name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (t.isArrayPattern(decl.id)) {\n\t\t\t\t\t// Destructuring: const [a, b] = ...\n\t\t\t\t\tfor (const elem of decl.id.elements) {\n\t\t\t\t\t\tif (t.isIdentifier(elem)) {\n\t\t\t\t\t\t\tlocals.add(elem.name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Continue traversing (but don't descend into nested functions - their locals are their own scope)\n\t\tif (t.isFunction(node)) {\n\t\t\treturn; // Don't traverse into nested functions\n\t\t}\n\n\t\tObject.keys(node).forEach((key) => {\n\t\t\tif (key === 'type' || key === 'loc' || key === 'start' || key === 'end') return;\n\t\t\tconst value = (node as any)[key];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\tvisit(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\tvisit(value);\n\t\t\t}\n\t\t});\n\t};\n\n\tvisit(body);\n\treturn locals;\n}\n\n/**\n * Check if LLM call payloads depend on variables that are local to the callback.\n * This includes:\n * - Variables computed from other expressions (const x = item.name.toUpperCase())\n * - Results from previous LLM calls (const title = await atp.llm.call(...))\n * - Any other locally-defined variable\n *\n * When batch transforming, the payload mapper only has access to the array item parameter\n * and outer scope variables - NOT local variables defined inside the callback.\n *\n * @param body - The callback body\n * @param itemParamName - The name of the array item parameter (e.g., \"item\")\n * @param batchDetector - The batch detector for extracting LLM call info\n * @returns true if there are dependencies that prevent batch transformation\n */\nexport function hasLLMCallDependencies(\n\tbody: t.Node,\n\tbatchDetector: BatchParallelDetector,\n\titemParamName?: string\n): boolean {\n\t// Find all locally-defined variables in the callback body\n\tconst localVariables = collectLocalVariables(body);\n\n\t// If no local variables, no dependencies possible\n\tif (localVariables.size === 0) {\n\t\treturn false;\n\t}\n\n\t// Now check if any LLM call payload references these local variables\n\tconst allCalls = findAllAwaitedMemberCalls(body);\n\n\tfor (const call of allCalls) {\n\t\tconst payloadNode = batchDetector.extractPayloadNode(call);\n\t\tif (payloadNode) {\n\t\t\tconst referencedIds = collectReferencedIdentifiers(payloadNode);\n\t\t\t// Check if any referenced identifier is a local variable\n\t\t\t// (excluding the item parameter which is passed to the payload mapper)\n\t\t\tfor (const id of referencedIds) {\n\t\t\t\tif (localVariables.has(id) && id !== itemParamName) {\n\t\t\t\t\treturn true; // Found a dependency on a local variable\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Find all awaited member expression calls in AST node\n */\nfunction findAllAwaitedMemberCalls(body: t.Node): t.CallExpression[] {\n\tconst calls: t.CallExpression[] = [];\n\n\tconst visit = (node: t.Node) => {\n\t\tif (t.isAwaitExpression(node) && t.isCallExpression(node.argument)) {\n\t\t\tconst call = node.argument;\n\t\t\tif (t.isMemberExpression(call.callee)) {\n\t\t\t\tcalls.push(call);\n\t\t\t}\n\t\t}\n\n\t\t// Continue traversing\n\t\tObject.keys(node).forEach((key) => {\n\t\t\tconst value = (node as any)[key];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\tif (item && typeof item === 'object' && item.type) {\n\t\t\t\t\t\tvisit(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\t\tvisit(value);\n\t\t\t}\n\t\t});\n\t};\n\n\tvisit(body);\n\treturn calls;\n}\n\n/**\n * Find ALL LLM call expressions in AST node with batch info\n */\nexport function findAllLLMCallExpressions(\n\tbody: t.Node,\n\tbatchDetector: BatchParallelDetector\n): LLMCallInfo[] {\n\tconst allCalls = findAllAwaitedMemberCalls(body);\n\tconst llmCalls: LLMCallInfo[] = [];\n\n\tfor (const call of allCalls) {\n\t\tconst callInfo = batchDetector.extractCallInfo(call);\n\t\tconst payloadNode = batchDetector.extractPayloadNode(call);\n\n\t\tif (callInfo && payloadNode) {\n\t\t\tllmCalls.push({\n\t\t\t\tcallNode: call,\n\t\t\t\tcallInfo,\n\t\t\t\tpayloadNode,\n\t\t\t\tkey: `${callInfo.type}:${callInfo.operation}`,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn llmCalls;\n}\n\n/**\n * Find first LLM call expression in AST node\n */\nexport function findLLMCallExpression(body: t.Node): t.CallExpression | null {\n\tconst calls = findAllAwaitedMemberCalls(body);\n\treturn calls[0] ?? null;\n}\n\n/**\n * Get array method name from call expression\n */\nexport function getArrayMethodName(node: t.CallExpression): string | null {\n\tconst arrayMethods = ['map', 'forEach', 'filter', 'reduce', 'find', 'some', 'every', 'flatMap'];\n\tfor (const method of arrayMethods) {\n\t\tif (isArrayMethod(node, method)) {\n\t\t\treturn method;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Get runtime method name for array method\n */\nexport function getRuntimeMethodName(arrayMethod: string): string | null {\n\tconst mapping: Record<string, string> = {\n\t\tmap: 'resumableMap',\n\t\tforEach: 'resumableForEach',\n\t\tfilter: 'resumableFilter',\n\t\treduce: 'resumableReduce',\n\t\tfind: 'resumableFind',\n\t\tsome: 'resumableSome',\n\t\tevery: 'resumableEvery',\n\t\tflatMap: 'resumableFlatMap',\n\t};\n\n\treturn mapping[arrayMethod] || null;\n}\n\n/**\n * Check if method can use batch parallel optimization\n */\nexport function canUseBatchParallel(methodName: string): boolean {\n\treturn ['map', 'forEach', 'filter', 'find', 'some', 'every'].includes(methodName);\n}\n","import * as t from '@babel/types';\nimport { generateUniqueId } from '../runtime/context.js';\nimport { containsAwait, extractForOfParamName } from './utils.js';\nimport { BatchOptimizer } from './batch-optimizer.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport { findLLMCallExpression } from './array-transformer-utils.js';\n\nexport class LoopTransformer {\n\tprivate transformCount = 0;\n\tprivate batchOptimizer: BatchOptimizer;\n\tprivate batchDetector: BatchParallelDetector;\n\tprivate batchSizeThreshold: number;\n\n\tconstructor(batchSizeThreshold: number = 10) {\n\t\tthis.batchOptimizer = new BatchOptimizer();\n\t\tthis.batchDetector = new BatchParallelDetector();\n\t\tthis.batchSizeThreshold = batchSizeThreshold;\n\t}\n\n\ttransformForOfLoop(path: any): boolean {\n\t\tconst node = path.node as t.ForOfStatement;\n\n\t\tif (!containsAwait(node.body)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst batchResult = this.batchOptimizer.canBatchForOfLoop(node);\n\n\t\tif (batchResult.canBatch) {\n\t\t\tconst decision = this.batchOptimizer.makeSmartBatchDecision(\n\t\t\t\t'for...of',\n\t\t\t\tbatchResult,\n\t\t\t\tnode.right,\n\t\t\t\tthis.batchSizeThreshold\n\t\t\t);\n\n\t\t\tif (decision.shouldBatch) {\n\t\t\t\treturn this.transformForOfToBatch(path, node);\n\t\t\t}\n\t\t}\n\n\t\treturn this.transformForOfToSequential(path, node);\n\t}\n\n\t/**\n\t * Transform simple for...of to batch parallel\n\t */\n\tprivate transformForOfToBatch(path: any, node: t.ForOfStatement): boolean {\n\t\tconst loopId = generateUniqueId('for_of_batch');\n\t\tconst right = node.right;\n\t\tconst paramName = extractForOfParamName(node.left);\n\n\t\tconst llmCall = findLLMCallExpression(node.body);\n\t\tif (!llmCall) {\n\t\t\treturn this.transformForOfToSequential(path, node);\n\t\t}\n\n\t\tconst callInfo = this.batchDetector.extractCallInfo(llmCall);\n\t\tif (!callInfo) {\n\t\t\treturn this.transformForOfToSequential(path, node);\n\t\t}\n\n\t\tconst payloadNode = this.batchDetector.extractPayloadNode(llmCall);\n\t\tif (!payloadNode) {\n\t\t\treturn this.transformForOfToSequential(path, node);\n\t\t}\n\n\t\tconst batchCallsArray = t.callExpression(t.memberExpression(right, t.identifier('map')), [\n\t\t\tt.arrowFunctionExpression(\n\t\t\t\t[t.identifier(paramName)],\n\t\t\t\tt.objectExpression([\n\t\t\t\t\tt.objectProperty(t.identifier('type'), t.stringLiteral(callInfo.type)),\n\t\t\t\t\tt.objectProperty(t.identifier('operation'), t.stringLiteral(callInfo.operation)),\n\t\t\t\t\tt.objectProperty(t.identifier('payload'), payloadNode),\n\t\t\t\t])\n\t\t\t),\n\t\t]);\n\n\t\tconst batchCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier('batchParallel')),\n\t\t\t\t[batchCallsArray, t.stringLiteral(loopId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(t.expressionStatement(batchCall));\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Transform for...of to sequential with checkpoints (fallback)\n\t */\n\tprivate transformForOfToSequential(path: any, node: t.ForOfStatement): boolean {\n\t\tconst loopId = generateUniqueId('for_of');\n\t\tconst right = node.right;\n\t\tconst paramName = extractForOfParamName(node.left);\n\n\t\tconst bodyStatements = t.isBlockStatement(node.body) ? node.body.body : [node.body];\n\n\t\tconst callbackFn = t.arrowFunctionExpression(\n\t\t\t[t.identifier(paramName), t.identifier('__index')],\n\t\t\tt.blockStatement(bodyStatements),\n\t\t\ttrue\n\t\t);\n\n\t\tconst runtimeCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier('resumableForOf')),\n\t\t\t\t[right, callbackFn, t.stringLiteral(loopId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(t.expressionStatement(runtimeCall));\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\ttransformWhileLoop(path: any): boolean {\n\t\tconst node = path.node as t.WhileStatement;\n\n\t\tif (!containsAwait(node.body)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst loopId = generateUniqueId('while');\n\n\t\tconst conditionFn = t.arrowFunctionExpression([], node.test, false);\n\n\t\tconst bodyStatements = t.isBlockStatement(node.body) ? node.body.body : [node.body];\n\n\t\tconst bodyFn = t.arrowFunctionExpression(\n\t\t\t[t.identifier('__iteration')],\n\t\t\tt.blockStatement(bodyStatements),\n\t\t\ttrue\n\t\t);\n\n\t\tconst runtimeCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier('resumableWhile')),\n\t\t\t\t[conditionFn, bodyFn, t.stringLiteral(loopId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(t.expressionStatement(runtimeCall));\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\ttransformForLoop(path: any): boolean {\n\t\tconst node = path.node as t.ForStatement;\n\n\t\tif (!containsAwait(node.body)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!node.init || !node.test || !node.update) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst loopId = generateUniqueId('for');\n\n\t\tlet initValue: t.Expression = t.numericLiteral(0);\n\t\tlet loopVar = '__i';\n\n\t\tif (t.isVariableDeclaration(node.init)) {\n\t\t\tconst decl = node.init.declarations[0];\n\t\t\tif (decl && t.isIdentifier(decl.id) && decl.init) {\n\t\t\t\tloopVar = decl.id.name;\n\t\t\t\tinitValue = decl.init;\n\t\t\t}\n\t\t}\n\n\t\tconst conditionFn = t.arrowFunctionExpression([t.identifier(loopVar)], node.test, false);\n\n\t\tconst bodyStatements = t.isBlockStatement(node.body) ? node.body.body : [node.body];\n\n\t\tconst bodyFn = t.arrowFunctionExpression(\n\t\t\t[t.identifier(loopVar)],\n\t\t\tt.blockStatement(bodyStatements),\n\t\t\ttrue\n\t\t);\n\n\t\tlet incrementFn: t.Expression;\n\t\tif (t.isUpdateExpression(node.update)) {\n\t\t\tif (node.update.operator === '++') {\n\t\t\t\tincrementFn = t.arrowFunctionExpression(\n\t\t\t\t\t[t.identifier(loopVar)],\n\t\t\t\t\tt.binaryExpression('+', t.identifier(loopVar), t.numericLiteral(1)),\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t} else if (node.update.operator === '--') {\n\t\t\t\tincrementFn = t.arrowFunctionExpression(\n\t\t\t\t\t[t.identifier(loopVar)],\n\t\t\t\t\tt.binaryExpression('-', t.identifier(loopVar), t.numericLiteral(1)),\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst runtimeCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier('resumableForLoop')),\n\t\t\t\t[initValue, conditionFn, incrementFn, bodyFn, t.stringLiteral(loopId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(t.expressionStatement(runtimeCall));\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\tgetTransformCount(): number {\n\t\treturn this.transformCount;\n\t}\n\n\tresetTransformCount(): void {\n\t\tthis.transformCount = 0;\n\t}\n}\n","import * as t from '@babel/types';\n\n/**\n * Wrap batch result with post-processing for filter()\n * Filter must return filtered ITEMS, not boolean results\n */\nexport function wrapFilterResult(\n\tbatchCall: t.AwaitExpression,\n\tarray: t.Expression,\n\tmethodId: string\n): t.Expression {\n\tconst resultsVar = `__filter_results_${methodId}`;\n\tconst indexVar = `__i_${methodId}`;\n\tconst arrayClone = t.cloneNode(array, true);\n\n\treturn t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.arrowFunctionExpression(\n\t\t\t\t[],\n\t\t\t\tt.blockStatement([\n\t\t\t\t\tt.variableDeclaration('const', [\n\t\t\t\t\t\tt.variableDeclarator(t.identifier(resultsVar), batchCall.argument),\n\t\t\t\t\t]),\n\t\t\t\t\tt.returnStatement(\n\t\t\t\t\t\tt.callExpression(t.memberExpression(arrayClone, t.identifier('filter')), [\n\t\t\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t\t\t[t.identifier('_'), t.identifier(indexVar)],\n\t\t\t\t\t\t\t\tt.callExpression(t.identifier('Boolean'), [\n\t\t\t\t\t\t\t\t\tt.memberExpression(t.identifier(resultsVar), t.identifier(indexVar), true),\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t\ttrue\n\t\t\t),\n\t\t\t[]\n\t\t)\n\t);\n}\n\n/**\n * Wrap batch result with post-processing for find()\n * Find must return first matching ITEM (not boolean)\n */\nexport function wrapFindResult(\n\tbatchCall: t.AwaitExpression,\n\tarray: t.Expression,\n\tmethodId: string\n): t.Expression {\n\tconst resultsVar = `__find_results_${methodId}`;\n\tconst arrayClone = t.cloneNode(array, true);\n\n\treturn t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.arrowFunctionExpression(\n\t\t\t\t[],\n\t\t\t\tt.blockStatement([\n\t\t\t\t\tt.variableDeclaration('const', [\n\t\t\t\t\t\tt.variableDeclarator(t.identifier(resultsVar), batchCall.argument),\n\t\t\t\t\t]),\n\t\t\t\t\tt.returnStatement(\n\t\t\t\t\t\tt.callExpression(t.memberExpression(arrayClone, t.identifier('find')), [\n\t\t\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t\t\t[t.identifier('_'), t.identifier('__i')],\n\t\t\t\t\t\t\t\tt.callExpression(t.identifier('Boolean'), [\n\t\t\t\t\t\t\t\t\tt.memberExpression(t.identifier(resultsVar), t.identifier('__i'), true),\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t\ttrue\n\t\t\t),\n\t\t\t[]\n\t\t)\n\t);\n}\n\n/**\n * Wrap batch result with post-processing for some()\n * Some must return boolean: true if ANY result is truthy\n */\nexport function wrapSomeResult(batchCall: t.AwaitExpression, methodId: string): t.Expression {\n\tconst resultsVar = `__some_results_${methodId}`;\n\n\treturn t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.arrowFunctionExpression(\n\t\t\t\t[],\n\t\t\t\tt.blockStatement([\n\t\t\t\t\tt.variableDeclaration('const', [\n\t\t\t\t\t\tt.variableDeclarator(t.identifier(resultsVar), batchCall.argument),\n\t\t\t\t\t]),\n\t\t\t\t\tt.returnStatement(\n\t\t\t\t\t\tt.callExpression(t.memberExpression(t.identifier(resultsVar), t.identifier('some')), [\n\t\t\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t\t\t[t.identifier('r')],\n\t\t\t\t\t\t\t\tt.callExpression(t.identifier('Boolean'), [t.identifier('r')])\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t\ttrue\n\t\t\t),\n\t\t\t[]\n\t\t)\n\t);\n}\n\n/**\n * Wrap batch result with post-processing for every()\n * Every must return boolean: true if ALL results are truthy\n */\nexport function wrapEveryResult(batchCall: t.AwaitExpression, methodId: string): t.Expression {\n\tconst resultsVar = `__every_results_${methodId}`;\n\n\treturn t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.arrowFunctionExpression(\n\t\t\t\t[],\n\t\t\t\tt.blockStatement([\n\t\t\t\t\tt.variableDeclaration('const', [\n\t\t\t\t\t\tt.variableDeclarator(t.identifier(resultsVar), batchCall.argument),\n\t\t\t\t\t]),\n\t\t\t\t\tt.returnStatement(\n\t\t\t\t\t\tt.callExpression(t.memberExpression(t.identifier(resultsVar), t.identifier('every')), [\n\t\t\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t\t\t[t.identifier('r')],\n\t\t\t\t\t\t\t\tt.callExpression(t.identifier('Boolean'), [t.identifier('r')])\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t\ttrue\n\t\t\t),\n\t\t\t[]\n\t\t)\n\t);\n}\n\n/**\n * Wrap batch result if method needs post-processing\n */\nexport function wrapBatchResultIfNeeded(\n\tbatchCall: t.AwaitExpression,\n\tmethodName: string,\n\tarray: t.Expression,\n\tmethodId: string\n): t.Expression {\n\tswitch (methodName) {\n\t\tcase 'filter':\n\t\t\treturn wrapFilterResult(batchCall, array, methodId);\n\t\tcase 'find':\n\t\t\treturn wrapFindResult(batchCall, array, methodId);\n\t\tcase 'some':\n\t\t\treturn wrapSomeResult(batchCall, methodId);\n\t\tcase 'every':\n\t\t\treturn wrapEveryResult(batchCall, methodId);\n\t\tcase 'forEach':\n\t\t\treturn batchCall;\n\t\tdefault:\n\t\t\treturn batchCall;\n\t}\n}\n","import * as t from '@babel/types';\nimport { generateUniqueId } from '../runtime/context.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport { findLLMCallExpression } from './array-transformer-utils.js';\nimport { wrapBatchResultIfNeeded } from './array-transformer-wrappers.js';\n\n/**\n * Extract batch call info from callback\n */\nexport function extractBatchCallInfo(\n\tcallback: t.Function,\n\tbatchDetector: BatchParallelDetector\n): {\n\tmapperFunction: t.ArrowFunctionExpression;\n} | null {\n\tconst paramName = callback.params[0];\n\tif (!t.isIdentifier(paramName)) {\n\t\treturn null;\n\t}\n\n\tconst param = paramName.name;\n\n\tconst llmCall = findLLMCallExpression(callback.body);\n\tif (!llmCall) {\n\t\treturn null;\n\t}\n\n\tconst callInfo = batchDetector.extractCallInfo(llmCall);\n\tif (!callInfo) {\n\t\treturn null;\n\t}\n\n\tconst payloadNode = batchDetector.extractPayloadNode(llmCall);\n\tif (!payloadNode) {\n\t\treturn null;\n\t}\n\n\tconst mapperFunction = t.arrowFunctionExpression(\n\t\t[t.identifier(param)],\n\t\tt.objectExpression([\n\t\t\tt.objectProperty(t.identifier('type'), t.stringLiteral(callInfo.type)),\n\t\t\tt.objectProperty(t.identifier('operation'), t.stringLiteral(callInfo.operation)),\n\t\t\tt.objectProperty(t.identifier('payload'), payloadNode),\n\t\t])\n\t);\n\n\treturn { mapperFunction };\n}\n\n/**\n * Transform simple array method to batch parallel execution\n */\nexport function transformToBatchParallel(\n\tpath: any,\n\tnode: t.CallExpression,\n\tmethodName: string,\n\tcallback: t.Function,\n\tbatchDetector: BatchParallelDetector,\n\tonTransform: () => void,\n\tfallbackTransform: () => boolean\n): boolean {\n\tconst methodId = generateUniqueId(`${methodName}_batch`);\n\tconst array = (node.callee as t.MemberExpression).object;\n\n\tconst callInfo = extractBatchCallInfo(callback, batchDetector);\n\tif (!callInfo) {\n\t\treturn fallbackTransform();\n\t}\n\n\tconst batchCallsArray = t.callExpression(t.memberExpression(array, t.identifier('map')), [\n\t\tcallInfo.mapperFunction,\n\t]);\n\n\tconst batchCall = t.awaitExpression(\n\t\tt.callExpression(t.memberExpression(t.identifier('__runtime'), t.identifier('batchParallel')), [\n\t\t\tbatchCallsArray,\n\t\t\tt.stringLiteral(methodId),\n\t\t])\n\t);\n\n\tconst finalCall = wrapBatchResultIfNeeded(batchCall, methodName, array, methodId);\n\n\tpath.replaceWith(finalCall);\n\tonTransform();\n\treturn true;\n}\n","import * as t from '@babel/types';\nimport { generateUniqueId } from '../runtime/context.js';\nimport { getRuntimeMethodName } from './array-transformer-utils.js';\n\n/**\n * Transform to sequential execution with checkpoints (fallback)\n */\nexport function transformToSequential(\n\tpath: any,\n\tnode: t.CallExpression,\n\tmethodName: string,\n\tcallback: t.Function,\n\tonTransform: () => void\n): boolean {\n\tconst runtimeMethod = getRuntimeMethodName(methodName);\n\tif (!runtimeMethod) {\n\t\treturn false;\n\t}\n\n\tconst methodId = generateUniqueId(methodName);\n\tconst array = (node.callee as t.MemberExpression).object;\n\tconst args: t.Expression[] = [array, callback as t.Expression, t.stringLiteral(methodId)];\n\n\tif (methodName === 'reduce' && node.arguments[1]) {\n\t\targs.push(node.arguments[1] as t.Expression);\n\t}\n\n\tconst runtimeCall = t.awaitExpression(\n\t\tt.callExpression(\n\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier(runtimeMethod)),\n\t\t\targs\n\t\t)\n\t);\n\n\tpath.replaceWith(runtimeCall);\n\tonTransform();\n\treturn true;\n}\n","import * as t from '@babel/types';\nimport _traverse from '@babel/traverse';\nconst traverse = typeof (_traverse as any).default === 'function' ? (_traverse as any).default : _traverse;\nimport { generateUniqueId } from '../runtime/context.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport { findAllLLMCallExpressions } from './array-transformer-utils.js';\n\n/**\n * Transform array method to batch LLM calls while preserving callback logic.\n * Supports multiple LLM calls per callback.\n *\n * This creates a multi-step transformation:\n * 1. Batch all LLM calls in parallel (one batch per unique type:operation)\n * 2. Reconstruct objects using the batched results\n */\nexport function transformToBatchWithReconstruction(\n\tpath: any,\n\tnode: t.CallExpression,\n\tmethodName: string,\n\tcallback: t.Function,\n\tbatchDetector: BatchParallelDetector,\n\tonTransform: () => void\n): boolean {\n\tif (methodName !== 'map') {\n\t\treturn false;\n\t}\n\n\tconst paramName = callback.params[0];\n\tif (!t.isIdentifier(paramName)) {\n\t\treturn false;\n\t}\n\tconst param = paramName.name;\n\tconst array = (node.callee as t.MemberExpression).object;\n\n\t// Find ALL LLM calls\n\tconst llmCalls = findAllLLMCallExpressions(callback.body, batchDetector);\n\tif (llmCalls.length === 0) {\n\t\treturn false;\n\t}\n\n\tconst methodId = generateUniqueId(`${methodName}_batch_reconstruct`);\n\n\tconst originalIndexParam = callback.params[1];\n\tconst indexVar =\n\t\toriginalIndexParam && t.isIdentifier(originalIndexParam) ? originalIndexParam.name : '__idx';\n\n\t// Create batch declarations - one per LLM call (in order of appearance)\n\t// This ensures each call gets its own result array\n\tconst batchDeclarations: t.Statement[] = [];\n\tconst resultVarByCallIndex = new Map<number, string>();\n\n\tfor (let i = 0; i < llmCalls.length; i++) {\n\t\tconst call = llmCalls[i]!;\n\t\tconst resultsVar = `__batch_results_${i}_${methodId.replace(/[^a-zA-Z0-9]/g, '_')}`;\n\t\tresultVarByCallIndex.set(i, resultsVar);\n\n\t\tconst payloadMapper = t.arrowFunctionExpression(\n\t\t\t[t.identifier(param)],\n\t\t\tt.objectExpression([\n\t\t\t\tt.objectProperty(t.identifier('type'), t.stringLiteral(call.callInfo.type)),\n\t\t\t\tt.objectProperty(\n\t\t\t\t\tt.identifier('operation'),\n\t\t\t\t\tt.stringLiteral(call.callInfo.operation)\n\t\t\t\t),\n\t\t\t\tt.objectProperty(t.identifier('payload'), t.cloneNode(call.payloadNode, true)),\n\t\t\t])\n\t\t);\n\n\t\tconst batchCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier('batchParallel')),\n\t\t\t\t[\n\t\t\t\t\tt.callExpression(\n\t\t\t\t\t\tt.memberExpression(t.cloneNode(array, true), t.identifier('map')),\n\t\t\t\t\t\t[payloadMapper]\n\t\t\t\t\t),\n\t\t\t\t\tt.stringLiteral(`${methodId}_${i}`),\n\t\t\t\t]\n\t\t\t)\n\t\t);\n\n\t\tbatchDeclarations.push(\n\t\t\tt.variableDeclaration('const', [\n\t\t\t\tt.variableDeclarator(t.identifier(resultsVar), batchCall),\n\t\t\t])\n\t\t);\n\t}\n\n\t// Clone the callback body for reconstruction\n\tconst clonedBody = t.cloneNode(callback.body, true);\n\n\tlet traversableNode: t.Statement;\n\tif (t.isBlockStatement(clonedBody)) {\n\t\ttraversableNode = t.functionDeclaration(t.identifier('__temp'), [], clonedBody);\n\t} else {\n\t\ttraversableNode = t.expressionStatement(clonedBody as t.Expression);\n\t}\n\n\t// Replace each await expression with the corresponding result access\n\t// We match calls by comparing their structure to the original calls\n\tlet replacementCount = 0;\n\n\ttraverse(t.file(t.program([traversableNode])), {\n\t\tAwaitExpression(awaitPath: any) {\n\t\t\tconst arg = awaitPath.node.argument;\n\t\t\tif (!t.isCallExpression(arg)) return;\n\n\t\t\tconst info = batchDetector.extractCallInfo(arg);\n\t\t\tif (!info) return;\n\n\t\t\tconst key = `${info.type}:${info.operation}`;\n\n\t\t\t// Find first unused call with matching key\n\t\t\tlet matchedIndex = -1;\n\t\t\tfor (let i = 0; i < llmCalls.length; i++) {\n\t\t\t\tconst original = llmCalls[i]!;\n\t\t\t\tif (original.key === key && resultVarByCallIndex.has(i)) {\n\t\t\t\t\tmatchedIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (matchedIndex === -1) return;\n\n\t\t\tconst resultsVar = resultVarByCallIndex.get(matchedIndex);\n\t\t\tif (!resultsVar) return;\n\t\t\t// Remove from map so we don't reuse it\n\t\t\tresultVarByCallIndex.delete(matchedIndex);\n\n\t\t\tconst resultAccess = t.memberExpression(\n\t\t\t\tt.identifier(resultsVar),\n\t\t\t\tt.identifier(indexVar),\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tawaitPath.replaceWith(resultAccess);\n\t\t\treplacementCount++;\n\t\t},\n\t\tnoScope: true,\n\t});\n\n\tif (replacementCount === 0) {\n\t\treturn false;\n\t}\n\n\tlet reconstructBody: t.BlockStatement | t.Expression;\n\tif (t.isBlockStatement(clonedBody)) {\n\t\treconstructBody = clonedBody;\n\t} else {\n\t\treconstructBody = clonedBody as t.Expression;\n\t}\n\n\tconst reconstructMapper = t.arrowFunctionExpression(\n\t\t[t.identifier(param), t.identifier(indexVar)],\n\t\treconstructBody\n\t);\n\treconstructMapper.async = false;\n\n\tconst reconstructCall = t.callExpression(\n\t\tt.memberExpression(t.cloneNode(array, true), t.identifier('map')),\n\t\t[reconstructMapper]\n\t);\n\n\t// Build the IIFE with all batch declarations followed by reconstruction\n\tconst iife = t.callExpression(\n\t\tt.arrowFunctionExpression(\n\t\t\t[],\n\t\t\tt.blockStatement([...batchDeclarations, t.returnStatement(reconstructCall)]),\n\t\t\ttrue // async\n\t\t),\n\t\t[]\n\t);\n\n\tconst awaitIife = t.awaitExpression(iife);\n\n\tpath.replaceWith(awaitIife);\n\tonTransform();\n\treturn true;\n}\n","import * as t from '@babel/types';\nimport { BatchOptimizer } from './batch-optimizer.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport {\n\tgetArrayMethodName,\n\tcanUseBatchParallel,\n\tfindLLMCallExpression,\n\thasLLMCallDependencies,\n} from './array-transformer-utils.js';\nimport { transformToBatchParallel } from './array-transformer-batch.js';\nimport { transformToSequential } from './array-transformer-sequential.js';\nimport { transformToBatchWithReconstruction } from './array-transformer-batch-reconstruct.js';\n\nexport class ArrayTransformer {\n\tprivate transformCount = 0;\n\tprivate batchOptimizer: BatchOptimizer;\n\tprivate batchDetector: BatchParallelDetector;\n\tprivate batchSizeThreshold: number;\n\n\tconstructor(batchSizeThreshold: number = 10) {\n\t\tthis.batchOptimizer = new BatchOptimizer();\n\t\tthis.batchDetector = new BatchParallelDetector();\n\t\tthis.batchSizeThreshold = batchSizeThreshold;\n\t}\n\n\ttransformArrayMethod(path: any): boolean {\n\t\tconst node = path.node as t.CallExpression;\n\n\t\tconst methodName = getArrayMethodName(node);\n\t\tif (!methodName) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst callback = node.arguments[0];\n\t\tif (!callback || !t.isFunction(callback) || !callback.async) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst batchResult = this.batchOptimizer.canBatchArrayMethod(callback);\n\t\tif (!batchResult.canBatch && methodName === 'map') {\n\t\t\tconst reason = batchResult.reason || '';\n\t\t\t// Try batch-with-reconstruction for:\n\t\t\t// 1. Object/array returns (would lose structure with simple batch)\n\t\t\t// 2. Multiple pausable calls (can batch each call type separately)\n\t\t\tconst canTryBatchReconstruct =\n\t\t\t\treason.includes('object expression') ||\n\t\t\t\treason.includes('array expression') ||\n\t\t\t\treason.includes('Multiple pausable calls');\n\n\t\t\tif (canTryBatchReconstruct) {\n\t\t\t\tconst llmCall = findLLMCallExpression(callback.body);\n\t\t\t\t// Get the item parameter name (e.g., \"item\" in items.map(async (item) => ...))\n\t\t\t\tconst itemParam = callback.params[0];\n\t\t\t\tconst itemParamName = t.isIdentifier(itemParam) ? itemParam.name : undefined;\n\t\t\t\t// Check for dependencies on local variables (e.g., computed values, previous LLM results)\n\t\t\t\t// If dependencies exist, we can't batch because payload mapper only has access to item + outer scope\n\t\t\t\tconst hasDependencies = hasLLMCallDependencies(\n\t\t\t\t\tcallback.body,\n\t\t\t\t\tthis.batchDetector,\n\t\t\t\t\titemParamName\n\t\t\t\t);\n\t\t\t\tif (llmCall && !hasDependencies) {\n\t\t\t\t\tconst success = transformToBatchWithReconstruction(\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmethodName,\n\t\t\t\t\t\tcallback,\n\t\t\t\t\t\tthis.batchDetector,\n\t\t\t\t\t\t() => this.transformCount++\n\t\t\t\t\t);\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (batchResult.canBatch && canUseBatchParallel(methodName)) {\n\t\t\tconst array = (node.callee as t.MemberExpression).object;\n\t\t\tconst decision = this.batchOptimizer.makeSmartBatchDecision(\n\t\t\t\tmethodName,\n\t\t\t\tbatchResult,\n\t\t\t\tarray,\n\t\t\t\tthis.batchSizeThreshold\n\t\t\t);\n\n\t\t\tif (decision.shouldBatch) {\n\t\t\t\treturn transformToBatchParallel(\n\t\t\t\t\tpath,\n\t\t\t\t\tnode,\n\t\t\t\t\tmethodName,\n\t\t\t\t\tcallback,\n\t\t\t\t\tthis.batchDetector,\n\t\t\t\t\t() => this.transformCount++,\n\t\t\t\t\t() => this.doTransformToSequential(path, node, methodName, callback)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn this.doTransformToSequential(path, node, methodName, callback);\n\t}\n\n\tprivate doTransformToSequential(\n\t\tpath: any,\n\t\tnode: t.CallExpression,\n\t\tmethodName: string,\n\t\tcallback: t.Function\n\t): boolean {\n\t\treturn transformToSequential(path, node, methodName, callback, () => this.transformCount++);\n\t}\n\n\tgetTransformCount(): number {\n\t\treturn this.transformCount;\n\t}\n\n\tresetTransformCount(): void {\n\t\tthis.transformCount = 0;\n\t}\n}\n","/**\n * Runtime Function Names\n *\n * These constants define the names of runtime functions used by the ATP compiler\n * when transforming code. They must match the implementations provided by the server.\n */\n\n/**\n * Promise-related runtime functions\n */\nexport const RuntimeFunction = {\n\t// Promise operations\n\tRESUMABLE_PROMISE_ALL: 'resumablePromiseAll',\n\tRESUMABLE_PROMISE_ALL_SETTLED: 'resumablePromiseAllSettled',\n\tBATCH_PARALLEL: 'batchParallel',\n\n\t// Loop operations\n\tRESUMABLE_FOR_OF: 'resumableForOf',\n\tRESUMABLE_FOR_LOOP: 'resumableForLoop',\n\tRESUMABLE_WHILE: 'resumableWhile',\n\n\t// Array method operations\n\tRESUMABLE_MAP: 'resumableMap',\n\tRESUMABLE_FOR_EACH: 'resumableForEach',\n\tRESUMABLE_FILTER: 'resumableFilter',\n\tRESUMABLE_REDUCE: 'resumableReduce',\n\tRESUMABLE_FIND: 'resumableFind',\n\tRESUMABLE_SOME: 'resumableSome',\n\tRESUMABLE_EVERY: 'resumableEvery',\n\tRESUMABLE_FLAT_MAP: 'resumableFlatMap',\n} as const;\n\nexport type RuntimeFunctionType = (typeof RuntimeFunction)[keyof typeof RuntimeFunction];\n\n/**\n * Runtime functions that must execute inside the isolate (cannot cross boundary).\n * These receive Promise arguments or callback functions that can't be cloned.\n *\n * NOTE: BATCH_PARALLEL is NOT included because it receives serializable callback\n * descriptors and needs to communicate with the host for callback execution.\n */\nexport const IN_ISOLATE_RUNTIME_FUNCTIONS: readonly RuntimeFunctionType[] = [\n\tRuntimeFunction.RESUMABLE_PROMISE_ALL,\n\tRuntimeFunction.RESUMABLE_PROMISE_ALL_SETTLED,\n\tRuntimeFunction.RESUMABLE_FOR_OF,\n\tRuntimeFunction.RESUMABLE_FOR_LOOP,\n\tRuntimeFunction.RESUMABLE_WHILE,\n\tRuntimeFunction.RESUMABLE_MAP,\n\tRuntimeFunction.RESUMABLE_FOR_EACH,\n\tRuntimeFunction.RESUMABLE_FILTER,\n\tRuntimeFunction.RESUMABLE_REDUCE,\n\tRuntimeFunction.RESUMABLE_FIND,\n\tRuntimeFunction.RESUMABLE_SOME,\n\tRuntimeFunction.RESUMABLE_EVERY,\n\tRuntimeFunction.RESUMABLE_FLAT_MAP,\n];\n\n/**\n * Check if a runtime function must execute inside the isolate\n */\nexport function isInIsolateRuntimeFunction(name: string): boolean {\n\treturn IN_ISOLATE_RUNTIME_FUNCTIONS.includes(name as RuntimeFunctionType);\n}\n","import * as t from '@babel/types';\nimport { generateUniqueId } from '../runtime/context.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport { RuntimeFunction } from '../runtime/runtime-functions.js';\nimport type { BatchCallInfo } from '../types.js';\n\nconst TOOL_OPERATION_CALL = 'call';\n\nexport class PromiseTransformer {\n\tprivate transformCount = 0;\n\tprivate batchDetector: BatchParallelDetector;\n\tprivate enableBatchParallel: boolean;\n\n\tconstructor(enableBatchParallel = true) {\n\t\tthis.batchDetector = new BatchParallelDetector();\n\t\tthis.enableBatchParallel = enableBatchParallel;\n\t}\n\n\ttransformPromiseAll(path: any): boolean {\n\t\tconst node = path.node as t.CallExpression;\n\n\t\tif (!this.isPromiseAll(node)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst arrayArg = node.arguments[0];\n\n\t\tif (this.enableBatchParallel && this.batchDetector.canBatch(node)) {\n\t\t\treturn this.transformToBatchParallel(path, node);\n\t\t}\n\n\t\tif (t.isArrayExpression(arrayArg)) {\n\t\t\treturn this.transformToSequential(path, node);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\ttransformPromiseAllSettled(path: any): boolean {\n\t\tconst node = path.node as t.CallExpression;\n\n\t\tif (!this.isPromiseAllSettled(node)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst arrayArg = node.arguments[0];\n\n\t\tif (t.isArrayExpression(arrayArg)) {\n\t\t\tconst parallelId = generateUniqueId('allSettled');\n\n\t\t\tconst runtimeCall = t.awaitExpression(\n\t\t\t\tt.callExpression(\n\t\t\t\t\tt.memberExpression(\n\t\t\t\t\t\tt.identifier('__runtime'),\n\t\t\t\t\t\tt.identifier(RuntimeFunction.RESUMABLE_PROMISE_ALL_SETTLED)\n\t\t\t\t\t),\n\t\t\t\t\t[arrayArg, t.stringLiteral(parallelId)]\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tpath.replaceWith(runtimeCall);\n\t\t\tthis.transformCount++;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate transformToBatchParallel(path: any, node: t.CallExpression): boolean {\n\t\tconst arrayArg = node.arguments[0];\n\t\tif (!t.isArrayExpression(arrayArg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst batchId = generateUniqueId('batch');\n\n\t\tconst batchCallsArray = t.arrayExpression(\n\t\t\tarrayArg.elements.map((el) => {\n\t\t\t\tif (!el || t.isSpreadElement(el)) {\n\t\t\t\t\treturn t.nullLiteral();\n\t\t\t\t}\n\n\t\t\t\tlet callNode: t.Node = el;\n\t\t\t\tif (t.isAwaitExpression(callNode)) {\n\t\t\t\t\tcallNode = callNode.argument;\n\t\t\t\t}\n\n\t\t\t\tif (!t.isCallExpression(callNode) || !t.isMemberExpression(callNode.callee)) {\n\t\t\t\t\treturn t.nullLiteral();\n\t\t\t\t}\n\n\t\t\t\tconst callInfo = this.batchDetector.extractCallInfo(callNode);\n\t\t\t\tif (!callInfo) {\n\t\t\t\t\treturn t.nullLiteral();\n\t\t\t\t}\n\n\t\t\t\tconst payloadArg = callNode.arguments[0];\n\t\t\t\treturn this.buildBatchCallObject(callInfo, payloadArg);\n\t\t\t})\n\t\t);\n\n\t\tconst runtimeCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier(RuntimeFunction.BATCH_PARALLEL)),\n\t\t\t\t[batchCallsArray, t.stringLiteral(batchId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(runtimeCall);\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Builds the AST for a batch call object.\n\t * For client tools, wraps payload with toolName and input structure.\n\t */\n\tprivate buildBatchCallObject(\n\t\tcallInfo: BatchCallInfo,\n\t\tpayloadArg: t.Node | undefined\n\t): t.ObjectExpression {\n\t\tconst payloadExpr =\n\t\t\tpayloadArg && t.isExpression(payloadArg) ? payloadArg : t.objectExpression([]);\n\n\t\tif (callInfo.type === 'tool') {\n\t\t\t// Client tools: operation is always 'call', payload contains toolName and input\n\t\t\treturn t.objectExpression([\n\t\t\t\tt.objectProperty(t.identifier('type'), t.stringLiteral(callInfo.type)),\n\t\t\t\tt.objectProperty(t.identifier('operation'), t.stringLiteral(TOOL_OPERATION_CALL)),\n\t\t\t\tt.objectProperty(\n\t\t\t\t\tt.identifier('payload'),\n\t\t\t\t\tt.objectExpression([\n\t\t\t\t\t\tt.objectProperty(t.identifier('toolName'), t.stringLiteral(callInfo.operation)),\n\t\t\t\t\t\tt.objectProperty(t.identifier('input'), payloadExpr),\n\t\t\t\t\t])\n\t\t\t\t),\n\t\t\t]);\n\t\t}\n\n\t\t// Standard services (llm, approval, embedding)\n\t\treturn t.objectExpression([\n\t\t\tt.objectProperty(t.identifier('type'), t.stringLiteral(callInfo.type)),\n\t\t\tt.objectProperty(t.identifier('operation'), t.stringLiteral(callInfo.operation)),\n\t\t\tt.objectProperty(t.identifier('payload'), payloadExpr),\n\t\t]);\n\t}\n\n\tprivate transformToSequential(path: any, node: t.CallExpression): boolean {\n\t\tconst arrayArg = node.arguments[0];\n\t\tif (!t.isArrayExpression(arrayArg)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst parallelId = generateUniqueId('parallel');\n\n\t\tconst runtimeCall = t.awaitExpression(\n\t\t\tt.callExpression(\n\t\t\t\tt.memberExpression(t.identifier('__runtime'), t.identifier(RuntimeFunction.RESUMABLE_PROMISE_ALL)),\n\t\t\t\t[arrayArg, t.stringLiteral(parallelId)]\n\t\t\t)\n\t\t);\n\n\t\tpath.replaceWith(runtimeCall);\n\t\tthis.transformCount++;\n\t\treturn true;\n\t}\n\n\tprivate payloadToExpression(payload: Record<string, unknown>): t.ObjectExpression {\n\t\tconst properties: t.ObjectProperty[] = [];\n\n\t\tfor (const [key, value] of Object.entries(payload)) {\n\t\t\tproperties.push(t.objectProperty(t.identifier(key), this.valueToExpression(value)));\n\t\t}\n\n\t\treturn t.objectExpression(properties);\n\t}\n\n\tprivate valueToExpression(value: unknown): t.Expression {\n\t\tif (typeof value === 'string') {\n\t\t\treturn t.stringLiteral(value);\n\t\t}\n\t\tif (typeof value === 'number') {\n\t\t\treturn t.numericLiteral(value);\n\t\t}\n\t\tif (typeof value === 'boolean') {\n\t\t\treturn t.booleanLiteral(value);\n\t\t}\n\t\tif (value === null) {\n\t\t\treturn t.nullLiteral();\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\treturn t.arrayExpression(value.map((v) => this.valueToExpression(v)));\n\t\t}\n\t\tif (typeof value === 'object') {\n\t\t\treturn this.payloadToExpression(value as Record<string, unknown>);\n\t\t}\n\n\t\treturn t.identifier('undefined');\n\t}\n\n\tprivate isPromiseAll(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'all' })\n\t\t);\n\t}\n\n\tprivate isPromiseAllSettled(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'allSettled' })\n\t\t);\n\t}\n\n\tgetTransformCount(): number {\n\t\treturn this.transformCount;\n\t}\n\n\tresetTransformCount(): void {\n\t\tthis.transformCount = 0;\n\t}\n}\n","import type { BatchCallInfo } from '../types.js';\n\nexport enum CheckpointOperation {\n\tSAVE = 'save',\n\tLOAD = 'load',\n\tCLEAR = 'clear',\n}\n\nexport class BatchPauseExecutionError extends Error {\n\tpublic readonly calls: BatchCallInfo[];\n\tpublic readonly batchId: string;\n\tpublic readonly sequenceNumber: number;\n\n\tconstructor(calls: BatchCallInfo[], batchId: string, sequenceNumber: number) {\n\t\tsuper(`Batch pause for parallel execution (${calls.length} callbacks)`);\n\t\tthis.name = 'BatchPauseExecutionError';\n\t\tthis.calls = calls;\n\t\tthis.batchId = batchId;\n\t\tthis.sequenceNumber = sequenceNumber;\n\t}\n}\n\nexport class CheckpointError extends Error {\n\tpublic readonly checkpointId: string;\n\tpublic readonly operation: CheckpointOperation;\n\n\tconstructor(message: string, checkpointId: string, operation: CheckpointOperation) {\n\t\tsuper(`Checkpoint ${operation} failed for ${checkpointId}: ${message}`);\n\t\tthis.name = 'CheckpointError';\n\t\tthis.checkpointId = checkpointId;\n\t\tthis.operation = operation;\n\t}\n}\n\nexport class TransformationError extends Error {\n\tpublic readonly code: string;\n\tpublic readonly pattern: string;\n\tpublic readonly location?: { line: number; column: number };\n\n\tconstructor(\n\t\tmessage: string,\n\t\tcode: string,\n\t\tpattern: string,\n\t\tlocation?: { line: number; column: number }\n\t) {\n\t\tconst loc = location ? ` at line ${location.line}:${location.column}` : '';\n\t\tsuper(`Transformation failed for ${pattern}${loc}: ${message}`);\n\t\tthis.name = 'TransformationError';\n\t\tthis.code = code;\n\t\tthis.pattern = pattern;\n\t\tthis.location = location;\n\t}\n}\n\nexport class InfiniteLoopDetectionError extends Error {\n\tpublic readonly loopId: string;\n\tpublic readonly iterationCount: number;\n\n\tconstructor(loopId: string, iterationCount: number) {\n\t\tsuper(\n\t\t\t`Infinite loop detected: ${loopId} exceeded ${iterationCount} iterations without completing`\n\t\t);\n\t\tthis.name = 'InfiniteLoopDetectionError';\n\t\tthis.loopId = loopId;\n\t\tthis.iterationCount = iterationCount;\n\t}\n}\n\nexport function isBatchPauseError(error: unknown): error is BatchPauseExecutionError {\n\treturn error instanceof BatchPauseExecutionError;\n}\n\nexport function isCheckpointError(error: unknown): error is CheckpointError {\n\treturn error instanceof CheckpointError;\n}\n\nexport function isTransformationError(error: unknown): error is TransformationError {\n\treturn error instanceof TransformationError;\n}\n","import { parse } from '@babel/parser';\nimport _traverse from '@babel/traverse';\nconst traverse = (_traverse as any).default || _traverse;\nimport _generate from '@babel/generator';\nconst generate = (_generate as any).default || _generate;\nimport * as t from '@babel/types';\nimport { AsyncIterationDetector } from './detector.js';\nimport { LoopTransformer } from './loop-transformer.js';\nimport { ArrayTransformer } from './array-transformer.js';\nimport { PromiseTransformer } from './promise-transformer.js';\nimport type { TransformResult, CompilerConfig, TransformMetadata } from '../types.js';\nimport { DEFAULT_COMPILER_CONFIG } from '../types.js';\nimport { TransformationError } from '../runtime/errors.js';\nimport { resetIdCounter } from '../runtime/context.js';\nimport type { ICompiler } from '../types/compiler-interface.js';\n\n/**\n * ATP Compiler - Standard compiler for transforming code to support resumability\n * Implements ICompiler interface for consistency and dependency injection support\n */\nexport class ATPCompiler implements ICompiler {\n\tprivate config: CompilerConfig;\n\tprivate detector: AsyncIterationDetector;\n\tprivate loopTransformer: LoopTransformer;\n\tprivate arrayTransformer: ArrayTransformer;\n\tprivate promiseTransformer: PromiseTransformer;\n\n\tconstructor(config: Partial<CompilerConfig> = {}) {\n\t\tthis.config = { ...DEFAULT_COMPILER_CONFIG, ...config };\n\t\tthis.detector = new AsyncIterationDetector();\n\t\tthis.loopTransformer = new LoopTransformer(this.config.batchSizeThreshold);\n\t\tthis.arrayTransformer = new ArrayTransformer(this.config.batchSizeThreshold);\n\t\tthis.promiseTransformer = new PromiseTransformer(this.config.enableBatchParallel);\n\t}\n\n\tdetect(code: string) {\n\t\treturn this.detector.detect(code);\n\t}\n\n\ttransform(code: string): TransformResult {\n\t\tresetIdCounter();\n\n\t\tconst detection = this.detector.detect(code);\n\n\t\tif (!detection.needsTransform) {\n\t\t\treturn {\n\t\t\t\tcode,\n\t\t\t\ttransformed: false,\n\t\t\t\tpatterns: [],\n\t\t\t\tmetadata: {\n\t\t\t\t\tloopCount: 0,\n\t\t\t\t\tarrayMethodCount: 0,\n\t\t\t\t\tparallelCallCount: 0,\n\t\t\t\t\tbatchableCount: 0,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tconst ast = parse(code, {\n\t\t\t\tsourceType: 'module',\n\t\t\t\tplugins: ['typescript'],\n\t\t\t\tallowAwaitOutsideFunction: true,\n\t\t\t\tallowReturnOutsideFunction: true,\n\t\t\t});\n\n\t\t\tthis.loopTransformer.resetTransformCount();\n\t\t\tthis.arrayTransformer.resetTransformCount();\n\t\t\tthis.promiseTransformer.resetTransformCount();\n\n\t\t\ttraverse(ast, {\n\t\t\t\tForOfStatement: (path: any) => {\n\t\t\t\t\tthis.loopTransformer.transformForOfLoop(path);\n\t\t\t\t},\n\n\t\t\t\tWhileStatement: (path: any) => {\n\t\t\t\t\tthis.loopTransformer.transformWhileLoop(path);\n\t\t\t\t},\n\n\t\t\t\tForStatement: (path: any) => {\n\t\t\t\t\tthis.loopTransformer.transformForLoop(path);\n\t\t\t\t},\n\n\t\t\t\tCallExpression: (path: any) => {\n\t\t\t\t\tif (this.isArrayMethodCall(path.node)) {\n\t\t\t\t\t\tthis.arrayTransformer.transformArrayMethod(path);\n\t\t\t\t\t} else if (this.isPromiseAllCall(path.node)) {\n\t\t\t\t\t\tthis.promiseTransformer.transformPromiseAll(path);\n\t\t\t\t\t} else if (this.isPromiseAllSettledCall(path.node)) {\n\t\t\t\t\t\tthis.promiseTransformer.transformPromiseAllSettled(path);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconst output = generate(ast, {\n\t\t\t\tsourceMaps: false,\n\t\t\t\tretainLines: true,\n\t\t\t\tcomments: true,\n\t\t\t});\n\n\t\t\tconst metadata: TransformMetadata = {\n\t\t\t\tloopCount: this.loopTransformer.getTransformCount(),\n\t\t\t\tarrayMethodCount: this.arrayTransformer.getTransformCount(),\n\t\t\t\tparallelCallCount: this.promiseTransformer.getTransformCount(),\n\t\t\t\tbatchableCount: detection.batchableParallel ? 1 : 0,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\tcode: output.code,\n\t\t\t\ttransformed: true,\n\t\t\t\tpatterns: detection.patterns,\n\t\t\t\tmetadata,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new TransformationError(message, code, 'unknown');\n\t\t}\n\t}\n\n\tprivate isArrayMethodCall(node: t.CallExpression): boolean {\n\t\tif (!t.isMemberExpression(node.callee)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst property = node.callee.property;\n\t\tif (!t.isIdentifier(property)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst arrayMethods = ['map', 'forEach', 'filter', 'reduce', 'find', 'some', 'every', 'flatMap'];\n\n\t\treturn arrayMethods.includes(property.name);\n\t}\n\n\tprivate isPromiseAllCall(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'all' })\n\t\t);\n\t}\n\n\tprivate isPromiseAllSettledCall(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'allSettled' })\n\t\t);\n\t}\n\n\t/**\n\t * Get the compiler type identifier (ICompiler interface requirement)\n\t */\n\tgetType(): string {\n\t\treturn 'ATPCompiler';\n\t}\n\n\t/**\n\t * Get cache statistics (ICompiler interface requirement)\n\t * ATPCompiler doesn't cache ASTs, so returns null\n\t */\n\tgetCacheStats() {\n\t\treturn null;\n\t}\n}\n\nexport * from './detector.js';\nexport * from './batch-detector.js';\nexport * from './batch-optimizer.js';\nexport * from './loop-transformer.js';\nexport * from './array-transformer.js';\nexport * from './array-transformer-batch-reconstruct.js';\nexport * from './promise-transformer.js';\nexport * from './utils.js';\n","import type { CacheProvider } from '@mondaydotcomorg/atp-protocol';\nimport type { LoopCheckpoint } from '../types.js';\nimport { CheckpointError, CheckpointOperation } from './errors.js';\n\nconst MAX_CHECKPOINT_SIZE = 10 * 1024 * 1024;\nconst CHECKPOINT_TTL = 3600;\n\nexport class CheckpointManager {\n\tprivate cache: CacheProvider;\n\tprivate executionId: string;\n\tprivate prefix: string;\n\n\tconstructor(executionId: string, cache: CacheProvider, prefix = 'checkpoint') {\n\t\tthis.executionId = executionId;\n\t\tthis.cache = cache;\n\t\tthis.prefix = prefix;\n\t}\n\n\tasync save(checkpoint: LoopCheckpoint): Promise<void> {\n\t\tconst key = this.getKey(checkpoint.loopId);\n\n\t\ttry {\n\t\t\tconst serialized = JSON.stringify(checkpoint);\n\n\t\t\tif (serialized.length > MAX_CHECKPOINT_SIZE) {\n\t\t\t\tthrow new CheckpointError(\n\t\t\t\t\t`Checkpoint size ${serialized.length} exceeds maximum ${MAX_CHECKPOINT_SIZE}`,\n\t\t\t\t\tcheckpoint.loopId,\n\t\t\t\t\tCheckpointOperation.SAVE\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait this.cache.set(key, checkpoint, CHECKPOINT_TTL);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CheckpointError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new CheckpointError(message, checkpoint.loopId, CheckpointOperation.SAVE);\n\t\t}\n\t}\n\n\tasync load(loopId: string): Promise<LoopCheckpoint | null> {\n\t\tconst key = this.getKey(loopId);\n\n\t\ttry {\n\t\t\tconst checkpoint = await this.cache.get<LoopCheckpoint>(key);\n\n\t\t\tif (!checkpoint) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (checkpoint.completed && checkpoint.completed instanceof Array) {\n\t\t\t\tcheckpoint.completed = new Set(checkpoint.completed);\n\t\t\t}\n\n\t\t\treturn checkpoint;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new CheckpointError(message, loopId, CheckpointOperation.LOAD);\n\t\t}\n\t}\n\n\tasync clear(loopId: string): Promise<void> {\n\t\tconst key = this.getKey(loopId);\n\n\t\ttry {\n\t\t\tawait this.cache.delete(key);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new CheckpointError(message, loopId, CheckpointOperation.CLEAR);\n\t\t}\n\t}\n\n\tasync clearAll(): Promise<void> {}\n\n\tprivate getKey(loopId: string): string {\n\t\treturn `${this.prefix}:${this.executionId}:${loopId}`;\n\t}\n\n\tgetExecutionId(): string {\n\t\treturn this.executionId;\n\t}\n}\n\nlet globalCheckpointManager: CheckpointManager | null = null;\n\nexport function setCheckpointManager(manager: CheckpointManager): void {\n\tglobalCheckpointManager = manager;\n}\n\nexport function getCheckpointManager(): CheckpointManager {\n\tif (!globalCheckpointManager) {\n\t\tthrow new Error('CheckpointManager not initialized');\n\t}\n\treturn globalCheckpointManager;\n}\n\nexport function clearCheckpointManager(): void {\n\tglobalCheckpointManager = null;\n}\n\nexport function hasCheckpointManager(): boolean {\n\treturn globalCheckpointManager !== null;\n}\n","import { getCheckpointManager } from './checkpoint-manager.js';\nimport type { LoopCheckpoint } from '../types.js';\nimport { InfiniteLoopDetectionError } from './errors.js';\n\nconst MAX_ITERATIONS = 1000000;\n\nexport async function resumableForOf<T>(\n\titems: T[],\n\tcallback: (item: T, index: number) => Promise<void>,\n\tloopId: string\n): Promise<void> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(loopId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(loopId, i);\n\t\t}\n\n\t\tawait callback(items[i]!, i);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(loopId);\n}\n\nexport async function resumableWhile(\n\tconditionFn: () => boolean | Promise<boolean>,\n\tbodyFn: (iteration: number) => Promise<void>,\n\tloopId: string\n): Promise<void> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(loopId);\n\tlet iteration = checkpoint?.currentIndex || 0;\n\n\twhile (await Promise.resolve(conditionFn())) {\n\t\tif (iteration > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(loopId, iteration);\n\t\t}\n\n\t\tawait bodyFn(iteration);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId,\n\t\t\tcurrentIndex: iteration + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\n\t\titeration++;\n\t}\n\n\tawait checkpointManager.clear(loopId);\n}\n\nexport async function resumableForLoop(\n\tinitValue: number,\n\tconditionFn: (i: number) => boolean,\n\tincrementFn: (i: number) => number,\n\tbodyFn: (i: number) => Promise<void>,\n\tloopId: string\n): Promise<void> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(loopId);\n\tlet i = checkpoint?.currentIndex !== undefined ? checkpoint.currentIndex : initValue;\n\n\tlet iterations = 0;\n\twhile (conditionFn(i)) {\n\t\tif (iterations++ > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(loopId, iterations);\n\t\t}\n\n\t\tawait bodyFn(i);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId,\n\t\t\tcurrentIndex: incrementFn(i),\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\n\t\ti = incrementFn(i);\n\t}\n\n\tawait checkpointManager.clear(loopId);\n}\n","import { getCheckpointManager } from './checkpoint-manager.js';\nimport type { LoopCheckpoint } from '../types.js';\nimport { InfiniteLoopDetectionError } from './errors.js';\n\nconst MAX_ITERATIONS = 1000000;\n\nexport async function resumableMap<T, R>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<R>,\n\tmapId: string\n): Promise<R[]> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(mapId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tconst results = (checkpoint?.results as R[]) || [];\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(mapId, i);\n\t\t}\n\n\t\tresults[i] = await callback(items[i]!, i, items);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: mapId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\tresults: results,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(mapId);\n\treturn results;\n}\n\nexport async function resumableForEach<T>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<void>,\n\tforEachId: string\n): Promise<void> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(forEachId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(forEachId, i);\n\t\t}\n\n\t\tawait callback(items[i]!, i, items);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: forEachId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(forEachId);\n}\n\nexport async function resumableFilter<T>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<boolean>,\n\tfilterId: string\n): Promise<T[]> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(filterId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tconst results = (checkpoint?.results as T[]) || [];\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(filterId, i);\n\t\t}\n\n\t\tconst passed = await callback(items[i]!, i, items);\n\t\tif (passed) {\n\t\t\tresults.push(items[i]!);\n\t\t}\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: filterId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\tresults: results,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(filterId);\n\treturn results;\n}\n\nexport async function resumableReduce<T, R>(\n\titems: T[],\n\tcallback: (accumulator: R, item: T, index: number, array: T[]) => Promise<R>,\n\tinitialValue: R,\n\treduceId: string\n): Promise<R> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(reduceId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tlet accumulator = (checkpoint?.accumulator as R) ?? initialValue;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(reduceId, i);\n\t\t}\n\n\t\taccumulator = await callback(accumulator, items[i]!, i, items);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: reduceId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\taccumulator: accumulator,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(reduceId);\n\treturn accumulator;\n}\n\nexport async function resumableFind<T>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<boolean>,\n\tfindId: string\n): Promise<T | undefined> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(findId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(findId, i);\n\t\t}\n\n\t\tconst found = await callback(items[i]!, i, items);\n\t\tif (found) {\n\t\t\tawait checkpointManager.clear(findId);\n\t\t\treturn items[i];\n\t\t}\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: findId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(findId);\n\treturn undefined;\n}\n\nexport async function resumableSome<T>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<boolean>,\n\tsomeId: string\n): Promise<boolean> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(someId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(someId, i);\n\t\t}\n\n\t\tconst result = await callback(items[i]!, i, items);\n\t\tif (result) {\n\t\t\tawait checkpointManager.clear(someId);\n\t\t\treturn true;\n\t\t}\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: someId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(someId);\n\treturn false;\n}\n\nexport async function resumableEvery<T>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<boolean>,\n\teveryId: string\n): Promise<boolean> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(everyId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(everyId, i);\n\t\t}\n\n\t\tconst result = await callback(items[i]!, i, items);\n\t\tif (!result) {\n\t\t\tawait checkpointManager.clear(everyId);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: everyId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(everyId);\n\treturn true;\n}\n\nexport async function resumableFlatMap<T, R>(\n\titems: T[],\n\tcallback: (item: T, index: number, array: T[]) => Promise<R[]>,\n\tflatMapId: string\n): Promise<R[]> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(flatMapId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tconst results = (checkpoint?.results as R[]) || [];\n\n\tfor (let i = startIndex; i < items.length; i++) {\n\t\tif (i > MAX_ITERATIONS) {\n\t\t\tthrow new InfiniteLoopDetectionError(flatMapId, i);\n\t\t}\n\n\t\tconst mapped = await callback(items[i]!, i, items);\n\t\tresults.push(...mapped);\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: flatMapId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\tresults: results,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(flatMapId);\n\treturn results;\n}\n","import { getCheckpointManager } from './checkpoint-manager.js';\nimport type { LoopCheckpoint } from '../types.js';\n\nexport async function resumablePromiseAll<T>(\n\tpromises: Promise<T>[],\n\tparallelId: string\n): Promise<T[]> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(parallelId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tconst results = (checkpoint?.results as T[]) || [];\n\n\tfor (let i = startIndex; i < promises.length; i++) {\n\t\tresults[i] = (await promises[i]) as T;\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: parallelId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\tresults: results,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(parallelId);\n\treturn results;\n}\n\nexport async function resumablePromiseAllSettled<T>(\n\tpromises: Promise<T>[],\n\tparallelId: string\n): Promise<PromiseSettledResult<T>[]> {\n\tconst checkpointManager = getCheckpointManager();\n\tconst checkpoint = await checkpointManager.load(parallelId);\n\tconst startIndex = checkpoint?.currentIndex || 0;\n\tconst results = (checkpoint?.results as PromiseSettledResult<T>[]) || [];\n\n\tfor (let i = startIndex; i < promises.length; i++) {\n\t\ttry {\n\t\t\tconst value = (await promises[i]) as T;\n\t\t\tresults[i] = { status: 'fulfilled', value };\n\t\t} catch (reason) {\n\t\t\tresults[i] = { status: 'rejected', reason };\n\t\t}\n\n\t\tconst newCheckpoint: LoopCheckpoint = {\n\t\t\tloopId: parallelId,\n\t\t\tcurrentIndex: i + 1,\n\t\t\tresults: results,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait checkpointManager.save(newCheckpoint);\n\t}\n\n\tawait checkpointManager.clear(parallelId);\n\treturn results;\n}\n","import { BatchPauseExecutionError } from './errors.js';\nimport type { BatchCallInfo } from '../types.js';\nimport {\n\tnextSequenceNumber,\n\tgetCachedResult,\n\tgetCallSequenceNumber,\n} from '@mondaydotcomorg/atp-runtime';\n\nexport async function batchParallel<T>(\n\tbatchCalls: BatchCallInfo[],\n\tparallelId: string\n): Promise<T[]> {\n\tconst currentSequence = getCallSequenceNumber();\n\tconst cachedResult = getCachedResult(currentSequence);\n\tif (cachedResult !== undefined) {\n\t\tnextSequenceNumber();\n\t\treturn cachedResult as T[];\n\t}\n\n\tconst sequenceForPause = nextSequenceNumber();\n\tthrow new BatchPauseExecutionError(batchCalls, parallelId, sequenceForPause);\n}\n","export * from './errors.js';\nexport * from './context.js';\nexport * from './checkpoint-manager.js';\nexport * from './resumable-loops.js';\nexport * from './resumable-arrays.js';\nexport * from './resumable-parallel.js';\nexport * from './batch-parallel.js';\nexport * from './runtime-functions.js';\n\nimport type { CacheProvider } from '@mondaydotcomorg/atp-protocol';\nimport { CheckpointManager, setCheckpointManager } from './checkpoint-manager.js';\nimport { setRuntimeContext } from './context.js';\n\nexport interface InitializeRuntimeOptions {\n\texecutionId: string;\n\tcache: CacheProvider;\n\tcheckpointPrefix?: string;\n}\n\nexport function initializeRuntime(options: InitializeRuntimeOptions): void {\n\tconst checkpointManager = new CheckpointManager(\n\t\toptions.executionId,\n\t\toptions.cache,\n\t\toptions.checkpointPrefix\n\t);\n\n\tsetCheckpointManager(checkpointManager);\n\n\tsetRuntimeContext({\n\t\texecutionId: options.executionId,\n\t\tcache: options.cache,\n\t\tcheckpointPrefix: options.checkpointPrefix,\n\t});\n}\n\nexport function cleanupRuntime(): void {}\n","/**\n * Core compiler interface for ATP\n * All ATP compilers must implement this interface to ensure consistency\n */\n\nimport type { DetectionResult, TransformResult } from '../types.js';\n\n/**\n * ICompiler - The core interface that all ATP compilers must implement\n *\n * This interface defines the contract for any compiler in the ATP system,\n * enabling dependency injection and easy extensibility.\n *\n * @example\n * ```typescript\n * class MyCustomCompiler implements ICompiler {\n * detect(code: string): DetectionResult {\n * // Detection logic\n * }\n *\n * transform(code: string): TransformResult {\n * // Transformation logic\n * }\n *\n * getType(): string {\n * return 'MyCustomCompiler';\n * }\n * }\n * ```\n */\nexport interface ICompiler {\n\t/**\n\t * Detect if code needs transformation and what patterns it contains\n\t * Can be synchronous or asynchronous\n\t */\n\tdetect(code: string): DetectionResult | Promise<DetectionResult>;\n\n\t/**\n\t * Transform the code based on detected patterns\n\t * Can be synchronous or asynchronous\n\t */\n\ttransform(code: string): TransformResult | Promise<TransformResult>;\n\n\t/**\n\t * Get the compiler type identifier\n\t */\n\tgetType(): string;\n\n\t/**\n\t * Get cache statistics (optional)\n\t * Useful for performance monitoring and debugging\n\t */\n\tgetCacheStats?(): CacheStats | null;\n}\n\n/**\n * Cache statistics structure\n */\nexport interface CacheStats {\n\tsize: number;\n\tenabled: boolean;\n}\n\n/**\n * Type guard to check if an object implements ICompiler\n */\nexport function isCompiler(obj: unknown): obj is ICompiler {\n\treturn (\n\t\ttypeof obj === 'object' &&\n\t\tobj !== null &&\n\t\t'detect' in obj &&\n\t\t'transform' in obj &&\n\t\t'getType' in obj &&\n\t\ttypeof (obj as any).detect === 'function' &&\n\t\ttypeof (obj as any).transform === 'function' &&\n\t\ttypeof (obj as any).getType === 'function'\n\t);\n}\n","/**\n * ATP Compiler Plugin API\n *\n * Extensible plugin system for custom transformations and detections\n */\n\nimport type { NodePath } from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport type { CompilerConfig, DetectionResult, TransformMetadata, AsyncPattern } from '../types.js';\n\n/**\n * Base plugin interface\n */\nexport interface CompilerPlugin {\n\t/**\n\t * Unique plugin name\n\t */\n\tname: string;\n\n\t/**\n\t * Plugin version (semver)\n\t */\n\tversion: string;\n\n\t/**\n\t * Plugin priority (higher = runs first)\n\t * Built-in plugins: 100\n\t * User plugins: 50 (default)\n\t * Low priority: 10\n\t */\n\tpriority?: number;\n\n\t/**\n\t * Plugin initialization (optional)\n\t * Called once when plugin is registered\n\t */\n\tinitialize?(config: CompilerConfig): void | Promise<void>;\n\n\t/**\n\t * Plugin cleanup (optional)\n\t * Called when compiler is disposed\n\t */\n\tdispose?(): void | Promise<void>;\n}\n\n/**\n * Detection plugin - detects patterns that need transformation\n */\nexport interface DetectionPlugin extends CompilerPlugin {\n\t/**\n\t * Detect patterns in code\n\t */\n\tdetect(code: string, ast: t.File): DetectionResult | Promise<DetectionResult>;\n\n\t/**\n\t * Custom async patterns this plugin can detect\n\t */\n\tpatterns: AsyncPattern[];\n}\n\n/**\n * Transformation plugin - transforms AST nodes\n */\nexport interface TransformationPlugin extends CompilerPlugin {\n\t/**\n\t * Visitor pattern for AST traversal\n\t * Return visitor object compatible with @babel/traverse\n\t */\n\tgetVisitor(config: CompilerConfig): BabelVisitor;\n\n\t/**\n\t * Get transformation metadata after transform\n\t */\n\tgetMetadata(): Partial<TransformMetadata>;\n\n\t/**\n\t * Reset plugin state (called before each transform)\n\t */\n\treset(): void;\n}\n\n/**\n * Optimizer plugin - optimizes transformed code\n */\nexport interface OptimizerPlugin extends CompilerPlugin {\n\t/**\n\t * Optimize AST after all transformations\n\t */\n\toptimize(ast: t.File, config: CompilerConfig): t.File | Promise<t.File>;\n}\n\n/**\n * Validator plugin - validates code before/after transformation\n */\nexport interface ValidatorPlugin extends CompilerPlugin {\n\t/**\n\t * Validate code (throw error if invalid)\n\t */\n\tvalidate(code: string, ast: t.File, phase: 'pre' | 'post'): void | Promise<void>;\n}\n\n/**\n * Babel visitor type (simplified)\n */\nexport interface BabelVisitor {\n\t[key: string]: (path: NodePath<any>) => void;\n}\n\n/**\n * Plugin context - shared state during transformation\n */\nexport interface PluginContext {\n\tconfig: CompilerConfig;\n\texecutionId?: string;\n\tmetadata: TransformMetadata;\n\tpatterns: Set<AsyncPattern>;\n}\n\n/**\n * Plugin registry for managing plugins\n */\nexport class PluginRegistry {\n\tprivate detectors: DetectionPlugin[] = [];\n\tprivate transformers: TransformationPlugin[] = [];\n\tprivate optimizers: OptimizerPlugin[] = [];\n\tprivate validators: ValidatorPlugin[] = [];\n\n\t/**\n\t * Register a plugin\n\t */\n\tregister(plugin: CompilerPlugin): void {\n\t\t// Check for name conflicts\n\t\tif (this.findPlugin(plugin.name)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Plugin \"${plugin.name}\" is already registered. ` +\n\t\t\t\t\t`Please use a unique name or unregister the existing plugin first.`\n\t\t\t);\n\t\t}\n\n\t\t// Type guards to determine plugin type\n\t\tif (this.isDetectionPlugin(plugin)) {\n\t\t\tthis.detectors.push(plugin);\n\t\t\tthis.detectors.sort((a, b) => (b.priority || 50) - (a.priority || 50));\n\t\t}\n\n\t\tif (this.isTransformationPlugin(plugin)) {\n\t\t\tthis.transformers.push(plugin);\n\t\t\tthis.transformers.sort((a, b) => (b.priority || 50) - (a.priority || 50));\n\t\t}\n\n\t\tif (this.isOptimizerPlugin(plugin)) {\n\t\t\tthis.optimizers.push(plugin);\n\t\t\tthis.optimizers.sort((a, b) => (b.priority || 50) - (a.priority || 50));\n\t\t}\n\n\t\tif (this.isValidatorPlugin(plugin)) {\n\t\t\tthis.validators.push(plugin);\n\t\t\tthis.validators.sort((a, b) => (b.priority || 50) - (a.priority || 50));\n\t\t}\n\t}\n\n\t/**\n\t * Find a plugin by name\n\t */\n\tfindPlugin(name: string): CompilerPlugin | undefined {\n\t\tconst allPlugins = [\n\t\t\t...this.detectors,\n\t\t\t...this.transformers,\n\t\t\t...this.optimizers,\n\t\t\t...this.validators,\n\t\t];\n\t\treturn allPlugins.find((p) => p.name === name);\n\t}\n\n\t/**\n\t * Unregister a plugin by name\n\t */\n\tunregister(name: string): boolean {\n\t\tlet removed = false;\n\n\t\tthis.detectors = this.detectors.filter((p) => {\n\t\t\tif (p.name === name) {\n\t\t\t\tremoved = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.transformers = this.transformers.filter((p) => {\n\t\t\tif (p.name === name) {\n\t\t\t\tremoved = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.optimizers = this.optimizers.filter((p) => {\n\t\t\tif (p.name === name) {\n\t\t\t\tremoved = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.validators = this.validators.filter((p) => {\n\t\t\tif (p.name === name) {\n\t\t\t\tremoved = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\treturn removed;\n\t}\n\n\t/**\n\t * Get all detection plugins\n\t */\n\tgetDetectors(): DetectionPlugin[] {\n\t\treturn this.detectors;\n\t}\n\n\t/**\n\t * Get all transformation plugins\n\t */\n\tgetTransformers(): TransformationPlugin[] {\n\t\treturn this.transformers;\n\t}\n\n\t/**\n\t * Get all optimizer plugins\n\t */\n\tgetOptimizers(): OptimizerPlugin[] {\n\t\treturn this.optimizers;\n\t}\n\n\t/**\n\t * Get all validator plugins\n\t */\n\tgetValidators(): ValidatorPlugin[] {\n\t\treturn this.validators;\n\t}\n\n\t/**\n\t * Initialize all plugins\n\t */\n\tasync initializeAll(config: CompilerConfig): Promise<void> {\n\t\tconst allPlugins = [\n\t\t\t...this.detectors,\n\t\t\t...this.transformers,\n\t\t\t...this.optimizers,\n\t\t\t...this.validators,\n\t\t];\n\n\t\tfor (const plugin of allPlugins) {\n\t\t\tif (plugin.initialize) {\n\t\t\t\tawait plugin.initialize(config);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Dispose all plugins\n\t */\n\tasync disposeAll(): Promise<void> {\n\t\tconst allPlugins = [\n\t\t\t...this.detectors,\n\t\t\t...this.transformers,\n\t\t\t...this.optimizers,\n\t\t\t...this.validators,\n\t\t];\n\n\t\tfor (const plugin of allPlugins) {\n\t\t\tif (plugin.dispose) {\n\t\t\t\tawait plugin.dispose();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Type guards\n\t */\n\tprivate isDetectionPlugin(plugin: CompilerPlugin): plugin is DetectionPlugin {\n\t\treturn 'detect' in plugin && 'patterns' in plugin;\n\t}\n\n\tprivate isTransformationPlugin(plugin: CompilerPlugin): plugin is TransformationPlugin {\n\t\treturn 'getVisitor' in plugin && 'getMetadata' in plugin && 'reset' in plugin;\n\t}\n\n\tprivate isOptimizerPlugin(plugin: CompilerPlugin): plugin is OptimizerPlugin {\n\t\treturn 'optimize' in plugin;\n\t}\n\n\tprivate isValidatorPlugin(plugin: CompilerPlugin): plugin is ValidatorPlugin {\n\t\treturn 'validate' in plugin;\n\t}\n}\n\n/**\n * Utility function to create a simple transformation plugin\n */\nexport function createTransformPlugin(config: {\n\tname: string;\n\tversion: string;\n\tpriority?: number;\n\tvisitor: BabelVisitor;\n\tgetMetadata?: () => Partial<TransformMetadata>;\n}): TransformationPlugin {\n\tlet transformCount = 0;\n\n\treturn {\n\t\tname: config.name,\n\t\tversion: config.version,\n\t\tpriority: config.priority || 50,\n\n\t\tgetVisitor() {\n\t\t\treturn config.visitor;\n\t\t},\n\n\t\tgetMetadata() {\n\t\t\treturn config.getMetadata ? config.getMetadata() : { loopCount: transformCount };\n\t\t},\n\n\t\treset() {\n\t\t\ttransformCount = 0;\n\t\t},\n\t};\n}\n","/**\n * Plugin-based ATP Compiler\n *\n * Extensible compiler that supports custom plugins for detection,\n * transformation, optimization, and validation\n */\n\nimport { parse } from '@babel/parser';\nimport _traverse from '@babel/traverse';\nconst traverse = (_traverse as any).default || _traverse;\nimport _generate from '@babel/generator';\nconst generate = (_generate as any).default || _generate;\nimport type * as t from '@babel/types';\nimport type {\n\tTransformResult,\n\tCompilerConfig,\n\tTransformMetadata,\n\tDetectionResult,\n} from '../types.js';\nimport { DEFAULT_COMPILER_CONFIG } from '../types.js';\nimport { TransformationError } from '../runtime/errors.js';\nimport { resetIdCounter } from '../runtime/context.js';\nimport { PluginRegistry, type CompilerPlugin, type PluginContext } from './plugin-api.js';\nimport type { ICompiler } from '../types/compiler-interface.js';\n\n/**\n * Plugin-based ATP Compiler\n *\n * @example\n * ```typescript\n * const compiler = new PluggableCompiler({\n * enableBatchParallel: true\n * });\n *\n * // Register custom plugin\n * compiler.use(myCustomPlugin);\n *\n * // Transform code\n * const result = compiler.transform(code);\n * ```\n */\nexport class PluggableCompiler implements ICompiler {\n\tprivate config: CompilerConfig;\n\tprivate registry: PluginRegistry;\n\tprivate initialized: boolean = false;\n\n\t/**\n\t * AST cache - maps code string to parsed AST\n\t * This avoids re-parsing the same code multiple times\n\t * (e.g., once in detect() and once in transform())\n\t *\n\t * Performance Impact: ~30% reduction in compile time\n\t */\n\tprivate astCache: Map<string, t.File> = new Map();\n\n\tconstructor(config: Partial<CompilerConfig> = {}) {\n\t\tthis.config = { ...DEFAULT_COMPILER_CONFIG, ...config };\n\t\tthis.registry = new PluginRegistry();\n\t}\n\n\t/**\n\t * Register a plugin (chainable)\n\t */\n\tuse(plugin: CompilerPlugin): this {\n\t\tthis.registry.register(plugin);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregister a plugin by name\n\t */\n\tremove(pluginName: string): boolean {\n\t\treturn this.registry.unregister(pluginName);\n\t}\n\n\t/**\n\t * Initialize all plugins\n\t */\n\tasync initialize(): Promise<void> {\n\t\tif (this.initialized) return;\n\t\tawait this.registry.initializeAll(this.config);\n\t\tthis.initialized = true;\n\t}\n\n\t/**\n\t * Detect patterns using all detection plugins\n\t */\n\tasync detect(code: string): Promise<DetectionResult> {\n\t\tif (!this.initialized) {\n\t\t\tawait this.initialize();\n\t\t}\n\n\t\ttry {\n\t\t\tconst ast = this.parseCode(code);\n\t\t\tconst detectors = this.registry.getDetectors();\n\n\t\t\t// Aggregate results from all detectors\n\t\t\tconst allPatterns = new Set<string>();\n\t\t\tlet batchableParallel = false;\n\n\t\t\tfor (const detector of detectors) {\n\t\t\t\tconst result = await detector.detect(code, ast);\n\t\t\t\tresult.patterns.forEach((p) => allPatterns.add(p));\n\t\t\t\tif (result.batchableParallel) {\n\t\t\t\t\tbatchableParallel = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tneedsTransform: allPatterns.size > 0,\n\t\t\t\tpatterns: Array.from(allPatterns) as any[],\n\t\t\t\tbatchableParallel,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tneedsTransform: false,\n\t\t\t\tpatterns: [],\n\t\t\t\tbatchableParallel: false,\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Transform code using all transformation plugins\n\t */\n\tasync transform(code: string): Promise<TransformResult> {\n\t\tif (!this.initialized) {\n\t\t\tawait this.initialize();\n\t\t}\n\n\t\tresetIdCounter();\n\n\t\t// 1. Pre-validation\n\t\tawait this.runValidation(code, 'pre');\n\n\t\t// 2. Detection\n\t\tconst detection = await this.detect(code);\n\n\t\tif (!detection.needsTransform) {\n\t\t\treturn {\n\t\t\t\tcode,\n\t\t\t\ttransformed: false,\n\t\t\t\tpatterns: [],\n\t\t\t\tmetadata: {\n\t\t\t\t\tloopCount: 0,\n\t\t\t\t\tarrayMethodCount: 0,\n\t\t\t\t\tparallelCallCount: 0,\n\t\t\t\t\tbatchableCount: 0,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\t// 3. Parse AST\n\t\t\tconst ast = this.parseCode(code);\n\n\t\t\t// 4. Reset all transformers\n\t\t\tconst transformers = this.registry.getTransformers();\n\t\t\tfor (const transformer of transformers) {\n\t\t\t\ttransformer.reset();\n\t\t\t}\n\n\t\t\t// 5. Apply all transformation visitors\n\t\t\t// Combine visitors from all plugins, merging handlers for the same node type\n\t\t\tconst visitors: any = {};\n\t\t\tfor (const transformer of transformers) {\n\t\t\t\tconst visitor = transformer.getVisitor(this.config);\n\n\t\t\t\t// Merge visitors, combining multiple handlers for the same node type\n\t\t\t\tfor (const [nodeType, handler] of Object.entries(visitor)) {\n\t\t\t\t\tif (!visitors[nodeType]) {\n\t\t\t\t\t\tvisitors[nodeType] = handler;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Combine multiple handlers for the same node type\n\t\t\t\t\t\tconst existing = visitors[nodeType];\n\t\t\t\t\t\tvisitors[nodeType] = (path: any) => {\n\t\t\t\t\t\t\texisting(path);\n\t\t\t\t\t\t\t(handler as any)(path);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttraverse(ast, visitors);\n\n\t\t\t// 6. Optimization\n\t\t\tlet optimizedAst = ast;\n\t\t\tconst optimizers = this.registry.getOptimizers();\n\t\t\tfor (const optimizer of optimizers) {\n\t\t\t\toptimizedAst = await optimizer.optimize(optimizedAst, this.config);\n\t\t\t}\n\n\t\t\t// 7. Generate code\n\t\t\tconst output = generate(optimizedAst, {\n\t\t\t\tsourceMaps: false,\n\t\t\t\tretainLines: true,\n\t\t\t\tcomments: true,\n\t\t\t});\n\n\t\t\t// 8. Aggregate metadata\n\t\t\tconst metadata: TransformMetadata = {\n\t\t\t\tloopCount: 0,\n\t\t\t\tarrayMethodCount: 0,\n\t\t\t\tparallelCallCount: 0,\n\t\t\t\tbatchableCount: detection.batchableParallel ? 1 : 0,\n\t\t\t};\n\n\t\t\tfor (const transformer of transformers) {\n\t\t\t\tconst pluginMetadata = transformer.getMetadata();\n\t\t\t\tmetadata.loopCount += pluginMetadata.loopCount || 0;\n\t\t\t\tmetadata.arrayMethodCount += pluginMetadata.arrayMethodCount || 0;\n\t\t\t\tmetadata.parallelCallCount += pluginMetadata.parallelCallCount || 0;\n\t\t\t\tmetadata.batchableCount += pluginMetadata.batchableCount || 0;\n\t\t\t}\n\n\t\t\t// 9. Post-validation\n\t\t\tawait this.runValidation(output.code, 'post');\n\n\t\t\treturn {\n\t\t\t\tcode: output.code,\n\t\t\t\ttransformed: true,\n\t\t\t\tpatterns: detection.patterns,\n\t\t\t\tmetadata,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t// Include context about which phase failed\n\t\t\tconst context =\n\t\t\t\tdetection.patterns.length > 0 ? `[Plugin transformation] ${message}` : message;\n\t\t\tthrow new TransformationError(context, code, 'plugin-error');\n\t\t}\n\t}\n\n\t/**\n\t * Dispose compiler and all plugins\n\t */\n\tasync dispose(): Promise<void> {\n\t\tawait this.registry.disposeAll();\n\t\tthis.astCache.clear(); // Clear cache on disposal\n\t\tthis.initialized = false;\n\t}\n\n\t/**\n\t * Get current configuration\n\t */\n\tgetConfig(): CompilerConfig {\n\t\treturn { ...this.config };\n\t}\n\n\t/**\n\t * Update configuration\n\t */\n\tsetConfig(config: Partial<CompilerConfig>): void {\n\t\tthis.config = { ...this.config, ...config };\n\t}\n\n\t/**\n\t * Parse code to AST with caching\n\t *\n\t * Caches parsed AST to avoid re-parsing the same code multiple times.\n\t * This provides ~30% performance improvement when detect() and transform()\n\t * are called on the same code.\n\t */\n\tprivate parseCode(code: string): t.File {\n\t\t// Check cache first\n\t\tconst cached = this.astCache.get(code);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\n\t\t// Parse and cache\n\t\tconst ast = parse(code, {\n\t\t\tsourceType: 'module',\n\t\t\tplugins: ['typescript'],\n\t\t\tallowAwaitOutsideFunction: true,\n\t\t\tallowReturnOutsideFunction: true,\n\t\t}) as t.File;\n\n\t\tthis.astCache.set(code, ast);\n\t\treturn ast;\n\t}\n\n\t/**\n\t * Clear AST cache\n\t *\n\t * Call this method to free memory if you've compiled many different code snippets.\n\t * The cache is automatically managed and uses Map, so old entries don't leak memory.\n\t */\n\tclearCache(): void {\n\t\tthis.astCache.clear();\n\t}\n\n\t/**\n\t * Get the compiler type identifier (ICompiler interface requirement)\n\t */\n\tgetType(): string {\n\t\treturn 'PluggableCompiler';\n\t}\n\n\t/**\n\t * Get cache statistics (for debugging/monitoring)\n\t */\n\tgetCacheStats(): { size: number; enabled: boolean } {\n\t\treturn {\n\t\t\tsize: this.astCache.size,\n\t\t\tenabled: true,\n\t\t};\n\t}\n\n\t/**\n\t * Run validators\n\t */\n\tprivate async runValidation(code: string, phase: 'pre' | 'post'): Promise<void> {\n\t\tconst validators = this.registry.getValidators();\n\t\tconst ast = this.parseCode(code);\n\n\t\tfor (const validator of validators) {\n\t\t\tawait validator.validate(code, ast, phase);\n\t\t}\n\t}\n}\n","/**\n * Default Detection Plugin\n * Wraps the existing AsyncIterationDetector\n */\n\nimport type * as t from '@babel/types';\nimport type { DetectionPlugin } from '../plugin-api.js';\nimport type { CompilerConfig, AsyncPattern, DetectionResult } from '../../types.js';\nimport { AsyncIterationDetector } from '../../transformer/detector.js';\n\nexport class DefaultDetectionPlugin implements DetectionPlugin {\n\tname = 'atp-default-detector';\n\tversion = '1.0.0';\n\tpriority = 100;\n\tpatterns: AsyncPattern[] = [\n\t\t'for-of-await',\n\t\t'while-await',\n\t\t'map-async',\n\t\t'forEach-async',\n\t\t'filter-async',\n\t\t'reduce-async',\n\t\t'find-async',\n\t\t'some-async',\n\t\t'every-async',\n\t\t'flatMap-async',\n\t\t'promise-all',\n\t\t'promise-allSettled',\n\t];\n\n\tprivate detector: AsyncIterationDetector;\n\n\tconstructor() {\n\t\tthis.detector = new AsyncIterationDetector();\n\t}\n\n\tasync detect(code: string, ast: t.File): Promise<DetectionResult> {\n\t\t// Use existing detector\n\t\treturn this.detector.detect(code);\n\t}\n}\n","/**\n * Default Loop Transformer Plugin\n * Wraps the existing LoopTransformer\n */\n\nimport type { TransformationPlugin, BabelVisitor } from '../plugin-api.js';\nimport type { CompilerConfig, TransformMetadata } from '../../types.js';\nimport { LoopTransformer } from '../../transformer/loop-transformer.js';\n\nexport class DefaultLoopTransformerPlugin implements TransformationPlugin {\n\tname = 'atp-loop-transformer';\n\tversion = '1.0.0';\n\tpriority = 100;\n\n\tprivate transformer: LoopTransformer;\n\n\tconstructor(batchSizeThreshold?: number) {\n\t\tthis.transformer = new LoopTransformer(batchSizeThreshold);\n\t}\n\n\tgetVisitor(config: CompilerConfig): BabelVisitor {\n\t\treturn {\n\t\t\tForOfStatement: (path: any) => {\n\t\t\t\tthis.transformer.transformForOfLoop(path);\n\t\t\t},\n\n\t\t\tWhileStatement: (path: any) => {\n\t\t\t\tthis.transformer.transformWhileLoop(path);\n\t\t\t},\n\n\t\t\tForStatement: (path: any) => {\n\t\t\t\tthis.transformer.transformForLoop(path);\n\t\t\t},\n\t\t};\n\t}\n\n\tgetMetadata(): Partial<TransformMetadata> {\n\t\treturn {\n\t\t\tloopCount: this.transformer.getTransformCount(),\n\t\t};\n\t}\n\n\treset(): void {\n\t\tthis.transformer.resetTransformCount();\n\t}\n}\n","/**\n * Default Array Transformer Plugin\n * Wraps the existing ArrayTransformer\n */\n\nimport * as t from '@babel/types';\nimport type { TransformationPlugin, BabelVisitor } from '../plugin-api.js';\nimport type { CompilerConfig, TransformMetadata } from '../../types.js';\nimport { ArrayTransformer } from '../../transformer/array-transformer.js';\n\nexport class DefaultArrayTransformerPlugin implements TransformationPlugin {\n\tname = 'atp-array-transformer';\n\tversion = '1.0.0';\n\tpriority = 100;\n\n\tprivate transformer: ArrayTransformer;\n\n\tconstructor(batchSizeThreshold?: number) {\n\t\tthis.transformer = new ArrayTransformer(batchSizeThreshold);\n\t}\n\n\tgetVisitor(config: CompilerConfig): BabelVisitor {\n\t\treturn {\n\t\t\tCallExpression: (path: any) => {\n\t\t\t\tconst node = path.node;\n\t\t\t\tif (this.isArrayMethodCall(node)) {\n\t\t\t\t\tthis.transformer.transformArrayMethod(path);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tgetMetadata(): Partial<TransformMetadata> {\n\t\treturn {\n\t\t\tarrayMethodCount: this.transformer.getTransformCount(),\n\t\t};\n\t}\n\n\treset(): void {\n\t\tthis.transformer.resetTransformCount();\n\t}\n\n\tprivate isArrayMethodCall(node: t.CallExpression): boolean {\n\t\tif (!t.isMemberExpression(node.callee)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst property = node.callee.property;\n\t\tif (!t.isIdentifier(property)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst arrayMethods = ['map', 'forEach', 'filter', 'reduce', 'find', 'some', 'every', 'flatMap'];\n\t\treturn arrayMethods.includes(property.name);\n\t}\n}\n","/**\n * Default Promise Transformer Plugin\n * Wraps the existing PromiseTransformer\n */\n\nimport * as t from '@babel/types';\nimport type { TransformationPlugin, BabelVisitor } from '../plugin-api.js';\nimport type { CompilerConfig, TransformMetadata } from '../../types.js';\nimport { PromiseTransformer } from '../../transformer/promise-transformer.js';\n\nexport class DefaultPromiseTransformerPlugin implements TransformationPlugin {\n\tname = 'atp-promise-transformer';\n\tversion = '1.0.0';\n\tpriority = 100;\n\n\tprivate transformer: PromiseTransformer;\n\n\tconstructor(enableBatchParallel?: boolean) {\n\t\tthis.transformer = new PromiseTransformer(enableBatchParallel);\n\t}\n\n\tgetVisitor(config: CompilerConfig): BabelVisitor {\n\t\treturn {\n\t\t\tCallExpression: (path: any) => {\n\t\t\t\tconst node = path.node;\n\t\t\t\tif (this.isPromiseAllCall(node)) {\n\t\t\t\t\tthis.transformer.transformPromiseAll(path);\n\t\t\t\t} else if (this.isPromiseAllSettledCall(node)) {\n\t\t\t\t\tthis.transformer.transformPromiseAllSettled(path);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tgetMetadata(): Partial<TransformMetadata> {\n\t\treturn {\n\t\t\tparallelCallCount: this.transformer.getTransformCount(),\n\t\t};\n\t}\n\n\treset(): void {\n\t\tthis.transformer.resetTransformCount();\n\t}\n\n\tprivate isPromiseAllCall(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'all' })\n\t\t);\n\t}\n\n\tprivate isPromiseAllSettledCall(node: t.CallExpression): boolean {\n\t\tconst callee = node.callee;\n\t\treturn (\n\t\t\tt.isMemberExpression(callee) &&\n\t\t\tt.isIdentifier(callee.object, { name: 'Promise' }) &&\n\t\t\tt.isIdentifier(callee.property, { name: 'allSettled' })\n\t\t);\n\t}\n}\n","/**\n * Factory function to create a PluggableCompiler with all default plugins\n *\n * This makes PluggableCompiler a drop-in replacement for ATPCompiler\n */\n\nimport { PluggableCompiler } from './pluggable-compiler.js';\nimport { DefaultDetectionPlugin } from './default-plugins/detection-plugin.js';\nimport { DefaultLoopTransformerPlugin } from './default-plugins/loop-transformer-plugin.js';\nimport { DefaultArrayTransformerPlugin } from './default-plugins/array-transformer-plugin.js';\nimport { DefaultPromiseTransformerPlugin } from './default-plugins/promise-transformer-plugin.js';\nimport type { CompilerConfig } from '../types.js';\n\n/**\n * Create a PluggableCompiler with all default ATP transformations\n *\n * This provides the same functionality as ATPCompiler but with plugin extensibility.\n *\n * @example\n * ```typescript\n * // Drop-in replacement for ATPCompiler\n * const compiler = createDefaultCompiler({\n * enableBatchParallel: true,\n * maxBatchSize: 10,\n * });\n *\n * // Works exactly like ATPCompiler\n * const result = await compiler.transform(code);\n *\n * // But you can also add custom plugins!\n * compiler.use(myCustomPlugin);\n * ```\n */\nexport function createDefaultCompiler(config: Partial<CompilerConfig> = {}): PluggableCompiler {\n\tconst compiler = new PluggableCompiler(config);\n\n\t// Register default plugins that provide all ATP compiler functionality\n\tcompiler.use(new DefaultDetectionPlugin());\n\tcompiler.use(new DefaultLoopTransformerPlugin(config.batchSizeThreshold));\n\tcompiler.use(new DefaultArrayTransformerPlugin(config.batchSizeThreshold));\n\tcompiler.use(new DefaultPromiseTransformerPlugin(config.enableBatchParallel));\n\n\treturn compiler;\n}\n\n/**\n * Type alias for backward compatibility\n *\n * This allows:\n * ```typescript\n * import type { ATPCompilerLike } from '@mondaydotcomorg/atp-compiler';\n *\n * const compiler: ATPCompilerLike = createDefaultCompiler();\n * ```\n */\nexport type ATPCompilerLike = PluggableCompiler;\n","/**\n * Example Plugin: Async Timeout Wrapper\n *\n * Automatically wraps await expressions with timeout protection\n *\n * @example\n * // Before:\n * const result = await fetch('https://api.example.com');\n *\n * // After:\n * const result = await Promise.race([\n * fetch('https://api.example.com'),\n * new Promise((_, reject) =>\n * setTimeout(() => reject(new Error('Timeout')), 5000)\n * )\n * ]);\n */\n\nimport * as t from '@babel/types';\nimport type { NodePath } from '@babel/traverse';\nimport type { TransformationPlugin, BabelVisitor } from '../plugin-api.js';\nimport type { CompilerConfig, TransformMetadata } from '../../types.js';\n\nexport interface TimeoutPluginOptions {\n\t/**\n\t * Default timeout in milliseconds\n\t */\n\ttimeout?: number;\n\n\t/**\n\t * Patterns to match (namespace.method)\n\t */\n\tpatterns?: string[];\n\n\t/**\n\t * Whether to add timeout to all await expressions\n\t */\n\twrapAll?: boolean;\n}\n\nexport class AsyncTimeoutPlugin implements TransformationPlugin {\n\tname = 'async-timeout';\n\tversion = '1.0.0';\n\tpriority = 40; // Run after main transformations\n\n\tprivate options: TimeoutPluginOptions;\n\tprivate transformCount = 0;\n\n\tconstructor(options: TimeoutPluginOptions = {}) {\n\t\tthis.options = {\n\t\t\ttimeout: options.timeout || 5000,\n\t\t\tpatterns: options.patterns || ['fetch', 'axios.*', 'http.*'],\n\t\t\twrapAll: options.wrapAll || false,\n\t\t};\n\t}\n\n\tgetVisitor(config: CompilerConfig): BabelVisitor {\n\t\treturn {\n\t\t\tAwaitExpression: (path: NodePath<t.AwaitExpression>) => {\n\t\t\t\t// Check if should wrap this await\n\t\t\t\tif (!this.shouldWrap(path.node.argument)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Create timeout promise\n\t\t\t\tconst timeoutPromise = t.newExpression(t.identifier('Promise'), [\n\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t[t.identifier('_'), t.identifier('reject')],\n\t\t\t\t\t\tt.blockStatement([\n\t\t\t\t\t\t\tt.expressionStatement(\n\t\t\t\t\t\t\t\tt.callExpression(t.identifier('setTimeout'), [\n\t\t\t\t\t\t\t\t\tt.arrowFunctionExpression(\n\t\t\t\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t\t\t\t\tt.callExpression(t.identifier('reject'), [\n\t\t\t\t\t\t\t\t\t\t\tt.newExpression(t.identifier('Error'), [\n\t\t\t\t\t\t\t\t\t\t\t\tt.stringLiteral(`Timeout after ${this.options.timeout}ms`),\n\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tt.numericLiteral(this.options.timeout!),\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t]);\n\n\t\t\t\t// Wrap in Promise.race\n\t\t\t\tconst raceCall = t.callExpression(\n\t\t\t\t\tt.memberExpression(t.identifier('Promise'), t.identifier('race')),\n\t\t\t\t\t[t.arrayExpression([path.node.argument, timeoutPromise])]\n\t\t\t\t);\n\n\t\t\t\t// Replace await expression\n\t\t\t\tpath.node.argument = raceCall;\n\t\t\t\tthis.transformCount++;\n\t\t\t},\n\t\t};\n\t}\n\n\tgetMetadata(): Partial<TransformMetadata> {\n\t\treturn {\n\t\t\t// Custom metadata\n\t\t\tloopCount: 0,\n\t\t\tarrayMethodCount: 0,\n\t\t\tparallelCallCount: this.transformCount,\n\t\t\tbatchableCount: 0,\n\t\t};\n\t}\n\n\treset(): void {\n\t\tthis.transformCount = 0;\n\t}\n\n\t/**\n\t * Check if this await should be wrapped with timeout\n\t */\n\tprivate shouldWrap(node: t.Expression): boolean {\n\t\tif (this.options.wrapAll) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Check if matches patterns\n\t\tif (t.isCallExpression(node)) {\n\t\t\tconst funcName = this.getFunctionName(node);\n\t\t\tif (funcName) {\n\t\t\t\treturn this.options.patterns!.some((pattern) => {\n\t\t\t\t\tconst regex = new RegExp(pattern.replace('*', '.*'));\n\t\t\t\t\treturn regex.test(funcName);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Get function name from call expression\n\t */\n\tprivate getFunctionName(node: t.CallExpression): string | null {\n\t\tif (t.isIdentifier(node.callee)) {\n\t\t\treturn node.callee.name;\n\t\t}\n\n\t\tif (t.isMemberExpression(node.callee)) {\n\t\t\tconst obj = t.isIdentifier(node.callee.object) ? node.callee.object.name : '';\n\t\t\tconst prop = t.isIdentifier(node.callee.property) ? node.callee.property.name : '';\n\t\t\treturn `${obj}.${prop}`;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n","/**\n * Example Plugin: Security Validator\n *\n * Validates code for security issues before transformation\n *\n * @example\n * const compiler = new PluggableCompiler();\n * compiler.use(new SecurityValidatorPlugin({\n * forbiddenPatterns: [/eval\\s*\\(/],\n * maxComplexity: 20\n * }));\n */\n\nimport type * as t from '@babel/types';\nimport _traverse from '@babel/traverse';\nconst traverse = (_traverse as any).default || _traverse;\nimport type { ValidatorPlugin } from '../plugin-api.js';\nimport type { CompilerConfig } from '../../types.js';\n\nexport interface SecurityValidatorOptions {\n\t/**\n\t * Forbidden patterns (regex)\n\t */\n\tforbiddenPatterns?: RegExp[];\n\n\t/**\n\t * Maximum cyclomatic complexity\n\t */\n\tmaxComplexity?: number;\n\n\t/**\n\t * Maximum nesting depth\n\t */\n\tmaxNesting?: number;\n\n\t/**\n\t * Forbidden global access\n\t */\n\tforbiddenGlobals?: string[];\n}\n\nexport class SecurityValidatorPlugin implements ValidatorPlugin {\n\tname = 'security-validator';\n\tversion = '1.0.0';\n\tpriority = 100; // Run first\n\n\tprivate options: SecurityValidatorOptions;\n\n\tconstructor(options: SecurityValidatorOptions = {}) {\n\t\tthis.options = {\n\t\t\tforbiddenPatterns: options.forbiddenPatterns || [\n\t\t\t\t/\\beval\\s*\\(/,\n\t\t\t\t/new\\s+Function\\s*\\(/,\n\t\t\t\t/constructor\\s*\\[\\s*['\"`]constructor['\"`]\\s*\\]/,\n\t\t\t],\n\t\t\tmaxComplexity: options.maxComplexity || 50,\n\t\t\tmaxNesting: options.maxNesting || 10,\n\t\t\tforbiddenGlobals: options.forbiddenGlobals || [\n\t\t\t\t'process',\n\t\t\t\t'require',\n\t\t\t\t'__dirname',\n\t\t\t\t'__filename',\n\t\t\t],\n\t\t};\n\t}\n\n\tasync validate(code: string, ast: t.File, phase: 'pre' | 'post'): Promise<void> {\n\t\t// Only validate before transformation\n\t\tif (phase === 'post') {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Check forbidden patterns\n\t\tfor (const pattern of this.options.forbiddenPatterns!) {\n\t\t\tif (pattern.test(code)) {\n\t\t\t\tthrow new SecurityValidationError(\n\t\t\t\t\t`Forbidden pattern detected: ${pattern}`,\n\t\t\t\t\t'forbidden-pattern'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// 2. Check complexity and nesting\n\t\tlet maxNestingFound = 0;\n\t\tlet complexityScore = 0;\n\n\t\ttraverse(ast, {\n\t\t\tenter(path: any) {\n\t\t\t\tconst depth = path.scope.path.node ? getDepth(path) : 0;\n\t\t\t\tmaxNestingFound = Math.max(maxNestingFound, depth);\n\n\t\t\t\t// Increment complexity for control flow\n\t\t\t\tif (\n\t\t\t\t\tpath.isIfStatement() ||\n\t\t\t\t\tpath.isWhileStatement() ||\n\t\t\t\t\tpath.isForStatement() ||\n\t\t\t\t\tpath.isForOfStatement() ||\n\t\t\t\t\tpath.isSwitchCase() ||\n\t\t\t\t\tpath.isCatchClause()\n\t\t\t\t) {\n\t\t\t\t\tcomplexityScore++;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// 3. Check forbidden globals\n\t\t\tIdentifier: (path: any) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.options.forbiddenGlobals!.includes(path.node.name) &&\n\t\t\t\t\t!path.scope.hasBinding(path.node.name)\n\t\t\t\t) {\n\t\t\t\t\tthrow new SecurityValidationError(\n\t\t\t\t\t\t`Access to forbidden global: ${path.node.name}`,\n\t\t\t\t\t\t'forbidden-global'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\n\t\tif (maxNestingFound > this.options.maxNesting!) {\n\t\t\tthrow new SecurityValidationError(\n\t\t\t\t`Maximum nesting depth exceeded: ${maxNestingFound} > ${this.options.maxNesting}`,\n\t\t\t\t'max-nesting'\n\t\t\t);\n\t\t}\n\n\t\tif (complexityScore > this.options.maxComplexity!) {\n\t\t\tthrow new SecurityValidationError(\n\t\t\t\t`Maximum complexity exceeded: ${complexityScore} > ${this.options.maxComplexity}`,\n\t\t\t\t'max-complexity'\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Security validation error\n */\nexport class SecurityValidationError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic code: string\n\t) {\n\t\tsuper(message);\n\t\tthis.name = 'SecurityValidationError';\n\t}\n}\n\n/**\n * Get nesting depth of a path\n */\nfunction getDepth(path: any): number {\n\tlet depth = 0;\n\tlet current = path;\n\n\twhile (current.parentPath) {\n\t\tif (\n\t\t\tcurrent.isBlockStatement() ||\n\t\t\tcurrent.isFunctionDeclaration() ||\n\t\t\tcurrent.isArrowFunctionExpression()\n\t\t) {\n\t\t\tdepth++;\n\t\t}\n\t\tcurrent = current.parentPath;\n\t}\n\n\treturn depth;\n}\n"]}
|