@algorandfoundation/algorand-typescript-testing 1.0.0-beta.1 → 1.0.0-beta.2

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,15 +4,15 @@
4
4
  "**"
5
5
  ],
6
6
  "name": "@algorandfoundation/algorand-typescript-testing",
7
- "version": "1.0.0-beta.1",
7
+ "version": "1.0.0-beta.2",
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
  "peerDependencies": {
11
11
  "tslib": "^2.6.2"
12
12
  },
13
13
  "dependencies": {
14
- "@algorandfoundation/algorand-typescript": "^0.0.1-alpha.24",
15
- "@algorandfoundation/puya-ts": "^1.0.0-alpha.36",
14
+ "@algorandfoundation/algorand-typescript": "^1.0.0-beta.4",
15
+ "@algorandfoundation/puya-ts": "^1.0.0-beta.6",
16
16
  "elliptic": "^6.5.7",
17
17
  "js-sha256": "^0.11.0",
18
18
  "js-sha3": "^0.9.3",
@@ -405,8 +405,8 @@ class ClassVisitor {
405
405
  const isGenericType = (type) => instanceOfAny(type, ptypes.ARC4StructType, ptypes.ARC4TupleType, ptypes.BoxMapPType, ptypes.BoxPType, ptypes.DynamicArrayType, ptypes.GlobalStateType, ptypes.LocalStateType, ptypes.StaticArrayType, ptypes.UFixedNxMType, ptypes.UintNType, ptypes.TuplePType);
406
406
  const isStateOrBoxType = (type) => instanceOfAny(type, ptypes.BoxMapPType, ptypes.BoxPType, ptypes.GlobalStateType, ptypes.LocalStateType);
407
407
  const isArc4EncodedType = (type) => instanceOfAny(type, ptypes.ARC4StructType, ptypes.ARC4TupleType, ptypes.DynamicArrayType, ptypes.StaticArrayType, ptypes.UFixedNxMType, ptypes.UintNType) ||
408
- type === ptypes.ARC4StringType ||
409
- type === ptypes.ARC4BooleanType;
408
+ type === ptypes.arc4StringType ||
409
+ type === ptypes.arc4BooleanType;
410
410
  const getGenericTypeInfo = (type) => {
411
411
  let typeName = type?.name ?? type?.toString() ?? 'unknown';
412
412
  let genericArgs = [];
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/typescript-helpers.ts","../../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/index.ts"],"sourcesContent":["// Sometimes only an 'any' will do. Don't use this just to be lazy though\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport type DeliberateAny = any\nexport type AnyFunction = (...args: DeliberateAny[]) => DeliberateAny\nexport type ConstructorFor<T, TArgs extends DeliberateAny[] = DeliberateAny[]> = new (...args: TArgs) => T\nexport type Mutable<T> = {\n -readonly [P in keyof T]: T[P]\n}\n\nexport type KeyIsFunction<TKey extends keyof TObj, TObj> = TKey extends DeliberateAny\n ? TObj[TKey] extends AnyFunction\n ? TKey\n : never\n : never\nexport type KeyIsNotFunction<TKey extends keyof TObj, TObj> = TKey extends DeliberateAny\n ? TObj[TKey] extends AnyFunction\n ? never\n : TKey\n : never\nexport type ObjectKeys<T> = KeyIsNotFunction<keyof T, T>\nexport type FunctionKeys<T> = KeyIsFunction<keyof T, T>\n\nexport function instanceOfAny<T extends Array<{ new (...args: DeliberateAny[]): DeliberateAny }>>(\n x: unknown,\n ...types: T\n): x is InstanceType<T[number]> {\n return types.some((t) => x instanceof t)\n}\n\nexport interface IConstructor<T> {\n new (...args: DeliberateAny[]): T\n}\n","export class TransformerError extends Error {\n constructor(message: string) {\n super(message)\n }\n}\n","import ts from 'typescript'\nimport { TransformerError } from './errors'\n\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\nexport const trimGenericTypeName = (typeName: string) => typeName.replace(/<.*>/, '')\n","import { ptypes } from '@algorandfoundation/puya-ts'\nimport ts from 'typescript'\nimport { TypeInfo } from '../encoders'\nimport type { DeliberateAny } from '../typescript-helpers'\nimport { getPropertyNameAsString, trimGenericTypeName } from './helpers'\n\nconst factory = ts.factory\nexport const nodeFactory = {\n importHelpers(testingPackageName: string) {\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(false, undefined, factory.createNamespaceImport(factory.createIdentifier('runtimeHelpers'))),\n factory.createStringLiteral(`${testingPackageName}/runtime-helpers`),\n undefined,\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 classIdentifier: ts.Identifier,\n method: ts.MethodDeclaration,\n functionType: ptypes.FunctionPType,\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],\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 instantiateARC4EncodedType(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(`runtimeHelpers.${trimGenericTypeName(typeInfo?.name ?? classIdentifier)}Impl`),\n node.typeArguments,\n [infoString ? factory.createStringLiteral(infoString) : undefined, ...(node.arguments ?? [])].filter((arg) => !!arg),\n )\n },\n\n callStubbedFunction(functionName: string, node: ts.CallExpression, typeInfo?: TypeInfo) {\n const typeInfoArg = typeInfo ? factory.createStringLiteral(JSON.stringify(typeInfo)) : undefined\n const updatedPropertyAccessExpression = factory.createPropertyAccessExpression(\n factory.createIdentifier('runtimeHelpers'),\n `${functionName}Impl`,\n )\n\n return factory.createCallExpression(\n updatedPropertyAccessExpression,\n node.typeArguments,\n [typeInfoArg, ...(node.arguments ?? [])].filter((arg) => !!arg),\n )\n },\n} satisfies Record<string, (...args: DeliberateAny[]) => ts.Node>\n","import type { BinaryOperator, PrefixUnaryOperator } from 'typescript'\nimport ts from 'typescript'\n\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\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\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 { ptypes, SourceLocation, TypeResolver } from '@algorandfoundation/puya-ts'\nimport path from 'path'\nimport ts from 'typescript'\nimport type { TypeInfo } from '../encoders'\nimport { instanceOfAny } from '../typescript-helpers'\nimport { TransformerConfig } from './index'\nimport { nodeFactory } from './node-factory'\nimport {\n supportedAugmentedAssignmentBinaryOpString,\n supportedBinaryOpString,\n supportedPrefixUnaryOpString,\n} from './supported-binary-op-string'\n\nconst { factory } = ts\n\nconst algotsModulePaths = [\n `@algorandfoundation${path.sep}algorand-typescript`,\n `${path.sep}puya-ts${path.sep}packages${path.sep}algo-ts${path.sep}`,\n]\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}\n\nexport class SourceFileVisitor {\n private helper: VisitorHelper\n constructor(\n private context: ts.TransformationContext,\n private sourceFile: ts.SourceFile,\n program: ts.Program,\n private config: TransformerConfig,\n ) {\n const typeChecker = program.getTypeChecker()\n const typeResolver = new TypeResolver(typeChecker, program.getCurrentDirectory())\n this.helper = {\n additionalStatements: [],\n resolveType(node: ts.Node): ptypes.PType {\n try {\n return typeResolver.resolve(node, this.sourceLocation(node))\n } catch {\n return ptypes.anyPType\n }\n },\n resolveTypeParameters(node: ts.CallExpression) {\n return 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 return SourceLocation.fromNode(node, program.getCurrentDirectory())\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.config.testingPackageName),\n ...updatedSourceFile.statements,\n ...this.helper.additionalStatements,\n ])\n }\n\n private visit = (node: ts.Node): ts.Node => {\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 UintN<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 ExpressionVisitor {\n constructor(\n private context: ts.TransformationContext,\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 if (ts.isCallExpression(node) || ts.isNewExpression(node)) {\n let type = this.helper.resolveType(node)\n\n // `voted = LocalState<uint64>()` is resolved to FunctionPType with returnType LocalState<uint64>\n if (type instanceof ptypes.FunctionPType) type = type.returnType\n\n const isGeneric = isGenericType(type)\n const needsToCaptureTypeInfo = isGeneric && isStateOrBoxType(type)\n const isArc4Encoded = isArc4EncodedType(type)\n const info = isGeneric || isArc4Encoded ? getGenericTypeInfo(type) : undefined\n let updatedNode = node\n\n if (ts.isNewExpression(updatedNode)) {\n if (isArc4EncodedType(type)) {\n updatedNode = nodeFactory.instantiateARC4EncodedType(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 = info\n if (isCallingEmit(stubbedFunctionName)) {\n infoArg = this.helper.resolveTypeParameters(updatedNode).map(getGenericTypeInfo)[0]\n }\n if (isCallingDecodeArc4(stubbedFunctionName)) {\n const targetType = ptypes.ptypeToArc4EncodedType(type, this.helper.sourceLocation(node))\n const targetTypeInfo = getGenericTypeInfo(targetType)\n infoArg = targetTypeInfo\n }\n updatedNode = stubbedFunctionName ? nodeFactory.callStubbedFunction(stubbedFunctionName, updatedNode, infoArg) : updatedNode\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: ts.TransformationContext,\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: ts.TransformationContext,\n protected helper: VisitorHelper,\n private isFunction?: boolean,\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 UintN<32>(2 ** 32)).toThrowError(`expected value <= ${2 ** 32 - 1}`)\n * expect(UintN.fromBytes<UintN<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: ts.TransformationContext,\n helper: VisitorHelper,\n private funcNode: ts.SignatureDeclaration,\n ) {\n super(context, helper, true)\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: ts.TransformationContext,\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: ts.TransformationContext,\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 this.helper.additionalStatements.push(nodeFactory.attachMetaData(this.classDec.name, node, methodType, 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.TuplePType,\n )\n\nconst isStateOrBoxType = (type: ptypes.PType): boolean =>\n instanceOfAny(type, ptypes.BoxMapPType, ptypes.BoxPType, ptypes.GlobalStateType, ptypes.LocalStateType)\n\nconst isArc4EncodedType = (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 ) ||\n type === ptypes.ARC4StringType ||\n type === ptypes.ARC4BooleanType\n\nconst getGenericTypeInfo = (type: ptypes.PType): TypeInfo => {\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))\n } else if (type instanceof ptypes.BoxMapPType) {\n genericArgs.push(getGenericTypeInfo(type.keyType))\n genericArgs.push(getGenericTypeInfo(type.contentType))\n } else if (instanceOfAny(type, ptypes.StaticArrayType, ptypes.DynamicArrayType)) {\n const entries = []\n entries.push(['elementType', getGenericTypeInfo(type.elementType)])\n if (instanceOfAny(type, ptypes.StaticArrayType)) {\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)])\n .filter((x) => !!x),\n )\n } else if (type instanceof ptypes.ARC4TupleType || type instanceof ptypes.TuplePType) {\n genericArgs.push(...type.items.map(getGenericTypeInfo))\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 functionSymbol = helper.tryGetSymbol(identityExpression)\n if (functionSymbol) {\n const sourceFileName = functionSymbol.valueDeclaration?.getSourceFile().fileName\n if (sourceFileName && !algotsModulePaths.some((s) => sourceFileName.includes(s))) return undefined\n }\n const functionName = functionSymbol?.getName() ?? identityExpression.text\n const stubbedFunctionNames = [\n 'interpretAsArc4',\n 'decodeArc4',\n 'encodeArc4',\n 'TemplateVar',\n 'ensureBudget',\n 'emit',\n 'compile',\n 'urange',\n 'match',\n 'assertMatch',\n ]\n return stubbedFunctionNames.includes(functionName) ? functionName : undefined\n}\n\nconst isCallingDecodeArc4 = (functionName: string | undefined): boolean => ['decodeArc4', 'encodeArc4'].includes(functionName ?? '')\nconst isCallingEmit = (functionName: string | undefined): boolean => 'emit' === (functionName ?? '')\n","import { registerPTypes, typeRegistry } from '@algorandfoundation/puya-ts'\nimport type ts from 'typescript'\nimport type { DeliberateAny } from '../typescript-helpers'\nimport { SourceFileVisitor } from './visitors'\n\nexport interface TransformerConfig {\n includeExt: string[]\n testingPackageName: string\n}\nconst defaultTransformerConfig: TransformerConfig = {\n includeExt: ['.algo.ts', '.spec.ts'],\n testingPackageName: '@algorandfoundation/algorand-typescript-testing',\n}\n\nconst createProgramFactory = (config: TransformerConfig) => {\n function programFactory(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 return programFactory\n}\n\nfunction programTransformer(config: Partial<TransformerConfig>) {\n return {\n type: 'program',\n factory: createProgramFactory({ ...defaultTransformerConfig, ...config }),\n }\n}\nprogramTransformer.type = 'program'\nprogramTransformer.factory = createProgramFactory(defaultTransformerConfig)\n\n// Typescript.d.ts typings require a TransformerFactory however rollup plugin supports a program transformer\n// https://github.com/rollup/plugins/blob/master/packages/typescript/src/customTransformers.ts\nexport const puyaTsTransformer: ts.TransformerFactory<ts.SourceFile> &\n ((config: Partial<TransformerConfig>) => ts.TransformerFactory<ts.SourceFile>) = programTransformer as DeliberateAny\n"],"names":["factory"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/typescript-helpers.ts","../../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/index.ts"],"sourcesContent":["// Sometimes only an 'any' will do. Don't use this just to be lazy though\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport type DeliberateAny = any\nexport type AnyFunction = (...args: DeliberateAny[]) => DeliberateAny\nexport type ConstructorFor<T, TArgs extends DeliberateAny[] = DeliberateAny[]> = new (...args: TArgs) => T\nexport type Mutable<T> = {\n -readonly [P in keyof T]: T[P]\n}\n\nexport type KeyIsFunction<TKey extends keyof TObj, TObj> = TKey extends DeliberateAny\n ? TObj[TKey] extends AnyFunction\n ? TKey\n : never\n : never\nexport type KeyIsNotFunction<TKey extends keyof TObj, TObj> = TKey extends DeliberateAny\n ? TObj[TKey] extends AnyFunction\n ? never\n : TKey\n : never\nexport type ObjectKeys<T> = KeyIsNotFunction<keyof T, T>\nexport type FunctionKeys<T> = KeyIsFunction<keyof T, T>\n\nexport function instanceOfAny<T extends Array<{ new (...args: DeliberateAny[]): DeliberateAny }>>(\n x: unknown,\n ...types: T\n): x is InstanceType<T[number]> {\n return types.some((t) => x instanceof t)\n}\n\nexport interface IConstructor<T> {\n new (...args: DeliberateAny[]): T\n}\n","export class TransformerError extends Error {\n constructor(message: string) {\n super(message)\n }\n}\n","import ts from 'typescript'\nimport { TransformerError } from './errors'\n\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\nexport const trimGenericTypeName = (typeName: string) => typeName.replace(/<.*>/, '')\n","import { ptypes } from '@algorandfoundation/puya-ts'\nimport ts from 'typescript'\nimport { TypeInfo } from '../encoders'\nimport type { DeliberateAny } from '../typescript-helpers'\nimport { getPropertyNameAsString, trimGenericTypeName } from './helpers'\n\nconst factory = ts.factory\nexport const nodeFactory = {\n importHelpers(testingPackageName: string) {\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(false, undefined, factory.createNamespaceImport(factory.createIdentifier('runtimeHelpers'))),\n factory.createStringLiteral(`${testingPackageName}/runtime-helpers`),\n undefined,\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 classIdentifier: ts.Identifier,\n method: ts.MethodDeclaration,\n functionType: ptypes.FunctionPType,\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],\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 instantiateARC4EncodedType(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(`runtimeHelpers.${trimGenericTypeName(typeInfo?.name ?? classIdentifier)}Impl`),\n node.typeArguments,\n [infoString ? factory.createStringLiteral(infoString) : undefined, ...(node.arguments ?? [])].filter((arg) => !!arg),\n )\n },\n\n callStubbedFunction(functionName: string, node: ts.CallExpression, typeInfo?: TypeInfo) {\n const typeInfoArg = typeInfo ? factory.createStringLiteral(JSON.stringify(typeInfo)) : undefined\n const updatedPropertyAccessExpression = factory.createPropertyAccessExpression(\n factory.createIdentifier('runtimeHelpers'),\n `${functionName}Impl`,\n )\n\n return factory.createCallExpression(\n updatedPropertyAccessExpression,\n node.typeArguments,\n [typeInfoArg, ...(node.arguments ?? [])].filter((arg) => !!arg),\n )\n },\n} satisfies Record<string, (...args: DeliberateAny[]) => ts.Node>\n","import type { BinaryOperator, PrefixUnaryOperator } from 'typescript'\nimport ts from 'typescript'\n\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\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\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 { ptypes, SourceLocation, TypeResolver } from '@algorandfoundation/puya-ts'\nimport path from 'path'\nimport ts from 'typescript'\nimport type { TypeInfo } from '../encoders'\nimport { instanceOfAny } from '../typescript-helpers'\nimport { TransformerConfig } from './index'\nimport { nodeFactory } from './node-factory'\nimport {\n supportedAugmentedAssignmentBinaryOpString,\n supportedBinaryOpString,\n supportedPrefixUnaryOpString,\n} from './supported-binary-op-string'\n\nconst { factory } = ts\n\nconst algotsModulePaths = [\n `@algorandfoundation${path.sep}algorand-typescript`,\n `${path.sep}puya-ts${path.sep}packages${path.sep}algo-ts${path.sep}`,\n]\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}\n\nexport class SourceFileVisitor {\n private helper: VisitorHelper\n constructor(\n private context: ts.TransformationContext,\n private sourceFile: ts.SourceFile,\n program: ts.Program,\n private config: TransformerConfig,\n ) {\n const typeChecker = program.getTypeChecker()\n const typeResolver = new TypeResolver(typeChecker, program.getCurrentDirectory())\n this.helper = {\n additionalStatements: [],\n resolveType(node: ts.Node): ptypes.PType {\n try {\n return typeResolver.resolve(node, this.sourceLocation(node))\n } catch {\n return ptypes.anyPType\n }\n },\n resolveTypeParameters(node: ts.CallExpression) {\n return 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 return SourceLocation.fromNode(node, program.getCurrentDirectory())\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.config.testingPackageName),\n ...updatedSourceFile.statements,\n ...this.helper.additionalStatements,\n ])\n }\n\n private visit = (node: ts.Node): ts.Node => {\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 UintN<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 ExpressionVisitor {\n constructor(\n private context: ts.TransformationContext,\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 if (ts.isCallExpression(node) || ts.isNewExpression(node)) {\n let type = this.helper.resolveType(node)\n\n // `voted = LocalState<uint64>()` is resolved to FunctionPType with returnType LocalState<uint64>\n if (type instanceof ptypes.FunctionPType) type = type.returnType\n\n const isGeneric = isGenericType(type)\n const needsToCaptureTypeInfo = isGeneric && isStateOrBoxType(type)\n const isArc4Encoded = isArc4EncodedType(type)\n const info = isGeneric || isArc4Encoded ? getGenericTypeInfo(type) : undefined\n let updatedNode = node\n\n if (ts.isNewExpression(updatedNode)) {\n if (isArc4EncodedType(type)) {\n updatedNode = nodeFactory.instantiateARC4EncodedType(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 = info\n if (isCallingEmit(stubbedFunctionName)) {\n infoArg = this.helper.resolveTypeParameters(updatedNode).map(getGenericTypeInfo)[0]\n }\n if (isCallingDecodeArc4(stubbedFunctionName)) {\n const targetType = ptypes.ptypeToArc4EncodedType(type, this.helper.sourceLocation(node))\n const targetTypeInfo = getGenericTypeInfo(targetType)\n infoArg = targetTypeInfo\n }\n updatedNode = stubbedFunctionName ? nodeFactory.callStubbedFunction(stubbedFunctionName, updatedNode, infoArg) : updatedNode\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: ts.TransformationContext,\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: ts.TransformationContext,\n protected helper: VisitorHelper,\n private isFunction?: boolean,\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 UintN<32>(2 ** 32)).toThrowError(`expected value <= ${2 ** 32 - 1}`)\n * expect(UintN.fromBytes<UintN<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: ts.TransformationContext,\n helper: VisitorHelper,\n private funcNode: ts.SignatureDeclaration,\n ) {\n super(context, helper, true)\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: ts.TransformationContext,\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: ts.TransformationContext,\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 this.helper.additionalStatements.push(nodeFactory.attachMetaData(this.classDec.name, node, methodType, 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.TuplePType,\n )\n\nconst isStateOrBoxType = (type: ptypes.PType): boolean =>\n instanceOfAny(type, ptypes.BoxMapPType, ptypes.BoxPType, ptypes.GlobalStateType, ptypes.LocalStateType)\n\nconst isArc4EncodedType = (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 ) ||\n type === ptypes.arc4StringType ||\n type === ptypes.arc4BooleanType\n\nconst getGenericTypeInfo = (type: ptypes.PType): TypeInfo => {\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))\n } else if (type instanceof ptypes.BoxMapPType) {\n genericArgs.push(getGenericTypeInfo(type.keyType))\n genericArgs.push(getGenericTypeInfo(type.contentType))\n } else if (instanceOfAny(type, ptypes.StaticArrayType, ptypes.DynamicArrayType)) {\n const entries = []\n entries.push(['elementType', getGenericTypeInfo(type.elementType)])\n if (instanceOfAny(type, ptypes.StaticArrayType)) {\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)])\n .filter((x) => !!x),\n )\n } else if (type instanceof ptypes.ARC4TupleType || type instanceof ptypes.TuplePType) {\n genericArgs.push(...type.items.map(getGenericTypeInfo))\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 functionSymbol = helper.tryGetSymbol(identityExpression)\n if (functionSymbol) {\n const sourceFileName = functionSymbol.valueDeclaration?.getSourceFile().fileName\n if (sourceFileName && !algotsModulePaths.some((s) => sourceFileName.includes(s))) return undefined\n }\n const functionName = functionSymbol?.getName() ?? identityExpression.text\n const stubbedFunctionNames = [\n 'interpretAsArc4',\n 'decodeArc4',\n 'encodeArc4',\n 'TemplateVar',\n 'ensureBudget',\n 'emit',\n 'compile',\n 'urange',\n 'match',\n 'assertMatch',\n ]\n return stubbedFunctionNames.includes(functionName) ? functionName : undefined\n}\n\nconst isCallingDecodeArc4 = (functionName: string | undefined): boolean => ['decodeArc4', 'encodeArc4'].includes(functionName ?? '')\nconst isCallingEmit = (functionName: string | undefined): boolean => 'emit' === (functionName ?? '')\n","import { registerPTypes, typeRegistry } from '@algorandfoundation/puya-ts'\nimport type ts from 'typescript'\nimport type { DeliberateAny } from '../typescript-helpers'\nimport { SourceFileVisitor } from './visitors'\n\nexport interface TransformerConfig {\n includeExt: string[]\n testingPackageName: string\n}\nconst defaultTransformerConfig: TransformerConfig = {\n includeExt: ['.algo.ts', '.spec.ts'],\n testingPackageName: '@algorandfoundation/algorand-typescript-testing',\n}\n\nconst createProgramFactory = (config: TransformerConfig) => {\n function programFactory(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 return programFactory\n}\n\nfunction programTransformer(config: Partial<TransformerConfig>) {\n return {\n type: 'program',\n factory: createProgramFactory({ ...defaultTransformerConfig, ...config }),\n }\n}\nprogramTransformer.type = 'program'\nprogramTransformer.factory = createProgramFactory(defaultTransformerConfig)\n\n// Typescript.d.ts typings require a TransformerFactory however rollup plugin supports a program transformer\n// https://github.com/rollup/plugins/blob/master/packages/typescript/src/customTransformers.ts\nexport const puyaTsTransformer: ts.TransformerFactory<ts.SourceFile> &\n ((config: Partial<TransformerConfig>) => ts.TransformerFactory<ts.SourceFile>) = programTransformer as DeliberateAny\n"],"names":["factory"],"mappings":"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"}