@algorandfoundation/algokit-client-generator 4.0.0-beta.6 → 4.0.0-beta.7
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/client/app-client.js +15 -0
- package/client/app-client.js.map +1 -1
- package/client/app-client.mjs +15 -0
- package/client/app-client.mjs.map +1 -1
- package/client/app-types.js +26 -84
- package/client/app-types.js.map +1 -1
- package/client/app-types.mjs +27 -85
- package/client/app-types.mjs.map +1 -1
- package/client/imports.js +1 -0
- package/client/imports.js.map +1 -1
- package/client/imports.mjs +1 -0
- package/client/imports.mjs.map +1 -1
- package/client/params-factory.js +1 -1
- package/client/params-factory.js.map +1 -1
- package/client/params-factory.mjs +1 -1
- package/client/params-factory.mjs.map +1 -1
- package/package.json +3 -3
- package/util/sanitization.js +12 -7
- package/util/sanitization.js.map +1 -1
- package/util/sanitization.mjs +12 -7
- package/util/sanitization.mjs.map +1 -1
package/client/app-types.js.map
CHANGED
|
@@ -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, indent, inline, jsDoc, NewLine } from '../output/writer'\nimport { getEquivalentType } from './helpers/get-equivalent-type'\nimport { ABIMethod, ABITupleType } from 'algosdk'\nimport { Arc56Contract, Method, StorageKey, StorageMap, StructField } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { Sanitizer } from '../util/sanitization'\n\nfunction getMethodMetadata(method: Method, ctx: GeneratorContext) {\n const { methodSignatureToUniqueName } = ctx\n const methodSig = new ABIMethod(method).getSignature()\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const argsMeta = method.args.map((arg, i) => ({\n ...arg,\n name: arg.name ?? `arg${i + 1}`,\n hasDefault: !!arg.defaultValue,\n tsType: getEquivalentType(arg.struct ?? arg.type, 'input', ctx),\n }))\n\n return { methodSig, uniqueName, argsMeta }\n}\n\nexport function* appTypes(ctx: GeneratorContext): DocumentParts {\n yield* abiTypes(ctx)\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.methods) {\n const { methodSig, argsMeta } = getMethodMetadata(method, ctx)\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.hasDefault ? '?' : ''}: ${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.methods) {\n const { methodSig, argsMeta } = getMethodMetadata(method, ctx)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': [`,\n argsMeta\n .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${arg.tsType}${arg.hasDefault ? ' | 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.methods) {\n const { methodSig } = getMethodMetadata(method, ctx)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': ${getEquivalentType(method.returns.struct ?? method.returns.type ?? 'void', 'output', ctx)}`,\n )\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.methods.length == 0) {\n yield 'methods: {}'\n } else {\n yield 'methods:'\n }\n yield IncIndent\n for (const method of app.methods) {\n const { methodSig, uniqueName } = getMethodMetadata(method, ctx)\n yield `& Record<'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}'${methodSig !== uniqueName ? ` | '${ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName)}'` : ''}, {`\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 `\n /**\n * Defines the possible abi call signatures.\n */\n export type ${name}Signatures = keyof ${name}Types['methods']\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 * 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* abiTypes(ctx: GeneratorContext): DocumentParts {\n const { app } = ctx\n const abiTypes: string[] = []\n\n const pushType = (type: string) => {\n // If we already have this type, skip\n if (abiTypes.includes(type)) return\n\n // void and string are the same types in TS\n if (['void', 'string'].includes(type)) return\n\n // Skip structs\n if (app.structs[type]) return\n\n // If this is an array type, push the base type\n if (type.match(/\\[\\d*\\]$/)) {\n pushType(type.replace(/\\[\\d*\\]$/, ''))\n return\n }\n\n if (type.startsWith('(')) {\n const tupleType = ABITupleType.from(type) as ABITupleType\n\n tupleType.childTypes.forEach((t) => {\n pushType(t.toString())\n })\n\n return\n }\n\n abiTypes.push(type)\n }\n\n Object.values(app.templateVariables ?? {}).forEach((t) => {\n pushType(t.type)\n })\n\n app.methods.forEach((m) => {\n m.args.forEach((a) => {\n pushType(a.type)\n })\n\n pushType(m.returns.type)\n })\n ;(['global', 'local', 'box'] as ['global', 'local', 'box']).forEach((storageType) => {\n Object.values(app.state.keys[storageType]).forEach((k) => {\n pushType(k.keyType)\n pushType(k.valueType)\n })\n\n Object.values(app.state.maps[storageType]).forEach((m) => {\n pushType(m.keyType)\n pushType(m.valueType)\n })\n })\n\n const pushStructFields = (fields: StructField[]) => {\n fields.forEach((sf) => {\n if (typeof sf.type === 'string' && !app.structs[sf.type]) pushType(sf.type)\n else if (typeof sf.type !== 'string') pushStructFields(sf.type)\n })\n }\n\n Object.values(app.structs).forEach((sf) => {\n pushStructFields(sf)\n })\n\n yield '// Aliases for non-encoded ABI values'\n yield NewLine\n for (const t of abiTypes) {\n yield `type ${t} = ${getEquivalentType(t, 'output', ctx)};`\n }\n yield NewLine\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction getStructAsObject(struct: StructField[]): Record<string, any> {\n return Object.fromEntries(struct.map((s) => [s.name, typeof s.type === 'string' ? s.type : getStructAsObject(s.type)]))\n}\n\nfunction getStructAsTupleTypes(struct: StructField[], ctx: GeneratorContext): string {\n return `[${struct.map((s) => (Array.isArray(s.type) ? getStructAsTupleTypes(s.type, ctx) : getEquivalentType(s.type, 'output', ctx))).join(', ')}]`\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 of Object.keys(app.structs)) {\n // Emit the struct type\n yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${JSON.stringify(\n getStructAsObject(app.structs[structName]),\n null,\n 2,\n )\n .replace(/\"/g, '')\n .replaceAll('(', '[')\n .replaceAll(')', ']')\n .replace(/\\[\\d+\\]/g, '[]')}`\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(\n `export function ${sanitizer.makeSafeTypeIdentifier(structName)}FromTuple(`,\n `abiTuple: ${getStructAsTupleTypes(app.structs[structName], ctx)}`,\n `) {`,\n )\n yield* indent(\n `return getABIStructFromABITuple(abiTuple, APP_SPEC.structs${sanitizer.getSafeMemberAccessor(structName)}, APP_SPEC.structs) as ${sanitizer.makeSafeTypeIdentifier(structName)}`,\n )\n yield '}'\n yield NewLine\n }\n}\n\nfunction* templateVariableTypes({ app }: GeneratorContext): DocumentParts {\n if (Object.keys(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 of Object.keys(app.templateVariables ?? {})) {\n yield `${name}: ${app.templateVariables![name].type},`\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* keysAndMaps(\n app: Arc56Contract,\n sanitizer: Sanitizer,\n keys: {\n [name: string]: StorageKey\n },\n maps: {\n [name: string]: StorageMap\n },\n): DocumentParts {\n if (keys && Object.keys(keys).length) {\n yield 'keys: {'\n yield IncIndent\n for (const name of Object.keys(keys)) {\n const prop = keys[name]\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n\n yield `${keySafe}: ${prop.valueType === 'AVMBytes' ? 'BinaryState' : getEquivalentType(prop.valueType, 'output', { app, sanitizer })}`\n }\n yield DecIndentAndCloseBlock\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<${getEquivalentType(prop.keyType, 'input', { app, sanitizer })}, ${getEquivalentType(prop.valueType, 'output', { app, sanitizer })}>`\n }\n yield DecIndentAndCloseBlock\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) {\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(app, 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(app, 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(app, sanitizer, app.state.keys.box, app.state.maps.box)\n yield DecIndentAndCloseBlock\n }\n yield DecIndentAndCloseBlock\n }\n}\n"],"names":["ABIMethod","getEquivalentType","jsDoc","IncIndent","DecIndentAndCloseBlock","inline","NewLine","DecIndent","ABITupleType","indent"],"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 { getEquivalentType } from './helpers/get-equivalent-type'\nimport algosdk, { ABIMethod } from 'algosdk'\nimport { Arc56Contract, Method, StorageKey, StorageMap, StructField } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { Sanitizer } from '../util/sanitization'\nimport { Expand } from '@algorandfoundation/algokit-utils/types/expand'\n\nfunction getMethodMetadata(method: Method, ctx: GeneratorContext) {\n const { methodSignatureToUniqueName } = ctx\n const methodSig = new ABIMethod(method).getSignature()\n const uniqueName = methodSignatureToUniqueName[methodSig]\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 ?? `arg${i + 1}`,\n isOptional: !!arg.defaultValue || (hasAppCallArgToTheRight && algosdk.abiTypeIsTransaction(arg.type)),\n tsType: getEquivalentType(arg.struct ?? arg.type, 'input', ctx),\n })\n\n if (\n !hasAppCallArgToTheRight &&\n algosdk.abiTypeIsTransaction(arg.type) &&\n [algosdk.ABITransactionType.appl, algosdk.ABITransactionType.any].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.methods) {\n const { methodSig, argsMeta } = getMethodMetadata(method, ctx)\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.methods) {\n const { methodSig, argsMeta } = getMethodMetadata(method, ctx)\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.methods) {\n const { methodSig } = getMethodMetadata(method, ctx)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': ${getEquivalentType(method.returns.struct ?? method.returns.type ?? 'void', 'output', ctx)}`,\n )\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.methods.length == 0) {\n yield 'methods: {}'\n } else {\n yield 'methods:'\n }\n yield IncIndent\n for (const method of app.methods) {\n const { methodSig, uniqueName } = getMethodMetadata(method, ctx)\n yield `& Record<'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}'${methodSig !== uniqueName ? ` | '${ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName)}'` : ''}, {`\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 `\n /**\n * Defines the possible abi call signatures.\n */\n export type ${name}Signatures = keyof ${name}Types['methods']\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 * 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\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction getStructAsObject(struct: StructField[], ctx: GeneratorContext): Record<string, any> {\n return Object.fromEntries(\n struct.map((s) => [s.name, typeof s.type === 'string' ? getEquivalentType(s.type, 'output', ctx) : getStructAsObject(s.type, ctx)]),\n )\n}\n\nfunction getStructAsTupleTypes(struct: StructField[], ctx: GeneratorContext): string {\n return `[${struct.map((s) => (Array.isArray(s.type) ? getStructAsTupleTypes(s.type, ctx) : getEquivalentType(s.type, 'output', ctx))).join(', ')}]`\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 of Object.keys(app.structs)) {\n // Emit the struct type\n\n yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${JSON.stringify(getStructAsObject(app.structs[structName], ctx), null, 2).replace(/\"/g, '')}`\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(\n `export function ${sanitizer.makeSafeTypeIdentifier(structName)}FromTuple(`,\n `abiTuple: ${getStructAsTupleTypes(app.structs[structName], ctx)}`,\n `) {`,\n )\n yield* indent(\n `return getABIStructFromABITuple(abiTuple, APP_SPEC.structs${sanitizer.getSafeMemberAccessor(structName)}, APP_SPEC.structs) as ${sanitizer.makeSafeTypeIdentifier(structName)}`,\n )\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 of Object.keys(ctx.app.templateVariables ?? {})) {\n yield `${name}: ${getEquivalentType(ctx.app.templateVariables![name].type, 'output', ctx)},`\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* keysAndMaps(\n app: Arc56Contract,\n sanitizer: Sanitizer,\n keys: {\n [name: string]: StorageKey\n },\n maps: {\n [name: string]: StorageMap\n },\n): DocumentParts {\n if (keys && Object.keys(keys).length) {\n yield 'keys: {'\n yield IncIndent\n for (const name of Object.keys(keys)) {\n const prop = keys[name]\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n\n yield `${keySafe}: ${prop.valueType === 'AVMBytes' ? 'BinaryState' : getEquivalentType(prop.valueType, 'output', { app, sanitizer })}`\n }\n yield DecIndentAndCloseBlock\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<${getEquivalentType(prop.keyType, 'input', { app, sanitizer })}, ${getEquivalentType(prop.valueType, 'output', { app, sanitizer })}>`\n }\n yield DecIndentAndCloseBlock\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) {\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(app, 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(app, 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(app, sanitizer, app.state.keys.box, app.state.maps.box)\n yield DecIndentAndCloseBlock\n }\n yield DecIndentAndCloseBlock\n }\n}\n"],"names":["ABIMethod","getEquivalentType","jsDoc","IncIndent","DecIndentAndCloseBlock","inline","NewLine","DecIndent","indent"],"mappings":"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"}
|
package/client/app-types.mjs
CHANGED
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
import { jsDoc, IncIndent, DecIndentAndCloseBlock, inline, NewLine, DecIndent, indent } from '../output/writer.mjs';
|
|
2
2
|
import { getEquivalentType } from './helpers/get-equivalent-type.mjs';
|
|
3
|
-
import { ABIMethod
|
|
3
|
+
import algosdk, { ABIMethod } from 'algosdk';
|
|
4
4
|
|
|
5
5
|
function getMethodMetadata(method, ctx) {
|
|
6
6
|
const { methodSignatureToUniqueName } = ctx;
|
|
7
7
|
const methodSig = new ABIMethod(method).getSignature();
|
|
8
8
|
const uniqueName = methodSignatureToUniqueName[methodSig];
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
let hasAppCallArgToTheRight = false;
|
|
10
|
+
const argsMeta = new Array();
|
|
11
|
+
for (let i = (method.args ?? []).length - 1; i >= 0; i--) {
|
|
12
|
+
const arg = method.args[i];
|
|
13
|
+
argsMeta.push({
|
|
14
|
+
...arg,
|
|
15
|
+
name: arg.name ?? `arg${i + 1}`,
|
|
16
|
+
isOptional: !!arg.defaultValue || (hasAppCallArgToTheRight && algosdk.abiTypeIsTransaction(arg.type)),
|
|
17
|
+
tsType: getEquivalentType(arg.struct ?? arg.type, 'input', ctx),
|
|
18
|
+
});
|
|
19
|
+
if (!hasAppCallArgToTheRight &&
|
|
20
|
+
algosdk.abiTypeIsTransaction(arg.type) &&
|
|
21
|
+
[algosdk.ABITransactionType.appl, algosdk.ABITransactionType.any].includes(arg.type)) {
|
|
22
|
+
hasAppCallArgToTheRight = true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
argsMeta.reverse();
|
|
15
26
|
return { methodSig, uniqueName, argsMeta };
|
|
16
27
|
}
|
|
17
28
|
function* appTypes(ctx) {
|
|
18
|
-
yield* abiTypes(ctx);
|
|
19
29
|
yield* structTypes(ctx);
|
|
20
30
|
yield* templateVariableTypes(ctx);
|
|
21
31
|
const { app, name } = ctx;
|
|
@@ -33,7 +43,7 @@ function* appTypes(ctx) {
|
|
|
33
43
|
for (const arg of argsMeta) {
|
|
34
44
|
if (arg.desc)
|
|
35
45
|
yield* jsDoc(arg.desc);
|
|
36
|
-
yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.
|
|
46
|
+
yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.isOptional ? '?' : ''}: ${arg.tsType}`;
|
|
37
47
|
}
|
|
38
48
|
yield DecIndentAndCloseBlock;
|
|
39
49
|
}
|
|
@@ -48,7 +58,7 @@ function* appTypes(ctx) {
|
|
|
48
58
|
for (const method of app.methods) {
|
|
49
59
|
const { methodSig, argsMeta } = getMethodMetadata(method, ctx);
|
|
50
60
|
yield* inline(`'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': [`, argsMeta
|
|
51
|
-
.map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${arg.tsType}${arg.
|
|
61
|
+
.map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${arg.tsType}${arg.isOptional ? ' | undefined' : ''}`)
|
|
52
62
|
.join(', '), ']');
|
|
53
63
|
}
|
|
54
64
|
yield DecIndentAndCloseBlock;
|
|
@@ -149,73 +159,9 @@ function* appTypes(ctx) {
|
|
|
149
159
|
}
|
|
150
160
|
yield NewLine;
|
|
151
161
|
}
|
|
152
|
-
function* abiTypes(ctx) {
|
|
153
|
-
const { app } = ctx;
|
|
154
|
-
const abiTypes = [];
|
|
155
|
-
const pushType = (type) => {
|
|
156
|
-
// If we already have this type, skip
|
|
157
|
-
if (abiTypes.includes(type))
|
|
158
|
-
return;
|
|
159
|
-
// void and string are the same types in TS
|
|
160
|
-
if (['void', 'string'].includes(type))
|
|
161
|
-
return;
|
|
162
|
-
// Skip structs
|
|
163
|
-
if (app.structs[type])
|
|
164
|
-
return;
|
|
165
|
-
// If this is an array type, push the base type
|
|
166
|
-
if (type.match(/\[\d*\]$/)) {
|
|
167
|
-
pushType(type.replace(/\[\d*\]$/, ''));
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
if (type.startsWith('(')) {
|
|
171
|
-
const tupleType = ABITupleType.from(type);
|
|
172
|
-
tupleType.childTypes.forEach((t) => {
|
|
173
|
-
pushType(t.toString());
|
|
174
|
-
});
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
abiTypes.push(type);
|
|
178
|
-
};
|
|
179
|
-
Object.values(app.templateVariables ?? {}).forEach((t) => {
|
|
180
|
-
pushType(t.type);
|
|
181
|
-
});
|
|
182
|
-
app.methods.forEach((m) => {
|
|
183
|
-
m.args.forEach((a) => {
|
|
184
|
-
pushType(a.type);
|
|
185
|
-
});
|
|
186
|
-
pushType(m.returns.type);
|
|
187
|
-
});
|
|
188
|
-
['global', 'local', 'box'].forEach((storageType) => {
|
|
189
|
-
Object.values(app.state.keys[storageType]).forEach((k) => {
|
|
190
|
-
pushType(k.keyType);
|
|
191
|
-
pushType(k.valueType);
|
|
192
|
-
});
|
|
193
|
-
Object.values(app.state.maps[storageType]).forEach((m) => {
|
|
194
|
-
pushType(m.keyType);
|
|
195
|
-
pushType(m.valueType);
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
const pushStructFields = (fields) => {
|
|
199
|
-
fields.forEach((sf) => {
|
|
200
|
-
if (typeof sf.type === 'string' && !app.structs[sf.type])
|
|
201
|
-
pushType(sf.type);
|
|
202
|
-
else if (typeof sf.type !== 'string')
|
|
203
|
-
pushStructFields(sf.type);
|
|
204
|
-
});
|
|
205
|
-
};
|
|
206
|
-
Object.values(app.structs).forEach((sf) => {
|
|
207
|
-
pushStructFields(sf);
|
|
208
|
-
});
|
|
209
|
-
yield '// Aliases for non-encoded ABI values';
|
|
210
|
-
yield NewLine;
|
|
211
|
-
for (const t of abiTypes) {
|
|
212
|
-
yield `type ${t} = ${getEquivalentType(t, 'output', ctx)};`;
|
|
213
|
-
}
|
|
214
|
-
yield NewLine;
|
|
215
|
-
}
|
|
216
162
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
217
|
-
function getStructAsObject(struct) {
|
|
218
|
-
return Object.fromEntries(struct.map((s) => [s.name, typeof s.type === 'string' ? s.type : getStructAsObject(s.type)]));
|
|
163
|
+
function getStructAsObject(struct, ctx) {
|
|
164
|
+
return Object.fromEntries(struct.map((s) => [s.name, typeof s.type === 'string' ? getEquivalentType(s.type, 'output', ctx) : getStructAsObject(s.type, ctx)]));
|
|
219
165
|
}
|
|
220
166
|
function getStructAsTupleTypes(struct, ctx) {
|
|
221
167
|
return `[${struct.map((s) => (Array.isArray(s.type) ? getStructAsTupleTypes(s.type, ctx) : getEquivalentType(s.type, 'output', ctx))).join(', ')}]`;
|
|
@@ -228,11 +174,7 @@ function* structTypes(ctx) {
|
|
|
228
174
|
yield NewLine;
|
|
229
175
|
for (const structName of Object.keys(app.structs)) {
|
|
230
176
|
// Emit the struct type
|
|
231
|
-
yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${JSON.stringify(getStructAsObject(app.structs[structName]), null, 2)
|
|
232
|
-
.replace(/"/g, '')
|
|
233
|
-
.replaceAll('(', '[')
|
|
234
|
-
.replaceAll(')', ']')
|
|
235
|
-
.replace(/\[\d+\]/g, '[]')}`;
|
|
177
|
+
yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${JSON.stringify(getStructAsObject(app.structs[structName], ctx), null, 2).replace(/"/g, '')}`;
|
|
236
178
|
yield NewLine;
|
|
237
179
|
// Emit method that converts ABI tuple to the struct object
|
|
238
180
|
yield* jsDoc(`Converts the ABI tuple representation of a ${structName} to the struct representation`);
|
|
@@ -242,15 +184,15 @@ function* structTypes(ctx) {
|
|
|
242
184
|
yield NewLine;
|
|
243
185
|
}
|
|
244
186
|
}
|
|
245
|
-
function* templateVariableTypes(
|
|
246
|
-
if (Object.keys(app.templateVariables ?? {}).length === 0) {
|
|
187
|
+
function* templateVariableTypes(ctx) {
|
|
188
|
+
if (Object.keys(ctx.app.templateVariables ?? {}).length === 0) {
|
|
247
189
|
return;
|
|
248
190
|
}
|
|
249
191
|
yield* jsDoc('Deploy-time template variables');
|
|
250
192
|
yield 'export type TemplateVariables = {';
|
|
251
193
|
yield IncIndent;
|
|
252
|
-
for (const name of Object.keys(app.templateVariables ?? {})) {
|
|
253
|
-
yield `${name}: ${app.templateVariables[name].type},`;
|
|
194
|
+
for (const name of Object.keys(ctx.app.templateVariables ?? {})) {
|
|
195
|
+
yield `${name}: ${getEquivalentType(ctx.app.templateVariables[name].type, 'output', ctx)},`;
|
|
254
196
|
}
|
|
255
197
|
yield DecIndentAndCloseBlock;
|
|
256
198
|
yield NewLine;
|
package/client/app-types.mjs.map
CHANGED
|
@@ -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, indent, inline, jsDoc, NewLine } from '../output/writer'\nimport { getEquivalentType } from './helpers/get-equivalent-type'\nimport { ABIMethod, ABITupleType } from 'algosdk'\nimport { Arc56Contract, Method, StorageKey, StorageMap, StructField } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { Sanitizer } from '../util/sanitization'\n\nfunction getMethodMetadata(method: Method, ctx: GeneratorContext) {\n const { methodSignatureToUniqueName } = ctx\n const methodSig = new ABIMethod(method).getSignature()\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const argsMeta = method.args.map((arg, i) => ({\n ...arg,\n name: arg.name ?? `arg${i + 1}`,\n hasDefault: !!arg.defaultValue,\n tsType: getEquivalentType(arg.struct ?? arg.type, 'input', ctx),\n }))\n\n return { methodSig, uniqueName, argsMeta }\n}\n\nexport function* appTypes(ctx: GeneratorContext): DocumentParts {\n yield* abiTypes(ctx)\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.methods) {\n const { methodSig, argsMeta } = getMethodMetadata(method, ctx)\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.hasDefault ? '?' : ''}: ${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.methods) {\n const { methodSig, argsMeta } = getMethodMetadata(method, ctx)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': [`,\n argsMeta\n .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${arg.tsType}${arg.hasDefault ? ' | 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.methods) {\n const { methodSig } = getMethodMetadata(method, ctx)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': ${getEquivalentType(method.returns.struct ?? method.returns.type ?? 'void', 'output', ctx)}`,\n )\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.methods.length == 0) {\n yield 'methods: {}'\n } else {\n yield 'methods:'\n }\n yield IncIndent\n for (const method of app.methods) {\n const { methodSig, uniqueName } = getMethodMetadata(method, ctx)\n yield `& Record<'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}'${methodSig !== uniqueName ? ` | '${ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName)}'` : ''}, {`\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 `\n /**\n * Defines the possible abi call signatures.\n */\n export type ${name}Signatures = keyof ${name}Types['methods']\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 * 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* abiTypes(ctx: GeneratorContext): DocumentParts {\n const { app } = ctx\n const abiTypes: string[] = []\n\n const pushType = (type: string) => {\n // If we already have this type, skip\n if (abiTypes.includes(type)) return\n\n // void and string are the same types in TS\n if (['void', 'string'].includes(type)) return\n\n // Skip structs\n if (app.structs[type]) return\n\n // If this is an array type, push the base type\n if (type.match(/\\[\\d*\\]$/)) {\n pushType(type.replace(/\\[\\d*\\]$/, ''))\n return\n }\n\n if (type.startsWith('(')) {\n const tupleType = ABITupleType.from(type) as ABITupleType\n\n tupleType.childTypes.forEach((t) => {\n pushType(t.toString())\n })\n\n return\n }\n\n abiTypes.push(type)\n }\n\n Object.values(app.templateVariables ?? {}).forEach((t) => {\n pushType(t.type)\n })\n\n app.methods.forEach((m) => {\n m.args.forEach((a) => {\n pushType(a.type)\n })\n\n pushType(m.returns.type)\n })\n ;(['global', 'local', 'box'] as ['global', 'local', 'box']).forEach((storageType) => {\n Object.values(app.state.keys[storageType]).forEach((k) => {\n pushType(k.keyType)\n pushType(k.valueType)\n })\n\n Object.values(app.state.maps[storageType]).forEach((m) => {\n pushType(m.keyType)\n pushType(m.valueType)\n })\n })\n\n const pushStructFields = (fields: StructField[]) => {\n fields.forEach((sf) => {\n if (typeof sf.type === 'string' && !app.structs[sf.type]) pushType(sf.type)\n else if (typeof sf.type !== 'string') pushStructFields(sf.type)\n })\n }\n\n Object.values(app.structs).forEach((sf) => {\n pushStructFields(sf)\n })\n\n yield '// Aliases for non-encoded ABI values'\n yield NewLine\n for (const t of abiTypes) {\n yield `type ${t} = ${getEquivalentType(t, 'output', ctx)};`\n }\n yield NewLine\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction getStructAsObject(struct: StructField[]): Record<string, any> {\n return Object.fromEntries(struct.map((s) => [s.name, typeof s.type === 'string' ? s.type : getStructAsObject(s.type)]))\n}\n\nfunction getStructAsTupleTypes(struct: StructField[], ctx: GeneratorContext): string {\n return `[${struct.map((s) => (Array.isArray(s.type) ? getStructAsTupleTypes(s.type, ctx) : getEquivalentType(s.type, 'output', ctx))).join(', ')}]`\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 of Object.keys(app.structs)) {\n // Emit the struct type\n yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${JSON.stringify(\n getStructAsObject(app.structs[structName]),\n null,\n 2,\n )\n .replace(/\"/g, '')\n .replaceAll('(', '[')\n .replaceAll(')', ']')\n .replace(/\\[\\d+\\]/g, '[]')}`\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(\n `export function ${sanitizer.makeSafeTypeIdentifier(structName)}FromTuple(`,\n `abiTuple: ${getStructAsTupleTypes(app.structs[structName], ctx)}`,\n `) {`,\n )\n yield* indent(\n `return getABIStructFromABITuple(abiTuple, APP_SPEC.structs${sanitizer.getSafeMemberAccessor(structName)}, APP_SPEC.structs) as ${sanitizer.makeSafeTypeIdentifier(structName)}`,\n )\n yield '}'\n yield NewLine\n }\n}\n\nfunction* templateVariableTypes({ app }: GeneratorContext): DocumentParts {\n if (Object.keys(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 of Object.keys(app.templateVariables ?? {})) {\n yield `${name}: ${app.templateVariables![name].type},`\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* keysAndMaps(\n app: Arc56Contract,\n sanitizer: Sanitizer,\n keys: {\n [name: string]: StorageKey\n },\n maps: {\n [name: string]: StorageMap\n },\n): DocumentParts {\n if (keys && Object.keys(keys).length) {\n yield 'keys: {'\n yield IncIndent\n for (const name of Object.keys(keys)) {\n const prop = keys[name]\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n\n yield `${keySafe}: ${prop.valueType === 'AVMBytes' ? 'BinaryState' : getEquivalentType(prop.valueType, 'output', { app, sanitizer })}`\n }\n yield DecIndentAndCloseBlock\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<${getEquivalentType(prop.keyType, 'input', { app, sanitizer })}, ${getEquivalentType(prop.valueType, 'output', { app, sanitizer })}>`\n }\n yield DecIndentAndCloseBlock\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) {\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(app, 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(app, 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(app, 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 { getEquivalentType } from './helpers/get-equivalent-type'\nimport algosdk, { ABIMethod } from 'algosdk'\nimport { Arc56Contract, Method, StorageKey, StorageMap, StructField } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { Sanitizer } from '../util/sanitization'\nimport { Expand } from '@algorandfoundation/algokit-utils/types/expand'\n\nfunction getMethodMetadata(method: Method, ctx: GeneratorContext) {\n const { methodSignatureToUniqueName } = ctx\n const methodSig = new ABIMethod(method).getSignature()\n const uniqueName = methodSignatureToUniqueName[methodSig]\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 ?? `arg${i + 1}`,\n isOptional: !!arg.defaultValue || (hasAppCallArgToTheRight && algosdk.abiTypeIsTransaction(arg.type)),\n tsType: getEquivalentType(arg.struct ?? arg.type, 'input', ctx),\n })\n\n if (\n !hasAppCallArgToTheRight &&\n algosdk.abiTypeIsTransaction(arg.type) &&\n [algosdk.ABITransactionType.appl, algosdk.ABITransactionType.any].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.methods) {\n const { methodSig, argsMeta } = getMethodMetadata(method, ctx)\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.methods) {\n const { methodSig, argsMeta } = getMethodMetadata(method, ctx)\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.methods) {\n const { methodSig } = getMethodMetadata(method, ctx)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': ${getEquivalentType(method.returns.struct ?? method.returns.type ?? 'void', 'output', ctx)}`,\n )\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.methods.length == 0) {\n yield 'methods: {}'\n } else {\n yield 'methods:'\n }\n yield IncIndent\n for (const method of app.methods) {\n const { methodSig, uniqueName } = getMethodMetadata(method, ctx)\n yield `& Record<'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}'${methodSig !== uniqueName ? ` | '${ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName)}'` : ''}, {`\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 `\n /**\n * Defines the possible abi call signatures.\n */\n export type ${name}Signatures = keyof ${name}Types['methods']\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 * 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\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction getStructAsObject(struct: StructField[], ctx: GeneratorContext): Record<string, any> {\n return Object.fromEntries(\n struct.map((s) => [s.name, typeof s.type === 'string' ? getEquivalentType(s.type, 'output', ctx) : getStructAsObject(s.type, ctx)]),\n )\n}\n\nfunction getStructAsTupleTypes(struct: StructField[], ctx: GeneratorContext): string {\n return `[${struct.map((s) => (Array.isArray(s.type) ? getStructAsTupleTypes(s.type, ctx) : getEquivalentType(s.type, 'output', ctx))).join(', ')}]`\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 of Object.keys(app.structs)) {\n // Emit the struct type\n\n yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${JSON.stringify(getStructAsObject(app.structs[structName], ctx), null, 2).replace(/\"/g, '')}`\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(\n `export function ${sanitizer.makeSafeTypeIdentifier(structName)}FromTuple(`,\n `abiTuple: ${getStructAsTupleTypes(app.structs[structName], ctx)}`,\n `) {`,\n )\n yield* indent(\n `return getABIStructFromABITuple(abiTuple, APP_SPEC.structs${sanitizer.getSafeMemberAccessor(structName)}, APP_SPEC.structs) as ${sanitizer.makeSafeTypeIdentifier(structName)}`,\n )\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 of Object.keys(ctx.app.templateVariables ?? {})) {\n yield `${name}: ${getEquivalentType(ctx.app.templateVariables![name].type, 'output', ctx)},`\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* keysAndMaps(\n app: Arc56Contract,\n sanitizer: Sanitizer,\n keys: {\n [name: string]: StorageKey\n },\n maps: {\n [name: string]: StorageMap\n },\n): DocumentParts {\n if (keys && Object.keys(keys).length) {\n yield 'keys: {'\n yield IncIndent\n for (const name of Object.keys(keys)) {\n const prop = keys[name]\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n\n yield `${keySafe}: ${prop.valueType === 'AVMBytes' ? 'BinaryState' : getEquivalentType(prop.valueType, 'output', { app, sanitizer })}`\n }\n yield DecIndentAndCloseBlock\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<${getEquivalentType(prop.keyType, 'input', { app, sanitizer })}, ${getEquivalentType(prop.valueType, 'output', { app, sanitizer })}>`\n }\n yield DecIndentAndCloseBlock\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) {\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(app, 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(app, 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(app, 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
|
@@ -14,6 +14,7 @@ function* imports() {
|
|
|
14
14
|
AppClientCompilationParams,
|
|
15
15
|
ResolveAppClientByCreatorAndName,
|
|
16
16
|
ResolveAppClientByNetwork,
|
|
17
|
+
CloneAppClientParams,
|
|
17
18
|
} from '@algorandfoundation/algokit-utils/types/app-client'
|
|
18
19
|
import { AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'
|
|
19
20
|
import AlgoKitComposer, { AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'
|
package/client/imports.js.map
CHANGED
|
@@ -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 `\n import { AlgorandClientInterface } from '@algorandfoundation/algokit-utils/types/algorand-client-interface'\n import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\n import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\n import {\n AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n } from '@algorandfoundation/algokit-utils/types/app-client'\n import { AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\n import AlgoKitComposer, { AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\n import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\n import { modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n import SimulateResponse = modelsv2.SimulateResponse\n `\n}\n"],"names":[],"mappings":";;AAEM,UAAW,OAAO,GAAA;IACtB,MAAM,CAAA
|
|
1
|
+
{"version":3,"file":"imports.js","sources":["../../src/client/imports.ts"],"sourcesContent":["import { DocumentParts } from '../output/writer'\n\nexport function* imports(): DocumentParts {\n yield `\n import { AlgorandClientInterface } from '@algorandfoundation/algokit-utils/types/algorand-client-interface'\n import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\n import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\n import {\n AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n } from '@algorandfoundation/algokit-utils/types/app-client'\n import { AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\n import AlgoKitComposer, { AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\n import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\n import { modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n import SimulateResponse = modelsv2.SimulateResponse\n `\n}\n"],"names":[],"mappings":";;AAEM,UAAW,OAAO,GAAA;IACtB,MAAM,CAAA;;;;;;;;;;;;;;;;;;;;GAoBL,CAAA;AACH;;;;"}
|
package/client/imports.mjs
CHANGED
|
@@ -12,6 +12,7 @@ function* imports() {
|
|
|
12
12
|
AppClientCompilationParams,
|
|
13
13
|
ResolveAppClientByCreatorAndName,
|
|
14
14
|
ResolveAppClientByNetwork,
|
|
15
|
+
CloneAppClientParams,
|
|
15
16
|
} from '@algorandfoundation/algokit-utils/types/app-client'
|
|
16
17
|
import { AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'
|
|
17
18
|
import AlgoKitComposer, { AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'
|
package/client/imports.mjs.map
CHANGED
|
@@ -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 `\n import { AlgorandClientInterface } from '@algorandfoundation/algokit-utils/types/algorand-client-interface'\n import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\n import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\n import {\n AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n } from '@algorandfoundation/algokit-utils/types/app-client'\n import { AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\n import AlgoKitComposer, { AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\n import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\n import { modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n import SimulateResponse = modelsv2.SimulateResponse\n `\n}\n"],"names":[],"mappings":"AAEM,UAAW,OAAO,GAAA;IACtB,MAAM,CAAA
|
|
1
|
+
{"version":3,"file":"imports.mjs","sources":["../../src/client/imports.ts"],"sourcesContent":["import { DocumentParts } from '../output/writer'\n\nexport function* imports(): DocumentParts {\n yield `\n import { AlgorandClientInterface } from '@algorandfoundation/algokit-utils/types/algorand-client-interface'\n import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\n import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\n import {\n AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n } from '@algorandfoundation/algokit-utils/types/app-client'\n import { AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\n import AlgoKitComposer, { AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\n import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\n import { modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n import SimulateResponse = modelsv2.SimulateResponse\n `\n}\n"],"names":[],"mappings":"AAEM,UAAW,OAAO,GAAA;IACtB,MAAM,CAAA;;;;;;;;;;;;;;;;;;;;GAoBL,CAAA;AACH;;;;"}
|
package/client/params-factory.js
CHANGED
|
@@ -45,7 +45,7 @@ function* operationMethod(ctx, description, methods, verb, includeCompilation) {
|
|
|
45
45
|
yield `case '${sanitizer.makeSafeStringTypeLiteral(uniqueName)}':`;
|
|
46
46
|
}
|
|
47
47
|
yield `case '${sanitizer.makeSafeStringTypeLiteral(methodSig)}':`;
|
|
48
|
-
yield* writer.indent(`return ${ctx.name}ParamsFactory.${verb}
|
|
48
|
+
yield* writer.indent(`return ${ctx.name}ParamsFactory.${verb}${sanitizer.getSafeMemberAccessor(sanitizer.makeSafeMethodIdentifier(uniqueName))}(params)`);
|
|
49
49
|
}
|
|
50
50
|
yield writer.DecIndentAndCloseBlock;
|
|
51
51
|
// Ordinarily we'd pop in the params.method value, but we can't here since it knows at compile time the type of params.method is never
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"params-factory.js","sources":["../../src/client/params-factory.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { GeneratorContext } from './generator-context'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { getCreateOnCompleteOptions } from './deploy-types'\nimport { Sanitizer } from '../util/sanitization'\nimport { Method } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { ABIMethod } from 'algosdk'\n\nexport function* paramsFactory(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Exposes methods for constructing \\`AppClient\\` params objects for ABI calls to the ${ctx.name} smart contract`)\n yield `export abstract class ${ctx.name}ParamsFactory {`\n yield IncIndent\n\n yield* opMethods(ctx)\n\n for (const method of ctx.app.methods) {\n yield* callFactoryMethod(ctx, method)\n }\n\n yield DecIndent\n\n yield '}'\n}\n\nfunction* opMethods(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig } = ctx\n\n yield* operationMethod(\n ctx,\n `Constructs create ABI call params for the ${app.name} smart contract`,\n callConfig.createMethods,\n 'create',\n true,\n )\n yield* operationMethod(\n ctx,\n `Constructs update ABI call params for the ${app.name} smart contract`,\n callConfig.updateMethods,\n 'update',\n true,\n )\n yield* operationMethod(ctx, `Constructs delete ABI call params for the ${app.name} smart contract`, callConfig.deleteMethods, 'delete')\n yield* operationMethod(ctx, `Constructs opt-in ABI call params for the ${app.name} smart contract`, callConfig.optInMethods, 'optIn')\n yield* operationMethod(\n ctx,\n `Constructs close out ABI call params for the ${app.name} smart contract`,\n callConfig.closeOutMethods,\n 'closeOut',\n )\n}\n\nfunction* operationMethod(\n ctx: GeneratorContext,\n description: string,\n methods: MethodList,\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete',\n includeCompilation?: boolean,\n): DocumentParts {\n const { app, methodSignatureToUniqueName, sanitizer, name } = ctx\n if (methods.length > 0 && methods.some((m) => m !== BARE_CALL)) {\n yield* jsDoc(`Gets available ${verb} ABI call param factories`)\n yield `static get ${verb}() {`\n yield IncIndent\n yield `return {`\n yield IncIndent\n\n if (['create', 'update', 'delete'].includes(verb)) {\n yield `_resolveByMethod<TParams extends ${ctx.name}${verb[0].toUpperCase()}${verb.substring(1)}CallParams & {method: string}>(params: TParams) {`\n yield IncIndent\n yield `switch(params.method) {`\n yield IncIndent\n\n for (const methodSig of methods) {\n if (methodSig === BARE_CALL) continue\n\n const uniqueName = methodSignatureToUniqueName[methodSig]\n if (uniqueName !== methodSig) {\n yield `case '${sanitizer.makeSafeStringTypeLiteral(uniqueName)}':`\n }\n yield `case '${sanitizer.makeSafeStringTypeLiteral(methodSig)}':`\n yield* indent(`return ${ctx.name}ParamsFactory.${verb}.${sanitizer.makeSafeMethodIdentifier(uniqueName)}(params)`)\n }\n yield DecIndentAndCloseBlock\n\n // Ordinarily we'd pop in the params.method value, but we can't here since it knows at compile time the type of params.method is never\n yield `throw new Error(\\`Unknown ' + verb + ' method\\`)`\n yield DecIndent\n yield '},'\n yield NewLine\n }\n\n for (const methodSig of methods) {\n const onComplete = verb === 'create' ? getCreateOnCompleteOptions(methodSig, app) : undefined\n if (methodSig !== BARE_CALL) {\n const method = app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n const uniqueName = methodSignatureToUniqueName[methodSig]\n yield* jsDoc({\n description: `${description} using the ${methodSig} ABI method`,\n params: {\n params: `Parameters for the call`,\n },\n returns: 'An `AppClientMethodCallParams` object for the call',\n })\n yield* factoryMethod({\n isNested: true,\n sanitizer,\n name: sanitizer.makeSafeMethodIdentifier(uniqueName),\n signature: methodSig,\n args: method.args,\n additionalParamTypes: `${includeCompilation ? ' & AppClientCompilationParams' : ''}${\n onComplete?.type ? ` & ${onComplete.type}` : ''\n }`,\n contractName: name,\n })\n }\n }\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield NewLine\n }\n}\n\nfunction* callFactoryMethod({ methodSignatureToUniqueName, callConfig, sanitizer, name }: GeneratorContext, method: Method) {\n const methodSignature = new ABIMethod(method).getSignature()\n if (!callConfig.callMethods.includes(methodSignature)) return\n\n yield* jsDoc({\n description: `Constructs a no op call for the ${methodSignature} ABI method`,\n abiDescription: method.desc,\n params: {\n params: `Parameters for the call`,\n },\n returns: 'An `AppClientMethodCallParams` object for the call',\n })\n yield* factoryMethod({\n isNested: false,\n sanitizer,\n name: sanitizer.makeSafeMethodIdentifier(methodSignatureToUniqueName[methodSignature]),\n signature: methodSignature,\n args: method.args,\n additionalParamTypes: ' & CallOnComplete',\n contractName: name,\n })\n}\n\nfunction* factoryMethod(m: {\n isNested: boolean\n name?: string\n signature: string\n args: Array<{ name?: string }>\n additionalParamTypes?: string\n sanitizer: Sanitizer\n contractName: string\n}) {\n const { isNested, name, signature, args, additionalParamTypes, sanitizer, contractName } = m\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(signature)\n yield `${isNested ? '' : 'static '}${name}(params: CallParams<${contractName}Args['obj']['${methodSigSafe}'] | ${contractName}Args['tuple']['${methodSigSafe}']>${additionalParamTypes}): AppClientMethodCallParams${additionalParamTypes} {`\n yield IncIndent\n yield `return {`\n yield IncIndent\n yield '...params,'\n yield `method: '${methodSigSafe}' as const,`\n yield `args: Array.isArray(params.args) ? params.args : [${args\n .map((a, i) => `params.args${sanitizer.getSafeMemberAccessor(sanitizer.makeSafePropertyIdentifier(a.name ?? `arg${i + 1}`))}`)\n .join(', ')}],`\n yield DecIndent\n yield '}'\n yield DecIndent\n yield `}${isNested ? ',' : ''}`\n}\n"],"names":["jsDoc","IncIndent","DecIndent","BARE_CALL","indent","DecIndentAndCloseBlock","NewLine","getCreateOnCompleteOptions","ABIMethod"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"params-factory.js","sources":["../../src/client/params-factory.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { GeneratorContext } from './generator-context'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { getCreateOnCompleteOptions } from './deploy-types'\nimport { Sanitizer } from '../util/sanitization'\nimport { Method } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { ABIMethod } from 'algosdk'\n\nexport function* paramsFactory(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Exposes methods for constructing \\`AppClient\\` params objects for ABI calls to the ${ctx.name} smart contract`)\n yield `export abstract class ${ctx.name}ParamsFactory {`\n yield IncIndent\n\n yield* opMethods(ctx)\n\n for (const method of ctx.app.methods) {\n yield* callFactoryMethod(ctx, method)\n }\n\n yield DecIndent\n\n yield '}'\n}\n\nfunction* opMethods(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig } = ctx\n\n yield* operationMethod(\n ctx,\n `Constructs create ABI call params for the ${app.name} smart contract`,\n callConfig.createMethods,\n 'create',\n true,\n )\n yield* operationMethod(\n ctx,\n `Constructs update ABI call params for the ${app.name} smart contract`,\n callConfig.updateMethods,\n 'update',\n true,\n )\n yield* operationMethod(ctx, `Constructs delete ABI call params for the ${app.name} smart contract`, callConfig.deleteMethods, 'delete')\n yield* operationMethod(ctx, `Constructs opt-in ABI call params for the ${app.name} smart contract`, callConfig.optInMethods, 'optIn')\n yield* operationMethod(\n ctx,\n `Constructs close out ABI call params for the ${app.name} smart contract`,\n callConfig.closeOutMethods,\n 'closeOut',\n )\n}\n\nfunction* operationMethod(\n ctx: GeneratorContext,\n description: string,\n methods: MethodList,\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete',\n includeCompilation?: boolean,\n): DocumentParts {\n const { app, methodSignatureToUniqueName, sanitizer, name } = ctx\n if (methods.length > 0 && methods.some((m) => m !== BARE_CALL)) {\n yield* jsDoc(`Gets available ${verb} ABI call param factories`)\n yield `static get ${verb}() {`\n yield IncIndent\n yield `return {`\n yield IncIndent\n\n if (['create', 'update', 'delete'].includes(verb)) {\n yield `_resolveByMethod<TParams extends ${ctx.name}${verb[0].toUpperCase()}${verb.substring(1)}CallParams & {method: string}>(params: TParams) {`\n yield IncIndent\n yield `switch(params.method) {`\n yield IncIndent\n\n for (const methodSig of methods) {\n if (methodSig === BARE_CALL) continue\n\n const uniqueName = methodSignatureToUniqueName[methodSig]\n if (uniqueName !== methodSig) {\n yield `case '${sanitizer.makeSafeStringTypeLiteral(uniqueName)}':`\n }\n yield `case '${sanitizer.makeSafeStringTypeLiteral(methodSig)}':`\n yield* indent(\n `return ${ctx.name}ParamsFactory.${verb}${sanitizer.getSafeMemberAccessor(sanitizer.makeSafeMethodIdentifier(uniqueName))}(params)`,\n )\n }\n yield DecIndentAndCloseBlock\n\n // Ordinarily we'd pop in the params.method value, but we can't here since it knows at compile time the type of params.method is never\n yield `throw new Error(\\`Unknown ' + verb + ' method\\`)`\n yield DecIndent\n yield '},'\n yield NewLine\n }\n\n for (const methodSig of methods) {\n const onComplete = verb === 'create' ? getCreateOnCompleteOptions(methodSig, app) : undefined\n if (methodSig !== BARE_CALL) {\n const method = app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n const uniqueName = methodSignatureToUniqueName[methodSig]\n yield* jsDoc({\n description: `${description} using the ${methodSig} ABI method`,\n params: {\n params: `Parameters for the call`,\n },\n returns: 'An `AppClientMethodCallParams` object for the call',\n })\n yield* factoryMethod({\n isNested: true,\n sanitizer,\n name: sanitizer.makeSafeMethodIdentifier(uniqueName),\n signature: methodSig,\n args: method.args,\n additionalParamTypes: `${includeCompilation ? ' & AppClientCompilationParams' : ''}${\n onComplete?.type ? ` & ${onComplete.type}` : ''\n }`,\n contractName: name,\n })\n }\n }\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield NewLine\n }\n}\n\nfunction* callFactoryMethod({ methodSignatureToUniqueName, callConfig, sanitizer, name }: GeneratorContext, method: Method) {\n const methodSignature = new ABIMethod(method).getSignature()\n if (!callConfig.callMethods.includes(methodSignature)) return\n\n yield* jsDoc({\n description: `Constructs a no op call for the ${methodSignature} ABI method`,\n abiDescription: method.desc,\n params: {\n params: `Parameters for the call`,\n },\n returns: 'An `AppClientMethodCallParams` object for the call',\n })\n yield* factoryMethod({\n isNested: false,\n sanitizer,\n name: sanitizer.makeSafeMethodIdentifier(methodSignatureToUniqueName[methodSignature]),\n signature: methodSignature,\n args: method.args,\n additionalParamTypes: ' & CallOnComplete',\n contractName: name,\n })\n}\n\nfunction* factoryMethod(m: {\n isNested: boolean\n name?: string\n signature: string\n args: Array<{ name?: string }>\n additionalParamTypes?: string\n sanitizer: Sanitizer\n contractName: string\n}) {\n const { isNested, name, signature, args, additionalParamTypes, sanitizer, contractName } = m\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(signature)\n yield `${isNested ? '' : 'static '}${name}(params: CallParams<${contractName}Args['obj']['${methodSigSafe}'] | ${contractName}Args['tuple']['${methodSigSafe}']>${additionalParamTypes}): AppClientMethodCallParams${additionalParamTypes} {`\n yield IncIndent\n yield `return {`\n yield IncIndent\n yield '...params,'\n yield `method: '${methodSigSafe}' as const,`\n yield `args: Array.isArray(params.args) ? params.args : [${args\n .map((a, i) => `params.args${sanitizer.getSafeMemberAccessor(sanitizer.makeSafePropertyIdentifier(a.name ?? `arg${i + 1}`))}`)\n .join(', ')}],`\n yield DecIndent\n yield '}'\n yield DecIndent\n yield `}${isNested ? ',' : ''}`\n}\n"],"names":["jsDoc","IncIndent","DecIndent","BARE_CALL","indent","DecIndentAndCloseBlock","NewLine","getCreateOnCompleteOptions","ABIMethod"],"mappings":"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"}
|
|
@@ -43,7 +43,7 @@ function* operationMethod(ctx, description, methods, verb, includeCompilation) {
|
|
|
43
43
|
yield `case '${sanitizer.makeSafeStringTypeLiteral(uniqueName)}':`;
|
|
44
44
|
}
|
|
45
45
|
yield `case '${sanitizer.makeSafeStringTypeLiteral(methodSig)}':`;
|
|
46
|
-
yield* indent(`return ${ctx.name}ParamsFactory.${verb}
|
|
46
|
+
yield* indent(`return ${ctx.name}ParamsFactory.${verb}${sanitizer.getSafeMemberAccessor(sanitizer.makeSafeMethodIdentifier(uniqueName))}(params)`);
|
|
47
47
|
}
|
|
48
48
|
yield DecIndentAndCloseBlock;
|
|
49
49
|
// Ordinarily we'd pop in the params.method value, but we can't here since it knows at compile time the type of params.method is never
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"params-factory.mjs","sources":["../../src/client/params-factory.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { GeneratorContext } from './generator-context'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { getCreateOnCompleteOptions } from './deploy-types'\nimport { Sanitizer } from '../util/sanitization'\nimport { Method } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { ABIMethod } from 'algosdk'\n\nexport function* paramsFactory(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Exposes methods for constructing \\`AppClient\\` params objects for ABI calls to the ${ctx.name} smart contract`)\n yield `export abstract class ${ctx.name}ParamsFactory {`\n yield IncIndent\n\n yield* opMethods(ctx)\n\n for (const method of ctx.app.methods) {\n yield* callFactoryMethod(ctx, method)\n }\n\n yield DecIndent\n\n yield '}'\n}\n\nfunction* opMethods(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig } = ctx\n\n yield* operationMethod(\n ctx,\n `Constructs create ABI call params for the ${app.name} smart contract`,\n callConfig.createMethods,\n 'create',\n true,\n )\n yield* operationMethod(\n ctx,\n `Constructs update ABI call params for the ${app.name} smart contract`,\n callConfig.updateMethods,\n 'update',\n true,\n )\n yield* operationMethod(ctx, `Constructs delete ABI call params for the ${app.name} smart contract`, callConfig.deleteMethods, 'delete')\n yield* operationMethod(ctx, `Constructs opt-in ABI call params for the ${app.name} smart contract`, callConfig.optInMethods, 'optIn')\n yield* operationMethod(\n ctx,\n `Constructs close out ABI call params for the ${app.name} smart contract`,\n callConfig.closeOutMethods,\n 'closeOut',\n )\n}\n\nfunction* operationMethod(\n ctx: GeneratorContext,\n description: string,\n methods: MethodList,\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete',\n includeCompilation?: boolean,\n): DocumentParts {\n const { app, methodSignatureToUniqueName, sanitizer, name } = ctx\n if (methods.length > 0 && methods.some((m) => m !== BARE_CALL)) {\n yield* jsDoc(`Gets available ${verb} ABI call param factories`)\n yield `static get ${verb}() {`\n yield IncIndent\n yield `return {`\n yield IncIndent\n\n if (['create', 'update', 'delete'].includes(verb)) {\n yield `_resolveByMethod<TParams extends ${ctx.name}${verb[0].toUpperCase()}${verb.substring(1)}CallParams & {method: string}>(params: TParams) {`\n yield IncIndent\n yield `switch(params.method) {`\n yield IncIndent\n\n for (const methodSig of methods) {\n if (methodSig === BARE_CALL) continue\n\n const uniqueName = methodSignatureToUniqueName[methodSig]\n if (uniqueName !== methodSig) {\n yield `case '${sanitizer.makeSafeStringTypeLiteral(uniqueName)}':`\n }\n yield `case '${sanitizer.makeSafeStringTypeLiteral(methodSig)}':`\n yield* indent(`return ${ctx.name}ParamsFactory.${verb}.${sanitizer.makeSafeMethodIdentifier(uniqueName)}(params)`)\n }\n yield DecIndentAndCloseBlock\n\n // Ordinarily we'd pop in the params.method value, but we can't here since it knows at compile time the type of params.method is never\n yield `throw new Error(\\`Unknown ' + verb + ' method\\`)`\n yield DecIndent\n yield '},'\n yield NewLine\n }\n\n for (const methodSig of methods) {\n const onComplete = verb === 'create' ? getCreateOnCompleteOptions(methodSig, app) : undefined\n if (methodSig !== BARE_CALL) {\n const method = app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n const uniqueName = methodSignatureToUniqueName[methodSig]\n yield* jsDoc({\n description: `${description} using the ${methodSig} ABI method`,\n params: {\n params: `Parameters for the call`,\n },\n returns: 'An `AppClientMethodCallParams` object for the call',\n })\n yield* factoryMethod({\n isNested: true,\n sanitizer,\n name: sanitizer.makeSafeMethodIdentifier(uniqueName),\n signature: methodSig,\n args: method.args,\n additionalParamTypes: `${includeCompilation ? ' & AppClientCompilationParams' : ''}${\n onComplete?.type ? ` & ${onComplete.type}` : ''\n }`,\n contractName: name,\n })\n }\n }\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield NewLine\n }\n}\n\nfunction* callFactoryMethod({ methodSignatureToUniqueName, callConfig, sanitizer, name }: GeneratorContext, method: Method) {\n const methodSignature = new ABIMethod(method).getSignature()\n if (!callConfig.callMethods.includes(methodSignature)) return\n\n yield* jsDoc({\n description: `Constructs a no op call for the ${methodSignature} ABI method`,\n abiDescription: method.desc,\n params: {\n params: `Parameters for the call`,\n },\n returns: 'An `AppClientMethodCallParams` object for the call',\n })\n yield* factoryMethod({\n isNested: false,\n sanitizer,\n name: sanitizer.makeSafeMethodIdentifier(methodSignatureToUniqueName[methodSignature]),\n signature: methodSignature,\n args: method.args,\n additionalParamTypes: ' & CallOnComplete',\n contractName: name,\n })\n}\n\nfunction* factoryMethod(m: {\n isNested: boolean\n name?: string\n signature: string\n args: Array<{ name?: string }>\n additionalParamTypes?: string\n sanitizer: Sanitizer\n contractName: string\n}) {\n const { isNested, name, signature, args, additionalParamTypes, sanitizer, contractName } = m\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(signature)\n yield `${isNested ? '' : 'static '}${name}(params: CallParams<${contractName}Args['obj']['${methodSigSafe}'] | ${contractName}Args['tuple']['${methodSigSafe}']>${additionalParamTypes}): AppClientMethodCallParams${additionalParamTypes} {`\n yield IncIndent\n yield `return {`\n yield IncIndent\n yield '...params,'\n yield `method: '${methodSigSafe}' as const,`\n yield `args: Array.isArray(params.args) ? params.args : [${args\n .map((a, i) => `params.args${sanitizer.getSafeMemberAccessor(sanitizer.makeSafePropertyIdentifier(a.name ?? `arg${i + 1}`))}`)\n .join(', ')}],`\n yield DecIndent\n yield '}'\n yield DecIndent\n yield `}${isNested ? ',' : ''}`\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"params-factory.mjs","sources":["../../src/client/params-factory.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { GeneratorContext } from './generator-context'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { getCreateOnCompleteOptions } from './deploy-types'\nimport { Sanitizer } from '../util/sanitization'\nimport { Method } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { ABIMethod } from 'algosdk'\n\nexport function* paramsFactory(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Exposes methods for constructing \\`AppClient\\` params objects for ABI calls to the ${ctx.name} smart contract`)\n yield `export abstract class ${ctx.name}ParamsFactory {`\n yield IncIndent\n\n yield* opMethods(ctx)\n\n for (const method of ctx.app.methods) {\n yield* callFactoryMethod(ctx, method)\n }\n\n yield DecIndent\n\n yield '}'\n}\n\nfunction* opMethods(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig } = ctx\n\n yield* operationMethod(\n ctx,\n `Constructs create ABI call params for the ${app.name} smart contract`,\n callConfig.createMethods,\n 'create',\n true,\n )\n yield* operationMethod(\n ctx,\n `Constructs update ABI call params for the ${app.name} smart contract`,\n callConfig.updateMethods,\n 'update',\n true,\n )\n yield* operationMethod(ctx, `Constructs delete ABI call params for the ${app.name} smart contract`, callConfig.deleteMethods, 'delete')\n yield* operationMethod(ctx, `Constructs opt-in ABI call params for the ${app.name} smart contract`, callConfig.optInMethods, 'optIn')\n yield* operationMethod(\n ctx,\n `Constructs close out ABI call params for the ${app.name} smart contract`,\n callConfig.closeOutMethods,\n 'closeOut',\n )\n}\n\nfunction* operationMethod(\n ctx: GeneratorContext,\n description: string,\n methods: MethodList,\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete',\n includeCompilation?: boolean,\n): DocumentParts {\n const { app, methodSignatureToUniqueName, sanitizer, name } = ctx\n if (methods.length > 0 && methods.some((m) => m !== BARE_CALL)) {\n yield* jsDoc(`Gets available ${verb} ABI call param factories`)\n yield `static get ${verb}() {`\n yield IncIndent\n yield `return {`\n yield IncIndent\n\n if (['create', 'update', 'delete'].includes(verb)) {\n yield `_resolveByMethod<TParams extends ${ctx.name}${verb[0].toUpperCase()}${verb.substring(1)}CallParams & {method: string}>(params: TParams) {`\n yield IncIndent\n yield `switch(params.method) {`\n yield IncIndent\n\n for (const methodSig of methods) {\n if (methodSig === BARE_CALL) continue\n\n const uniqueName = methodSignatureToUniqueName[methodSig]\n if (uniqueName !== methodSig) {\n yield `case '${sanitizer.makeSafeStringTypeLiteral(uniqueName)}':`\n }\n yield `case '${sanitizer.makeSafeStringTypeLiteral(methodSig)}':`\n yield* indent(\n `return ${ctx.name}ParamsFactory.${verb}${sanitizer.getSafeMemberAccessor(sanitizer.makeSafeMethodIdentifier(uniqueName))}(params)`,\n )\n }\n yield DecIndentAndCloseBlock\n\n // Ordinarily we'd pop in the params.method value, but we can't here since it knows at compile time the type of params.method is never\n yield `throw new Error(\\`Unknown ' + verb + ' method\\`)`\n yield DecIndent\n yield '},'\n yield NewLine\n }\n\n for (const methodSig of methods) {\n const onComplete = verb === 'create' ? getCreateOnCompleteOptions(methodSig, app) : undefined\n if (methodSig !== BARE_CALL) {\n const method = app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n const uniqueName = methodSignatureToUniqueName[methodSig]\n yield* jsDoc({\n description: `${description} using the ${methodSig} ABI method`,\n params: {\n params: `Parameters for the call`,\n },\n returns: 'An `AppClientMethodCallParams` object for the call',\n })\n yield* factoryMethod({\n isNested: true,\n sanitizer,\n name: sanitizer.makeSafeMethodIdentifier(uniqueName),\n signature: methodSig,\n args: method.args,\n additionalParamTypes: `${includeCompilation ? ' & AppClientCompilationParams' : ''}${\n onComplete?.type ? ` & ${onComplete.type}` : ''\n }`,\n contractName: name,\n })\n }\n }\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield NewLine\n }\n}\n\nfunction* callFactoryMethod({ methodSignatureToUniqueName, callConfig, sanitizer, name }: GeneratorContext, method: Method) {\n const methodSignature = new ABIMethod(method).getSignature()\n if (!callConfig.callMethods.includes(methodSignature)) return\n\n yield* jsDoc({\n description: `Constructs a no op call for the ${methodSignature} ABI method`,\n abiDescription: method.desc,\n params: {\n params: `Parameters for the call`,\n },\n returns: 'An `AppClientMethodCallParams` object for the call',\n })\n yield* factoryMethod({\n isNested: false,\n sanitizer,\n name: sanitizer.makeSafeMethodIdentifier(methodSignatureToUniqueName[methodSignature]),\n signature: methodSignature,\n args: method.args,\n additionalParamTypes: ' & CallOnComplete',\n contractName: name,\n })\n}\n\nfunction* factoryMethod(m: {\n isNested: boolean\n name?: string\n signature: string\n args: Array<{ name?: string }>\n additionalParamTypes?: string\n sanitizer: Sanitizer\n contractName: string\n}) {\n const { isNested, name, signature, args, additionalParamTypes, sanitizer, contractName } = m\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(signature)\n yield `${isNested ? '' : 'static '}${name}(params: CallParams<${contractName}Args['obj']['${methodSigSafe}'] | ${contractName}Args['tuple']['${methodSigSafe}']>${additionalParamTypes}): AppClientMethodCallParams${additionalParamTypes} {`\n yield IncIndent\n yield `return {`\n yield IncIndent\n yield '...params,'\n yield `method: '${methodSigSafe}' as const,`\n yield `args: Array.isArray(params.args) ? params.args : [${args\n .map((a, i) => `params.args${sanitizer.getSafeMemberAccessor(sanitizer.makeSafePropertyIdentifier(a.name ?? `arg${i + 1}`))}`)\n .join(', ')}],`\n yield DecIndent\n yield '}'\n yield DecIndent\n yield `}${isNested ? ',' : ''}`\n}\n"],"names":[],"mappings":"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"}
|