@algorandfoundation/algorand-typescript-testing 1.0.0-alpha.41 → 1.0.0-alpha.43

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/package.json CHANGED
@@ -4,12 +4,12 @@
4
4
  "**"
5
5
  ],
6
6
  "name": "@algorandfoundation/algorand-typescript-testing",
7
- "version": "1.0.0-alpha.41",
7
+ "version": "1.0.0-alpha.43",
8
8
  "description": "A library which allows you to execute Algorand TypeScript code locally under a test context either emulating or mocking AVM behaviour.",
9
9
  "private": false,
10
10
  "dependencies": {
11
- "@algorandfoundation/algorand-typescript": "1.0.0-alpha.90",
12
- "@algorandfoundation/puya-ts": "1.0.0-alpha.90",
11
+ "@algorandfoundation/algorand-typescript": "1.0.0-alpha.99",
12
+ "@algorandfoundation/puya-ts": "1.0.0-alpha.99",
13
13
  "elliptic": "^6.6.1",
14
14
  "js-sha256": "^0.11.0",
15
15
  "js-sha3": "^0.9.3",
@@ -1,4 +1,4 @@
1
- import { ptypes, LoggingContext, TypeResolver, SourceLocation, registerPTypes, typeRegistry } from '@algorandfoundation/puya-ts';
1
+ import { ptypes, LoggingContext, AbsolutePath, TypeResolver, SourceLocation, registerPTypes, typeRegistry } from '@algorandfoundation/puya-ts';
2
2
  import path from 'path';
3
3
  import ts from 'typescript';
4
4
  import { C as CodeError, d as instanceOfAny } from './typescript-helpers-sobuICoc.js';
@@ -235,7 +235,8 @@ class SourceFileVisitor {
235
235
  this.context = { ...context, currentDirectory: program.getCurrentDirectory() };
236
236
  const typeChecker = program.getTypeChecker();
237
237
  const loggingContext = LoggingContext.create();
238
- const typeResolver = new TypeResolver(typeChecker, program.getCurrentDirectory());
238
+ const programDir = AbsolutePath.resolve({ path: program.getCurrentDirectory() });
239
+ const typeResolver = new TypeResolver(typeChecker, programDir);
239
240
  this.helper = {
240
241
  additionalStatements: [],
241
242
  resolveType(node) {
@@ -261,7 +262,7 @@ class SourceFileVisitor {
261
262
  },
262
263
  sourceLocation(node) {
263
264
  try {
264
- return SourceLocation.fromNode(node, program.getCurrentDirectory());
265
+ return SourceLocation.fromNode(node, programDir);
265
266
  }
266
267
  catch {
267
268
  return SourceLocation.None;
@@ -663,4 +664,4 @@ function programFactory(config, program) {
663
664
  }
664
665
 
665
666
  export { defaultTransformerConfig as d, programFactory as p };
666
- //# sourceMappingURL=program-factory-C9DdbnJs.js.map
667
+ //# sourceMappingURL=program-factory-1rqD0Wzy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program-factory-1rqD0Wzy.js","sources":["../src/test-transformer/errors.ts","../src/test-transformer/helpers.ts","../src/test-transformer/node-factory.ts","../src/test-transformer/supported-binary-op-string.ts","../src/test-transformer/visitors.ts","../src/test-transformer/program-factory.ts"],"sourcesContent":["/** @internal */\nexport class TransformerError extends Error {\n constructor(message: string) {\n super(message)\n }\n}\n","import ts from 'typescript'\nimport upath from 'upath'\nimport { TransformerError } from './errors'\n\n/** @internal */\nexport const getPropertyNameAsString = (name: ts.PropertyName): ts.Identifier | ts.StringLiteral | ts.NoSubstitutionTemplateLiteral => {\n if (ts.isStringLiteralLike(name)) {\n return name\n }\n if (ts.isIdentifier(name)) {\n return ts.factory.createStringLiteral(name.text)\n }\n throw new TransformerError(`Node ${name.kind} cannot be converted to a static string`)\n}\n\n/** @internal */\nexport const trimGenericTypeName = (typeName: string) => typeName.replace(/<.*>/, '')\n\n/**\n * @internal\n * Normalise a file path to only include relevant segments.\n *\n * - Anything in /node_modules/ is truncated to <package-name>/path.ext\n * - Anything in workingDirectory is truncated relative to the workingDirectory\n * - Forward slashes are used to segment paths\n * @param filePath\n * @param workingDirectory\n */\nexport function normalisePath(filePath: string, workingDirectory: string): string {\n const localPackageName = /packages\\/algo-ts\\/dist\\/(.*)$/.exec(filePath)\n if (localPackageName) {\n return `@algorandfoundation/algorand-typescript/${localPackageName[1]}`\n }\n const nodeModuleName = /.*\\/node_modules\\/(.*)$/.exec(filePath)\n if (nodeModuleName) {\n return nodeModuleName[1]\n }\n const cwd = upath.normalize(`${workingDirectory}/`)\n const normalizedPath = upath.normalize(filePath)\n const moduleName = normalizedPath.startsWith(cwd) ? normalizedPath.slice(cwd.length) : normalizedPath\n return moduleName.replaceAll('\\\\', '/')\n}\n","import { ptypes } from '@algorandfoundation/puya-ts'\nimport ts from 'typescript'\nimport type { TypeInfo } from '../impl/encoded-types'\nimport type { DeliberateAny } from '../typescript-helpers'\nimport { getPropertyNameAsString, trimGenericTypeName } from './helpers'\n\nconst factory = ts.factory\n/** @internal */\nexport const nodeFactory = {\n importHelpers(testingPackageName: string) {\n return [\n factory.createImportDeclaration(\n undefined,\n factory.createImportClause(false, undefined, factory.createNamespaceImport(factory.createIdentifier('runtimeHelpers'))),\n factory.createStringLiteral(`${testingPackageName}/runtime-helpers`),\n undefined,\n ),\n factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n false,\n undefined,\n factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier('arc4'))]),\n ),\n factory.createStringLiteral(`${testingPackageName}/internal`),\n undefined,\n ),\n ]\n },\n\n switchableValue(x: ts.Expression) {\n return factory.createCallExpression(\n factory.createPropertyAccessExpression(factory.createIdentifier('runtimeHelpers'), factory.createIdentifier('switchableValue')),\n undefined,\n [x],\n )\n },\n binaryOp(left: ts.Expression, right: ts.Expression, op: string) {\n return factory.createCallExpression(\n factory.createPropertyAccessExpression(factory.createIdentifier('runtimeHelpers'), factory.createIdentifier('binaryOp')),\n undefined,\n [left, right, factory.createStringLiteral(op)],\n )\n },\n augmentedAssignmentBinaryOp(left: ts.Expression, right: ts.Expression, op: string) {\n return factory.createAssignment(\n left,\n factory.createCallExpression(\n factory.createPropertyAccessExpression(factory.createIdentifier('runtimeHelpers'), factory.createIdentifier('binaryOp')),\n undefined,\n [left, right, factory.createStringLiteral(op.replace('=', ''))],\n ),\n )\n },\n\n prefixUnaryOp(operand: ts.Expression, op: string) {\n return factory.createCallExpression(\n factory.createPropertyAccessExpression(factory.createIdentifier('runtimeHelpers'), factory.createIdentifier('unaryOp')),\n undefined,\n [operand, factory.createStringLiteral(op)],\n )\n },\n\n attachMetaData(\n sourceFileName: string,\n classIdentifier: ts.Identifier,\n method: ts.MethodDeclaration,\n argTypes: string[],\n returnType: string,\n ) {\n const methodName = getPropertyNameAsString(method.name)\n const metadata = factory.createObjectLiteralExpression([\n factory.createPropertyAssignment('methodName', methodName),\n factory.createPropertyAssignment(\n 'argTypes',\n factory.createArrayLiteralExpression(argTypes.map((p) => factory.createStringLiteral(p))),\n ),\n factory.createPropertyAssignment('returnType', factory.createStringLiteral(returnType)),\n ])\n return factory.createExpressionStatement(\n factory.createCallExpression(\n factory.createPropertyAccessExpression(factory.createIdentifier('runtimeHelpers'), factory.createIdentifier('attachAbiMetadata')),\n undefined,\n [classIdentifier, methodName, metadata, factory.createStringLiteral(sourceFileName)],\n ),\n )\n },\n\n captureGenericTypeInfo(x: ts.Expression, info: string) {\n return factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('runtimeHelpers'),\n factory.createIdentifier('captureGenericTypeInfo'),\n ),\n undefined,\n [x, factory.createStringLiteral(info)],\n )\n },\n\n instantiateEncodedType(node: ts.NewExpression, typeInfo?: TypeInfo) {\n const infoString = JSON.stringify(typeInfo)\n const classIdentifier = node.expression.getText().replace('arc4.', '')\n return factory.createNewExpression(\n factory.createIdentifier(`arc4.${trimGenericTypeName(typeInfo?.name ?? classIdentifier)}`),\n node.typeArguments,\n [infoString ? factory.createStringLiteral(infoString) : undefined, ...(node.arguments ?? [])].filter((arg) => !!arg),\n )\n },\n\n callStubbedFunction(node: ts.CallExpression, typeInfo?: TypeInfo | TypeInfo[]) {\n const typeInfoArgs = typeInfo\n ? (Array.isArray(typeInfo) ? typeInfo : [typeInfo]).map((t) => factory.createStringLiteral(JSON.stringify(t)))\n : []\n\n return factory.updateCallExpression(node, node.expression, node.typeArguments, [...typeInfoArgs, ...(node.arguments ?? [])])\n },\n\n callMethodSelectorFunction(node: ts.CallExpression) {\n if (\n node.arguments.length === 1 &&\n ts.isPropertyAccessExpression(node.arguments[0]) &&\n ts.isPropertyAccessExpression(node.arguments[0].expression)\n ) {\n const contractIdenifier = node.arguments[0].expression.expression\n return factory.updateCallExpression(node, node.expression, node.typeArguments, [...node.arguments, contractIdenifier])\n }\n return node\n },\n\n callAbiCallFunction(node: ts.CallExpression, typeParams: ptypes.PType[]) {\n if (typeParams.length === 1 && typeParams[0] instanceof ptypes.FunctionPType && typeParams[0].declaredIn) {\n return factory.updateCallExpression(node, node.expression, node.typeArguments, [\n factory.createStringLiteral(typeParams[0].declaredIn.fullName),\n factory.createStringLiteral(typeParams[0].name),\n ...node.arguments,\n ])\n }\n return node\n },\n\n callItxnComposeFunction(node: ts.CallExpression) {\n if (\n node.arguments.length === 2 &&\n ts.isPropertyAccessExpression(node.arguments[0]) &&\n ts.isPropertyAccessExpression(node.arguments[0].expression)\n ) {\n const contractIdenifier = node.arguments[0].expression.expression\n return factory.updateCallExpression(node, node.expression, node.typeArguments, [...node.arguments, contractIdenifier])\n }\n return node\n },\n} satisfies Record<string, (...args: DeliberateAny[]) => ts.Node | ts.Node[]>\n","import type { BinaryOperator, PrefixUnaryOperator } from 'typescript'\nimport ts from 'typescript'\n\n/** @internal */\nexport function supportedBinaryOpString(x: BinaryOperator): string | undefined {\n switch (x) {\n case ts.SyntaxKind.MinusToken:\n return '-'\n case ts.SyntaxKind.PlusToken:\n return '+'\n case ts.SyntaxKind.EqualsEqualsEqualsToken:\n return '==='\n case ts.SyntaxKind.ExclamationEqualsEqualsToken:\n return '!=='\n case ts.SyntaxKind.GreaterThanToken:\n return '>'\n case ts.SyntaxKind.GreaterThanEqualsToken:\n return '>='\n case ts.SyntaxKind.GreaterThanGreaterThanToken:\n return '>>'\n case ts.SyntaxKind.LessThanToken:\n return '<'\n case ts.SyntaxKind.LessThanEqualsToken:\n return '<='\n case ts.SyntaxKind.LessThanLessThanToken:\n return '<<'\n case ts.SyntaxKind.AsteriskToken:\n return '*'\n case ts.SyntaxKind.AsteriskAsteriskToken:\n return '**'\n case ts.SyntaxKind.SlashToken:\n return '/'\n case ts.SyntaxKind.PercentToken:\n return '%'\n case ts.SyntaxKind.AmpersandToken:\n return '&'\n case ts.SyntaxKind.BarToken:\n return '|'\n case ts.SyntaxKind.CaretToken:\n return '^'\n case ts.SyntaxKind.AmpersandAmpersandEqualsToken:\n case ts.SyntaxKind.AmpersandAmpersandToken:\n case ts.SyntaxKind.AmpersandEqualsToken:\n case ts.SyntaxKind.BarBarEqualsToken:\n case ts.SyntaxKind.BarBarToken:\n case ts.SyntaxKind.BarEqualsToken:\n case ts.SyntaxKind.CaretEqualsToken:\n case ts.SyntaxKind.CommaToken:\n case ts.SyntaxKind.EqualsEqualsToken:\n case ts.SyntaxKind.EqualsToken:\n case ts.SyntaxKind.ExclamationEqualsToken:\n case ts.SyntaxKind.InKeyword:\n case ts.SyntaxKind.InstanceOfKeyword:\n case ts.SyntaxKind.QuestionQuestionEqualsToken:\n case ts.SyntaxKind.QuestionQuestionToken:\n case ts.SyntaxKind.GreaterThanGreaterThanEqualsToken:\n case ts.SyntaxKind.LessThanLessThanEqualsToken:\n case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:\n case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:\n return undefined\n }\n}\n\n/** @internal */\nexport function supportedAugmentedAssignmentBinaryOpString(x: BinaryOperator): string | undefined {\n switch (x) {\n case ts.SyntaxKind.PlusEqualsToken:\n return '+='\n case ts.SyntaxKind.MinusEqualsToken:\n return '-='\n case ts.SyntaxKind.SlashEqualsToken:\n return '/='\n case ts.SyntaxKind.AsteriskEqualsToken:\n return '*='\n case ts.SyntaxKind.AsteriskAsteriskEqualsToken:\n return '**='\n case ts.SyntaxKind.PercentEqualsToken:\n return '%='\n default:\n return undefined\n }\n}\n\n/** @internal */\nexport function supportedPrefixUnaryOpString(x: PrefixUnaryOperator): string | undefined {\n switch (x) {\n case ts.SyntaxKind.TildeToken:\n return '~'\n default:\n return undefined\n }\n}\n","import { AbsolutePath, LoggingContext, ptypes, SourceLocation, TypeResolver } from '@algorandfoundation/puya-ts'\nimport path from 'path'\nimport ts from 'typescript'\nimport { CodeError } from '../errors'\nimport type { TypeInfo } from '../impl/encoded-types'\nimport { instanceOfAny } from '../typescript-helpers'\nimport { normalisePath } from './helpers'\nimport { nodeFactory } from './node-factory'\nimport type { TransformerConfig } from './program-factory'\nimport {\n supportedAugmentedAssignmentBinaryOpString,\n supportedBinaryOpString,\n supportedPrefixUnaryOpString,\n} from './supported-binary-op-string'\n\nconst { factory } = ts\n\nconst algotsModuleRegExp = new RegExp(/^(\"|')@algorandfoundation\\/algorand-typescript(\\/|\"|')/)\nconst algotsModuleSpecifier = '@algorandfoundation/algorand-typescript'\nconst testingInternalModuleSpecifier = (testingPackageName: string) => `${testingPackageName}/internal`\nconst algotsModulePaths = [\n algotsModuleSpecifier,\n '/puya-ts/packages/algo-ts/',\n `${path.sep}puya-ts${path.sep}packages${path.sep}algo-ts${path.sep}`,\n]\nconst algotsTestingModulePaths = (testingPackageName: string) => [\n testingPackageName,\n `${path.sep}algorand-typescript-testing${path.sep}src${path.sep}`,\n `${path.sep}algorand-typescript-testing${path.sep}dist${path.sep}`,\n]\n\nconst testingExamplePath = `${path.sep}algorand-typescript-testing${path.sep}examples${path.sep}`\n\ntype VisitorHelper = {\n additionalStatements: ts.Statement[]\n resolveType(node: ts.Node): ptypes.PType\n resolveTypeParameters(node: ts.CallExpression): ptypes.PType[]\n sourceLocation(node: ts.Node): SourceLocation\n tryGetSymbol(node: ts.Node): ts.Symbol | undefined\n getConfig(): TransformerConfig\n}\n\ntype Context = ts.TransformationContext & { currentDirectory: string }\n\n/** @internal */\nexport class SourceFileVisitor {\n private helper: VisitorHelper\n private context: Context\n\n constructor(\n context: ts.TransformationContext,\n private sourceFile: ts.SourceFile,\n program: ts.Program,\n config: TransformerConfig,\n ) {\n this.context = { ...context, currentDirectory: program.getCurrentDirectory() }\n const typeChecker = program.getTypeChecker()\n const loggingContext = LoggingContext.create()\n const programDir = AbsolutePath.resolve({ path: program.getCurrentDirectory() })\n const typeResolver = new TypeResolver(typeChecker, programDir)\n this.helper = {\n additionalStatements: [],\n resolveType(node: ts.Node): ptypes.PType {\n const sourceLocation = this.sourceLocation(node)\n try {\n return loggingContext.run(() => typeResolver.resolve(node, sourceLocation!))\n } catch (e) {\n const err = e as Error\n if (\n err.constructor.name === 'CodeError' &&\n !['Classes must extend', 'is not supported', 'Unable to reflect'].some((s) => err.message.includes(s))\n ) {\n throw new Error(`${sourceLocation?.toString()}: ${err.message}`, { cause: err })\n }\n return ptypes.anyPType\n }\n },\n resolveTypeParameters(node: ts.CallExpression) {\n return loggingContext.run(() => typeResolver.resolveTypeParameters(node, this.sourceLocation(node)))\n },\n tryGetSymbol(node: ts.Node): ts.Symbol | undefined {\n const s = typeChecker.getSymbolAtLocation(node)\n return s && s.flags & ts.SymbolFlags.Alias ? typeChecker.getAliasedSymbol(s) : s\n },\n sourceLocation(node: ts.Node): SourceLocation {\n try {\n return SourceLocation.fromNode(node, programDir)\n } catch {\n return SourceLocation.None\n }\n },\n getConfig(): TransformerConfig {\n return config\n },\n }\n }\n\n public result(): ts.SourceFile {\n const updatedSourceFile = ts.visitNode(this.sourceFile, this.visit) as ts.SourceFile\n return factory.updateSourceFile(updatedSourceFile, [\n ...nodeFactory.importHelpers(this.helper.getConfig().testingPackageName),\n ...updatedSourceFile.statements,\n ...this.helper.additionalStatements,\n ])\n }\n\n private visit = (node: ts.Node): ts.Node => {\n if (ts.isImportDeclaration(node)) {\n return new ImportDeclarationVisitor(node, this.helper).result()\n }\n if (ts.isFunctionLike(node)) {\n return new FunctionLikeDecVisitor(this.context, this.helper, node).result()\n }\n if (ts.isClassDeclaration(node)) {\n return new ClassVisitor(this.context, this.helper, node).result()\n }\n\n // capture generic type info for variable initialising outside class and function declarations\n // e.g. `const x = new Uint<32>(42)\n if (ts.isVariableDeclaration(node) && node.initializer) {\n return new VariableInitializerVisitor(this.context, this.helper, node).result()\n }\n\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\n\nclass ImportDeclarationVisitor {\n constructor(\n private declarationNode: ts.ImportDeclaration,\n private helper: VisitorHelper,\n ) {}\n\n public result(): ts.ImportDeclaration {\n const moduleSpecifier = this.declarationNode.moduleSpecifier.getText()\n if (this.declarationNode.importClause?.isTypeOnly || !algotsModuleRegExp.test(moduleSpecifier)) return this.declarationNode\n\n const namedBindings = this.declarationNode.importClause?.namedBindings\n // remove `arc4` from named bindings, as it is explicitly imported in the `importHelpers` method\n const nonTypeNamedBindings =\n namedBindings && ts.isNamedImports(namedBindings)\n ? (namedBindings as ts.NamedImports).elements.filter((e) => !e.isTypeOnly && e.name.getText() !== 'arc4')\n : []\n return factory.createImportDeclaration(\n this.declarationNode.modifiers,\n nonTypeNamedBindings.length\n ? factory.createImportClause(false, this.declarationNode.importClause?.name, factory.createNamedImports(nonTypeNamedBindings))\n : this.declarationNode.importClause,\n factory.createStringLiteral(\n moduleSpecifier\n .replace(algotsModuleSpecifier, testingInternalModuleSpecifier(this.helper.getConfig().testingPackageName))\n .replace(/^(\"|')/, '')\n .replace(/(\"|')$/, ''),\n ),\n this.declarationNode.attributes,\n )\n }\n}\n\nclass ExpressionVisitor {\n constructor(\n private context: Context,\n private helper: VisitorHelper,\n private expressionNode: ts.Expression,\n private stubbedFunctionName?: string,\n ) {}\n\n public result(): ts.Expression {\n return this.visit(this.expressionNode) as ts.Expression\n }\n\n private visit = (node: ts.Node): ts.Node => {\n handleTypeInfoCapture: if (ts.isCallExpression(node) || ts.isNewExpression(node)) {\n if (!tryGetAlgoTsSymbolName(node.expression, this.helper)) break handleTypeInfoCapture\n\n const type = this.helper.resolveType(node)\n\n const isGeneric = isGenericType(type)\n const needsToCaptureTypeInfo = isGeneric && isStateOrBoxType(type)\n const isArc4Encoded = isEncodedType(type)\n const info = isGeneric || isArc4Encoded ? getGenericTypeInfo(type) : undefined\n let updatedNode = node\n\n if (ts.isNewExpression(updatedNode)) {\n if (isEncodedType(type)) {\n updatedNode = nodeFactory.instantiateEncodedType(updatedNode, info)\n }\n }\n\n if (ts.isCallExpression(updatedNode)) {\n const stubbedFunctionName = this.stubbedFunctionName ?? tryGetStubbedFunctionName(updatedNode, this.helper)\n this.stubbedFunctionName = undefined\n let infoArg: TypeInfo | TypeInfo[] | undefined = info\n\n // the nodes which have been created or updated by the node factory will not have source location,\n // and we do not need to process them further\n const sourceLocation = this.helper.sourceLocation(updatedNode)\n if (sourceLocation === SourceLocation.None) break handleTypeInfoCapture\n\n if (\n isCallingEmit(stubbedFunctionName) ||\n isCallingEncodeArc4(stubbedFunctionName) ||\n isCallingSizeOf(stubbedFunctionName) ||\n isCallingClone(stubbedFunctionName)\n ) {\n infoArg = this.helper.resolveTypeParameters(updatedNode).map((t) => getGenericTypeInfo(t, sourceLocation))[0]\n } else if (isCallingDecodeArc4(stubbedFunctionName)) {\n const sourceType = ptypes.ptypeToArc4EncodedType(type, sourceLocation)\n const sourceTypeInfo = getGenericTypeInfo(sourceType, sourceLocation)\n const targetTypeInfo = getGenericTypeInfo(type, sourceLocation)\n infoArg = [sourceTypeInfo, targetTypeInfo]\n }\n\n if (stubbedFunctionName) {\n if (isCallingMethodSelector(stubbedFunctionName)) {\n updatedNode = nodeFactory.callMethodSelectorFunction(updatedNode)\n } else if (isCallingAbiCall(stubbedFunctionName)) {\n const typeParams = this.helper.resolveTypeParameters(updatedNode)\n updatedNode = nodeFactory.callAbiCallFunction(updatedNode, typeParams)\n } else if (isCallingItxnCompose(stubbedFunctionName)) {\n updatedNode = nodeFactory.callItxnComposeFunction(updatedNode)\n } else {\n updatedNode = nodeFactory.callStubbedFunction(updatedNode, infoArg)\n }\n }\n }\n return needsToCaptureTypeInfo\n ? nodeFactory.captureGenericTypeInfo(ts.visitEachChild(updatedNode, this.visit, this.context), JSON.stringify(info))\n : ts.visitEachChild(updatedNode, this.visit, this.context)\n }\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\nclass VariableInitializerVisitor {\n constructor(\n private context: Context,\n private helper: VisitorHelper,\n private declarationNode: ts.VariableDeclaration,\n ) {}\n\n public result(): ts.VariableDeclaration {\n const initializerNode = this.declarationNode.initializer\n if (!initializerNode) return this.declarationNode\n\n const updatedInitializer = new ExpressionVisitor(this.context, this.helper, initializerNode).result()\n if (updatedInitializer === initializerNode) return this.declarationNode\n return factory.updateVariableDeclaration(\n this.declarationNode,\n this.declarationNode.name,\n this.declarationNode.exclamationToken,\n this.declarationNode.type,\n updatedInitializer,\n )\n }\n}\n\nclass FunctionOrMethodVisitor {\n constructor(\n protected context: Context,\n protected helper: VisitorHelper,\n ) {}\n protected visit = (node: ts.Node): ts.Node => {\n return ts.visitEachChild(this.updateNode(node), this.visit, this.context)\n }\n\n protected updateNode(node: ts.Node): ts.Node {\n if (ts.isSwitchStatement(node)) {\n return factory.updateSwitchStatement(node, nodeFactory.switchableValue(node.expression), node.caseBlock)\n }\n\n if (ts.isCaseClause(node)) {\n return factory.updateCaseClause(node, nodeFactory.switchableValue(node.expression), node.statements)\n }\n\n if (ts.isBinaryExpression(node)) {\n const opTokenText = supportedBinaryOpString(node.operatorToken.kind)\n if (opTokenText) {\n return nodeFactory.binaryOp(node.left, node.right, opTokenText)\n }\n const augmentedAssignmentOpTokenText = supportedAugmentedAssignmentBinaryOpString(node.operatorToken.kind)\n if (augmentedAssignmentOpTokenText) {\n return nodeFactory.augmentedAssignmentBinaryOp(node.left, node.right, augmentedAssignmentOpTokenText)\n }\n }\n if (ts.isPrefixUnaryExpression(node)) {\n const tokenText = supportedPrefixUnaryOpString(node.operator)\n if (tokenText) {\n return nodeFactory.prefixUnaryOp(node.operand, tokenText)\n }\n }\n\n /*\n * capture generic type info in test functions; e.g.\n * ```\n * it('should work', () => {\n * ctx.txn.createScope([ctx.any.txn.applicationCall()]).execute(() => {\n * const box = Box<uint64>({key: Bytes('test-key')})\n * })\n * })\n * ```\n */\n if (ts.isVariableDeclaration(node) && node.initializer) {\n return new VariableInitializerVisitor(this.context, this.helper, node).result()\n }\n\n /*\n * capture generic type info in test functions and swap arc4 types with implementation; e.g.\n * ```\n * it('should work', () => {\n * expect(() => new Uint<32>(2 ** 32)).toThrowError(`expected value <= ${2 ** 32 - 1}`)\n * expect(Uint.fromBytes<Uint<32>>('').bytes).toEqual(Bytes())\n * })\n * ```\n */\n if (ts.isNewExpression(node)) {\n return new ExpressionVisitor(this.context, this.helper, node).result()\n }\n if (ts.isCallExpression(node)) {\n const stubbedFunctionName = tryGetStubbedFunctionName(node, this.helper)\n if (stubbedFunctionName) {\n return new ExpressionVisitor(this.context, this.helper, node, stubbedFunctionName).result()\n }\n }\n\n return node\n }\n}\n\nclass FunctionLikeDecVisitor extends FunctionOrMethodVisitor {\n constructor(\n context: Context,\n helper: VisitorHelper,\n private funcNode: ts.SignatureDeclaration,\n ) {\n super(context, helper)\n }\n\n public result(): ts.SignatureDeclaration {\n return ts.visitNode(this.funcNode, this.visit) as ts.SignatureDeclaration\n }\n}\nclass MethodDecVisitor extends FunctionOrMethodVisitor {\n constructor(\n context: Context,\n helper: VisitorHelper,\n private methodNode: ts.MethodDeclaration,\n ) {\n super(context, helper)\n }\n\n public result(): ts.MethodDeclaration {\n return ts.visitNode(this.methodNode, this.visit) as ts.MethodDeclaration\n }\n}\n\nclass ClassVisitor {\n private isArc4: boolean\n constructor(\n private context: Context,\n private helper: VisitorHelper,\n private classDec: ts.ClassDeclaration,\n ) {\n const classType = helper.resolveType(classDec)\n this.isArc4 = classType instanceof ptypes.ContractClassPType && classType.isARC4\n }\n\n public result(): ts.ClassDeclaration {\n return this.visit(this.classDec) as ts.ClassDeclaration\n }\n\n private visit = (node: ts.Node): ts.Node => {\n if (ts.isMethodDeclaration(node)) {\n if (this.classDec.name && this.isArc4) {\n const methodType = this.helper.resolveType(node)\n if (methodType instanceof ptypes.FunctionPType) {\n const argTypes = methodType.parameters.map((p) => JSON.stringify(getGenericTypeInfo(p[1])))\n const returnType = JSON.stringify(getGenericTypeInfo(methodType.returnType))\n const sourceFileName = normalisePath(this.classDec.parent.getSourceFile().fileName, this.context.currentDirectory)\n this.helper.additionalStatements.push(nodeFactory.attachMetaData(sourceFileName, this.classDec.name, node, argTypes, returnType))\n }\n }\n\n return new MethodDecVisitor(this.context, this.helper, node).result()\n }\n\n if (ts.isCallExpression(node)) {\n return new ExpressionVisitor(this.context, this.helper, node).result()\n }\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\n\nconst isGenericType = (type: ptypes.PType): boolean =>\n instanceOfAny(\n type,\n ptypes.ARC4StructType,\n ptypes.ARC4TupleType,\n ptypes.BoxMapPType,\n ptypes.BoxPType,\n ptypes.DynamicArrayType,\n ptypes.GlobalStateType,\n ptypes.LocalStateType,\n ptypes.StaticArrayType,\n ptypes.UFixedNxMType,\n ptypes.UintNType,\n ptypes.MutableTuplePType,\n ptypes.ReadonlyTuplePType,\n ptypes.MutableObjectPType,\n ptypes.ImmutableObjectPType,\n )\n\nconst isStateOrBoxType = (type: ptypes.PType): boolean =>\n instanceOfAny(type, ptypes.BoxMapPType, ptypes.BoxPType, ptypes.GlobalStateType, ptypes.LocalStateType)\n\nconst isEncodedType = (type: ptypes.PType): boolean =>\n instanceOfAny(\n type,\n ptypes.ARC4StructType,\n ptypes.ARC4TupleType,\n ptypes.DynamicArrayType,\n ptypes.StaticArrayType,\n ptypes.UFixedNxMType,\n ptypes.UintNType,\n ptypes.ReferenceArrayType,\n ptypes.FixedArrayPType,\n ) ||\n type === ptypes.arc4StringType ||\n type === ptypes.arc4BooleanType\n\nconst getGenericTypeInfo = (type: ptypes.PType, sourceLocation?: SourceLocation): TypeInfo => {\n if (type instanceof ptypes.UnionPType) {\n throw new CodeError(\n `${sourceLocation}: Union types are not valid as a variable, parameter, return, or property type. Expression type is ${type.name}`,\n )\n }\n let typeName = type?.name ?? type?.toString() ?? 'unknown'\n let genericArgs: TypeInfo[] | Record<string, TypeInfo> = []\n\n if (instanceOfAny(type, ptypes.LocalStateType, ptypes.GlobalStateType, ptypes.BoxPType)) {\n genericArgs.push(getGenericTypeInfo(type.contentType, sourceLocation))\n } else if (type instanceof ptypes.BoxMapPType) {\n genericArgs.push(getGenericTypeInfo(type.keyType, sourceLocation))\n genericArgs.push(getGenericTypeInfo(type.contentType, sourceLocation))\n } else if (\n instanceOfAny(\n type,\n ptypes.StaticArrayType,\n ptypes.DynamicArrayType,\n ptypes.ArrayPType,\n ptypes.ReadonlyArrayPType,\n ptypes.ReferenceArrayType,\n ptypes.FixedArrayPType,\n )\n ) {\n const entries = []\n entries.push(['elementType', getGenericTypeInfo(type.elementType, sourceLocation)])\n if (instanceOfAny(type, ptypes.StaticArrayType, ptypes.FixedArrayPType)) {\n entries.push(['size', { name: type.arraySize.toString() }])\n }\n genericArgs = Object.fromEntries(entries)\n } else if (type instanceof ptypes.UFixedNxMType) {\n genericArgs = { n: { name: type.n.toString() }, m: { name: type.m.toString() } }\n } else if (type instanceof ptypes.UintNType) {\n genericArgs.push({ name: type.n.toString() })\n } else if (type instanceof ptypes.ARC4StructType) {\n typeName = `Struct<${type.name}>`\n genericArgs = Object.fromEntries(\n Object.entries(type.fields)\n .map(([key, value]) => [key, getGenericTypeInfo(value, sourceLocation)])\n .filter((x) => !!x),\n )\n } else if (type instanceof ptypes.MutableObjectPType || type instanceof ptypes.ImmutableObjectPType) {\n typeName = type instanceof ptypes.MutableObjectPType ? `Object<${type.name}>` : `ReadonlyObject<${type.name}>`\n genericArgs = Object.fromEntries(\n Object.entries(type.properties)\n .map(([key, value]) => [key, getGenericTypeInfo(value, sourceLocation)])\n .filter((x) => !!x),\n )\n } else if (\n type instanceof ptypes.ARC4TupleType ||\n type instanceof ptypes.MutableTuplePType ||\n type instanceof ptypes.ReadonlyTuplePType\n ) {\n typeName =\n type instanceof ptypes.MutableTuplePType\n ? `MutableTuple<${type.name}>`\n : type instanceof ptypes.ReadonlyTuplePType\n ? `ReadonlyTuple<${type.name}>`\n : type.name\n genericArgs.push(...type.items.map((t) => getGenericTypeInfo(t, sourceLocation)))\n }\n\n const result: TypeInfo = { name: typeName }\n if (genericArgs && (genericArgs.length || Object.keys(genericArgs).length)) {\n result.genericArgs = genericArgs\n }\n return result\n}\n\nconst tryGetStubbedFunctionName = (node: ts.CallExpression, helper: VisitorHelper): string | undefined => {\n if (node.expression.kind !== ts.SyntaxKind.Identifier && !ts.isPropertyAccessExpression(node.expression)) return undefined\n const identityExpression = ts.isPropertyAccessExpression(node.expression)\n ? (node.expression as ts.PropertyAccessExpression).name\n : (node.expression as ts.Identifier)\n const functionName = tryGetAlgoTsSymbolName(identityExpression, helper)\n if (functionName === undefined) return undefined\n const stubbedFunctionNames = ['convertBytes', 'decodeArc4', 'encodeArc4', 'emit', 'methodSelector', 'sizeOf', 'abiCall', 'clone']\n\n if (stubbedFunctionNames.includes(functionName)) {\n if (ts.isPropertyAccessExpression(node.expression)) {\n const objectName = tryGetAlgoTsSymbolName(node.expression.expression, helper)\n return objectName !== undefined ? functionName : undefined\n }\n return functionName\n }\n\n if (['begin', 'next'].includes(functionName) && ts.isPropertyAccessExpression(node.expression)) {\n const objectExpression = node.expression.expression\n const objectName = tryGetAlgoTsSymbolName(objectExpression, helper)\n if (['itxnCompose'].includes(objectName || '')) return functionName\n }\n\n return undefined\n}\n\nconst tryGetAlgoTsSymbolName = (node: ts.Node, helper: VisitorHelper): string | undefined => {\n const symbol = helper.tryGetSymbol(node)\n if (!symbol) return undefined\n\n const sourceFileName = symbol.valueDeclaration?.getSourceFile().fileName\n if (!sourceFileName) return undefined\n\n // If the symbol is from algorand-typescript package or testing example path, return its name\n if (algotsModulePaths.some((path) => sourceFileName.includes(path)) || sourceFileName.includes(testingExamplePath))\n return symbol.getName()\n\n // If the symbol is from algorand-typescript-testing package, return undefined as they do not need to be processed\n if (algotsTestingModulePaths(helper.getConfig().testingPackageName).some((path) => sourceFileName.includes(path))) return undefined\n\n return symbol.getName()\n}\n\nconst isCallingDecodeArc4 = (functionName: string | undefined): boolean => 'decodeArc4' === (functionName ?? '')\nconst isCallingEncodeArc4 = (functionName: string | undefined): boolean => 'encodeArc4' === (functionName ?? '')\nconst isCallingSizeOf = (functionName: string | undefined): boolean => 'sizeOf' === (functionName ?? '')\nconst isCallingEmit = (functionName: string | undefined): boolean => 'emit' === (functionName ?? '')\nconst isCallingMethodSelector = (functionName: string | undefined): boolean => 'methodSelector' === (functionName ?? '')\nconst isCallingAbiCall = (functionName: string | undefined): boolean => ['abiCall'].includes(functionName ?? '')\nconst isCallingItxnCompose = (functionName: string | undefined): boolean => ['begin', 'next'].includes(functionName ?? '')\nconst isCallingClone = (functionName: string | undefined): boolean => 'clone' === (functionName ?? '')\n","import { registerPTypes, typeRegistry } from '@algorandfoundation/puya-ts'\nimport type ts from 'typescript'\nimport { SourceFileVisitor } from './visitors'\n\nexport interface TransformerConfig {\n includeExt: string[]\n testingPackageName: string\n}\n/** @internal */\nexport const defaultTransformerConfig: TransformerConfig = {\n includeExt: ['.algo.ts', '.algo.spec.ts', '.algo.test.ts'],\n testingPackageName: '@algorandfoundation/algorand-typescript-testing',\n}\n\n/** @internal */\nexport function programFactory(config: TransformerConfig, program: ts.Program): ts.TransformerFactory<ts.SourceFile> {\n registerPTypes(typeRegistry)\n return (context) => {\n return (sourceFile) => {\n if (!config.includeExt.some((i) => sourceFile.fileName.endsWith(i))) return sourceFile\n return new SourceFileVisitor(context, sourceFile, program, config).result()\n }\n }\n}\n"],"names":["factory"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { p as programFactory, d as defaultTransformerConfig } from '../program-factory-C9DdbnJs.js';
1
+ import { p as programFactory, d as defaultTransformerConfig } from '../program-factory-1rqD0Wzy.js';
2
2
  import '@algorandfoundation/puya-ts';
3
3
  import 'path';
4
4
  import 'typescript';
@@ -1,4 +1,4 @@
1
- import { p as programFactory, d as defaultTransformerConfig } from '../program-factory-C9DdbnJs.js';
1
+ import { p as programFactory, d as defaultTransformerConfig } from '../program-factory-1rqD0Wzy.js';
2
2
  import '@algorandfoundation/puya-ts';
3
3
  import 'path';
4
4
  import 'typescript';
@@ -1 +0,0 @@
1
- {"version":3,"file":"program-factory-C9DdbnJs.js","sources":["../src/test-transformer/errors.ts","../src/test-transformer/helpers.ts","../src/test-transformer/node-factory.ts","../src/test-transformer/supported-binary-op-string.ts","../src/test-transformer/visitors.ts","../src/test-transformer/program-factory.ts"],"sourcesContent":["/** @internal */\nexport class TransformerError extends Error {\n constructor(message: string) {\n super(message)\n }\n}\n","import ts from 'typescript'\nimport upath from 'upath'\nimport { TransformerError } from './errors'\n\n/** @internal */\nexport const getPropertyNameAsString = (name: ts.PropertyName): ts.Identifier | ts.StringLiteral | ts.NoSubstitutionTemplateLiteral => {\n if (ts.isStringLiteralLike(name)) {\n return name\n }\n if (ts.isIdentifier(name)) {\n return ts.factory.createStringLiteral(name.text)\n }\n throw new TransformerError(`Node ${name.kind} cannot be converted to a static string`)\n}\n\n/** @internal */\nexport const trimGenericTypeName = (typeName: string) => typeName.replace(/<.*>/, '')\n\n/**\n * @internal\n * Normalise a file path to only include relevant segments.\n *\n * - Anything in /node_modules/ is truncated to <package-name>/path.ext\n * - Anything in workingDirectory is truncated relative to the workingDirectory\n * - Forward slashes are used to segment paths\n * @param filePath\n * @param workingDirectory\n */\nexport function normalisePath(filePath: string, workingDirectory: string): string {\n const localPackageName = /packages\\/algo-ts\\/dist\\/(.*)$/.exec(filePath)\n if (localPackageName) {\n return `@algorandfoundation/algorand-typescript/${localPackageName[1]}`\n }\n const nodeModuleName = /.*\\/node_modules\\/(.*)$/.exec(filePath)\n if (nodeModuleName) {\n return nodeModuleName[1]\n }\n const cwd = upath.normalize(`${workingDirectory}/`)\n const normalizedPath = upath.normalize(filePath)\n const moduleName = normalizedPath.startsWith(cwd) ? normalizedPath.slice(cwd.length) : normalizedPath\n return moduleName.replaceAll('\\\\', '/')\n}\n","import { ptypes } from '@algorandfoundation/puya-ts'\nimport ts from 'typescript'\nimport type { TypeInfo } from '../impl/encoded-types'\nimport type { DeliberateAny } from '../typescript-helpers'\nimport { getPropertyNameAsString, trimGenericTypeName } from './helpers'\n\nconst factory = ts.factory\n/** @internal */\nexport const nodeFactory = {\n importHelpers(testingPackageName: string) {\n return [\n factory.createImportDeclaration(\n undefined,\n factory.createImportClause(false, undefined, factory.createNamespaceImport(factory.createIdentifier('runtimeHelpers'))),\n factory.createStringLiteral(`${testingPackageName}/runtime-helpers`),\n undefined,\n ),\n factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n false,\n undefined,\n factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier('arc4'))]),\n ),\n factory.createStringLiteral(`${testingPackageName}/internal`),\n undefined,\n ),\n ]\n },\n\n switchableValue(x: ts.Expression) {\n return factory.createCallExpression(\n factory.createPropertyAccessExpression(factory.createIdentifier('runtimeHelpers'), factory.createIdentifier('switchableValue')),\n undefined,\n [x],\n )\n },\n binaryOp(left: ts.Expression, right: ts.Expression, op: string) {\n return factory.createCallExpression(\n factory.createPropertyAccessExpression(factory.createIdentifier('runtimeHelpers'), factory.createIdentifier('binaryOp')),\n undefined,\n [left, right, factory.createStringLiteral(op)],\n )\n },\n augmentedAssignmentBinaryOp(left: ts.Expression, right: ts.Expression, op: string) {\n return factory.createAssignment(\n left,\n factory.createCallExpression(\n factory.createPropertyAccessExpression(factory.createIdentifier('runtimeHelpers'), factory.createIdentifier('binaryOp')),\n undefined,\n [left, right, factory.createStringLiteral(op.replace('=', ''))],\n ),\n )\n },\n\n prefixUnaryOp(operand: ts.Expression, op: string) {\n return factory.createCallExpression(\n factory.createPropertyAccessExpression(factory.createIdentifier('runtimeHelpers'), factory.createIdentifier('unaryOp')),\n undefined,\n [operand, factory.createStringLiteral(op)],\n )\n },\n\n attachMetaData(\n sourceFileName: string,\n classIdentifier: ts.Identifier,\n method: ts.MethodDeclaration,\n argTypes: string[],\n returnType: string,\n ) {\n const methodName = getPropertyNameAsString(method.name)\n const metadata = factory.createObjectLiteralExpression([\n factory.createPropertyAssignment('methodName', methodName),\n factory.createPropertyAssignment(\n 'argTypes',\n factory.createArrayLiteralExpression(argTypes.map((p) => factory.createStringLiteral(p))),\n ),\n factory.createPropertyAssignment('returnType', factory.createStringLiteral(returnType)),\n ])\n return factory.createExpressionStatement(\n factory.createCallExpression(\n factory.createPropertyAccessExpression(factory.createIdentifier('runtimeHelpers'), factory.createIdentifier('attachAbiMetadata')),\n undefined,\n [classIdentifier, methodName, metadata, factory.createStringLiteral(sourceFileName)],\n ),\n )\n },\n\n captureGenericTypeInfo(x: ts.Expression, info: string) {\n return factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('runtimeHelpers'),\n factory.createIdentifier('captureGenericTypeInfo'),\n ),\n undefined,\n [x, factory.createStringLiteral(info)],\n )\n },\n\n instantiateEncodedType(node: ts.NewExpression, typeInfo?: TypeInfo) {\n const infoString = JSON.stringify(typeInfo)\n const classIdentifier = node.expression.getText().replace('arc4.', '')\n return factory.createNewExpression(\n factory.createIdentifier(`arc4.${trimGenericTypeName(typeInfo?.name ?? classIdentifier)}`),\n node.typeArguments,\n [infoString ? factory.createStringLiteral(infoString) : undefined, ...(node.arguments ?? [])].filter((arg) => !!arg),\n )\n },\n\n callStubbedFunction(node: ts.CallExpression, typeInfo?: TypeInfo | TypeInfo[]) {\n const typeInfoArgs = typeInfo\n ? (Array.isArray(typeInfo) ? typeInfo : [typeInfo]).map((t) => factory.createStringLiteral(JSON.stringify(t)))\n : []\n\n return factory.updateCallExpression(node, node.expression, node.typeArguments, [...typeInfoArgs, ...(node.arguments ?? [])])\n },\n\n callMethodSelectorFunction(node: ts.CallExpression) {\n if (\n node.arguments.length === 1 &&\n ts.isPropertyAccessExpression(node.arguments[0]) &&\n ts.isPropertyAccessExpression(node.arguments[0].expression)\n ) {\n const contractIdenifier = node.arguments[0].expression.expression\n return factory.updateCallExpression(node, node.expression, node.typeArguments, [...node.arguments, contractIdenifier])\n }\n return node\n },\n\n callAbiCallFunction(node: ts.CallExpression, typeParams: ptypes.PType[]) {\n if (typeParams.length === 1 && typeParams[0] instanceof ptypes.FunctionPType && typeParams[0].declaredIn) {\n return factory.updateCallExpression(node, node.expression, node.typeArguments, [\n factory.createStringLiteral(typeParams[0].declaredIn.fullName),\n factory.createStringLiteral(typeParams[0].name),\n ...node.arguments,\n ])\n }\n return node\n },\n\n callItxnComposeFunction(node: ts.CallExpression) {\n if (\n node.arguments.length === 2 &&\n ts.isPropertyAccessExpression(node.arguments[0]) &&\n ts.isPropertyAccessExpression(node.arguments[0].expression)\n ) {\n const contractIdenifier = node.arguments[0].expression.expression\n return factory.updateCallExpression(node, node.expression, node.typeArguments, [...node.arguments, contractIdenifier])\n }\n return node\n },\n} satisfies Record<string, (...args: DeliberateAny[]) => ts.Node | ts.Node[]>\n","import type { BinaryOperator, PrefixUnaryOperator } from 'typescript'\nimport ts from 'typescript'\n\n/** @internal */\nexport function supportedBinaryOpString(x: BinaryOperator): string | undefined {\n switch (x) {\n case ts.SyntaxKind.MinusToken:\n return '-'\n case ts.SyntaxKind.PlusToken:\n return '+'\n case ts.SyntaxKind.EqualsEqualsEqualsToken:\n return '==='\n case ts.SyntaxKind.ExclamationEqualsEqualsToken:\n return '!=='\n case ts.SyntaxKind.GreaterThanToken:\n return '>'\n case ts.SyntaxKind.GreaterThanEqualsToken:\n return '>='\n case ts.SyntaxKind.GreaterThanGreaterThanToken:\n return '>>'\n case ts.SyntaxKind.LessThanToken:\n return '<'\n case ts.SyntaxKind.LessThanEqualsToken:\n return '<='\n case ts.SyntaxKind.LessThanLessThanToken:\n return '<<'\n case ts.SyntaxKind.AsteriskToken:\n return '*'\n case ts.SyntaxKind.AsteriskAsteriskToken:\n return '**'\n case ts.SyntaxKind.SlashToken:\n return '/'\n case ts.SyntaxKind.PercentToken:\n return '%'\n case ts.SyntaxKind.AmpersandToken:\n return '&'\n case ts.SyntaxKind.BarToken:\n return '|'\n case ts.SyntaxKind.CaretToken:\n return '^'\n case ts.SyntaxKind.AmpersandAmpersandEqualsToken:\n case ts.SyntaxKind.AmpersandAmpersandToken:\n case ts.SyntaxKind.AmpersandEqualsToken:\n case ts.SyntaxKind.BarBarEqualsToken:\n case ts.SyntaxKind.BarBarToken:\n case ts.SyntaxKind.BarEqualsToken:\n case ts.SyntaxKind.CaretEqualsToken:\n case ts.SyntaxKind.CommaToken:\n case ts.SyntaxKind.EqualsEqualsToken:\n case ts.SyntaxKind.EqualsToken:\n case ts.SyntaxKind.ExclamationEqualsToken:\n case ts.SyntaxKind.InKeyword:\n case ts.SyntaxKind.InstanceOfKeyword:\n case ts.SyntaxKind.QuestionQuestionEqualsToken:\n case ts.SyntaxKind.QuestionQuestionToken:\n case ts.SyntaxKind.GreaterThanGreaterThanEqualsToken:\n case ts.SyntaxKind.LessThanLessThanEqualsToken:\n case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:\n case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:\n return undefined\n }\n}\n\n/** @internal */\nexport function supportedAugmentedAssignmentBinaryOpString(x: BinaryOperator): string | undefined {\n switch (x) {\n case ts.SyntaxKind.PlusEqualsToken:\n return '+='\n case ts.SyntaxKind.MinusEqualsToken:\n return '-='\n case ts.SyntaxKind.SlashEqualsToken:\n return '/='\n case ts.SyntaxKind.AsteriskEqualsToken:\n return '*='\n case ts.SyntaxKind.AsteriskAsteriskEqualsToken:\n return '**='\n case ts.SyntaxKind.PercentEqualsToken:\n return '%='\n default:\n return undefined\n }\n}\n\n/** @internal */\nexport function supportedPrefixUnaryOpString(x: PrefixUnaryOperator): string | undefined {\n switch (x) {\n case ts.SyntaxKind.TildeToken:\n return '~'\n default:\n return undefined\n }\n}\n","import { LoggingContext, ptypes, SourceLocation, TypeResolver } from '@algorandfoundation/puya-ts'\nimport path from 'path'\nimport ts from 'typescript'\nimport { CodeError } from '../errors'\nimport type { TypeInfo } from '../impl/encoded-types'\nimport { instanceOfAny } from '../typescript-helpers'\nimport { normalisePath } from './helpers'\nimport { nodeFactory } from './node-factory'\nimport type { TransformerConfig } from './program-factory'\nimport {\n supportedAugmentedAssignmentBinaryOpString,\n supportedBinaryOpString,\n supportedPrefixUnaryOpString,\n} from './supported-binary-op-string'\n\nconst { factory } = ts\n\nconst algotsModuleRegExp = new RegExp(/^(\"|')@algorandfoundation\\/algorand-typescript(\\/|\"|')/)\nconst algotsModuleSpecifier = '@algorandfoundation/algorand-typescript'\nconst testingInternalModuleSpecifier = (testingPackageName: string) => `${testingPackageName}/internal`\nconst algotsModulePaths = [\n algotsModuleSpecifier,\n '/puya-ts/packages/algo-ts/',\n `${path.sep}puya-ts${path.sep}packages${path.sep}algo-ts${path.sep}`,\n]\nconst algotsTestingModulePaths = (testingPackageName: string) => [\n testingPackageName,\n `${path.sep}algorand-typescript-testing${path.sep}src${path.sep}`,\n `${path.sep}algorand-typescript-testing${path.sep}dist${path.sep}`,\n]\n\nconst testingExamplePath = `${path.sep}algorand-typescript-testing${path.sep}examples${path.sep}`\n\ntype VisitorHelper = {\n additionalStatements: ts.Statement[]\n resolveType(node: ts.Node): ptypes.PType\n resolveTypeParameters(node: ts.CallExpression): ptypes.PType[]\n sourceLocation(node: ts.Node): SourceLocation\n tryGetSymbol(node: ts.Node): ts.Symbol | undefined\n getConfig(): TransformerConfig\n}\n\ntype Context = ts.TransformationContext & { currentDirectory: string }\n\n/** @internal */\nexport class SourceFileVisitor {\n private helper: VisitorHelper\n private context: Context\n\n constructor(\n context: ts.TransformationContext,\n private sourceFile: ts.SourceFile,\n program: ts.Program,\n config: TransformerConfig,\n ) {\n this.context = { ...context, currentDirectory: program.getCurrentDirectory() }\n const typeChecker = program.getTypeChecker()\n const loggingContext = LoggingContext.create()\n const typeResolver = new TypeResolver(typeChecker, program.getCurrentDirectory())\n this.helper = {\n additionalStatements: [],\n resolveType(node: ts.Node): ptypes.PType {\n const sourceLocation = this.sourceLocation(node)\n try {\n return loggingContext.run(() => typeResolver.resolve(node, sourceLocation!))\n } catch (e) {\n const err = e as Error\n if (\n err.constructor.name === 'CodeError' &&\n !['Classes must extend', 'is not supported', 'Unable to reflect'].some((s) => err.message.includes(s))\n ) {\n throw new Error(`${sourceLocation?.toString()}: ${err.message}`, { cause: err })\n }\n return ptypes.anyPType\n }\n },\n resolveTypeParameters(node: ts.CallExpression) {\n return loggingContext.run(() => typeResolver.resolveTypeParameters(node, this.sourceLocation(node)))\n },\n tryGetSymbol(node: ts.Node): ts.Symbol | undefined {\n const s = typeChecker.getSymbolAtLocation(node)\n return s && s.flags & ts.SymbolFlags.Alias ? typeChecker.getAliasedSymbol(s) : s\n },\n sourceLocation(node: ts.Node): SourceLocation {\n try {\n return SourceLocation.fromNode(node, program.getCurrentDirectory())\n } catch {\n return SourceLocation.None\n }\n },\n getConfig(): TransformerConfig {\n return config\n },\n }\n }\n\n public result(): ts.SourceFile {\n const updatedSourceFile = ts.visitNode(this.sourceFile, this.visit) as ts.SourceFile\n return factory.updateSourceFile(updatedSourceFile, [\n ...nodeFactory.importHelpers(this.helper.getConfig().testingPackageName),\n ...updatedSourceFile.statements,\n ...this.helper.additionalStatements,\n ])\n }\n\n private visit = (node: ts.Node): ts.Node => {\n if (ts.isImportDeclaration(node)) {\n return new ImportDeclarationVisitor(node, this.helper).result()\n }\n if (ts.isFunctionLike(node)) {\n return new FunctionLikeDecVisitor(this.context, this.helper, node).result()\n }\n if (ts.isClassDeclaration(node)) {\n return new ClassVisitor(this.context, this.helper, node).result()\n }\n\n // capture generic type info for variable initialising outside class and function declarations\n // e.g. `const x = new Uint<32>(42)\n if (ts.isVariableDeclaration(node) && node.initializer) {\n return new VariableInitializerVisitor(this.context, this.helper, node).result()\n }\n\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\n\nclass ImportDeclarationVisitor {\n constructor(\n private declarationNode: ts.ImportDeclaration,\n private helper: VisitorHelper,\n ) {}\n\n public result(): ts.ImportDeclaration {\n const moduleSpecifier = this.declarationNode.moduleSpecifier.getText()\n if (this.declarationNode.importClause?.isTypeOnly || !algotsModuleRegExp.test(moduleSpecifier)) return this.declarationNode\n\n const namedBindings = this.declarationNode.importClause?.namedBindings\n // remove `arc4` from named bindings, as it is explicitly imported in the `importHelpers` method\n const nonTypeNamedBindings =\n namedBindings && ts.isNamedImports(namedBindings)\n ? (namedBindings as ts.NamedImports).elements.filter((e) => !e.isTypeOnly && e.name.getText() !== 'arc4')\n : []\n return factory.createImportDeclaration(\n this.declarationNode.modifiers,\n nonTypeNamedBindings.length\n ? factory.createImportClause(false, this.declarationNode.importClause?.name, factory.createNamedImports(nonTypeNamedBindings))\n : this.declarationNode.importClause,\n factory.createStringLiteral(\n moduleSpecifier\n .replace(algotsModuleSpecifier, testingInternalModuleSpecifier(this.helper.getConfig().testingPackageName))\n .replace(/^(\"|')/, '')\n .replace(/(\"|')$/, ''),\n ),\n this.declarationNode.attributes,\n )\n }\n}\n\nclass ExpressionVisitor {\n constructor(\n private context: Context,\n private helper: VisitorHelper,\n private expressionNode: ts.Expression,\n private stubbedFunctionName?: string,\n ) {}\n\n public result(): ts.Expression {\n return this.visit(this.expressionNode) as ts.Expression\n }\n\n private visit = (node: ts.Node): ts.Node => {\n handleTypeInfoCapture: if (ts.isCallExpression(node) || ts.isNewExpression(node)) {\n if (!tryGetAlgoTsSymbolName(node.expression, this.helper)) break handleTypeInfoCapture\n\n const type = this.helper.resolveType(node)\n\n const isGeneric = isGenericType(type)\n const needsToCaptureTypeInfo = isGeneric && isStateOrBoxType(type)\n const isArc4Encoded = isEncodedType(type)\n const info = isGeneric || isArc4Encoded ? getGenericTypeInfo(type) : undefined\n let updatedNode = node\n\n if (ts.isNewExpression(updatedNode)) {\n if (isEncodedType(type)) {\n updatedNode = nodeFactory.instantiateEncodedType(updatedNode, info)\n }\n }\n\n if (ts.isCallExpression(updatedNode)) {\n const stubbedFunctionName = this.stubbedFunctionName ?? tryGetStubbedFunctionName(updatedNode, this.helper)\n this.stubbedFunctionName = undefined\n let infoArg: TypeInfo | TypeInfo[] | undefined = info\n\n // the nodes which have been created or updated by the node factory will not have source location,\n // and we do not need to process them further\n const sourceLocation = this.helper.sourceLocation(updatedNode)\n if (sourceLocation === SourceLocation.None) break handleTypeInfoCapture\n\n if (\n isCallingEmit(stubbedFunctionName) ||\n isCallingEncodeArc4(stubbedFunctionName) ||\n isCallingSizeOf(stubbedFunctionName) ||\n isCallingClone(stubbedFunctionName)\n ) {\n infoArg = this.helper.resolveTypeParameters(updatedNode).map((t) => getGenericTypeInfo(t, sourceLocation))[0]\n } else if (isCallingDecodeArc4(stubbedFunctionName)) {\n const sourceType = ptypes.ptypeToArc4EncodedType(type, sourceLocation)\n const sourceTypeInfo = getGenericTypeInfo(sourceType, sourceLocation)\n const targetTypeInfo = getGenericTypeInfo(type, sourceLocation)\n infoArg = [sourceTypeInfo, targetTypeInfo]\n }\n\n if (stubbedFunctionName) {\n if (isCallingMethodSelector(stubbedFunctionName)) {\n updatedNode = nodeFactory.callMethodSelectorFunction(updatedNode)\n } else if (isCallingAbiCall(stubbedFunctionName)) {\n const typeParams = this.helper.resolveTypeParameters(updatedNode)\n updatedNode = nodeFactory.callAbiCallFunction(updatedNode, typeParams)\n } else if (isCallingItxnCompose(stubbedFunctionName)) {\n updatedNode = nodeFactory.callItxnComposeFunction(updatedNode)\n } else {\n updatedNode = nodeFactory.callStubbedFunction(updatedNode, infoArg)\n }\n }\n }\n return needsToCaptureTypeInfo\n ? nodeFactory.captureGenericTypeInfo(ts.visitEachChild(updatedNode, this.visit, this.context), JSON.stringify(info))\n : ts.visitEachChild(updatedNode, this.visit, this.context)\n }\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\nclass VariableInitializerVisitor {\n constructor(\n private context: Context,\n private helper: VisitorHelper,\n private declarationNode: ts.VariableDeclaration,\n ) {}\n\n public result(): ts.VariableDeclaration {\n const initializerNode = this.declarationNode.initializer\n if (!initializerNode) return this.declarationNode\n\n const updatedInitializer = new ExpressionVisitor(this.context, this.helper, initializerNode).result()\n if (updatedInitializer === initializerNode) return this.declarationNode\n return factory.updateVariableDeclaration(\n this.declarationNode,\n this.declarationNode.name,\n this.declarationNode.exclamationToken,\n this.declarationNode.type,\n updatedInitializer,\n )\n }\n}\n\nclass FunctionOrMethodVisitor {\n constructor(\n protected context: Context,\n protected helper: VisitorHelper,\n ) {}\n protected visit = (node: ts.Node): ts.Node => {\n return ts.visitEachChild(this.updateNode(node), this.visit, this.context)\n }\n\n protected updateNode(node: ts.Node): ts.Node {\n if (ts.isSwitchStatement(node)) {\n return factory.updateSwitchStatement(node, nodeFactory.switchableValue(node.expression), node.caseBlock)\n }\n\n if (ts.isCaseClause(node)) {\n return factory.updateCaseClause(node, nodeFactory.switchableValue(node.expression), node.statements)\n }\n\n if (ts.isBinaryExpression(node)) {\n const opTokenText = supportedBinaryOpString(node.operatorToken.kind)\n if (opTokenText) {\n return nodeFactory.binaryOp(node.left, node.right, opTokenText)\n }\n const augmentedAssignmentOpTokenText = supportedAugmentedAssignmentBinaryOpString(node.operatorToken.kind)\n if (augmentedAssignmentOpTokenText) {\n return nodeFactory.augmentedAssignmentBinaryOp(node.left, node.right, augmentedAssignmentOpTokenText)\n }\n }\n if (ts.isPrefixUnaryExpression(node)) {\n const tokenText = supportedPrefixUnaryOpString(node.operator)\n if (tokenText) {\n return nodeFactory.prefixUnaryOp(node.operand, tokenText)\n }\n }\n\n /*\n * capture generic type info in test functions; e.g.\n * ```\n * it('should work', () => {\n * ctx.txn.createScope([ctx.any.txn.applicationCall()]).execute(() => {\n * const box = Box<uint64>({key: Bytes('test-key')})\n * })\n * })\n * ```\n */\n if (ts.isVariableDeclaration(node) && node.initializer) {\n return new VariableInitializerVisitor(this.context, this.helper, node).result()\n }\n\n /*\n * capture generic type info in test functions and swap arc4 types with implementation; e.g.\n * ```\n * it('should work', () => {\n * expect(() => new Uint<32>(2 ** 32)).toThrowError(`expected value <= ${2 ** 32 - 1}`)\n * expect(Uint.fromBytes<Uint<32>>('').bytes).toEqual(Bytes())\n * })\n * ```\n */\n if (ts.isNewExpression(node)) {\n return new ExpressionVisitor(this.context, this.helper, node).result()\n }\n if (ts.isCallExpression(node)) {\n const stubbedFunctionName = tryGetStubbedFunctionName(node, this.helper)\n if (stubbedFunctionName) {\n return new ExpressionVisitor(this.context, this.helper, node, stubbedFunctionName).result()\n }\n }\n\n return node\n }\n}\n\nclass FunctionLikeDecVisitor extends FunctionOrMethodVisitor {\n constructor(\n context: Context,\n helper: VisitorHelper,\n private funcNode: ts.SignatureDeclaration,\n ) {\n super(context, helper)\n }\n\n public result(): ts.SignatureDeclaration {\n return ts.visitNode(this.funcNode, this.visit) as ts.SignatureDeclaration\n }\n}\nclass MethodDecVisitor extends FunctionOrMethodVisitor {\n constructor(\n context: Context,\n helper: VisitorHelper,\n private methodNode: ts.MethodDeclaration,\n ) {\n super(context, helper)\n }\n\n public result(): ts.MethodDeclaration {\n return ts.visitNode(this.methodNode, this.visit) as ts.MethodDeclaration\n }\n}\n\nclass ClassVisitor {\n private isArc4: boolean\n constructor(\n private context: Context,\n private helper: VisitorHelper,\n private classDec: ts.ClassDeclaration,\n ) {\n const classType = helper.resolveType(classDec)\n this.isArc4 = classType instanceof ptypes.ContractClassPType && classType.isARC4\n }\n\n public result(): ts.ClassDeclaration {\n return this.visit(this.classDec) as ts.ClassDeclaration\n }\n\n private visit = (node: ts.Node): ts.Node => {\n if (ts.isMethodDeclaration(node)) {\n if (this.classDec.name && this.isArc4) {\n const methodType = this.helper.resolveType(node)\n if (methodType instanceof ptypes.FunctionPType) {\n const argTypes = methodType.parameters.map((p) => JSON.stringify(getGenericTypeInfo(p[1])))\n const returnType = JSON.stringify(getGenericTypeInfo(methodType.returnType))\n const sourceFileName = normalisePath(this.classDec.parent.getSourceFile().fileName, this.context.currentDirectory)\n this.helper.additionalStatements.push(nodeFactory.attachMetaData(sourceFileName, this.classDec.name, node, argTypes, returnType))\n }\n }\n\n return new MethodDecVisitor(this.context, this.helper, node).result()\n }\n\n if (ts.isCallExpression(node)) {\n return new ExpressionVisitor(this.context, this.helper, node).result()\n }\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\n\nconst isGenericType = (type: ptypes.PType): boolean =>\n instanceOfAny(\n type,\n ptypes.ARC4StructType,\n ptypes.ARC4TupleType,\n ptypes.BoxMapPType,\n ptypes.BoxPType,\n ptypes.DynamicArrayType,\n ptypes.GlobalStateType,\n ptypes.LocalStateType,\n ptypes.StaticArrayType,\n ptypes.UFixedNxMType,\n ptypes.UintNType,\n ptypes.MutableTuplePType,\n ptypes.ReadonlyTuplePType,\n ptypes.MutableObjectPType,\n ptypes.ImmutableObjectPType,\n )\n\nconst isStateOrBoxType = (type: ptypes.PType): boolean =>\n instanceOfAny(type, ptypes.BoxMapPType, ptypes.BoxPType, ptypes.GlobalStateType, ptypes.LocalStateType)\n\nconst isEncodedType = (type: ptypes.PType): boolean =>\n instanceOfAny(\n type,\n ptypes.ARC4StructType,\n ptypes.ARC4TupleType,\n ptypes.DynamicArrayType,\n ptypes.StaticArrayType,\n ptypes.UFixedNxMType,\n ptypes.UintNType,\n ptypes.ReferenceArrayType,\n ptypes.FixedArrayPType,\n ) ||\n type === ptypes.arc4StringType ||\n type === ptypes.arc4BooleanType\n\nconst getGenericTypeInfo = (type: ptypes.PType, sourceLocation?: SourceLocation): TypeInfo => {\n if (type instanceof ptypes.UnionPType) {\n throw new CodeError(\n `${sourceLocation}: Union types are not valid as a variable, parameter, return, or property type. Expression type is ${type.name}`,\n )\n }\n let typeName = type?.name ?? type?.toString() ?? 'unknown'\n let genericArgs: TypeInfo[] | Record<string, TypeInfo> = []\n\n if (instanceOfAny(type, ptypes.LocalStateType, ptypes.GlobalStateType, ptypes.BoxPType)) {\n genericArgs.push(getGenericTypeInfo(type.contentType, sourceLocation))\n } else if (type instanceof ptypes.BoxMapPType) {\n genericArgs.push(getGenericTypeInfo(type.keyType, sourceLocation))\n genericArgs.push(getGenericTypeInfo(type.contentType, sourceLocation))\n } else if (\n instanceOfAny(\n type,\n ptypes.StaticArrayType,\n ptypes.DynamicArrayType,\n ptypes.ArrayPType,\n ptypes.ReadonlyArrayPType,\n ptypes.ReferenceArrayType,\n ptypes.FixedArrayPType,\n )\n ) {\n const entries = []\n entries.push(['elementType', getGenericTypeInfo(type.elementType, sourceLocation)])\n if (instanceOfAny(type, ptypes.StaticArrayType, ptypes.FixedArrayPType)) {\n entries.push(['size', { name: type.arraySize.toString() }])\n }\n genericArgs = Object.fromEntries(entries)\n } else if (type instanceof ptypes.UFixedNxMType) {\n genericArgs = { n: { name: type.n.toString() }, m: { name: type.m.toString() } }\n } else if (type instanceof ptypes.UintNType) {\n genericArgs.push({ name: type.n.toString() })\n } else if (type instanceof ptypes.ARC4StructType) {\n typeName = `Struct<${type.name}>`\n genericArgs = Object.fromEntries(\n Object.entries(type.fields)\n .map(([key, value]) => [key, getGenericTypeInfo(value, sourceLocation)])\n .filter((x) => !!x),\n )\n } else if (type instanceof ptypes.MutableObjectPType || type instanceof ptypes.ImmutableObjectPType) {\n typeName = type instanceof ptypes.MutableObjectPType ? `Object<${type.name}>` : `ReadonlyObject<${type.name}>`\n genericArgs = Object.fromEntries(\n Object.entries(type.properties)\n .map(([key, value]) => [key, getGenericTypeInfo(value, sourceLocation)])\n .filter((x) => !!x),\n )\n } else if (\n type instanceof ptypes.ARC4TupleType ||\n type instanceof ptypes.MutableTuplePType ||\n type instanceof ptypes.ReadonlyTuplePType\n ) {\n typeName =\n type instanceof ptypes.MutableTuplePType\n ? `MutableTuple<${type.name}>`\n : type instanceof ptypes.ReadonlyTuplePType\n ? `ReadonlyTuple<${type.name}>`\n : type.name\n genericArgs.push(...type.items.map((t) => getGenericTypeInfo(t, sourceLocation)))\n }\n\n const result: TypeInfo = { name: typeName }\n if (genericArgs && (genericArgs.length || Object.keys(genericArgs).length)) {\n result.genericArgs = genericArgs\n }\n return result\n}\n\nconst tryGetStubbedFunctionName = (node: ts.CallExpression, helper: VisitorHelper): string | undefined => {\n if (node.expression.kind !== ts.SyntaxKind.Identifier && !ts.isPropertyAccessExpression(node.expression)) return undefined\n const identityExpression = ts.isPropertyAccessExpression(node.expression)\n ? (node.expression as ts.PropertyAccessExpression).name\n : (node.expression as ts.Identifier)\n const functionName = tryGetAlgoTsSymbolName(identityExpression, helper)\n if (functionName === undefined) return undefined\n const stubbedFunctionNames = ['convertBytes', 'decodeArc4', 'encodeArc4', 'emit', 'methodSelector', 'sizeOf', 'abiCall', 'clone']\n\n if (stubbedFunctionNames.includes(functionName)) {\n if (ts.isPropertyAccessExpression(node.expression)) {\n const objectName = tryGetAlgoTsSymbolName(node.expression.expression, helper)\n return objectName !== undefined ? functionName : undefined\n }\n return functionName\n }\n\n if (['begin', 'next'].includes(functionName) && ts.isPropertyAccessExpression(node.expression)) {\n const objectExpression = node.expression.expression\n const objectName = tryGetAlgoTsSymbolName(objectExpression, helper)\n if (['itxnCompose'].includes(objectName || '')) return functionName\n }\n\n return undefined\n}\n\nconst tryGetAlgoTsSymbolName = (node: ts.Node, helper: VisitorHelper): string | undefined => {\n const symbol = helper.tryGetSymbol(node)\n if (!symbol) return undefined\n\n const sourceFileName = symbol.valueDeclaration?.getSourceFile().fileName\n if (!sourceFileName) return undefined\n\n // If the symbol is from algorand-typescript package or testing example path, return its name\n if (algotsModulePaths.some((path) => sourceFileName.includes(path)) || sourceFileName.includes(testingExamplePath))\n return symbol.getName()\n\n // If the symbol is from algorand-typescript-testing package, return undefined as they do not need to be processed\n if (algotsTestingModulePaths(helper.getConfig().testingPackageName).some((path) => sourceFileName.includes(path))) return undefined\n\n return symbol.getName()\n}\n\nconst isCallingDecodeArc4 = (functionName: string | undefined): boolean => 'decodeArc4' === (functionName ?? '')\nconst isCallingEncodeArc4 = (functionName: string | undefined): boolean => 'encodeArc4' === (functionName ?? '')\nconst isCallingSizeOf = (functionName: string | undefined): boolean => 'sizeOf' === (functionName ?? '')\nconst isCallingEmit = (functionName: string | undefined): boolean => 'emit' === (functionName ?? '')\nconst isCallingMethodSelector = (functionName: string | undefined): boolean => 'methodSelector' === (functionName ?? '')\nconst isCallingAbiCall = (functionName: string | undefined): boolean => ['abiCall'].includes(functionName ?? '')\nconst isCallingItxnCompose = (functionName: string | undefined): boolean => ['begin', 'next'].includes(functionName ?? '')\nconst isCallingClone = (functionName: string | undefined): boolean => 'clone' === (functionName ?? '')\n","import { registerPTypes, typeRegistry } from '@algorandfoundation/puya-ts'\nimport type ts from 'typescript'\nimport { SourceFileVisitor } from './visitors'\n\nexport interface TransformerConfig {\n includeExt: string[]\n testingPackageName: string\n}\n/** @internal */\nexport const defaultTransformerConfig: TransformerConfig = {\n includeExt: ['.algo.ts', '.algo.spec.ts', '.algo.test.ts'],\n testingPackageName: '@algorandfoundation/algorand-typescript-testing',\n}\n\n/** @internal */\nexport function programFactory(config: TransformerConfig, program: ts.Program): ts.TransformerFactory<ts.SourceFile> {\n registerPTypes(typeRegistry)\n return (context) => {\n return (sourceFile) => {\n if (!config.includeExt.some((i) => sourceFile.fileName.endsWith(i))) return sourceFile\n return new SourceFileVisitor(context, sourceFile, program, config).result()\n }\n }\n}\n"],"names":["factory"],"mappings":"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"}