@algorandfoundation/algokit-client-generator 7.0.0-alpha.2 → 7.0.0-alpha.4

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.
@@ -174,6 +174,13 @@ function* structTypes(ctx) {
174
174
  // Emit the struct type
175
175
  yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${structCtx.tsObjDef}`;
176
176
  yield writer.NewLine;
177
+ // Emit method that converts ABI tuple to the struct object
178
+ yield* writer.jsDoc(`Converts the ABI tuple representation of a ${structName} to the struct representation`);
179
+ yield* writer.inline(`export function ${sanitizer.makeSafeTypeIdentifier(structName)}FromTuple(`, `abiTuple: ${structCtx.tsTupDef}`, `) {`);
180
+ yield* writer.indent(`const abiStructType = ABIStructType.fromStruct('${structName}', APP_SPEC.structs)`);
181
+ yield* writer.indent(`return getStructValueFromTupleValue(abiStructType, abiTuple) as ${sanitizer.makeSafeTypeIdentifier(structName)}`);
182
+ yield '}';
183
+ yield writer.NewLine;
177
184
  }
178
185
  }
179
186
  function* templateVariableTypes(ctx) {
@@ -1 +1 @@
1
- {"version":3,"file":"app-types.js","sources":["../../src/client/app-types.ts"],"sourcesContent":["import { GeneratorContext } from './generator-context'\nimport { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, inline, jsDoc, NewLine } from '../output/writer'\nimport { argTypeIsTransaction, ABITransactionType } from '@algorandfoundation/algokit-utils/abi'\nimport { Sanitizer } from '../util/sanitization'\nimport { Expand } from '@algorandfoundation/algokit-utils/types/expand'\nimport { containsNonVoidMethod } from './helpers/contains-non-void-method'\nimport { AbiMethodClientContext, StorageKeyContext, StorageMapContext } from './app-client-context'\n\nfunction getMethodMetadata(method: AbiMethodClientContext) {\n const methodSig = method.signature\n const uniqueName = method.uniqueName.original\n\n let hasAppCallArgToTheRight = false\n const argsMeta = new Array<Expand<Omit<(typeof method.args)[0], 'name'> & { name: string; isOptional: boolean; tsType: string }>>()\n\n for (let i = (method.args ?? []).length - 1; i >= 0; i--) {\n const arg = method.args[i]\n\n argsMeta.push({\n ...arg,\n name: arg.name?.original ?? `arg${i + 1}`,\n isOptional: !!arg.defaultValue || (hasAppCallArgToTheRight && argTypeIsTransaction(arg.type)),\n tsType: arg.tsInType,\n })\n\n if (\n !hasAppCallArgToTheRight &&\n argTypeIsTransaction(arg.type) &&\n [ABITransactionType.AppCall, ABITransactionType.Txn].includes(arg.type)\n ) {\n hasAppCallArgToTheRight = true\n }\n }\n argsMeta.reverse()\n\n return { methodSig, uniqueName, argsMeta }\n}\n\nexport function* appTypes(ctx: GeneratorContext): DocumentParts {\n yield* structTypes(ctx)\n yield* templateVariableTypes(ctx)\n\n const { app, name } = ctx\n\n yield* jsDoc(`The argument types for the ${name} contract`)\n yield `export type ${name}Args = {`\n yield IncIndent\n yield* jsDoc('The object representation of the arguments for each method')\n yield 'obj: {'\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig, argsMeta } = getMethodMetadata(method)\n if (argsMeta.length) {\n yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': {`\n yield IncIndent\n for (const arg of argsMeta) {\n if (arg.desc) yield* jsDoc(arg.desc)\n yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.isOptional ? '?' : ''}: ${arg.tsType}`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': Record<string, never>`\n }\n }\n yield DecIndentAndCloseBlock\n\n yield* jsDoc('The tuple representation of the arguments for each method')\n yield 'tuple: {'\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig, argsMeta } = getMethodMetadata(method)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': [`,\n argsMeta\n .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${arg.tsType}${arg.isOptional ? ' | undefined' : ''}`)\n .join(', '),\n ']',\n )\n }\n yield DecIndentAndCloseBlock\n\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc('The return type for each method')\n yield `export type ${name}Returns = {`\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig } = getMethodMetadata(method)\n yield* inline(`'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': ${method.returns.tsOutType}`)\n }\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc(`Defines the types of available calls and state of the ${name} smart contract.`)\n yield `export type ${name}Types = {`\n yield IncIndent\n yield* jsDoc('Maps method signatures / names to their argument and return types.')\n if (app.abiMethods.length == 0) {\n yield 'methods: {}'\n } else {\n yield 'methods:'\n }\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig } = getMethodMetadata(method)\n yield `& Record<'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}'${method.baseNameIsUnique ? ` | '${method.name.makeSafeStringTypeLiteral}'` : ''}, {`\n yield IncIndent\n yield `argsObj: ${name}Args['obj']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n yield `argsTuple: ${name}Args['tuple']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n\n if (method.returns.desc) yield* jsDoc(method.returns.desc)\n yield `returns: ${name}Returns['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n\n yield DecIndent\n yield '}>'\n }\n yield DecIndent\n\n const hasLocal =\n (app.state.keys.local && Object.keys(app.state.keys.local).length > 0) ||\n (app.state.maps.local && Object.keys(app.state.maps.local).length > 0)\n const hasGlobal =\n (app.state.keys.global && Object.keys(app.state.keys.global).length > 0) ||\n (app.state.maps.global && Object.keys(app.state.maps.global).length > 0)\n const hasBox =\n (app.state.keys.box && Object.keys(app.state.keys.box).length > 0) || (app.state.maps.box && Object.keys(app.state.maps.box).length > 0)\n yield* appState(ctx, { hasBox, hasGlobal, hasLocal })\n\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* inline(`\n /**\n * Defines the possible abi call signatures.\n */\n export type ${name}Signatures = keyof ${name}Types['methods']`)\n\n if (containsNonVoidMethod(app.methods)) {\n yield* inline(`\n /**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\n export type ${name}NonVoidMethodSignatures = keyof ${name}Types['methods'] extends infer T ? T extends keyof ${name}Types['methods'] ? MethodReturn<T> extends void ? never : T : never : never`)\n }\n\n yield `\n /**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\n export type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n >\n /**\n * Maps a method signature from the ${name} smart contract to the method's arguments in either tuple or struct form\n */\n export type MethodArgs<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['argsObj' | 'argsTuple']\n /**\n * Maps a method signature from the ${name} smart contract to the method's return type\n */\n export type MethodReturn<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['returns']\n `\n\n if (hasGlobal) {\n yield `\n /**\n * Defines the shape of the keyed global state of the application.\n */\n export type GlobalKeysState = ${name}Types['state']['global']['keys']\n `\n }\n\n if (hasLocal) {\n yield `\n /**\n * Defines the shape of the keyed local state of the application.\n */\n export type LocalKeysState = ${name}Types['state']['local']['keys']\n `\n }\n\n if (hasBox) {\n yield `\n /**\n * Defines the shape of the keyed box state of the application.\n */\n export type BoxKeysState = ${name}Types['state']['box']['keys']\n `\n }\n\n yield NewLine\n}\n\nfunction* structTypes(ctx: GeneratorContext): DocumentParts {\n const { app, sanitizer } = ctx\n if (Object.keys(app.structs).length === 0) return\n\n yield '// Type definitions for ARC-56 structs'\n yield NewLine\n\n for (const [structName, structCtx] of Object.entries(app.structs)) {\n // Emit the struct type\n yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${structCtx.tsObjDef}`\n yield NewLine\n }\n}\n\nfunction* templateVariableTypes(ctx: GeneratorContext): DocumentParts {\n if (Object.keys(ctx.app.templateVariables ?? {}).length === 0) {\n return\n }\n\n yield* jsDoc('Deploy-time template variables')\n yield 'export type TemplateVariables = {'\n yield IncIndent\n\n for (const [name, def] of Object.entries(ctx.app.templateVariables ?? {})) {\n yield `${name}: ${def.type.tsInType},`\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* keysAndMaps(\n sanitizer: Sanitizer,\n keys: {\n [name: string]: StorageKeyContext\n },\n maps: {\n [name: string]: StorageMapContext\n },\n): DocumentParts {\n if (keys && Object.keys(keys).length) {\n yield 'keys: {'\n yield IncIndent\n for (const [name, prop] of Object.entries(keys)) {\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n prop.valueType\n yield `${keySafe}: ${prop.valueType.isAvmBytes ? 'BinaryState' : prop.valueType.tsOutType}`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield 'keys: {}'\n }\n\n if (maps && Object.keys(maps).length) {\n yield 'maps: {'\n yield IncIndent\n for (const name of Object.keys(maps)) {\n const prop = maps[name]\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n\n yield `${keySafe}: Map<${prop.keyType.tsInType}, ${prop.valueType.tsOutType}>`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield 'maps: {}'\n }\n}\n\nfunction* appState(\n { app, sanitizer }: GeneratorContext,\n stateFlags: { hasLocal: boolean; hasGlobal: boolean; hasBox: boolean },\n): DocumentParts {\n const { hasBox, hasGlobal, hasLocal } = stateFlags\n\n if (hasLocal || hasGlobal || hasBox) {\n yield* jsDoc('Defines the shape of the state of the application.')\n yield 'state: {'\n yield IncIndent\n if (hasGlobal) {\n yield 'global: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.global, app.state.maps.global)\n yield DecIndentAndCloseBlock\n }\n if (hasLocal) {\n yield 'local: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.local, app.state.maps.local)\n yield DecIndentAndCloseBlock\n }\n if (hasBox) {\n yield 'box: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.box, app.state.maps.box)\n yield DecIndentAndCloseBlock\n }\n yield DecIndentAndCloseBlock\n }\n}\n"],"names":["argTypeIsTransaction","ABITransactionType","jsDoc","IncIndent","DecIndentAndCloseBlock","inline","NewLine","DecIndent","containsNonVoidMethod"],"mappings":"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"}
1
+ {"version":3,"file":"app-types.js","sources":["../../src/client/app-types.ts"],"sourcesContent":["import { GeneratorContext } from './generator-context'\nimport { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, inline, jsDoc, NewLine } from '../output/writer'\nimport { argTypeIsTransaction, ABITransactionType } from '@algorandfoundation/algokit-utils/abi'\nimport { Sanitizer } from '../util/sanitization'\nimport { Expand } from '@algorandfoundation/algokit-utils/types/expand'\nimport { containsNonVoidMethod } from './helpers/contains-non-void-method'\nimport { AbiMethodClientContext, StorageKeyContext, StorageMapContext } from './app-client-context'\n\nfunction getMethodMetadata(method: AbiMethodClientContext) {\n const methodSig = method.signature\n const uniqueName = method.uniqueName.original\n\n let hasAppCallArgToTheRight = false\n const argsMeta = new Array<Expand<Omit<(typeof method.args)[0], 'name'> & { name: string; isOptional: boolean; tsType: string }>>()\n\n for (let i = (method.args ?? []).length - 1; i >= 0; i--) {\n const arg = method.args[i]\n\n argsMeta.push({\n ...arg,\n name: arg.name?.original ?? `arg${i + 1}`,\n isOptional: !!arg.defaultValue || (hasAppCallArgToTheRight && argTypeIsTransaction(arg.type)),\n tsType: arg.tsInType,\n })\n\n if (\n !hasAppCallArgToTheRight &&\n argTypeIsTransaction(arg.type) &&\n [ABITransactionType.AppCall, ABITransactionType.Txn].includes(arg.type)\n ) {\n hasAppCallArgToTheRight = true\n }\n }\n argsMeta.reverse()\n\n return { methodSig, uniqueName, argsMeta }\n}\n\nexport function* appTypes(ctx: GeneratorContext): DocumentParts {\n yield* structTypes(ctx)\n yield* templateVariableTypes(ctx)\n\n const { app, name } = ctx\n\n yield* jsDoc(`The argument types for the ${name} contract`)\n yield `export type ${name}Args = {`\n yield IncIndent\n yield* jsDoc('The object representation of the arguments for each method')\n yield 'obj: {'\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig, argsMeta } = getMethodMetadata(method)\n if (argsMeta.length) {\n yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': {`\n yield IncIndent\n for (const arg of argsMeta) {\n if (arg.desc) yield* jsDoc(arg.desc)\n yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.isOptional ? '?' : ''}: ${arg.tsType}`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': Record<string, never>`\n }\n }\n yield DecIndentAndCloseBlock\n\n yield* jsDoc('The tuple representation of the arguments for each method')\n yield 'tuple: {'\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig, argsMeta } = getMethodMetadata(method)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': [`,\n argsMeta\n .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${arg.tsType}${arg.isOptional ? ' | undefined' : ''}`)\n .join(', '),\n ']',\n )\n }\n yield DecIndentAndCloseBlock\n\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc('The return type for each method')\n yield `export type ${name}Returns = {`\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig } = getMethodMetadata(method)\n yield* inline(`'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': ${method.returns.tsOutType}`)\n }\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc(`Defines the types of available calls and state of the ${name} smart contract.`)\n yield `export type ${name}Types = {`\n yield IncIndent\n yield* jsDoc('Maps method signatures / names to their argument and return types.')\n if (app.abiMethods.length == 0) {\n yield 'methods: {}'\n } else {\n yield 'methods:'\n }\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig } = getMethodMetadata(method)\n yield `& Record<'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}'${method.baseNameIsUnique ? ` | '${method.name.makeSafeStringTypeLiteral}'` : ''}, {`\n yield IncIndent\n yield `argsObj: ${name}Args['obj']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n yield `argsTuple: ${name}Args['tuple']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n\n if (method.returns.desc) yield* jsDoc(method.returns.desc)\n yield `returns: ${name}Returns['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n\n yield DecIndent\n yield '}>'\n }\n yield DecIndent\n\n const hasLocal =\n (app.state.keys.local && Object.keys(app.state.keys.local).length > 0) ||\n (app.state.maps.local && Object.keys(app.state.maps.local).length > 0)\n const hasGlobal =\n (app.state.keys.global && Object.keys(app.state.keys.global).length > 0) ||\n (app.state.maps.global && Object.keys(app.state.maps.global).length > 0)\n const hasBox =\n (app.state.keys.box && Object.keys(app.state.keys.box).length > 0) || (app.state.maps.box && Object.keys(app.state.maps.box).length > 0)\n yield* appState(ctx, { hasBox, hasGlobal, hasLocal })\n\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* inline(`\n /**\n * Defines the possible abi call signatures.\n */\n export type ${name}Signatures = keyof ${name}Types['methods']`)\n\n if (containsNonVoidMethod(app.methods)) {\n yield* inline(`\n /**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\n export type ${name}NonVoidMethodSignatures = keyof ${name}Types['methods'] extends infer T ? T extends keyof ${name}Types['methods'] ? MethodReturn<T> extends void ? never : T : never : never`)\n }\n\n yield `\n /**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\n export type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n >\n /**\n * Maps a method signature from the ${name} smart contract to the method's arguments in either tuple or struct form\n */\n export type MethodArgs<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['argsObj' | 'argsTuple']\n /**\n * Maps a method signature from the ${name} smart contract to the method's return type\n */\n export type MethodReturn<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['returns']\n `\n\n if (hasGlobal) {\n yield `\n /**\n * Defines the shape of the keyed global state of the application.\n */\n export type GlobalKeysState = ${name}Types['state']['global']['keys']\n `\n }\n\n if (hasLocal) {\n yield `\n /**\n * Defines the shape of the keyed local state of the application.\n */\n export type LocalKeysState = ${name}Types['state']['local']['keys']\n `\n }\n\n if (hasBox) {\n yield `\n /**\n * Defines the shape of the keyed box state of the application.\n */\n export type BoxKeysState = ${name}Types['state']['box']['keys']\n `\n }\n\n yield NewLine\n}\n\nfunction* structTypes(ctx: GeneratorContext): DocumentParts {\n const { app, sanitizer } = ctx\n if (Object.keys(app.structs).length === 0) return\n\n yield '// Type definitions for ARC-56 structs'\n yield NewLine\n\n for (const [structName, structCtx] of Object.entries(app.structs)) {\n // Emit the struct type\n yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${structCtx.tsObjDef}`\n yield NewLine\n\n // Emit method that converts ABI tuple to the struct object\n yield* jsDoc(`Converts the ABI tuple representation of a ${structName} to the struct representation`)\n yield* inline(`export function ${sanitizer.makeSafeTypeIdentifier(structName)}FromTuple(`, `abiTuple: ${structCtx.tsTupDef}`, `) {`)\n yield* indent(`const abiStructType = ABIStructType.fromStruct('${structName}', APP_SPEC.structs)`)\n yield* indent(`return getStructValueFromTupleValue(abiStructType, abiTuple) as ${sanitizer.makeSafeTypeIdentifier(structName)}`)\n yield '}'\n yield NewLine\n }\n}\n\nfunction* templateVariableTypes(ctx: GeneratorContext): DocumentParts {\n if (Object.keys(ctx.app.templateVariables ?? {}).length === 0) {\n return\n }\n\n yield* jsDoc('Deploy-time template variables')\n yield 'export type TemplateVariables = {'\n yield IncIndent\n\n for (const [name, def] of Object.entries(ctx.app.templateVariables ?? {})) {\n yield `${name}: ${def.type.tsInType},`\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* keysAndMaps(\n sanitizer: Sanitizer,\n keys: {\n [name: string]: StorageKeyContext\n },\n maps: {\n [name: string]: StorageMapContext\n },\n): DocumentParts {\n if (keys && Object.keys(keys).length) {\n yield 'keys: {'\n yield IncIndent\n for (const [name, prop] of Object.entries(keys)) {\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n prop.valueType\n yield `${keySafe}: ${prop.valueType.isAvmBytes ? 'BinaryState' : prop.valueType.tsOutType}`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield 'keys: {}'\n }\n\n if (maps && Object.keys(maps).length) {\n yield 'maps: {'\n yield IncIndent\n for (const name of Object.keys(maps)) {\n const prop = maps[name]\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n\n yield `${keySafe}: Map<${prop.keyType.tsInType}, ${prop.valueType.tsOutType}>`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield 'maps: {}'\n }\n}\n\nfunction* appState(\n { app, sanitizer }: GeneratorContext,\n stateFlags: { hasLocal: boolean; hasGlobal: boolean; hasBox: boolean },\n): DocumentParts {\n const { hasBox, hasGlobal, hasLocal } = stateFlags\n\n if (hasLocal || hasGlobal || hasBox) {\n yield* jsDoc('Defines the shape of the state of the application.')\n yield 'state: {'\n yield IncIndent\n if (hasGlobal) {\n yield 'global: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.global, app.state.maps.global)\n yield DecIndentAndCloseBlock\n }\n if (hasLocal) {\n yield 'local: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.local, app.state.maps.local)\n yield DecIndentAndCloseBlock\n }\n if (hasBox) {\n yield 'box: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.box, app.state.maps.box)\n yield DecIndentAndCloseBlock\n }\n yield DecIndentAndCloseBlock\n }\n}\n"],"names":["argTypeIsTransaction","ABITransactionType","jsDoc","IncIndent","DecIndentAndCloseBlock","inline","NewLine","DecIndent","containsNonVoidMethod","indent"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsDoc, IncIndent, DecIndentAndCloseBlock, inline, NewLine, DecIndent } from '../output/writer.mjs';
1
+ import { jsDoc, IncIndent, DecIndentAndCloseBlock, inline, NewLine, DecIndent, indent } from '../output/writer.mjs';
2
2
  import { argTypeIsTransaction, ABITransactionType } from '@algorandfoundation/algokit-utils/abi';
3
3
  import { containsNonVoidMethod } from './helpers/contains-non-void-method.mjs';
4
4
 
@@ -172,6 +172,13 @@ function* structTypes(ctx) {
172
172
  // Emit the struct type
173
173
  yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${structCtx.tsObjDef}`;
174
174
  yield NewLine;
175
+ // Emit method that converts ABI tuple to the struct object
176
+ yield* jsDoc(`Converts the ABI tuple representation of a ${structName} to the struct representation`);
177
+ yield* inline(`export function ${sanitizer.makeSafeTypeIdentifier(structName)}FromTuple(`, `abiTuple: ${structCtx.tsTupDef}`, `) {`);
178
+ yield* indent(`const abiStructType = ABIStructType.fromStruct('${structName}', APP_SPEC.structs)`);
179
+ yield* indent(`return getStructValueFromTupleValue(abiStructType, abiTuple) as ${sanitizer.makeSafeTypeIdentifier(structName)}`);
180
+ yield '}';
181
+ yield NewLine;
175
182
  }
176
183
  }
177
184
  function* templateVariableTypes(ctx) {
@@ -1 +1 @@
1
- {"version":3,"file":"app-types.mjs","sources":["../../src/client/app-types.ts"],"sourcesContent":["import { GeneratorContext } from './generator-context'\nimport { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, inline, jsDoc, NewLine } from '../output/writer'\nimport { argTypeIsTransaction, ABITransactionType } from '@algorandfoundation/algokit-utils/abi'\nimport { Sanitizer } from '../util/sanitization'\nimport { Expand } from '@algorandfoundation/algokit-utils/types/expand'\nimport { containsNonVoidMethod } from './helpers/contains-non-void-method'\nimport { AbiMethodClientContext, StorageKeyContext, StorageMapContext } from './app-client-context'\n\nfunction getMethodMetadata(method: AbiMethodClientContext) {\n const methodSig = method.signature\n const uniqueName = method.uniqueName.original\n\n let hasAppCallArgToTheRight = false\n const argsMeta = new Array<Expand<Omit<(typeof method.args)[0], 'name'> & { name: string; isOptional: boolean; tsType: string }>>()\n\n for (let i = (method.args ?? []).length - 1; i >= 0; i--) {\n const arg = method.args[i]\n\n argsMeta.push({\n ...arg,\n name: arg.name?.original ?? `arg${i + 1}`,\n isOptional: !!arg.defaultValue || (hasAppCallArgToTheRight && argTypeIsTransaction(arg.type)),\n tsType: arg.tsInType,\n })\n\n if (\n !hasAppCallArgToTheRight &&\n argTypeIsTransaction(arg.type) &&\n [ABITransactionType.AppCall, ABITransactionType.Txn].includes(arg.type)\n ) {\n hasAppCallArgToTheRight = true\n }\n }\n argsMeta.reverse()\n\n return { methodSig, uniqueName, argsMeta }\n}\n\nexport function* appTypes(ctx: GeneratorContext): DocumentParts {\n yield* structTypes(ctx)\n yield* templateVariableTypes(ctx)\n\n const { app, name } = ctx\n\n yield* jsDoc(`The argument types for the ${name} contract`)\n yield `export type ${name}Args = {`\n yield IncIndent\n yield* jsDoc('The object representation of the arguments for each method')\n yield 'obj: {'\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig, argsMeta } = getMethodMetadata(method)\n if (argsMeta.length) {\n yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': {`\n yield IncIndent\n for (const arg of argsMeta) {\n if (arg.desc) yield* jsDoc(arg.desc)\n yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.isOptional ? '?' : ''}: ${arg.tsType}`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': Record<string, never>`\n }\n }\n yield DecIndentAndCloseBlock\n\n yield* jsDoc('The tuple representation of the arguments for each method')\n yield 'tuple: {'\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig, argsMeta } = getMethodMetadata(method)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': [`,\n argsMeta\n .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${arg.tsType}${arg.isOptional ? ' | undefined' : ''}`)\n .join(', '),\n ']',\n )\n }\n yield DecIndentAndCloseBlock\n\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc('The return type for each method')\n yield `export type ${name}Returns = {`\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig } = getMethodMetadata(method)\n yield* inline(`'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': ${method.returns.tsOutType}`)\n }\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc(`Defines the types of available calls and state of the ${name} smart contract.`)\n yield `export type ${name}Types = {`\n yield IncIndent\n yield* jsDoc('Maps method signatures / names to their argument and return types.')\n if (app.abiMethods.length == 0) {\n yield 'methods: {}'\n } else {\n yield 'methods:'\n }\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig } = getMethodMetadata(method)\n yield `& Record<'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}'${method.baseNameIsUnique ? ` | '${method.name.makeSafeStringTypeLiteral}'` : ''}, {`\n yield IncIndent\n yield `argsObj: ${name}Args['obj']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n yield `argsTuple: ${name}Args['tuple']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n\n if (method.returns.desc) yield* jsDoc(method.returns.desc)\n yield `returns: ${name}Returns['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n\n yield DecIndent\n yield '}>'\n }\n yield DecIndent\n\n const hasLocal =\n (app.state.keys.local && Object.keys(app.state.keys.local).length > 0) ||\n (app.state.maps.local && Object.keys(app.state.maps.local).length > 0)\n const hasGlobal =\n (app.state.keys.global && Object.keys(app.state.keys.global).length > 0) ||\n (app.state.maps.global && Object.keys(app.state.maps.global).length > 0)\n const hasBox =\n (app.state.keys.box && Object.keys(app.state.keys.box).length > 0) || (app.state.maps.box && Object.keys(app.state.maps.box).length > 0)\n yield* appState(ctx, { hasBox, hasGlobal, hasLocal })\n\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* inline(`\n /**\n * Defines the possible abi call signatures.\n */\n export type ${name}Signatures = keyof ${name}Types['methods']`)\n\n if (containsNonVoidMethod(app.methods)) {\n yield* inline(`\n /**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\n export type ${name}NonVoidMethodSignatures = keyof ${name}Types['methods'] extends infer T ? T extends keyof ${name}Types['methods'] ? MethodReturn<T> extends void ? never : T : never : never`)\n }\n\n yield `\n /**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\n export type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n >\n /**\n * Maps a method signature from the ${name} smart contract to the method's arguments in either tuple or struct form\n */\n export type MethodArgs<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['argsObj' | 'argsTuple']\n /**\n * Maps a method signature from the ${name} smart contract to the method's return type\n */\n export type MethodReturn<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['returns']\n `\n\n if (hasGlobal) {\n yield `\n /**\n * Defines the shape of the keyed global state of the application.\n */\n export type GlobalKeysState = ${name}Types['state']['global']['keys']\n `\n }\n\n if (hasLocal) {\n yield `\n /**\n * Defines the shape of the keyed local state of the application.\n */\n export type LocalKeysState = ${name}Types['state']['local']['keys']\n `\n }\n\n if (hasBox) {\n yield `\n /**\n * Defines the shape of the keyed box state of the application.\n */\n export type BoxKeysState = ${name}Types['state']['box']['keys']\n `\n }\n\n yield NewLine\n}\n\nfunction* structTypes(ctx: GeneratorContext): DocumentParts {\n const { app, sanitizer } = ctx\n if (Object.keys(app.structs).length === 0) return\n\n yield '// Type definitions for ARC-56 structs'\n yield NewLine\n\n for (const [structName, structCtx] of Object.entries(app.structs)) {\n // Emit the struct type\n yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${structCtx.tsObjDef}`\n yield NewLine\n }\n}\n\nfunction* templateVariableTypes(ctx: GeneratorContext): DocumentParts {\n if (Object.keys(ctx.app.templateVariables ?? {}).length === 0) {\n return\n }\n\n yield* jsDoc('Deploy-time template variables')\n yield 'export type TemplateVariables = {'\n yield IncIndent\n\n for (const [name, def] of Object.entries(ctx.app.templateVariables ?? {})) {\n yield `${name}: ${def.type.tsInType},`\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* keysAndMaps(\n sanitizer: Sanitizer,\n keys: {\n [name: string]: StorageKeyContext\n },\n maps: {\n [name: string]: StorageMapContext\n },\n): DocumentParts {\n if (keys && Object.keys(keys).length) {\n yield 'keys: {'\n yield IncIndent\n for (const [name, prop] of Object.entries(keys)) {\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n prop.valueType\n yield `${keySafe}: ${prop.valueType.isAvmBytes ? 'BinaryState' : prop.valueType.tsOutType}`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield 'keys: {}'\n }\n\n if (maps && Object.keys(maps).length) {\n yield 'maps: {'\n yield IncIndent\n for (const name of Object.keys(maps)) {\n const prop = maps[name]\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n\n yield `${keySafe}: Map<${prop.keyType.tsInType}, ${prop.valueType.tsOutType}>`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield 'maps: {}'\n }\n}\n\nfunction* appState(\n { app, sanitizer }: GeneratorContext,\n stateFlags: { hasLocal: boolean; hasGlobal: boolean; hasBox: boolean },\n): DocumentParts {\n const { hasBox, hasGlobal, hasLocal } = stateFlags\n\n if (hasLocal || hasGlobal || hasBox) {\n yield* jsDoc('Defines the shape of the state of the application.')\n yield 'state: {'\n yield IncIndent\n if (hasGlobal) {\n yield 'global: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.global, app.state.maps.global)\n yield DecIndentAndCloseBlock\n }\n if (hasLocal) {\n yield 'local: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.local, app.state.maps.local)\n yield DecIndentAndCloseBlock\n }\n if (hasBox) {\n yield 'box: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.box, app.state.maps.box)\n yield DecIndentAndCloseBlock\n }\n yield DecIndentAndCloseBlock\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-types.mjs","sources":["../../src/client/app-types.ts"],"sourcesContent":["import { GeneratorContext } from './generator-context'\nimport { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, inline, jsDoc, NewLine } from '../output/writer'\nimport { argTypeIsTransaction, ABITransactionType } from '@algorandfoundation/algokit-utils/abi'\nimport { Sanitizer } from '../util/sanitization'\nimport { Expand } from '@algorandfoundation/algokit-utils/types/expand'\nimport { containsNonVoidMethod } from './helpers/contains-non-void-method'\nimport { AbiMethodClientContext, StorageKeyContext, StorageMapContext } from './app-client-context'\n\nfunction getMethodMetadata(method: AbiMethodClientContext) {\n const methodSig = method.signature\n const uniqueName = method.uniqueName.original\n\n let hasAppCallArgToTheRight = false\n const argsMeta = new Array<Expand<Omit<(typeof method.args)[0], 'name'> & { name: string; isOptional: boolean; tsType: string }>>()\n\n for (let i = (method.args ?? []).length - 1; i >= 0; i--) {\n const arg = method.args[i]\n\n argsMeta.push({\n ...arg,\n name: arg.name?.original ?? `arg${i + 1}`,\n isOptional: !!arg.defaultValue || (hasAppCallArgToTheRight && argTypeIsTransaction(arg.type)),\n tsType: arg.tsInType,\n })\n\n if (\n !hasAppCallArgToTheRight &&\n argTypeIsTransaction(arg.type) &&\n [ABITransactionType.AppCall, ABITransactionType.Txn].includes(arg.type)\n ) {\n hasAppCallArgToTheRight = true\n }\n }\n argsMeta.reverse()\n\n return { methodSig, uniqueName, argsMeta }\n}\n\nexport function* appTypes(ctx: GeneratorContext): DocumentParts {\n yield* structTypes(ctx)\n yield* templateVariableTypes(ctx)\n\n const { app, name } = ctx\n\n yield* jsDoc(`The argument types for the ${name} contract`)\n yield `export type ${name}Args = {`\n yield IncIndent\n yield* jsDoc('The object representation of the arguments for each method')\n yield 'obj: {'\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig, argsMeta } = getMethodMetadata(method)\n if (argsMeta.length) {\n yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': {`\n yield IncIndent\n for (const arg of argsMeta) {\n if (arg.desc) yield* jsDoc(arg.desc)\n yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.isOptional ? '?' : ''}: ${arg.tsType}`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': Record<string, never>`\n }\n }\n yield DecIndentAndCloseBlock\n\n yield* jsDoc('The tuple representation of the arguments for each method')\n yield 'tuple: {'\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig, argsMeta } = getMethodMetadata(method)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': [`,\n argsMeta\n .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${arg.tsType}${arg.isOptional ? ' | undefined' : ''}`)\n .join(', '),\n ']',\n )\n }\n yield DecIndentAndCloseBlock\n\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc('The return type for each method')\n yield `export type ${name}Returns = {`\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig } = getMethodMetadata(method)\n yield* inline(`'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': ${method.returns.tsOutType}`)\n }\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc(`Defines the types of available calls and state of the ${name} smart contract.`)\n yield `export type ${name}Types = {`\n yield IncIndent\n yield* jsDoc('Maps method signatures / names to their argument and return types.')\n if (app.abiMethods.length == 0) {\n yield 'methods: {}'\n } else {\n yield 'methods:'\n }\n yield IncIndent\n for (const method of app.abiMethods) {\n const { methodSig } = getMethodMetadata(method)\n yield `& Record<'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}'${method.baseNameIsUnique ? ` | '${method.name.makeSafeStringTypeLiteral}'` : ''}, {`\n yield IncIndent\n yield `argsObj: ${name}Args['obj']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n yield `argsTuple: ${name}Args['tuple']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n\n if (method.returns.desc) yield* jsDoc(method.returns.desc)\n yield `returns: ${name}Returns['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n\n yield DecIndent\n yield '}>'\n }\n yield DecIndent\n\n const hasLocal =\n (app.state.keys.local && Object.keys(app.state.keys.local).length > 0) ||\n (app.state.maps.local && Object.keys(app.state.maps.local).length > 0)\n const hasGlobal =\n (app.state.keys.global && Object.keys(app.state.keys.global).length > 0) ||\n (app.state.maps.global && Object.keys(app.state.maps.global).length > 0)\n const hasBox =\n (app.state.keys.box && Object.keys(app.state.keys.box).length > 0) || (app.state.maps.box && Object.keys(app.state.maps.box).length > 0)\n yield* appState(ctx, { hasBox, hasGlobal, hasLocal })\n\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* inline(`\n /**\n * Defines the possible abi call signatures.\n */\n export type ${name}Signatures = keyof ${name}Types['methods']`)\n\n if (containsNonVoidMethod(app.methods)) {\n yield* inline(`\n /**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\n export type ${name}NonVoidMethodSignatures = keyof ${name}Types['methods'] extends infer T ? T extends keyof ${name}Types['methods'] ? MethodReturn<T> extends void ? never : T : never : never`)\n }\n\n yield `\n /**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\n export type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n >\n /**\n * Maps a method signature from the ${name} smart contract to the method's arguments in either tuple or struct form\n */\n export type MethodArgs<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['argsObj' | 'argsTuple']\n /**\n * Maps a method signature from the ${name} smart contract to the method's return type\n */\n export type MethodReturn<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['returns']\n `\n\n if (hasGlobal) {\n yield `\n /**\n * Defines the shape of the keyed global state of the application.\n */\n export type GlobalKeysState = ${name}Types['state']['global']['keys']\n `\n }\n\n if (hasLocal) {\n yield `\n /**\n * Defines the shape of the keyed local state of the application.\n */\n export type LocalKeysState = ${name}Types['state']['local']['keys']\n `\n }\n\n if (hasBox) {\n yield `\n /**\n * Defines the shape of the keyed box state of the application.\n */\n export type BoxKeysState = ${name}Types['state']['box']['keys']\n `\n }\n\n yield NewLine\n}\n\nfunction* structTypes(ctx: GeneratorContext): DocumentParts {\n const { app, sanitizer } = ctx\n if (Object.keys(app.structs).length === 0) return\n\n yield '// Type definitions for ARC-56 structs'\n yield NewLine\n\n for (const [structName, structCtx] of Object.entries(app.structs)) {\n // Emit the struct type\n yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${structCtx.tsObjDef}`\n yield NewLine\n\n // Emit method that converts ABI tuple to the struct object\n yield* jsDoc(`Converts the ABI tuple representation of a ${structName} to the struct representation`)\n yield* inline(`export function ${sanitizer.makeSafeTypeIdentifier(structName)}FromTuple(`, `abiTuple: ${structCtx.tsTupDef}`, `) {`)\n yield* indent(`const abiStructType = ABIStructType.fromStruct('${structName}', APP_SPEC.structs)`)\n yield* indent(`return getStructValueFromTupleValue(abiStructType, abiTuple) as ${sanitizer.makeSafeTypeIdentifier(structName)}`)\n yield '}'\n yield NewLine\n }\n}\n\nfunction* templateVariableTypes(ctx: GeneratorContext): DocumentParts {\n if (Object.keys(ctx.app.templateVariables ?? {}).length === 0) {\n return\n }\n\n yield* jsDoc('Deploy-time template variables')\n yield 'export type TemplateVariables = {'\n yield IncIndent\n\n for (const [name, def] of Object.entries(ctx.app.templateVariables ?? {})) {\n yield `${name}: ${def.type.tsInType},`\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* keysAndMaps(\n sanitizer: Sanitizer,\n keys: {\n [name: string]: StorageKeyContext\n },\n maps: {\n [name: string]: StorageMapContext\n },\n): DocumentParts {\n if (keys && Object.keys(keys).length) {\n yield 'keys: {'\n yield IncIndent\n for (const [name, prop] of Object.entries(keys)) {\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n prop.valueType\n yield `${keySafe}: ${prop.valueType.isAvmBytes ? 'BinaryState' : prop.valueType.tsOutType}`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield 'keys: {}'\n }\n\n if (maps && Object.keys(maps).length) {\n yield 'maps: {'\n yield IncIndent\n for (const name of Object.keys(maps)) {\n const prop = maps[name]\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n\n yield `${keySafe}: Map<${prop.keyType.tsInType}, ${prop.valueType.tsOutType}>`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield 'maps: {}'\n }\n}\n\nfunction* appState(\n { app, sanitizer }: GeneratorContext,\n stateFlags: { hasLocal: boolean; hasGlobal: boolean; hasBox: boolean },\n): DocumentParts {\n const { hasBox, hasGlobal, hasLocal } = stateFlags\n\n if (hasLocal || hasGlobal || hasBox) {\n yield* jsDoc('Defines the shape of the state of the application.')\n yield 'state: {'\n yield IncIndent\n if (hasGlobal) {\n yield 'global: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.global, app.state.maps.global)\n yield DecIndentAndCloseBlock\n }\n if (hasLocal) {\n yield 'local: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.local, app.state.maps.local)\n yield DecIndentAndCloseBlock\n }\n if (hasBox) {\n yield 'box: {'\n yield IncIndent\n yield* keysAndMaps(sanitizer, app.state.keys.box, app.state.maps.box)\n yield DecIndentAndCloseBlock\n }\n yield DecIndentAndCloseBlock\n }\n}\n"],"names":[],"mappings":"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"}
package/client/imports.js CHANGED
@@ -3,8 +3,8 @@
3
3
  function* imports() {
4
4
  yield `
5
5
  import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'
6
- import { ABIReturn, Arc56Contract } from '@algorandfoundation/algokit-utils/abi'
7
- import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact'
6
+ import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi'
7
+ import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact'
8
8
  import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client'
9
9
  import { Address, encodeAddress } from '@algorandfoundation/algokit-utils'
10
10
  import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client'
@@ -1 +1 @@
1
- {"version":3,"file":"imports.js","sources":["../../src/client/imports.ts"],"sourcesContent":["import { DocumentParts } from '../output/writer'\n\nexport function* imports(): DocumentParts {\n yield `\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, Arc56Contract } from '@algorandfoundation/algokit-utils/abi'\nimport { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact'\nimport { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client'\nimport { Address, encodeAddress } from '@algorandfoundation/algokit-utils'\nimport { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client'\nimport { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer'\n `\n}\n"],"names":[],"mappings":";;AAEM,UAAW,OAAO,GAAA;IACtB,MAAM;;;;;;;;;;GAUL;AACH;;;;"}
1
+ {"version":3,"file":"imports.js","sources":["../../src/client/imports.ts"],"sourcesContent":["import { DocumentParts } from '../output/writer'\n\nexport function* imports(): DocumentParts {\n yield `\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi'\nimport { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact'\nimport { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client'\nimport { Address, encodeAddress } from '@algorandfoundation/algokit-utils'\nimport { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client'\nimport { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer'\n `\n}\n"],"names":[],"mappings":";;AAEM,UAAW,OAAO,GAAA;IACtB,MAAM;;;;;;;;;;GAUL;AACH;;;;"}
@@ -1,8 +1,8 @@
1
1
  function* imports() {
2
2
  yield `
3
3
  import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'
4
- import { ABIReturn, Arc56Contract } from '@algorandfoundation/algokit-utils/abi'
5
- import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact'
4
+ import { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi'
5
+ import { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact'
6
6
  import { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client'
7
7
  import { Address, encodeAddress } from '@algorandfoundation/algokit-utils'
8
8
  import { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client'
@@ -1 +1 @@
1
- {"version":3,"file":"imports.mjs","sources":["../../src/client/imports.ts"],"sourcesContent":["import { DocumentParts } from '../output/writer'\n\nexport function* imports(): DocumentParts {\n yield `\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, Arc56Contract } from '@algorandfoundation/algokit-utils/abi'\nimport { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact'\nimport { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client'\nimport { Address, encodeAddress } from '@algorandfoundation/algokit-utils'\nimport { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client'\nimport { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer'\n `\n}\n"],"names":[],"mappings":"AAEM,UAAW,OAAO,GAAA;IACtB,MAAM;;;;;;;;;;GAUL;AACH;;;;"}
1
+ {"version":3,"file":"imports.mjs","sources":["../../src/client/imports.ts"],"sourcesContent":["import { DocumentParts } from '../output/writer'\n\nexport function* imports(): DocumentParts {\n yield `\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, ABIStructType, Arc56Contract, getStructValueFromTupleValue } from '@algorandfoundation/algokit-utils/abi'\nimport { OnApplicationComplete, TransactionSigner, Transaction } from '@algorandfoundation/algokit-utils/transact'\nimport { SimulateResponse } from '@algorandfoundation/algokit-utils/algod-client'\nimport { Address, encodeAddress } from '@algorandfoundation/algokit-utils'\nimport { AppClientMethodCallParams, AppClientCompilationParams, AppClientDeployParams, CallOnComplete, AppClient as _AppClient, AppClientParams, ResolveAppClientByCreatorAndName, ResolveAppClientByNetwork, AppClientBareCallParams, CloneAppClientParams } from '@algorandfoundation/algokit-utils/types/app-client'\nimport { SendParams,SendTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { AppFactoryCreateMethodCallParams, AppFactoryAppClientParams, AppFactoryDeployParams, AppFactoryParams, AppFactory as _AppFactory, AppFactoryResolveAppClientByCreatorAndNameParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, TransactionComposerConfig, SkipSignaturesSimulateOptions, RawSimulateOptions, SimulateOptions, AppMethodCallTransactionArgument } from '@algorandfoundation/algokit-utils/types/composer'\n `\n}\n"],"names":[],"mappings":"AAEM,UAAW,OAAO,GAAA;IACtB,MAAM;;;;;;;;;;GAUL;AACH;;;;"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "**"
7
7
  ],
8
8
  "name": "@algorandfoundation/algokit-client-generator",
9
- "version": "7.0.0-alpha.2",
9
+ "version": "7.0.0-alpha.4",
10
10
  "description": "Generates a TypeScript client for interacting with, and deploying ARC-0032 smart contracts on the Algorand Blockchain.",
11
11
  "module": "index.mjs",
12
12
  "private": false,
@@ -27,7 +27,7 @@
27
27
  "jsonschema": "^1.5.0"
28
28
  },
29
29
  "peerDependencies": {
30
- "@algorandfoundation/algokit-utils": "^10.0.0-alpha.20"
30
+ "@algorandfoundation/algokit-utils": "^10.0.0-alpha.25"
31
31
  },
32
32
  "publishConfig": {
33
33
  "access": "public"