@mondaydotcomorg/atp-compiler 0.19.8 → 0.19.9

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAEnC,6BAA6B;AAC7B,cAAc,+BAA+B,CAAC;AAE9C,wBAAwB;AACxB,cAAc,0BAA0B,CAAC;AAEzC,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC"}
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.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","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","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","isObjectExpression","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","ArrayTransformer","transformArrayMethod","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","PromiseTransformer","transformPromiseAll","transformPromiseAllSettled","parallelId","batchId","arrayExpression","nullLiteral","payloadArg","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","AwaitExpression","shouldWrap","timeoutPromise","newExpression","raceCall","funcName","getFunctionName","regex","RegExp","replace","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 { Node } from '@babel/types';\nimport 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 interface BatchCallInfo {\n\ttype: 'llm' | 'approval' | 'embedding';\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];\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\n\treturn PAUSABLE_CALL_PATTERNS.some(\n\t\t(pattern) => 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\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 } 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 (namespace !== 'atp' || !method) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst type = service as 'llm' | 'approval' | 'embedding';\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 { BatchOptimizer } from './batch-optimizer.js';\nimport { BatchParallelDetector } from './batch-detector.js';\nimport { getArrayMethodName, canUseBatchParallel } from './array-transformer-utils.js';\nimport { transformToBatchParallel } from './array-transformer-batch.js';\nimport { transformToSequential } from './array-transformer-sequential.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 && 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\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\n\t\t\t\treturn t.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(\n\t\t\t\t\t\tt.identifier('payload'),\n\t\t\t\t\t\tpayloadArg && t.isExpression(payloadArg) ? payloadArg : t.objectExpression([])\n\t\t\t\t\t),\n\t\t\t\t]);\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\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(\n\t\t\t\t\tt.identifier('__runtime'),\n\t\t\t\t\tt.identifier(RuntimeFunction.RESUMABLE_PROMISE_ALL)\n\t\t\t\t),\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 './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"]}
package/package.json CHANGED
@@ -1,26 +1,16 @@
1
1
  {
2
2
  "name": "@mondaydotcomorg/atp-compiler",
3
- "version": "0.19.8",
3
+ "version": "0.19.9",
4
4
  "description": "Production-ready compiler for transforming async iteration patterns into resumable operations with checkpoint-based state management",
5
5
  "type": "module",
6
- "main": "dist/index.js",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.js",
7
8
  "types": "dist/index.d.ts",
8
9
  "exports": {
9
10
  ".": {
10
11
  "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
12
- },
13
- "./plugin-system": {
14
- "types": "./dist/plugin-system/index.d.ts",
15
- "import": "./dist/plugin-system/index.js"
16
- },
17
- "./plugin-system/*": {
18
- "types": "./dist/plugin-system/*.d.ts",
19
- "import": "./dist/plugin-system/*.js"
20
- },
21
- "./*": {
22
- "types": "./dist/*.d.ts",
23
- "import": "./dist/*.js"
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
24
14
  }
25
15
  },
26
16
  "publishConfig": {
@@ -32,7 +22,8 @@
32
22
  "directory": "packages/atp-compiler"
33
23
  },
34
24
  "scripts": {
35
- "build": "tsc",
25
+ "build": "npx tsc --build tsconfig.json && tsup",
26
+ "build:tsc": "tsc",
36
27
  "test": "jest",
37
28
  "test:watch": "jest --watch",
38
29
  "test:coverage": "jest --coverage",
@@ -55,21 +46,22 @@
55
46
  "@babel/parser": "^7.26.0",
56
47
  "@babel/traverse": "^7.26.0",
57
48
  "@babel/types": "^7.26.0",
58
- "@mondaydotcomorg/atp-protocol": "0.19.7",
59
- "@mondaydotcomorg/atp-runtime": "0.19.7",
49
+ "@mondaydotcomorg/atp-protocol": "0.19.8",
50
+ "@mondaydotcomorg/atp-runtime": "0.19.8",
60
51
  "@types/babel__generator": "^7.6.0",
61
52
  "@types/babel__traverse": "^7.20.0",
62
53
  "nanoid": "^5.0.0"
63
54
  },
64
55
  "peerDependencies": {
65
- "@mondaydotcomorg/atp-protocol": "0.19.7",
66
- "@mondaydotcomorg/atp-runtime": "0.19.7"
56
+ "@mondaydotcomorg/atp-protocol": "0.19.8",
57
+ "@mondaydotcomorg/atp-runtime": "0.19.8"
67
58
  },
68
59
  "devDependencies": {
69
60
  "@stryker-mutator/core": "^8.0.0",
70
61
  "@types/jest": "^29.5.0",
71
62
  "fast-check": "^3.15.0",
72
63
  "jest": "^29.7.0",
64
+ "tsup": "^8.5.1",
73
65
  "typescript": "^5.3.0"
74
66
  }
75
67
  }