@algorandfoundation/algorand-typescript-testing 1.0.0-alpha.2 → 1.0.0-alpha.3
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,7 +4,7 @@
|
|
|
4
4
|
"**"
|
|
5
5
|
],
|
|
6
6
|
"name": "@algorandfoundation/algorand-typescript-testing",
|
|
7
|
-
"version": "1.0.0-alpha.
|
|
7
|
+
"version": "1.0.0-alpha.3",
|
|
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": {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"types": "./runtime-helpers.d.ts",
|
|
34
34
|
"import": "./runtime-helpers.mjs"
|
|
35
35
|
},
|
|
36
|
-
"./test-transformer": {
|
|
36
|
+
"./test-transformer/index": {
|
|
37
37
|
"types": "./test-transformer.d.ts",
|
|
38
38
|
"import": "./test-transformer.mjs"
|
|
39
39
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","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/index.ts"],"sourcesContent":["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","import { FunctionPType } from '@algorandfoundation/puya-ts'\nimport ts from 'typescript'\nimport type { DeliberateAny } from '../typescript-helpers'\nimport { getPropertyNameAsString } 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\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(classIdentifier: ts.Identifier, method: ts.MethodDeclaration, functionType: FunctionPType) {\n const methodName = getPropertyNameAsString(method.name)\n const metadata = factory.createObjectLiteralExpression([\n factory.createPropertyAssignment('methodName', methodName),\n factory.createPropertyAssignment('methodSelector', methodName),\n factory.createPropertyAssignment(\n 'argTypes',\n factory.createArrayLiteralExpression(functionType.parameters.map((p) => factory.createStringLiteral(p[1].fullName))),\n ),\n factory.createPropertyAssignment('returnType', factory.createStringLiteral(functionType.returnType.fullName)),\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, type: string) {\n return factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('runtimeHelpers'),\n factory.createIdentifier('captureGenericTypeInfo'),\n ),\n undefined,\n [x, factory.createStringLiteral(type)],\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.AsteriskAsteriskEqualsToken:\n case ts.SyntaxKind.AsteriskEqualsToken:\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.PercentEqualsToken:\n case ts.SyntaxKind.PlusEqualsToken:\n case ts.SyntaxKind.QuestionQuestionEqualsToken:\n case ts.SyntaxKind.MinusEqualsToken:\n case ts.SyntaxKind.SlashEqualsToken:\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 supportedPrefixUnaryOpString(x: PrefixUnaryOperator): string | undefined {\n switch (x) {\n case ts.SyntaxKind.TildeToken:\n return '~'\n default:\n return undefined\n }\n}\n","import { anyPType, ContractClassPType, FunctionPType, PType, SourceLocation, typeRegistry, TypeResolver } from '@algorandfoundation/puya-ts'\nimport ts from 'typescript'\nimport { TransformerConfig } from './index'\nimport { nodeFactory } from './node-factory'\nimport { supportedBinaryOpString, supportedPrefixUnaryOpString } from './supported-binary-op-string'\n\nconst { factory } = ts\n\ntype VisitorHelper = {\n additionalStatements: ts.Statement[]\n resolveType(node: ts.Node): PType\n sourceLocation(node: ts.Node): SourceLocation\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 typeResolver = new TypeResolver(program.getTypeChecker(), program.getCurrentDirectory())\n\n this.helper = {\n additionalStatements: [],\n resolveType(node: ts.Node): PType {\n try {\n return typeResolver.resolve(node, this.sourceLocation(node))\n } catch {\n return anyPType\n }\n },\n sourceLocation(node: ts.Node): SourceLocation {\n return SourceLocation.fromNode(sourceFile, 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\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, node).result()\n }\n if (ts.isClassDeclaration(node)) {\n return new ClassVisitor(this.context, this.helper, node).result()\n }\n\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\n\nclass FunctionOrMethodVisitor {\n constructor(protected context: ts.TransformationContext) {}\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 tokenText = supportedBinaryOpString(node.operatorToken.kind)\n if (tokenText) {\n return nodeFactory.binaryOp(node.left, node.right, tokenText)\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 return node\n }\n}\n\nclass FunctionLikeDecVisitor extends FunctionOrMethodVisitor {\n constructor(\n context: ts.TransformationContext,\n private funcNode: ts.SignatureDeclaration,\n ) {\n super(context)\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 private methodNode: ts.MethodDeclaration,\n ) {\n super(context)\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 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 FunctionPType) {\n this.helper.additionalStatements.push(nodeFactory.attachMetaData(this.classDec.name, node, methodType))\n }\n }\n\n return new MethodDecVisitor(this.context, node).result()\n }\n\n if (ts.isCallExpression(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 FunctionPType) type = type.returnType\n\n if (typeRegistry.isGeneric(type)) {\n const typeName = type.name\n return nodeFactory.captureGenericTypeInfo(ts.visitEachChild(node, this.visit, this.context), typeName)\n }\n }\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\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\n// const programTransformer = {\n// type: 'program',\n// factory(program: ts.Program): ts.TransformerFactory<ts.SourceFile> {\n// registerPTypes(typeRegistry)\n// return (context) => {\n// return (sourceFile) => {\n// if (!includes.some((i) => sourceFile.fileName.endsWith(i))) return sourceFile\n// return new SourceFileVisitor(context, sourceFile, program).result()\n// }\n// }\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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"}
|
package/test-transformer.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-transformer.mjs","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/index.ts"],"sourcesContent":["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","import { FunctionPType } from '@algorandfoundation/puya-ts'\nimport ts from 'typescript'\nimport type { DeliberateAny } from '../typescript-helpers'\nimport { getPropertyNameAsString } 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\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(classIdentifier: ts.Identifier, method: ts.MethodDeclaration, functionType: FunctionPType) {\n const methodName = getPropertyNameAsString(method.name)\n const metadata = factory.createObjectLiteralExpression([\n factory.createPropertyAssignment('methodName', methodName),\n factory.createPropertyAssignment('methodSelector', methodName),\n factory.createPropertyAssignment(\n 'argTypes',\n factory.createArrayLiteralExpression(functionType.parameters.map((p) => factory.createStringLiteral(p[1].fullName))),\n ),\n factory.createPropertyAssignment('returnType', factory.createStringLiteral(functionType.returnType.fullName)),\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, type: string) {\n return factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('runtimeHelpers'),\n factory.createIdentifier('captureGenericTypeInfo'),\n ),\n undefined,\n [x, factory.createStringLiteral(type)],\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.AsteriskAsteriskEqualsToken:\n case ts.SyntaxKind.AsteriskEqualsToken:\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.PercentEqualsToken:\n case ts.SyntaxKind.PlusEqualsToken:\n case ts.SyntaxKind.QuestionQuestionEqualsToken:\n case ts.SyntaxKind.MinusEqualsToken:\n case ts.SyntaxKind.SlashEqualsToken:\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 supportedPrefixUnaryOpString(x: PrefixUnaryOperator): string | undefined {\n switch (x) {\n case ts.SyntaxKind.TildeToken:\n return '~'\n default:\n return undefined\n }\n}\n","import { anyPType, ContractClassPType, FunctionPType, PType, SourceLocation, typeRegistry, TypeResolver } from '@algorandfoundation/puya-ts'\nimport ts from 'typescript'\nimport { TransformerConfig } from './index'\nimport { nodeFactory } from './node-factory'\nimport { supportedBinaryOpString, supportedPrefixUnaryOpString } from './supported-binary-op-string'\n\nconst { factory } = ts\n\ntype VisitorHelper = {\n additionalStatements: ts.Statement[]\n resolveType(node: ts.Node): PType\n sourceLocation(node: ts.Node): SourceLocation\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 typeResolver = new TypeResolver(program.getTypeChecker(), program.getCurrentDirectory())\n\n this.helper = {\n additionalStatements: [],\n resolveType(node: ts.Node): PType {\n try {\n return typeResolver.resolve(node, this.sourceLocation(node))\n } catch {\n return anyPType\n }\n },\n sourceLocation(node: ts.Node): SourceLocation {\n return SourceLocation.fromNode(sourceFile, 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\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, node).result()\n }\n if (ts.isClassDeclaration(node)) {\n return new ClassVisitor(this.context, this.helper, node).result()\n }\n\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\n\nclass FunctionOrMethodVisitor {\n constructor(protected context: ts.TransformationContext) {}\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 tokenText = supportedBinaryOpString(node.operatorToken.kind)\n if (tokenText) {\n return nodeFactory.binaryOp(node.left, node.right, tokenText)\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 return node\n }\n}\n\nclass FunctionLikeDecVisitor extends FunctionOrMethodVisitor {\n constructor(\n context: ts.TransformationContext,\n private funcNode: ts.SignatureDeclaration,\n ) {\n super(context)\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 private methodNode: ts.MethodDeclaration,\n ) {\n super(context)\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 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 FunctionPType) {\n this.helper.additionalStatements.push(nodeFactory.attachMetaData(this.classDec.name, node, methodType))\n }\n }\n\n return new MethodDecVisitor(this.context, node).result()\n }\n\n if (ts.isCallExpression(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 FunctionPType) type = type.returnType\n\n if (typeRegistry.isGeneric(type)) {\n const typeName = type.name\n return nodeFactory.captureGenericTypeInfo(ts.visitEachChild(node, this.visit, this.context), typeName)\n }\n }\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\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\n// const programTransformer = {\n// type: 'program',\n// factory(program: ts.Program): ts.TransformerFactory<ts.SourceFile> {\n// registerPTypes(typeRegistry)\n// return (context) => {\n// return (sourceFile) => {\n// if (!includes.some((i) => sourceFile.fileName.endsWith(i))) return sourceFile\n// return new SourceFileVisitor(context, sourceFile, program).result()\n// }\n// }\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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"}
|