@mondaydotcomorg/atp-compiler 0.22.1 → 0.23.0

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.d.ts CHANGED
@@ -4,6 +4,8 @@ export * from './runtime/index.js';
4
4
  export * from './types/compiler-interface.js';
5
5
  export * from './plugin-system/index.js';
6
6
  export * from './checkpoint/index.js';
7
+ export { analyzeApiCalls } from './api-call-analyzer.js';
8
+ export type { DetectedApiCall, AnalysisResult } from './api-call-analyzer.js';
7
9
  export { ATPCompiler } from './transformer/index.js';
8
10
  export { initializeRuntime, cleanupRuntime } from './runtime/index.js';
9
11
  export { PluggableCompiler } from './plugin-system/pluggable-compiler.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,+BAA+B,CAAC;AAG9C,cAAc,0BAA0B,CAAC;AAGzC,cAAc,uBAAuB,CAAC;AAGtC,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;AAGnF,OAAO,EACN,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACX,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACX,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,GACZ,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAGlF,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,+BAA+B,CAAC;AAG9C,cAAc,0BAA0B,CAAC;AAGzC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG9E,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;AAGnF,OAAO,EACN,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACX,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACX,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,GACZ,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAGlF,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC"}
package/dist/index.js CHANGED
@@ -544,7 +544,7 @@ var require_estraverse = __commonJS({
544
544
  return false;
545
545
  }
546
546
  __name(candidateExistsInLeaveList, "candidateExistsInLeaveList");
547
- Controller.prototype.traverse = /* @__PURE__ */ __name(function traverse7(root, visitor) {
547
+ Controller.prototype.traverse = /* @__PURE__ */ __name(function traverse8(root, visitor) {
548
548
  var worklist, leavelist, element, node, nodeType, ret, key, current2, current22, candidates, candidate, sentinel;
549
549
  this.__initialize(root, visitor);
550
550
  sentinel = {};
@@ -734,11 +734,11 @@ var require_estraverse = __commonJS({
734
734
  }
735
735
  return outer.root;
736
736
  }, "replace");
737
- function traverse6(root, visitor) {
737
+ function traverse7(root, visitor) {
738
738
  var controller = new Controller();
739
739
  return controller.traverse(root, visitor);
740
740
  }
741
- __name(traverse6, "traverse");
741
+ __name(traverse7, "traverse");
742
742
  function replace(root, visitor) {
743
743
  var controller = new Controller();
744
744
  return controller.replace(root, visitor);
@@ -786,7 +786,7 @@ var require_estraverse = __commonJS({
786
786
  comments.push(extendCommentRange(deepCopy(providedComments[i]), tokens));
787
787
  }
788
788
  cursor = 0;
789
- traverse6(tree, {
789
+ traverse7(tree, {
790
790
  enter: /* @__PURE__ */ __name(function(node) {
791
791
  var comment2;
792
792
  while (cursor < comments.length) {
@@ -813,7 +813,7 @@ var require_estraverse = __commonJS({
813
813
  }, "enter")
814
814
  });
815
815
  cursor = 0;
816
- traverse6(tree, {
816
+ traverse7(tree, {
817
817
  leave: /* @__PURE__ */ __name(function(node) {
818
818
  var comment2;
819
819
  while (cursor < comments.length) {
@@ -843,7 +843,7 @@ var require_estraverse = __commonJS({
843
843
  }
844
844
  __name(attachComments, "attachComments");
845
845
  exports1.Syntax = Syntax;
846
- exports1.traverse = traverse6;
846
+ exports1.traverse = traverse7;
847
847
  exports1.replace = replace;
848
848
  exports1.attachComments = attachComments;
849
849
  exports1.VisitorKeys = VisitorKeys;
@@ -3049,7 +3049,7 @@ var require_package = __commonJS({
3049
3049
  var require_escodegen = __commonJS({
3050
3050
  "../../node_modules/escodegen/escodegen.js"(exports$1) {
3051
3051
  (function() {
3052
- var Syntax, Precedence, BinaryPrecedence, SourceNode, estraverse, esutils, base2, indent, json, renumber, hexadecimal, quotes, escapeless, newline, space, parentheses, semicolons, safeConcatenation, directive, extra, parse7, sourceMap, sourceCode, preserveBlankLines, FORMAT_MINIFY, FORMAT_DEFAULTS;
3052
+ var Syntax, Precedence, BinaryPrecedence, SourceNode, estraverse, esutils, base2, indent, json, renumber, hexadecimal, quotes, escapeless, newline, space, parentheses, semicolons, safeConcatenation, directive, extra, parse8, sourceMap, sourceCode, preserveBlankLines, FORMAT_MINIFY, FORMAT_DEFAULTS;
3053
3053
  estraverse = require_estraverse();
3054
3054
  esutils = require_utils();
3055
3055
  Syntax = estraverse.Syntax;
@@ -5045,9 +5045,9 @@ var require_escodegen = __commonJS({
5045
5045
  }, "ExportSpecifier"),
5046
5046
  Literal: /* @__PURE__ */ __name(function(expr, precedence, flags) {
5047
5047
  var raw;
5048
- if (expr.hasOwnProperty("raw") && parse7 && extra.raw) {
5048
+ if (expr.hasOwnProperty("raw") && parse8 && extra.raw) {
5049
5049
  try {
5050
- raw = parse7(expr.raw).body[0].expression;
5050
+ raw = parse8(expr.raw).body[0].expression;
5051
5051
  if (raw.type === Syntax.Literal) {
5052
5052
  if (raw.value === expr.value) {
5053
5053
  return expr.raw;
@@ -5259,7 +5259,7 @@ var require_escodegen = __commonJS({
5259
5259
  semicolons = options.format.semicolons;
5260
5260
  safeConcatenation = options.format.safeConcatenation;
5261
5261
  directive = options.directive;
5262
- parse7 = json ? null : options.parse;
5262
+ parse8 = json ? null : options.parse;
5263
5263
  sourceMap = options.sourceMap;
5264
5264
  sourceCode = options.sourceCode;
5265
5265
  preserveBlankLines = options.format.preserveBlankLines && sourceCode !== null;
@@ -9415,8 +9415,8 @@ var ZodParsedType = util.arrayToEnum([
9415
9415
  "set"
9416
9416
  ]);
9417
9417
  var getParsedType = /* @__PURE__ */ __name((data2) => {
9418
- const t18 = typeof data2;
9419
- switch (t18) {
9418
+ const t19 = typeof data2;
9419
+ switch (t19) {
9420
9420
  case "undefined":
9421
9421
  return ZodParsedType.undefined;
9422
9422
  case "string":
@@ -20256,7 +20256,138 @@ async function getCheckpointDataForError() {
20256
20256
  };
20257
20257
  }
20258
20258
  __name(getCheckpointDataForError, "getCheckpointDataForError");
20259
+ var traverse6 = _traverse.default ?? _traverse;
20260
+ function analyzeApiCalls(code) {
20261
+ const calls = [];
20262
+ const seen = /* @__PURE__ */ new Set();
20263
+ let dynamicCallsDetected = false;
20264
+ let ast;
20265
+ try {
20266
+ ast = parse(code, {
20267
+ sourceType: "module",
20268
+ allowReturnOutsideFunction: true,
20269
+ plugins: [
20270
+ "typescript"
20271
+ ]
20272
+ });
20273
+ } catch {
20274
+ return {
20275
+ apiCalls: [],
20276
+ dynamicCallsDetected: true
20277
+ };
20278
+ }
20279
+ const tryRecordCall = /* @__PURE__ */ __name((calleeNode) => {
20280
+ let callee = calleeNode;
20281
+ if ((t13.isMemberExpression(callee) || t13.isOptionalMemberExpression(callee)) && !callee.computed && t13.isIdentifier(callee.property) && (callee.property.name === "call" || callee.property.name === "apply" || callee.property.name === "bind")) {
20282
+ callee = callee.object;
20283
+ }
20284
+ if (!t13.isMemberExpression(callee) && !t13.isOptionalMemberExpression(callee)) return;
20285
+ const groupExpr = callee.object;
20286
+ if (!t13.isMemberExpression(groupExpr) && !t13.isOptionalMemberExpression(groupExpr)) return;
20287
+ if (!t13.isIdentifier(groupExpr.object, {
20288
+ name: "api"
20289
+ })) return;
20290
+ if (groupExpr.computed || callee.computed) {
20291
+ dynamicCallsDetected = true;
20292
+ return;
20293
+ }
20294
+ const groupNode = groupExpr.property;
20295
+ const opNode = callee.property;
20296
+ if (!t13.isIdentifier(groupNode) || !t13.isIdentifier(opNode)) {
20297
+ dynamicCallsDetected = true;
20298
+ return;
20299
+ }
20300
+ const key = `${groupNode.name}.${opNode.name}`;
20301
+ if (!seen.has(key)) {
20302
+ seen.add(key);
20303
+ calls.push({
20304
+ apiGroup: groupNode.name,
20305
+ operationId: opNode.name
20306
+ });
20307
+ }
20308
+ }, "tryRecordCall");
20309
+ try {
20310
+ traverse6(ast, {
20311
+ // Assignments / destructures that alias `api` or `api.<group>` — any of
20312
+ // these lets the code reach an api group via an opaque identifier later.
20313
+ VariableDeclarator(path) {
20314
+ const init = path.node.init;
20315
+ if (!init) return;
20316
+ if (t13.isObjectPattern(path.node.id) && t13.isIdentifier(init, {
20317
+ name: "api"
20318
+ })) {
20319
+ dynamicCallsDetected = true;
20320
+ return;
20321
+ }
20322
+ if (t13.isIdentifier(path.node.id) && t13.isIdentifier(init, {
20323
+ name: "api"
20324
+ })) {
20325
+ dynamicCallsDetected = true;
20326
+ return;
20327
+ }
20328
+ if (t13.isIdentifier(path.node.id) && t13.isMemberExpression(init) && t13.isIdentifier(init.object, {
20329
+ name: "api"
20330
+ })) {
20331
+ dynamicCallsDetected = true;
20332
+ }
20333
+ },
20334
+ // Any other mention of `api` that hands it off to an opaque consumer:
20335
+ // fn(api) — alias escape via function argument
20336
+ // Object.values(api) / keys(…) — enumeration
20337
+ // { ...api } / [ ...api ] — spread
20338
+ // return api — caller gets the alias
20339
+ // api = x (reassignment) — later reads hit a different object
20340
+ //
20341
+ // The api.<group>.<op>(...) pattern is recognised by the CallExpression
20342
+ // visitor below; skip it here via parent-shape whitelisting.
20343
+ Identifier(path) {
20344
+ if (path.node.name !== "api") return;
20345
+ if ((t13.isMemberExpression(path.parent) || t13.isOptionalMemberExpression(path.parent)) && path.parent.property === path.node && !path.parent.computed) {
20346
+ return;
20347
+ }
20348
+ if ((t13.isMemberExpression(path.parent) || t13.isOptionalMemberExpression(path.parent)) && path.parent.object === path.node && !path.parent.computed) {
20349
+ return;
20350
+ }
20351
+ if (t13.isVariableDeclarator(path.parent) && path.parent.init === path.node) {
20352
+ return;
20353
+ }
20354
+ if ((t13.isObjectProperty(path.parent) || t13.isObjectMethod(path.parent)) && path.parent.key === path.node && !path.parent.computed) {
20355
+ return;
20356
+ }
20357
+ if (t13.isClassMethod(path.parent) && path.parent.key === path.node && !path.parent.computed) {
20358
+ return;
20359
+ }
20360
+ if ((t13.isFunctionDeclaration(path.parent) || t13.isFunctionExpression(path.parent) || t13.isClassDeclaration(path.parent) || t13.isClassExpression(path.parent)) && path.parent.id === path.node) {
20361
+ return;
20362
+ }
20363
+ if (path.parentPath?.isFunction() && path.listKey === "params") {
20364
+ return;
20365
+ }
20366
+ if (t13.isImportSpecifier(path.parent) || t13.isImportDefaultSpecifier(path.parent) || t13.isImportNamespaceSpecifier(path.parent)) {
20367
+ return;
20368
+ }
20369
+ dynamicCallsDetected = true;
20370
+ },
20371
+ CallExpression(path) {
20372
+ tryRecordCall(path.node.callee);
20373
+ },
20374
+ OptionalCallExpression(path) {
20375
+ tryRecordCall(path.node.callee);
20376
+ }
20377
+ });
20378
+ } catch {
20379
+ return {
20380
+ apiCalls: [],
20381
+ dynamicCallsDetected: true
20382
+ };
20383
+ }
20384
+ return {
20385
+ apiCalls: calls,
20386
+ dynamicCallsDetected
20387
+ };
20388
+ }
20389
+ __name(analyzeApiCalls, "analyzeApiCalls");
20259
20390
 
20260
- export { ATPCompiler, ArrayTransformer, AsyncIterationDetector, AsyncTimeoutPlugin, BatchOptimizer, BatchParallelDetector, BatchPauseExecutionError, CHECKPOINTABLE_PATTERNS, CHECKPOINT_RESTORE_API_NAME, CHECKPOINT_RESTORE_METHOD_NAME, CHECKPOINT_RUNTIME_NAMESPACE, CheckpointError, CheckpointManager, CheckpointOperation, ProvenanceSource as CheckpointProvenanceSource, CheckpointType, DEFAULT_CHECKPOINT_CONFIG, DEFAULT_COMPILER_CONFIG, DefaultArrayTransformerPlugin, DefaultCheckpointStrategy, DefaultDetectionPlugin, DefaultLoopTransformerPlugin, DefaultPromiseTransformerPlugin, IN_ISOLATE_RUNTIME_FUNCTIONS, InfiniteLoopDetectionError, LoopTransformer, OperationCheckpointError, OperationCheckpointManager, OperationCheckpointTransformer, OperationType, PAUSABLE_CALL_PATTERNS, PluggableCompiler, PluginRegistry, PromiseTransformer, RuntimeFunction, SecurityValidationError, SecurityValidatorPlugin, TransformationError, batchParallel, cleanupCheckpointRuntime, cleanupRuntime, clearCheckpointExecutionId, clearCheckpointManager, clearOperationCheckpointManager, clearRuntimeContext, configureCheckpointProvenance, containsAwait, containsPausableCall, createDefaultCompiler, createRuntimeCall, createTransformPlugin, extractForOfParamName, generateUniqueId, getCheckpointDataForError, getCheckpointManager, getCheckpointRuntime, getCurrentCheckpointManager, getMemberExpressionPath, getNodeLocation, getOperationCheckpointManager, getOperationType, getRuntimeContext, hasCheckpointManager, hasOperationCheckpointManager, hasRuntimeContext, initializeCheckpointRuntime, initializeCheckpointRuntimeWithProvenance, initializeRuntime, isArrayMethod, isAsyncFunction, isBatchPauseError, isCheckpointError, isCheckpointableCall, isCompiler, isInIsolateRuntimeFunction, isPausableCall, isPausableCallExpression, isTransformationError, resetIdCounter, resumableEvery, resumableFilter, resumableFind, resumableFlatMap, resumableForEach, resumableForLoop, resumableForOf, resumableMap, resumablePromiseAll, resumablePromiseAllSettled, resumableReduce, resumableSome, resumableWhile, setCheckpointExecutionId, setCheckpointManager, setOperationCheckpointManager, setRuntimeContext, transformToBatchWithReconstruction, wrapInAsyncFunction };
20391
+ export { ATPCompiler, ArrayTransformer, AsyncIterationDetector, AsyncTimeoutPlugin, BatchOptimizer, BatchParallelDetector, BatchPauseExecutionError, CHECKPOINTABLE_PATTERNS, CHECKPOINT_RESTORE_API_NAME, CHECKPOINT_RESTORE_METHOD_NAME, CHECKPOINT_RUNTIME_NAMESPACE, CheckpointError, CheckpointManager, CheckpointOperation, ProvenanceSource as CheckpointProvenanceSource, CheckpointType, DEFAULT_CHECKPOINT_CONFIG, DEFAULT_COMPILER_CONFIG, DefaultArrayTransformerPlugin, DefaultCheckpointStrategy, DefaultDetectionPlugin, DefaultLoopTransformerPlugin, DefaultPromiseTransformerPlugin, IN_ISOLATE_RUNTIME_FUNCTIONS, InfiniteLoopDetectionError, LoopTransformer, OperationCheckpointError, OperationCheckpointManager, OperationCheckpointTransformer, OperationType, PAUSABLE_CALL_PATTERNS, PluggableCompiler, PluginRegistry, PromiseTransformer, RuntimeFunction, SecurityValidationError, SecurityValidatorPlugin, TransformationError, analyzeApiCalls, batchParallel, cleanupCheckpointRuntime, cleanupRuntime, clearCheckpointExecutionId, clearCheckpointManager, clearOperationCheckpointManager, clearRuntimeContext, configureCheckpointProvenance, containsAwait, containsPausableCall, createDefaultCompiler, createRuntimeCall, createTransformPlugin, extractForOfParamName, generateUniqueId, getCheckpointDataForError, getCheckpointManager, getCheckpointRuntime, getCurrentCheckpointManager, getMemberExpressionPath, getNodeLocation, getOperationCheckpointManager, getOperationType, getRuntimeContext, hasCheckpointManager, hasOperationCheckpointManager, hasRuntimeContext, initializeCheckpointRuntime, initializeCheckpointRuntimeWithProvenance, initializeRuntime, isArrayMethod, isAsyncFunction, isBatchPauseError, isCheckpointError, isCheckpointableCall, isCompiler, isInIsolateRuntimeFunction, isPausableCall, isPausableCallExpression, isTransformationError, resetIdCounter, resumableEvery, resumableFilter, resumableFind, resumableFlatMap, resumableForEach, resumableForLoop, resumableForOf, resumableMap, resumablePromiseAll, resumablePromiseAllSettled, resumableReduce, resumableSome, resumableWhile, setCheckpointExecutionId, setCheckpointManager, setOperationCheckpointManager, setRuntimeContext, transformToBatchWithReconstruction, wrapInAsyncFunction };
20261
20392
  //# sourceMappingURL=index.js.map
20262
20393
  //# sourceMappingURL=index.js.map