@algorandfoundation/algorand-typescript-testing 1.0.0-alpha.8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "**"
5
5
  ],
6
6
  "name": "@algorandfoundation/algorand-typescript-testing",
7
- "version": "1.0.0-alpha.8",
7
+ "version": "1.0.0",
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": {
@@ -13,7 +13,7 @@
13
13
  "dependencies": {
14
14
  "@algorandfoundation/algokit-utils": "^6.2.1",
15
15
  "@algorandfoundation/algorand-typescript": "^0.0.1-alpha.16",
16
- "@algorandfoundation/puya-ts": "^1.0.0-alpha.24",
16
+ "@algorandfoundation/puya-ts": "^1.0.0-alpha.26",
17
17
  "algosdk": "^2.9.0",
18
18
  "elliptic": "^6.5.7",
19
19
  "js-sha256": "^0.11.0",
@@ -1,6 +1,10 @@
1
- import { TypeResolver, anyPType, SourceLocation, ContractClassPType, FunctionPType, typeRegistry, registerPTypes } from '@algorandfoundation/puya-ts';
1
+ import { TypeResolver, anyPType, SourceLocation, ContractClassPType, FunctionPType, BoxMapPType, UFixedNxMType, UintNType, ARC4StructType, ARC4TupleType, StaticArrayType, LocalStateType, GlobalStateType, DynamicArrayType, BoxPType, registerPTypes, typeRegistry } from '@algorandfoundation/puya-ts';
2
2
  import ts from 'typescript';
3
3
 
4
+ function instanceOfAny(x, ...types) {
5
+ return types.some((t) => x instanceof t);
6
+ }
7
+
4
8
  class TransformerError extends Error {
5
9
  constructor(message) {
6
10
  super(message);
@@ -175,9 +179,59 @@ class SourceFileVisitor {
175
179
  if (ts.isClassDeclaration(node)) {
176
180
  return new ClassVisitor(this.context, this.helper, node).result();
177
181
  }
182
+ // capture generic type info for variable initialising outside class and function declarations
183
+ // e.g. `const x = new UintN<32>(42)
184
+ if (ts.isVariableDeclaration(node) && node.initializer) {
185
+ return new VariableInitializerVisitor(this.context, this.helper, node).result();
186
+ }
187
+ return ts.visitEachChild(node, this.visit, this.context);
188
+ };
189
+ }
190
+ class ExpressionVisitor {
191
+ context;
192
+ helper;
193
+ expressionNode;
194
+ constructor(context, helper, expressionNode) {
195
+ this.context = context;
196
+ this.helper = helper;
197
+ this.expressionNode = expressionNode;
198
+ }
199
+ result() {
200
+ return this.visit(this.expressionNode);
201
+ }
202
+ visit = (node) => {
203
+ if (ts.isCallExpression(node) || ts.isNewExpression(node)) {
204
+ let type = this.helper.resolveType(node);
205
+ // `voted = LocalState<uint64>()` is resolved to FunctionPType with returnType LocalState<uint64>
206
+ if (type instanceof FunctionPType)
207
+ type = type.returnType;
208
+ if (isGenericType(type)) {
209
+ const info = getGenericTypeInfo(type);
210
+ return nodeFactory.captureGenericTypeInfo(ts.visitEachChild(node, this.visit, this.context), JSON.stringify(info));
211
+ }
212
+ }
178
213
  return ts.visitEachChild(node, this.visit, this.context);
179
214
  };
180
215
  }
216
+ class VariableInitializerVisitor {
217
+ context;
218
+ helper;
219
+ declarationNode;
220
+ constructor(context, helper, declarationNode) {
221
+ this.context = context;
222
+ this.helper = helper;
223
+ this.declarationNode = declarationNode;
224
+ }
225
+ result() {
226
+ const initializerNode = this.declarationNode.initializer;
227
+ if (!initializerNode)
228
+ return this.declarationNode;
229
+ const updatedInitializer = new ExpressionVisitor(this.context, this.helper, initializerNode).result();
230
+ if (updatedInitializer === initializerNode)
231
+ return this.declarationNode;
232
+ return factory.updateVariableDeclaration(this.declarationNode, this.declarationNode.name, this.declarationNode.exclamationToken, this.declarationNode.type, updatedInitializer);
233
+ }
234
+ }
181
235
  class FunctionOrMethodVisitor {
182
236
  context;
183
237
  helper;
@@ -223,17 +277,19 @@ class FunctionOrMethodVisitor {
223
277
  * })
224
278
  * ```
225
279
  */
226
- if (this.isFunction && ts.isVariableDeclaration(node) && node.initializer && ts.isCallExpression(node.initializer)) {
227
- const initializerNode = node.initializer;
228
- let type = this.helper.resolveType(initializerNode);
229
- // `voted = LocalState<uint64>()` is resolved to FunctionPType with returnType LocalState<uint64>
230
- if (type instanceof FunctionPType)
231
- type = type.returnType;
232
- if (typeRegistry.isGeneric(type)) {
233
- const info = getGenericTypeInfo(type);
234
- const updatedInitializer = nodeFactory.captureGenericTypeInfo(initializerNode, JSON.stringify(info));
235
- return factory.updateVariableDeclaration(node, node.name, node.exclamationToken, node.type, updatedInitializer);
236
- }
280
+ if (this.isFunction && ts.isVariableDeclaration(node) && node.initializer) {
281
+ return new VariableInitializerVisitor(this.context, this.helper, node).result();
282
+ }
283
+ /*
284
+ * capture generic type info in test functions and swap arc4 types with implementation; e.g.
285
+ * ```
286
+ * it('should work', () => {
287
+ * expect(() => new UintN<32>(2 ** 32)).toThrowError(`expected value <= ${2 ** 32 - 1}`)
288
+ * })
289
+ * ```
290
+ */
291
+ if (this.isFunction && ts.isNewExpression(node)) {
292
+ return new ExpressionVisitor(this.context, this.helper, node).result();
237
293
  }
238
294
  return node;
239
295
  }
@@ -284,34 +340,40 @@ class ClassVisitor {
284
340
  return new MethodDecVisitor(this.context, this.helper, node).result();
285
341
  }
286
342
  if (ts.isCallExpression(node)) {
287
- let type = this.helper.resolveType(node);
288
- // `voted = LocalState<uint64>()` is resolved to FunctionPType with returnType LocalState<uint64>
289
- if (type instanceof FunctionPType)
290
- type = type.returnType;
291
- if (typeRegistry.isGeneric(type)) {
292
- const info = getGenericTypeInfo(type);
293
- return nodeFactory.captureGenericTypeInfo(ts.visitEachChild(node, this.visit, this.context), JSON.stringify(info));
294
- }
343
+ return new ExpressionVisitor(this.context, this.helper, node).result();
295
344
  }
296
345
  return ts.visitEachChild(node, this.visit, this.context);
297
346
  };
298
347
  }
348
+ const isGenericType = (type) => instanceOfAny(type, ARC4StructType, ARC4TupleType, BoxMapPType, BoxPType, DynamicArrayType, GlobalStateType, LocalStateType, StaticArrayType, UFixedNxMType, UintNType);
299
349
  const getGenericTypeInfo = (type) => {
300
- let genericArgs = typeRegistry.isGeneric(type)
301
- ? type.getGenericArgs().map(getGenericTypeInfo)
302
- : undefined;
303
- if (!genericArgs || !genericArgs.length) {
304
- if (Object.hasOwn(type, 'items')) {
305
- genericArgs = type.items.map(getGenericTypeInfo);
306
- }
307
- else if (Object.hasOwn(type, 'itemType')) {
308
- genericArgs = [getGenericTypeInfo(type.itemType)];
309
- }
310
- else if (Object.hasOwn(type, 'properties')) {
311
- genericArgs = Object.fromEntries(Object.entries(type.properties).map(([key, value]) => [key, getGenericTypeInfo(value)]));
312
- }
350
+ const genericArgs = [];
351
+ if (instanceOfAny(type, LocalStateType, GlobalStateType, BoxPType)) {
352
+ genericArgs.push(getGenericTypeInfo(type.contentType));
353
+ }
354
+ else if (type instanceof BoxMapPType) {
355
+ genericArgs.push(getGenericTypeInfo(type.keyType));
356
+ genericArgs.push(getGenericTypeInfo(type.contentType));
357
+ }
358
+ else if (instanceOfAny(type, StaticArrayType, DynamicArrayType)) {
359
+ genericArgs.push(getGenericTypeInfo(type.elementType));
360
+ }
361
+ else if (type instanceof UFixedNxMType) {
362
+ genericArgs.push({ name: type.n.toString() });
363
+ genericArgs.push({ name: type.m.toString() });
364
+ }
365
+ else if (type instanceof UintNType) {
366
+ genericArgs.push({ name: type.n.toString() });
367
+ }
368
+ else if (type instanceof ARC4StructType) {
369
+ genericArgs.push(...Object.fromEntries(Object.entries(type.fields)
370
+ .map(([key, value]) => [key, getGenericTypeInfo(value)])
371
+ .filter((x) => !!x)));
372
+ }
373
+ else if (type instanceof ARC4TupleType) {
374
+ genericArgs.push(...type.items.map(getGenericTypeInfo));
313
375
  }
314
- const result = { name: type?.name ?? 'unknown' };
376
+ const result = { name: type?.name ?? type?.toString() ?? 'unknown' };
315
377
  if (genericArgs && (genericArgs.length || Object.keys(genericArgs).length)) {
316
378
  result.genericArgs = genericArgs;
317
379
  }
@@ -1 +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 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(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, 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} 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 { anyPType, ContractClassPType, FunctionPType, PType, SourceLocation, typeRegistry, TypeResolver } from '@algorandfoundation/puya-ts'\nimport ts from 'typescript'\nimport type { TypeInfo } from '../encoders'\nimport { DeliberateAny } 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\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(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, this.helper, 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(\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 * 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 (this.isFunction && ts.isVariableDeclaration(node) && node.initializer && ts.isCallExpression(node.initializer)) {\n const initializerNode = node.initializer\n let type = this.helper.resolveType(initializerNode)\n\n // `voted = LocalState<uint64>()` is resolved to FunctionPType with returnType LocalState<uint64>\n if (type instanceof FunctionPType) type = type.returnType\n if (typeRegistry.isGeneric(type)) {\n const info = getGenericTypeInfo(type)\n const updatedInitializer = nodeFactory.captureGenericTypeInfo(initializerNode, JSON.stringify(info))\n return factory.updateVariableDeclaration(node, node.name, node.exclamationToken, node.type, updatedInitializer)\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 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, this.helper, 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 info = getGenericTypeInfo(type)\n return nodeFactory.captureGenericTypeInfo(ts.visitEachChild(node, this.visit, this.context), JSON.stringify(info))\n }\n }\n return ts.visitEachChild(node, this.visit, this.context)\n }\n}\n\nconst getGenericTypeInfo = (type: PType): TypeInfo => {\n let genericArgs: TypeInfo[] | Record<string, TypeInfo> | undefined = typeRegistry.isGeneric(type)\n ? type.getGenericArgs().map(getGenericTypeInfo)\n : undefined\n\n if (!genericArgs || !genericArgs.length) {\n if (Object.hasOwn(type, 'items')) {\n genericArgs = (type as DeliberateAny).items.map(getGenericTypeInfo)\n } else if (Object.hasOwn(type, 'itemType')) {\n genericArgs = [getGenericTypeInfo((type as DeliberateAny).itemType)]\n } else if (Object.hasOwn(type, 'properties')) {\n genericArgs = Object.fromEntries(\n Object.entries((type as DeliberateAny).properties).map(([key, value]) => [key, getGenericTypeInfo(value as PType)]),\n )\n }\n }\n\n const result: TypeInfo = { name: type?.name ?? 'unknown' }\n if (genericArgs && (genericArgs.length || Object.keys(genericArgs).length)) {\n result.genericArgs = genericArgs\n }\n return result\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\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 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","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 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(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, 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} 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 {\n anyPType,\n ARC4StructType,\n ARC4TupleType,\n BoxMapPType,\n BoxPType,\n ContractClassPType,\n DynamicArrayType,\n FunctionPType,\n GlobalStateType,\n LocalStateType,\n PType,\n SourceLocation,\n StaticArrayType,\n TypeResolver,\n UFixedNxMType,\n UintNType,\n} from '@algorandfoundation/puya-ts'\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\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(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, 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 ) {}\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 FunctionPType) type = type.returnType\n\n if (isGenericType(type)) {\n const info = getGenericTypeInfo(type)\n return nodeFactory.captureGenericTypeInfo(ts.visitEachChild(node, this.visit, this.context), JSON.stringify(info))\n }\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 * 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 (this.isFunction && 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 * })\n * ```\n */\n if (this.isFunction && ts.isNewExpression(node)) {\n return new ExpressionVisitor(this.context, this.helper, node).result()\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 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, 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: PType): boolean =>\n instanceOfAny(\n type,\n ARC4StructType,\n ARC4TupleType,\n BoxMapPType,\n BoxPType,\n DynamicArrayType,\n GlobalStateType,\n LocalStateType,\n StaticArrayType,\n UFixedNxMType,\n UintNType,\n )\n\nconst getGenericTypeInfo = (type: PType): TypeInfo => {\n const genericArgs: TypeInfo[] | Record<string, TypeInfo> = []\n\n if (instanceOfAny(type, LocalStateType, GlobalStateType, BoxPType)) {\n genericArgs.push(getGenericTypeInfo(type.contentType))\n } else if (type instanceof BoxMapPType) {\n genericArgs.push(getGenericTypeInfo(type.keyType))\n genericArgs.push(getGenericTypeInfo(type.contentType))\n } else if (instanceOfAny(type, StaticArrayType, DynamicArrayType)) {\n genericArgs.push(getGenericTypeInfo(type.elementType))\n } else if (type instanceof UFixedNxMType) {\n genericArgs.push({ name: type.n.toString() })\n genericArgs.push({ name: type.m.toString() })\n } else if (type instanceof UintNType) {\n genericArgs.push({ name: type.n.toString() })\n } else if (type instanceof ARC4StructType) {\n genericArgs.push(\n ...Object.fromEntries(\n Object.entries(type.fields)\n .map(([key, value]) => [key, getGenericTypeInfo(value)])\n .filter((x) => !!x),\n ),\n )\n } else if (type instanceof ARC4TupleType) {\n genericArgs.push(...type.items.map(getGenericTypeInfo))\n }\n\n const result: TypeInfo = { name: type?.name ?? type?.toString() ?? 'unknown' }\n if (genericArgs && (genericArgs.length || Object.keys(genericArgs).length)) {\n result.genericArgs = genericArgs\n }\n return result\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\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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"}
@@ -7,3 +7,6 @@ export type KeyIsFunction<TKey extends keyof TObj, TObj> = TKey extends Delibera
7
7
  export type KeyIsNotFunction<TKey extends keyof TObj, TObj> = TKey extends DeliberateAny ? TObj[TKey] extends AnyFunction ? never : TKey : never;
8
8
  export type ObjectKeys<T> = KeyIsNotFunction<keyof T, T>;
9
9
  export type FunctionKeys<T> = KeyIsFunction<keyof T, T>;
10
+ export declare function instanceOfAny<T extends Array<{
11
+ new (...args: DeliberateAny[]): DeliberateAny;
12
+ }>>(x: unknown, ...types: T): x is InstanceType<T[number]>;