@algorandfoundation/algokit-client-generator 6.0.2-beta.1 → 7.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/app-client-context.d.ts +122 -0
- package/client/app-client-context.js +212 -0
- package/client/app-client-context.js.map +1 -0
- package/client/app-client-context.mjs +209 -0
- package/client/app-client-context.mjs.map +1 -0
- package/client/app-client.js +29 -51
- package/client/app-client.js.map +1 -1
- package/client/app-client.mjs +29 -51
- package/client/app-client.mjs.map +1 -1
- package/client/app-factory.js +23 -27
- package/client/app-factory.js.map +1 -1
- package/client/app-factory.mjs +23 -27
- package/client/app-factory.mjs.map +1 -1
- package/client/app-types.js +31 -60
- package/client/app-types.js.map +1 -1
- package/client/app-types.mjs +32 -61
- package/client/app-types.mjs.map +1 -1
- package/client/call-composer-types.js +31 -34
- package/client/call-composer-types.js.map +1 -1
- package/client/call-composer-types.mjs +31 -34
- package/client/call-composer-types.mjs.map +1 -1
- package/client/call-composer.js +24 -31
- package/client/call-composer.js.map +1 -1
- package/client/call-composer.mjs +24 -31
- package/client/call-composer.mjs.map +1 -1
- package/client/deploy-types.d.ts +1 -11
- package/client/deploy-types.js +28 -53
- package/client/deploy-types.js.map +1 -1
- package/client/deploy-types.mjs +29 -52
- package/client/deploy-types.mjs.map +1 -1
- package/client/generate.d.ts +1 -1
- package/client/generate.js +2 -2
- package/client/generate.js.map +1 -1
- package/client/generate.mjs +2 -2
- package/client/generate.mjs.map +1 -1
- package/client/generator-context.d.ts +3 -5
- package/client/generator-context.js +4 -10
- package/client/generator-context.js.map +1 -1
- package/client/generator-context.mjs +4 -10
- package/client/generator-context.mjs.map +1 -1
- package/client/helpers/contains-non-void-method.d.ts +2 -2
- package/client/helpers/contains-non-void-method.js +3 -2
- package/client/helpers/contains-non-void-method.js.map +1 -1
- package/client/helpers/contains-non-void-method.mjs +3 -2
- package/client/helpers/contains-non-void-method.mjs.map +1 -1
- package/client/helpers/get-equivalent-type.d.ts +3 -5
- package/client/helpers/get-equivalent-type.js +53 -54
- package/client/helpers/get-equivalent-type.js.map +1 -1
- package/client/helpers/get-equivalent-type.mjs +53 -55
- package/client/helpers/get-equivalent-type.mjs.map +1 -1
- package/client/imports.d.ts +1 -2
- package/client/imports.js +10 -19
- package/client/imports.js.map +1 -1
- package/client/imports.mjs +10 -19
- package/client/imports.mjs.map +1 -1
- package/client/params-factory.js +47 -50
- package/client/params-factory.js.map +1 -1
- package/client/params-factory.mjs +47 -50
- package/client/params-factory.mjs.map +1 -1
- package/package.json +2 -3
- package/schema/load.d.ts +1 -1
- package/schema/load.js.map +1 -1
- package/schema/load.mjs.map +1 -1
- package/client/helpers/get-call-config-summary.d.ts +0 -19
- package/client/helpers/get-call-config-summary.js +0 -60
- package/client/helpers/get-call-config-summary.js.map +0 -1
- package/client/helpers/get-call-config-summary.mjs +0 -57
- package/client/helpers/get-call-config-summary.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-client.mjs","sources":["../../src/client/app-client.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { GeneratorContext } from './generator-context'\nimport { getCallOnCompleteOptions, getCreateOnCompleteOptions } from './deploy-types'\nimport { composeMethod } from './call-composer'\nimport { ABIMethod } from 'algosdk'\nimport { Method } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { getEquivalentType } from './helpers/get-equivalent-type'\nimport { containsNonVoidMethod } from './helpers/contains-non-void-method'\n\nexport function* appClient(ctx: GeneratorContext): DocumentParts {\n const { app, name } = ctx\n\n yield* jsDoc(`A client to make calls to the ${app.name} smart contract`)\n yield `export class ${name}Client {`\n yield IncIndent\n yield* jsDoc(`The underlying \\`AppClient\\` for when you want to have more flexibility`)\n yield 'public readonly appClient: _AppClient'\n yield NewLine\n\n yield `\n /**\n * Creates a new instance of \\`${name}Client\\`\n *\n * @param appClient An \\`AppClient\\` instance which has been created with the ${name} app spec\n */\n constructor(appClient: _AppClient)\n /**\n * Creates a new instance of \\`${name}Client\\`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }`\n\n if (containsNonVoidMethod(app.methods)) {\n yield `\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends ${name}NonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {\n return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined\n }`\n }\n\n yield `\n /**\n * Returns a new \\`${name}Client\\` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<${name}Client> {\n return new ${name}Client(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n\n /**\n * Returns an \\`${name}Client\\` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<${name}Client> {\n return new ${name}Client(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n\n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n\n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n\n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n\n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n\n /** A reference to the underlying \\`AlgorandClient\\` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand\n }\n\n `\n\n yield* params(ctx)\n yield* createTransaction(ctx)\n yield* send(ctx)\n yield* cloneMethod(ctx)\n yield* readonlyMethods(ctx)\n yield* getStateMethods(ctx)\n yield* composeMethod(ctx)\n yield DecIndentAndCloseBlock\n}\n\nfunction* params(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(\n `Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.`,\n )\n yield `readonly params = {`\n yield IncIndent\n yield* opMethods(ctx, 'params')\n yield* clearState(ctx, 'params')\n yield* call(ctx, 'params')\n yield* noopMethods(ctx, 'params')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* createTransaction(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Create transactions for the current app`)\n yield `readonly createTransaction = {`\n yield IncIndent\n yield* opMethods(ctx, 'createTransaction')\n yield* clearState(ctx, 'createTransaction')\n yield* call(ctx, 'createTransaction')\n yield* noopMethods(ctx, 'createTransaction')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* send(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Send calls to the current app`)\n yield `readonly send = {`\n yield IncIndent\n yield* opMethods(ctx, 'send')\n yield* clearState(ctx, 'send')\n yield* call(ctx, 'send')\n yield* noopMethods(ctx, 'send')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* opMethods(ctx: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n const { app, callConfig } = ctx\n\n if (ctx.mode === 'full') {\n yield* operationMethods(\n ctx,\n `Updates an existing instance of the ${app.name} smart contract`,\n callConfig.updateMethods,\n 'update',\n type,\n true,\n )\n yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`, callConfig.deleteMethods, 'delete', type)\n }\n yield* operationMethods(\n ctx,\n `Opts the user into an existing instance of the ${app.name} smart contract`,\n callConfig.optInMethods,\n 'optIn',\n type,\n )\n yield* operationMethods(\n ctx,\n `Makes a close out call to an existing instance of the ${app.name} smart contract`,\n callConfig.closeOutMethods,\n 'closeOut',\n type,\n )\n}\n\nfunction* bareMethodCall({\n generator: { app },\n name,\n description,\n verb,\n type,\n includeCompilation,\n}: {\n generator: GeneratorContext\n name: string\n description: string\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete' | 'clearState' | 'call'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n}): DocumentParts {\n const onComplete =\n verb === 'create' ? getCreateOnCompleteOptions(BARE_CALL, app) : verb === 'call' ? getCallOnCompleteOptions(BARE_CALL, app) : undefined\n yield* jsDoc({\n description: `${description}.`,\n params: {\n params: `The params for the bare (raw) call`,\n },\n returns: `The ${verb} result`,\n })\n yield `${name}: (params?: Expand<AppClientBareCallParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>) => {`\n yield* indent(`return this.appClient.${type}.bare.${verb}(params)`)\n yield '},'\n}\n\nfunction* abiMethodCall({\n generator: { app, methodSignatureToUniqueName, name, sanitizer },\n method,\n description,\n verb,\n type,\n includeCompilation,\n readonly,\n}: {\n generator: GeneratorContext\n method: Method\n description: string\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete' | 'call'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n readonly?: boolean\n}) {\n const methodSig = new ABIMethod(method).getSignature()\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const onComplete =\n verb === 'create'\n ? getCreateOnCompleteOptions(methodSig, app)\n : verb === 'call' && !readonly\n ? getCallOnCompleteOptions(methodSig, app)\n : undefined\n yield* jsDoc({\n description:\n verb === 'call' && method.readonly\n ? [\n `${description} using the \\`${methodSig}\\` ABI method.`,\n '',\n 'This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.',\n ]\n : `${description} using the \\`${methodSig}\\` ABI method.`,\n abiDescription: method?.desc,\n params: {\n params: `The params for the smart contract call`,\n },\n returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,\n })\n const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig)\n yield `${!readonly ? `${methodName}: ` : ''}${type === 'send' ? 'async ' : ''}${readonly ? `${methodName}` : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${\n includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n }${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' && !readonly ? ' & SendParams' : ''}${onComplete?.type && !readonly ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''})${!readonly ? ' =>' : ''} {`\n if (type === 'send') {\n yield* indent(\n `const result = await this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`,\n readonly\n ? `return result.return as unknown as ${name}Returns['${methodSigSafe}']`\n : `return {...result, return: result.return as unknown as (undefined | ${name}Returns['${methodSigSafe}'])}`,\n )\n } else {\n yield* indent(\n `return this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`,\n )\n }\n yield `}${!readonly ? ',' : ''}`\n yield NewLine\n}\n\nfunction* operationMethods(\n generator: GeneratorContext,\n description: string,\n methods: MethodList,\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete',\n type: 'params' | 'createTransaction' | 'send',\n includeCompilation?: boolean,\n): DocumentParts {\n if (methods.length) {\n yield* jsDoc(`Gets available ${verb} methods`)\n yield `${verb}: {`\n yield IncIndent\n for (const methodSig of methods) {\n if (methodSig === BARE_CALL) {\n yield* bareMethodCall({\n generator,\n name: 'bare',\n description: `${description} using a bare call`,\n verb,\n type,\n includeCompilation,\n })\n } else {\n const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n yield* abiMethodCall({\n generator,\n method,\n description,\n verb,\n type,\n includeCompilation,\n })\n }\n }\n yield DecIndent\n yield '},'\n yield NewLine\n }\n}\n\nfunction* clearState(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n yield* bareMethodCall({\n generator,\n name: 'clearState',\n description: `Makes a clear_state call to an existing instance of the ${generator.app.name} smart contract`,\n verb: 'clearState',\n type,\n })\n yield NewLine\n}\n\nfunction* call(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n if (generator.callConfig.callMethods.includes(BARE_CALL)) {\n yield* bareMethodCall({\n generator,\n name: 'bare',\n description: `Makes a call to the ${generator.app.name} smart contract using a bare call`,\n verb: 'call',\n type,\n })\n yield NewLine\n }\n}\n\nfunction* readonlyMethods(generator: GeneratorContext): DocumentParts {\n const { app, callConfig } = generator\n for (const method of app.methods) {\n const methodSignature = new ABIMethod(method).getSignature()\n // Skip non readonly methods\n if (!callConfig.callMethods.includes(methodSignature) || !method.readonly) continue\n\n yield* abiMethodCall({\n generator,\n description: `Makes a readonly (simulated) call to the ${generator.app.name} smart contract`,\n method,\n verb: 'call',\n type: 'send',\n includeCompilation: false,\n readonly: true,\n })\n }\n}\n\nfunction* noopMethods(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n const { app, callConfig } = generator\n for (const method of app.methods) {\n const methodSignature = new ABIMethod(method).getSignature()\n // Skip methods which don't support a no_op call config\n if (!callConfig.callMethods.includes(methodSignature)) continue\n\n yield* abiMethodCall({\n generator,\n description: `Makes a call to the ${generator.app.name} smart contract`,\n method,\n verb: 'call',\n type,\n includeCompilation: false,\n })\n }\n}\n\nfunction* getStateMethods({ app, sanitizer }: GeneratorContext): DocumentParts {\n if (Object.keys(app.state).length === 0) return\n\n yield* jsDoc(`Methods to access state for the current ${app.name} app`)\n yield 'state = {'\n yield IncIndent\n\n const storageTypes = ['global', 'local', 'box'] as const\n\n for (const storageType of storageTypes) {\n const hasKeys = Object.keys(app.state.keys[storageType]).length > 0\n const hasMaps = Object.keys(app.state.maps[storageType]).length > 0\n if (!hasKeys && !hasMaps) continue\n\n yield* jsDoc(`Methods to access ${storageType} state for the current ${app.name} app`)\n yield `${storageType}${storageType === 'local' ? ': (address: string | Address) => {' : ': {'}`\n yield IncIndent\n if (storageType === 'local') {\n yield \"const encodedAddress = typeof address === 'string' ? address : encodeAddress(address.publicKey)\"\n yield 'return {'\n yield IncIndent\n }\n\n yield* jsDoc(`Get all current keyed values from ${storageType} state`)\n yield `getAll: async (): Promise<Partial<Expand<${storageType[0].toUpperCase()}${storageType.substring(1)}KeysState>>> => {`\n yield* indent(\n `const result = await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getAll()`,\n `return {`,\n ...Object.keys(app.state.keys[storageType]).map((n) => {\n return ` ${sanitizer.makeSafePropertyIdentifier(n)}: ${app.state.keys[storageType][n].valueType === 'AVMBytes' ? `new BinaryStateValue(result${sanitizer.getSafeMemberAccessor(n)})` : `result${sanitizer.getSafeMemberAccessor(n)}`},`\n }),\n `}`,\n )\n yield `},`\n\n for (const n of Object.keys(app.state.keys[storageType])) {\n const name = sanitizer.makeSafePropertyIdentifier(n)\n const k = app.state.keys[storageType][n]\n yield* jsDoc(`Get the current value of the ${n} key in ${storageType} state`)\n yield `${name}: async (): Promise<${k.valueType === 'AVMBytes' ? 'BinaryState' : `${getEquivalentType(k.valueType, 'output', { app, sanitizer })} | undefined`}> => { return ${k.valueType === 'AVMBytes' ? 'new BinaryStateValue(' : ''}(await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getValue(\"${sanitizer.makeSafeStringTypeLiteral(n)}\"))${k.valueType === 'AVMBytes' ? ' as Uint8Array | undefined)' : ` as ${getEquivalentType(k.valueType, 'output', { app, sanitizer })} | undefined`} },`\n }\n\n for (const n of Object.keys(app.state.maps[storageType])) {\n const name = sanitizer.makeSafePropertyIdentifier(app.state.keys[storageType][n] ? `${n}Map` : n)\n const m = app.state.maps[storageType][n]\n yield* jsDoc(`Get values from the ${n} map in ${storageType} state`)\n yield `${name}: {`\n yield IncIndent\n\n yield* jsDoc(`Get all current values of the ${n} map in ${storageType} state`)\n yield `getMap: async (): Promise<Map<${getEquivalentType(m.keyType, 'output', { app, sanitizer })}, ${getEquivalentType(m.valueType, 'output', { app, sanitizer })}>> => { return (await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getMap(\"${sanitizer.makeSafeStringTypeLiteral(n)}\")) as Map<${getEquivalentType(m.keyType, 'output', { app, sanitizer })}, ${getEquivalentType(m.valueType, 'output', { app, sanitizer })}> },`\n\n yield* jsDoc(`Get a current value of the ${n} map by key from ${storageType} state`)\n yield `value: async (key: ${getEquivalentType(m.keyType, 'input', { app, sanitizer })}): Promise<${getEquivalentType(m.valueType, 'output', { app, sanitizer })} | undefined> => { return await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getMapValue(\"${sanitizer.makeSafeStringTypeLiteral(n)}\", key) as ${getEquivalentType(m.valueType, 'output', { app, sanitizer })} | undefined },`\n\n yield DecIndent\n yield `},`\n }\n\n yield DecIndent\n if (storageType === 'local') {\n yield '}'\n yield DecIndent\n }\n yield '},'\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* cloneMethod({ name }: GeneratorContext): DocumentParts {\n yield* jsDoc({\n description: 'Clone this app client with different params',\n params: {\n params:\n 'The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.',\n },\n returns: 'A new app client with the altered params',\n })\n yield `public clone(params: CloneAppClientParams) {`\n yield IncIndent\n yield `return new ${name}Client(this.appClient.clone(params))`\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-client.mjs","sources":["../../src/client/app-client.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { GeneratorContext } from './generator-context'\nimport { composeMethod } from './call-composer'\n\nimport { AppClientMethodContext, AbiMethodClientContext, isAbiMethod } from './app-client-context'\n\nexport function* appClient(ctx: GeneratorContext): DocumentParts {\n const { app, name } = ctx\n\n yield* jsDoc(`A client to make calls to the ${app.name} smart contract`)\n yield `export class ${name}Client {`\n yield IncIndent\n yield* jsDoc(`The underlying \\`AppClient\\` for when you want to have more flexibility`)\n yield 'public readonly appClient: _AppClient'\n yield NewLine\n\n yield `\n /**\n * Creates a new instance of \\`${name}Client\\`\n *\n * @param appClient An \\`AppClient\\` instance which has been created with the ${name} app spec\n */\n constructor(appClient: _AppClient)\n /**\n * Creates a new instance of \\`${name}Client\\`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }`\n\n yield `\n /**\n * Returns a new \\`${name}Client\\` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<${name}Client> {\n return new ${name}Client(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n\n /**\n * Returns an \\`${name}Client\\` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<${name}Client> {\n return new ${name}Client(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n\n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n\n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n\n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n\n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n\n /** A reference to the underlying \\`AlgorandClient\\` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand\n }\n\n `\n\n yield* params(ctx)\n yield* createTransaction(ctx)\n yield* send(ctx)\n yield* cloneMethod(ctx)\n yield* readonlyMethods(ctx)\n yield* getStateMethods(ctx)\n yield* composeMethod(ctx)\n yield DecIndentAndCloseBlock\n}\n\nfunction* params(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(\n `Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.`,\n )\n yield `readonly params = {`\n yield IncIndent\n yield* opMethods(ctx, 'params')\n yield* clearState(ctx, 'params')\n yield* call(ctx, 'params')\n yield* noopMethods(ctx, 'params')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* createTransaction(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Create transactions for the current app`)\n yield `readonly createTransaction = {`\n yield IncIndent\n yield* opMethods(ctx, 'createTransaction')\n yield* clearState(ctx, 'createTransaction')\n yield* call(ctx, 'createTransaction')\n yield* noopMethods(ctx, 'createTransaction')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* send(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Send calls to the current app`)\n yield `readonly send = {`\n yield IncIndent\n yield* opMethods(ctx, 'send')\n yield* clearState(ctx, 'send')\n yield* call(ctx, 'send')\n yield* noopMethods(ctx, 'send')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* opMethods(ctx: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n const { app } = ctx\n\n if (ctx.mode === 'full') {\n yield* operationMethods(ctx, `Updates an existing instance of the ${app.name} smart contract`, app.updateMethods, 'update', type, true)\n yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`, app.deleteMethods, 'delete', type)\n }\n yield* operationMethods(ctx, `Opts the user into an existing instance of the ${app.name} smart contract`, app.optInMethods, 'optIn', type)\n yield* operationMethods(\n ctx,\n `Makes a close out call to an existing instance of the ${app.name} smart contract`,\n app.closeOutMethods,\n 'closeOut',\n type,\n )\n}\n\nfunction* bareMethodCall({\n generator: { app },\n name,\n description,\n verb,\n type,\n includeCompilation,\n}: {\n generator: GeneratorContext\n name: string\n description: string\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete' | 'clearState' | 'call'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n}): DocumentParts {\n const onComplete =\n verb === 'create' ? app.bareMethod.createActions.inputType : verb === 'call' ? app.bareMethod.callActions.inputType : undefined\n yield* jsDoc({\n description: `${description}.`,\n params: {\n params: `The params for the bare (raw) call`,\n },\n returns: `The ${verb} result`,\n })\n yield `${name}: (params?: Expand<AppClientBareCallParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' ? ' & SendParams' : ''}${onComplete?.typeLiteral ? ` & ${onComplete.typeLiteral}` : ''}>) => {`\n yield* indent(`return this.appClient.${type}.bare.${verb}(params)`)\n yield '},'\n}\n\nfunction* abiMethodCall({\n generator: { sanitizer, name },\n method,\n description,\n verb,\n type,\n includeCompilation,\n readonly,\n}: {\n generator: GeneratorContext\n method: AbiMethodClientContext\n description: string\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete' | 'call'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n readonly?: boolean\n}) {\n const methodSig = method.signature\n const uniqueName = method.uniqueName.original\n const onComplete = verb === 'create' ? method.createActions.inputType : method.callActions.inputType\n yield* jsDoc({\n description:\n verb === 'call' && method.readonly\n ? [\n `${description} using the \\`${methodSig}\\` ABI method.`,\n '',\n 'This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.',\n ]\n : `${description} using the \\`${methodSig}\\` ABI method.`,\n abiDescription: method?.desc,\n params: {\n params: `The params for the smart contract call`,\n },\n returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,\n })\n const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig)\n yield `${!readonly ? `${methodName}: ` : ''}${type === 'send' ? 'async ' : ''}${readonly ? `${methodName}` : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${\n includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n }${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' && !readonly ? ' & SendParams' : ''}${onComplete?.typeLiteral && !readonly ? ` & ${onComplete.typeLiteral}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''})${!readonly ? ' =>' : ''} {`\n if (type === 'send') {\n yield* indent(\n `const result = await this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`,\n readonly\n ? `return result.return as unknown as ${name}Returns['${methodSigSafe}']`\n : `return {...result, return: result.return as unknown as (undefined | ${name}Returns['${methodSigSafe}'])}`,\n )\n } else {\n yield* indent(\n `return this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`,\n )\n }\n yield `}${!readonly ? ',' : ''}`\n yield NewLine\n}\n\nfunction* operationMethods(\n generator: GeneratorContext,\n description: string,\n methods: AppClientMethodContext[],\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete',\n type: 'params' | 'createTransaction' | 'send',\n includeCompilation?: boolean,\n): DocumentParts {\n if (methods.length) {\n yield* jsDoc(`Gets available ${verb} methods`)\n yield `${verb}: {`\n yield IncIndent\n for (const method of methods) {\n if (!isAbiMethod(method)) {\n yield* bareMethodCall({\n generator,\n name: 'bare',\n description: `${description} using a bare call`,\n verb,\n type,\n includeCompilation,\n })\n } else {\n yield* abiMethodCall({\n generator,\n method,\n description,\n verb,\n type,\n includeCompilation,\n })\n }\n }\n yield DecIndent\n yield '},'\n yield NewLine\n }\n}\n\nfunction* clearState(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n yield* bareMethodCall({\n generator,\n name: 'clearState',\n description: `Makes a clear_state call to an existing instance of the ${generator.app.name} smart contract`,\n verb: 'clearState',\n type,\n })\n yield NewLine\n}\n\nfunction* call(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n if (generator.app.bareMethod.callActions.noOp) {\n yield* bareMethodCall({\n generator,\n name: 'bare',\n description: `Makes a call to the ${generator.app.name} smart contract using a bare call`,\n verb: 'call',\n type,\n })\n yield NewLine\n }\n}\n\nfunction* readonlyMethods(generator: GeneratorContext): DocumentParts {\n const { app } = generator\n for (const method of app.abiMethods) {\n // Skip non readonly methods\n if (!method.readonly) continue\n\n yield* abiMethodCall({\n generator,\n description: `Makes a readonly (simulated) call to the ${generator.app.name} smart contract`,\n method,\n verb: 'call',\n type: 'send',\n includeCompilation: false,\n readonly: true,\n })\n }\n}\n\nfunction* noopMethods(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n const { app } = generator\n for (const method of app.noOpMethods) {\n if (!isAbiMethod(method)) continue\n yield* abiMethodCall({\n generator,\n description: `Makes a call to the ${generator.app.name} smart contract`,\n method,\n verb: 'call',\n type,\n includeCompilation: false,\n })\n }\n}\n\nfunction* getStateMethods({ app, sanitizer }: GeneratorContext): DocumentParts {\n if (Object.keys(app.state).length === 0) return\n\n yield* jsDoc(`Methods to access state for the current ${app.name} app`)\n yield 'state = {'\n yield IncIndent\n\n const storageTypes = ['global', 'local', 'box'] as const\n\n for (const storageType of storageTypes) {\n const hasKeys = Object.keys(app.state.keys[storageType]).length > 0\n const hasMaps = Object.keys(app.state.maps[storageType]).length > 0\n if (!hasKeys && !hasMaps) continue\n\n yield* jsDoc(`Methods to access ${storageType} state for the current ${app.name} app`)\n yield `${storageType}${storageType === 'local' ? ': (address: string | Address) => {' : ': {'}`\n yield IncIndent\n if (storageType === 'local') {\n yield \"const encodedAddress = typeof address === 'string' ? address : encodeAddress(address.publicKey)\"\n yield 'return {'\n yield IncIndent\n }\n\n yield* jsDoc(`Get all current keyed values from ${storageType} state`)\n yield `getAll: async (): Promise<Partial<Expand<${storageType[0].toUpperCase()}${storageType.substring(1)}KeysState>>> => {`\n yield* indent(\n `const result = await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getAll()`,\n `return {`,\n ...Object.keys(app.state.keys[storageType]).map((n) => {\n return ` ${sanitizer.makeSafePropertyIdentifier(n)}: ${app.state.keys[storageType][n].valueType.isAvmBytes ? `new BinaryStateValue(result${sanitizer.getSafeMemberAccessor(n)})` : `result${sanitizer.getSafeMemberAccessor(n)}`},`\n }),\n `}`,\n )\n yield `},`\n\n for (const n of Object.keys(app.state.keys[storageType])) {\n const name = sanitizer.makeSafePropertyIdentifier(n)\n const k = app.state.keys[storageType][n]\n yield* jsDoc(`Get the current value of the ${n} key in ${storageType} state`)\n yield `${name}: async (): Promise<${k.valueType.isAvmBytes ? 'BinaryState' : `${k.valueType.tsOutType} | undefined`}> => { return ${k.valueType.isAvmBytes ? 'new BinaryStateValue(' : ''}(await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getValue(\"${sanitizer.makeSafeStringTypeLiteral(n)}\"))${k.valueType.isAvmBytes ? ' as Uint8Array | undefined)' : ` as ${k.valueType.tsOutType} | undefined`} },`\n }\n\n for (const n of Object.keys(app.state.maps[storageType])) {\n const name = sanitizer.makeSafePropertyIdentifier(app.state.keys[storageType][n] ? `${n}Map` : n)\n const m = app.state.maps[storageType][n]\n yield* jsDoc(`Get values from the ${n} map in ${storageType} state`)\n yield `${name}: {`\n yield IncIndent\n\n yield* jsDoc(`Get all current values of the ${n} map in ${storageType} state`)\n yield `getMap: async (): Promise<Map<${m.keyType.tsOutType}, ${m.valueType.tsOutType}>> => { return (await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getMap(\"${sanitizer.makeSafeStringTypeLiteral(n)}\")) as Map<${m.keyType.tsOutType}, ${m.valueType.tsOutType}> },`\n\n yield* jsDoc(`Get a current value of the ${n} map by key from ${storageType} state`)\n yield `value: async (key: ${m.keyType.tsInType}): Promise<${m.valueType.tsOutType} | undefined> => { return await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getMapValue(\"${sanitizer.makeSafeStringTypeLiteral(n)}\", key) as ${m.valueType.tsOutType} | undefined },`\n\n yield DecIndent\n yield `},`\n }\n\n yield DecIndent\n if (storageType === 'local') {\n yield '}'\n yield DecIndent\n }\n yield '},'\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* cloneMethod({ app }: GeneratorContext): DocumentParts {\n yield* jsDoc({\n description: 'Clone this app client with different params',\n params: {\n params:\n 'The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.',\n },\n returns: 'A new app client with the altered params',\n })\n yield `public clone(params: CloneAppClientParams) {`\n yield IncIndent\n yield `return new ${app.name.makeSafeTypeIdentifier}Client(this.appClient.clone(params))`\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n"],"names":[],"mappings":"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"}
|
package/client/app-factory.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var writer = require('../output/writer.js');
|
|
4
|
-
var
|
|
5
|
-
var deployTypes = require('./deploy-types.js');
|
|
6
|
-
var algosdk = require('algosdk');
|
|
4
|
+
var appClientContext = require('./app-client-context.js');
|
|
7
5
|
|
|
8
6
|
function* appFactory(ctx) {
|
|
9
7
|
const { app, name } = ctx;
|
|
@@ -101,12 +99,12 @@ function* send(ctx) {
|
|
|
101
99
|
}
|
|
102
100
|
function* createMethods(generator) {
|
|
103
101
|
const { app } = generator;
|
|
104
|
-
if (
|
|
102
|
+
if (app.createMethods.length) {
|
|
105
103
|
yield* writer.jsDoc(`Gets available create methods`);
|
|
106
104
|
yield `create: {`;
|
|
107
105
|
yield writer.IncIndent;
|
|
108
|
-
for (const
|
|
109
|
-
if (
|
|
106
|
+
for (const method of generator.app.createMethods) {
|
|
107
|
+
if (!appClientContext.isAbiMethod(method)) {
|
|
110
108
|
yield* bareMethodCallParams({
|
|
111
109
|
generator,
|
|
112
110
|
name: 'bare',
|
|
@@ -117,7 +115,6 @@ function* createMethods(generator) {
|
|
|
117
115
|
});
|
|
118
116
|
}
|
|
119
117
|
else {
|
|
120
|
-
const method = generator.app.methods.find((m) => new algosdk.ABIMethod(m).getSignature() === methodSig);
|
|
121
118
|
yield* abiMethodCallParams({
|
|
122
119
|
generator,
|
|
123
120
|
method,
|
|
@@ -134,17 +131,17 @@ function* createMethods(generator) {
|
|
|
134
131
|
}
|
|
135
132
|
}
|
|
136
133
|
function* paramMethods(ctx) {
|
|
137
|
-
const { app
|
|
138
|
-
yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`,
|
|
139
|
-
yield* operationMethods(ctx, `Updates an existing instance of the ${app.name} smart contract`,
|
|
140
|
-
yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`,
|
|
134
|
+
const { app } = ctx;
|
|
135
|
+
yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`, app.createMethods, 'create', 'params', true);
|
|
136
|
+
yield* operationMethods(ctx, `Updates an existing instance of the ${app.name} smart contract`, app.updateMethods, 'deployUpdate', 'params', true);
|
|
137
|
+
yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`, app.deleteMethods, 'deployDelete', 'params');
|
|
141
138
|
}
|
|
142
139
|
function* createTransactionMethods(ctx) {
|
|
143
|
-
const { app
|
|
144
|
-
yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`,
|
|
140
|
+
const { app } = ctx;
|
|
141
|
+
yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`, app.createMethods, 'create', 'createTransaction', true);
|
|
145
142
|
}
|
|
146
143
|
function* bareMethodCallParams({ generator: { app, name: clientName }, name, description, verb, type, includeCompilation, }) {
|
|
147
|
-
const onComplete = verb === 'create' ?
|
|
144
|
+
const onComplete = verb === 'create' ? app.bareMethod.createActions.inputType : undefined;
|
|
148
145
|
yield* writer.jsDoc({
|
|
149
146
|
description: `${description}.`,
|
|
150
147
|
params: {
|
|
@@ -154,7 +151,7 @@ function* bareMethodCallParams({ generator: { app, name: clientName }, name, des
|
|
|
154
151
|
? `The ${type === 'createTransaction' ? 'transaction' : type} for a ${verb} call`
|
|
155
152
|
: `The ${verb} result`,
|
|
156
153
|
});
|
|
157
|
-
yield `${name}: ${type === 'send' ? 'async ' : ''}(params?: Expand<AppClientBareCallParams${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.
|
|
154
|
+
yield `${name}: ${type === 'send' ? 'async ' : ''}(params?: Expand<AppClientBareCallParams${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.typeLiteral ? ` & ${onComplete.typeLiteral}` : ''}>) => {`;
|
|
158
155
|
if (type === 'params' || type === 'createTransaction') {
|
|
159
156
|
yield* writer.indent(`return this.appFactory.${type}.bare.${verb}(params)`);
|
|
160
157
|
}
|
|
@@ -163,10 +160,10 @@ function* bareMethodCallParams({ generator: { app, name: clientName }, name, des
|
|
|
163
160
|
}
|
|
164
161
|
yield '},';
|
|
165
162
|
}
|
|
166
|
-
function* abiMethodCallParams({ generator: {
|
|
167
|
-
const methodSig =
|
|
168
|
-
const uniqueName =
|
|
169
|
-
const onComplete = verb === 'create' ?
|
|
163
|
+
function* abiMethodCallParams({ generator: { name, sanitizer }, method, description, verb, type, includeCompilation, }) {
|
|
164
|
+
const methodSig = method.signature;
|
|
165
|
+
const uniqueName = method.uniqueName.original;
|
|
166
|
+
const onComplete = verb === 'create' ? method.createActions.inputType : undefined;
|
|
170
167
|
yield* writer.jsDoc({
|
|
171
168
|
description: `${description} using the ${methodSig} ABI method.`,
|
|
172
169
|
abiDescription: method?.desc,
|
|
@@ -178,7 +175,7 @@ function* abiMethodCallParams({ generator: { app, methodSignatureToUniqueName, n
|
|
|
178
175
|
const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName);
|
|
179
176
|
const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
|
|
180
177
|
const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig);
|
|
181
|
-
yield `${methodName}: ${type === 'send' ? 'async ' : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.
|
|
178
|
+
yield `${methodName}: ${type === 'send' ? 'async ' : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.typeLiteral ? ` & ${onComplete.typeLiteral}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''}) => {`;
|
|
182
179
|
if (type === 'params' || type === 'createTransaction') {
|
|
183
180
|
yield* writer.indent(`return this.appFactory.${type}.${verb}(${name}ParamsFactory.${verb == 'deployDelete' ? 'delete' : verb === 'deployUpdate' ? 'update' : verb}${methodNameAccessor}(params))`);
|
|
184
181
|
}
|
|
@@ -192,8 +189,8 @@ function* operationMethods(generator, description, methods, verb, type, includeC
|
|
|
192
189
|
yield* writer.jsDoc(`Gets available ${verb} methods`);
|
|
193
190
|
yield `${verb}: {`;
|
|
194
191
|
yield writer.IncIndent;
|
|
195
|
-
for (const
|
|
196
|
-
if (
|
|
192
|
+
for (const method of methods) {
|
|
193
|
+
if (!appClientContext.isAbiMethod(method)) {
|
|
197
194
|
yield* bareMethodCallParams({
|
|
198
195
|
generator,
|
|
199
196
|
name: 'bare',
|
|
@@ -204,7 +201,6 @@ function* operationMethods(generator, description, methods, verb, type, includeC
|
|
|
204
201
|
});
|
|
205
202
|
}
|
|
206
203
|
else {
|
|
207
|
-
const method = generator.app.methods.find((m) => new algosdk.ABIMethod(m).getSignature() === methodSig);
|
|
208
204
|
yield* abiMethodCallParams({
|
|
209
205
|
generator,
|
|
210
206
|
method,
|
|
@@ -221,7 +217,7 @@ function* operationMethods(generator, description, methods, verb, type, includeC
|
|
|
221
217
|
}
|
|
222
218
|
}
|
|
223
219
|
function* deployMethod(ctx) {
|
|
224
|
-
const { app,
|
|
220
|
+
const { app, name } = ctx;
|
|
225
221
|
yield* writer.jsDoc({
|
|
226
222
|
description: `Idempotently deploys the ${app.name} smart contract.`,
|
|
227
223
|
params: {
|
|
@@ -234,13 +230,13 @@ function* deployMethod(ctx) {
|
|
|
234
230
|
yield `const result = await this.appFactory.deploy({`;
|
|
235
231
|
yield writer.IncIndent;
|
|
236
232
|
yield `...params,`;
|
|
237
|
-
if (
|
|
233
|
+
if (app.createMethods.some((m) => !m.isBare)) {
|
|
238
234
|
yield `createParams: params.createParams?.method ? ${name}ParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (${name}CreateCallParams & { args: Uint8Array[] }) : undefined,`;
|
|
239
235
|
}
|
|
240
|
-
if (
|
|
236
|
+
if (app.updateMethods.some((m) => !m.isBare)) {
|
|
241
237
|
yield `updateParams: params.updateParams?.method ? ${name}ParamsFactory.update._resolveByMethod(params.updateParams) : params.updateParams ? params.updateParams as (${name}UpdateCallParams & { args: Uint8Array[] }) : undefined,`;
|
|
242
238
|
}
|
|
243
|
-
if (
|
|
239
|
+
if (app.deleteMethods.some((m) => !m.isBare)) {
|
|
244
240
|
yield `deleteParams: params.deleteParams?.method ? ${name}ParamsFactory.delete._resolveByMethod(params.deleteParams) : params.deleteParams ? params.deleteParams as (${name}DeleteCallParams & { args: Uint8Array[] }) : undefined,`;
|
|
245
241
|
}
|
|
246
242
|
yield writer.DecIndent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-factory.js","sources":["../../src/client/app-factory.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { GeneratorContext } from './generator-context'\nimport { getCreateOnCompleteOptions } from './deploy-types'\nimport { ABIMethod } from 'algosdk'\nimport { Method } from '@algorandfoundation/algokit-utils/types/app-arc56'\n\nexport function* appFactory(ctx: GeneratorContext): DocumentParts {\n const { app, name } = ctx\n\n yield* jsDoc(\n `A factory to create and deploy one or more instance of the ${app.name} smart contract and to create one or more app clients to interact with those (or other) app instances`,\n )\n yield `export class ${name}Factory {`\n yield IncIndent\n yield* jsDoc(`The underlying \\`AppFactory\\` for when you want to have more flexibility`)\n yield 'public readonly appFactory: _AppFactory'\n yield NewLine\n\n yield* jsDoc({\n description: `Creates a new instance of \\`${name}Factory\\``,\n params: {\n params: 'The parameters to initialise the app factory with',\n },\n })\n\n yield `\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n })\n }\n\n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName\n }\n\n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC\n }\n\n /** A reference to the underlying \\`AlgorandClient\\` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand\n }\n\n /**\n * Returns a new \\`AppClient\\` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The \\`AppClient\\`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new ${name}Client(this.appFactory.getAppClientById(params))\n }\n\n /**\n * Returns a new \\`AppClient\\` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The \\`AppClient\\`\n */\n public async getAppClientByCreatorAndName(\n params: AppFactoryResolveAppClientByCreatorAndNameParams,\n ) {\n return new ${name}Client(await this.appFactory.getAppClientByCreatorAndName(params))\n }\n `\n\n yield* deployMethod(ctx)\n yield* params(ctx)\n yield* createTransaction(ctx)\n yield* send(ctx)\n yield DecIndentAndCloseBlock\n}\n\nfunction* params(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(\n `Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.`,\n )\n yield `readonly params = {`\n yield IncIndent\n yield* paramMethods(ctx)\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* createTransaction(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Create transactions for the current app`)\n yield `readonly createTransaction = {`\n yield IncIndent\n yield* createTransactionMethods(ctx)\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* send(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Send calls to the current app`)\n yield `readonly send = {`\n yield IncIndent\n yield* createMethods(ctx)\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* createMethods(generator: GeneratorContext): DocumentParts {\n const { app } = generator\n if (generator.callConfig.createMethods.length) {\n yield* jsDoc(`Gets available create methods`)\n yield `create: {`\n yield IncIndent\n for (const methodSig of generator.callConfig.createMethods) {\n if (methodSig === BARE_CALL) {\n yield* bareMethodCallParams({\n generator,\n name: 'bare',\n description: `Creates a new instance of the ${app.name} smart contract using a bare call`,\n verb: 'create',\n type: 'send',\n includeCompilation: true,\n })\n } else {\n const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n yield* abiMethodCallParams({\n generator,\n method,\n description: `Creates a new instance of the ${app.name} smart contract using an ABI method call`,\n verb: 'create',\n type: 'send',\n includeCompilation: true,\n })\n }\n }\n yield DecIndent\n yield '},'\n yield NewLine\n }\n}\n\nfunction* paramMethods(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig } = ctx\n\n yield* operationMethods(\n ctx,\n `Creates a new instance of the ${app.name} smart contract`,\n callConfig.createMethods,\n 'create',\n 'params',\n true,\n )\n\n yield* operationMethods(\n ctx,\n `Updates an existing instance of the ${app.name} smart contract`,\n callConfig.updateMethods,\n 'deployUpdate',\n 'params',\n true,\n )\n yield* operationMethods(\n ctx,\n `Deletes an existing instance of the ${app.name} smart contract`,\n callConfig.deleteMethods,\n 'deployDelete',\n 'params',\n )\n}\n\nfunction* createTransactionMethods(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig } = ctx\n\n yield* operationMethods(\n ctx,\n `Creates a new instance of the ${app.name} smart contract`,\n callConfig.createMethods,\n 'create',\n 'createTransaction',\n true,\n )\n}\n\nfunction* bareMethodCallParams({\n generator: { app, name: clientName },\n name,\n description,\n verb,\n type,\n includeCompilation,\n}: {\n generator: GeneratorContext\n name: string\n description: string\n verb: 'create' | 'deployUpdate' | 'deployDelete'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n}): DocumentParts {\n const onComplete = verb === 'create' ? getCreateOnCompleteOptions(BARE_CALL, app) : undefined\n yield* jsDoc({\n description: `${description}.`,\n params: {\n params: `The params for the bare (raw) call`,\n },\n returns:\n type === 'params' || type === 'createTransaction'\n ? `The ${type === 'createTransaction' ? 'transaction' : type} for a ${verb} call`\n : `The ${verb} result`,\n })\n yield `${name}: ${type === 'send' ? 'async ' : ''}(params?: Expand<AppClientBareCallParams${\n includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n }${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>) => {`\n if (type === 'params' || type === 'createTransaction') {\n yield* indent(`return this.appFactory.${type}.bare.${verb}(params)`)\n } else {\n yield* indent(\n `const result = await this.appFactory.send.bare.create(params)`,\n `return { result: result.result, appClient: new ${clientName}Client(result.appClient) }`,\n )\n }\n yield '},'\n}\n\nfunction* abiMethodCallParams({\n generator: { app, methodSignatureToUniqueName, name, sanitizer },\n method,\n description,\n verb,\n type,\n includeCompilation,\n}: {\n generator: GeneratorContext\n method: Method\n description: string\n verb: 'create' | 'deployUpdate' | 'deployDelete'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n}) {\n const methodSig = new ABIMethod(method).getSignature()\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const onComplete = verb === 'create' ? getCreateOnCompleteOptions(methodSig, app) : undefined\n yield* jsDoc({\n description: `${description} using the ${methodSig} ABI method.`,\n abiDescription: method?.desc,\n params: {\n params: `The params for the smart contract call`,\n },\n returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,\n })\n const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig)\n yield `${methodName}: ${type === 'send' ? 'async ' : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${\n includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n }${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''}) => {`\n if (type === 'params' || type === 'createTransaction') {\n yield* indent(\n `return this.appFactory.${type}.${verb}(${name}ParamsFactory.${verb == 'deployDelete' ? 'delete' : verb === 'deployUpdate' ? 'update' : verb}${methodNameAccessor}(params))`,\n )\n } else {\n yield* indent(\n `const result = await this.appFactory.send.create(${name}ParamsFactory.${verb}${methodNameAccessor}(params))`,\n `return { result: { ...result.result, return: result.result.return as unknown as (undefined | ${name}Returns['${methodSigSafe}']) }, appClient: new ${name}Client(result.appClient) }`,\n )\n }\n yield '},'\n}\n\nfunction* operationMethods(\n generator: GeneratorContext,\n description: string,\n methods: MethodList,\n verb: 'create' | 'deployUpdate' | 'deployDelete',\n type: 'params' | 'createTransaction',\n includeCompilation?: boolean,\n): DocumentParts {\n if (methods.length) {\n yield* jsDoc(`Gets available ${verb} methods`)\n yield `${verb}: {`\n yield IncIndent\n for (const methodSig of methods) {\n if (methodSig === BARE_CALL) {\n yield* bareMethodCallParams({\n generator,\n name: 'bare',\n description: `${description} using a bare call`,\n verb,\n type,\n includeCompilation,\n })\n } else {\n const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n yield* abiMethodCallParams({\n generator,\n method,\n description,\n verb,\n type,\n includeCompilation,\n })\n }\n }\n yield DecIndent\n yield '},'\n yield NewLine\n }\n}\n\nfunction* deployMethod(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig, name } = ctx\n yield* jsDoc({\n description: `Idempotently deploys the ${app.name} smart contract.`,\n params: {\n params: 'The arguments for the contract calls and any additional parameters for the call',\n },\n returns: 'The deployment result',\n })\n yield `public async deploy(params: ${name}DeployParams = {}) {`\n yield IncIndent\n\n yield `const result = await this.appFactory.deploy({`\n yield IncIndent\n yield `...params,`\n if (callConfig.createMethods.filter((m) => m !== BARE_CALL).length) {\n yield `createParams: params.createParams?.method ? ${name}ParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (${name}CreateCallParams & { args: Uint8Array[] }) : undefined,`\n }\n if (callConfig.updateMethods.filter((m) => m !== BARE_CALL).length) {\n yield `updateParams: params.updateParams?.method ? ${name}ParamsFactory.update._resolveByMethod(params.updateParams) : params.updateParams ? params.updateParams as (${name}UpdateCallParams & { args: Uint8Array[] }) : undefined,`\n }\n if (callConfig.deleteMethods.filter((m) => m !== BARE_CALL).length) {\n yield `deleteParams: params.deleteParams?.method ? ${name}ParamsFactory.delete._resolveByMethod(params.deleteParams) : params.deleteParams ? params.deleteParams as (${name}DeleteCallParams & { args: Uint8Array[] }) : undefined,`\n }\n yield DecIndent\n yield `})`\n yield `return { result: result.result, appClient: new ${name}Client(result.appClient) }`\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n"],"names":["jsDoc","IncIndent","NewLine","DecIndentAndCloseBlock","BARE_CALL","ABIMethod","DecIndent","getCreateOnCompleteOptions","indent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-factory.js","sources":["../../src/client/app-factory.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\n\nimport { GeneratorContext } from './generator-context'\n\nimport { AppClientMethodContext, AbiMethodClientContext, isAbiMethod } from './app-client-context'\n\nexport function* appFactory(ctx: GeneratorContext): DocumentParts {\n const { app, name } = ctx\n\n yield* jsDoc(\n `A factory to create and deploy one or more instance of the ${app.name} smart contract and to create one or more app clients to interact with those (or other) app instances`,\n )\n yield `export class ${name}Factory {`\n yield IncIndent\n yield* jsDoc(`The underlying \\`AppFactory\\` for when you want to have more flexibility`)\n yield 'public readonly appFactory: _AppFactory'\n yield NewLine\n\n yield* jsDoc({\n description: `Creates a new instance of \\`${name}Factory\\``,\n params: {\n params: 'The parameters to initialise the app factory with',\n },\n })\n\n yield `\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n })\n }\n\n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName\n }\n\n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC\n }\n\n /** A reference to the underlying \\`AlgorandClient\\` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand\n }\n\n /**\n * Returns a new \\`AppClient\\` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The \\`AppClient\\`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new ${name}Client(this.appFactory.getAppClientById(params))\n }\n\n /**\n * Returns a new \\`AppClient\\` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The \\`AppClient\\`\n */\n public async getAppClientByCreatorAndName(\n params: AppFactoryResolveAppClientByCreatorAndNameParams,\n ) {\n return new ${name}Client(await this.appFactory.getAppClientByCreatorAndName(params))\n }\n `\n\n yield* deployMethod(ctx)\n yield* params(ctx)\n yield* createTransaction(ctx)\n yield* send(ctx)\n yield DecIndentAndCloseBlock\n}\n\nfunction* params(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(\n `Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.`,\n )\n yield `readonly params = {`\n yield IncIndent\n yield* paramMethods(ctx)\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* createTransaction(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Create transactions for the current app`)\n yield `readonly createTransaction = {`\n yield IncIndent\n yield* createTransactionMethods(ctx)\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* send(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Send calls to the current app`)\n yield `readonly send = {`\n yield IncIndent\n yield* createMethods(ctx)\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* createMethods(generator: GeneratorContext): DocumentParts {\n const { app } = generator\n if (app.createMethods.length) {\n yield* jsDoc(`Gets available create methods`)\n yield `create: {`\n yield IncIndent\n for (const method of generator.app.createMethods) {\n if (!isAbiMethod(method)) {\n yield* bareMethodCallParams({\n generator,\n name: 'bare',\n description: `Creates a new instance of the ${app.name} smart contract using a bare call`,\n verb: 'create',\n type: 'send',\n includeCompilation: true,\n })\n } else {\n yield* abiMethodCallParams({\n generator,\n method,\n description: `Creates a new instance of the ${app.name} smart contract using an ABI method call`,\n verb: 'create',\n type: 'send',\n includeCompilation: true,\n })\n }\n }\n yield DecIndent\n yield '},'\n yield NewLine\n }\n}\n\nfunction* paramMethods(ctx: GeneratorContext): DocumentParts {\n const { app } = ctx\n\n yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`, app.createMethods, 'create', 'params', true)\n\n yield* operationMethods(\n ctx,\n `Updates an existing instance of the ${app.name} smart contract`,\n app.updateMethods,\n 'deployUpdate',\n 'params',\n true,\n )\n yield* operationMethods(\n ctx,\n `Deletes an existing instance of the ${app.name} smart contract`,\n app.deleteMethods,\n 'deployDelete',\n 'params',\n )\n}\n\nfunction* createTransactionMethods(ctx: GeneratorContext): DocumentParts {\n const { app } = ctx\n\n yield* operationMethods(\n ctx,\n `Creates a new instance of the ${app.name} smart contract`,\n app.createMethods,\n 'create',\n 'createTransaction',\n true,\n )\n}\n\nfunction* bareMethodCallParams({\n generator: { app, name: clientName },\n name,\n description,\n verb,\n type,\n includeCompilation,\n}: {\n generator: GeneratorContext\n name: string\n description: string\n verb: 'create' | 'deployUpdate' | 'deployDelete'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n}): DocumentParts {\n const onComplete = verb === 'create' ? app.bareMethod.createActions.inputType : undefined\n yield* jsDoc({\n description: `${description}.`,\n params: {\n params: `The params for the bare (raw) call`,\n },\n returns:\n type === 'params' || type === 'createTransaction'\n ? `The ${type === 'createTransaction' ? 'transaction' : type} for a ${verb} call`\n : `The ${verb} result`,\n })\n yield `${name}: ${type === 'send' ? 'async ' : ''}(params?: Expand<AppClientBareCallParams${\n includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n }${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' ? ' & SendParams' : ''}${onComplete?.typeLiteral ? ` & ${onComplete.typeLiteral}` : ''}>) => {`\n if (type === 'params' || type === 'createTransaction') {\n yield* indent(`return this.appFactory.${type}.bare.${verb}(params)`)\n } else {\n yield* indent(\n `const result = await this.appFactory.send.bare.create(params)`,\n `return { result: result.result, appClient: new ${clientName}Client(result.appClient) }`,\n )\n }\n yield '},'\n}\n\nfunction* abiMethodCallParams({\n generator: { name, sanitizer },\n method,\n description,\n verb,\n type,\n includeCompilation,\n}: {\n generator: GeneratorContext\n method: AbiMethodClientContext\n description: string\n verb: 'create' | 'deployUpdate' | 'deployDelete'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n}) {\n const methodSig = method.signature\n const uniqueName = method.uniqueName.original\n const onComplete = verb === 'create' ? method.createActions.inputType : undefined\n yield* jsDoc({\n description: `${description} using the ${methodSig} ABI method.`,\n abiDescription: method?.desc,\n params: {\n params: `The params for the smart contract call`,\n },\n returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,\n })\n const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig)\n yield `${methodName}: ${type === 'send' ? 'async ' : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${\n includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n }${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' ? ' & SendParams' : ''}${onComplete?.typeLiteral ? ` & ${onComplete.typeLiteral}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''}) => {`\n if (type === 'params' || type === 'createTransaction') {\n yield* indent(\n `return this.appFactory.${type}.${verb}(${name}ParamsFactory.${verb == 'deployDelete' ? 'delete' : verb === 'deployUpdate' ? 'update' : verb}${methodNameAccessor}(params))`,\n )\n } else {\n yield* indent(\n `const result = await this.appFactory.send.create(${name}ParamsFactory.${verb}${methodNameAccessor}(params))`,\n `return { result: { ...result.result, return: result.result.return as unknown as (undefined | ${name}Returns['${methodSigSafe}']) }, appClient: new ${name}Client(result.appClient) }`,\n )\n }\n yield '},'\n}\n\nfunction* operationMethods(\n generator: GeneratorContext,\n description: string,\n methods: AppClientMethodContext[],\n verb: 'create' | 'deployUpdate' | 'deployDelete',\n type: 'params' | 'createTransaction',\n includeCompilation?: boolean,\n): DocumentParts {\n if (methods.length) {\n yield* jsDoc(`Gets available ${verb} methods`)\n yield `${verb}: {`\n yield IncIndent\n for (const method of methods) {\n if (!isAbiMethod(method)) {\n yield* bareMethodCallParams({\n generator,\n name: 'bare',\n description: `${description} using a bare call`,\n verb,\n type,\n includeCompilation,\n })\n } else {\n yield* abiMethodCallParams({\n generator,\n method,\n description,\n verb,\n type,\n includeCompilation,\n })\n }\n }\n yield DecIndent\n yield '},'\n yield NewLine\n }\n}\n\nfunction* deployMethod(ctx: GeneratorContext): DocumentParts {\n const { app, name } = ctx\n yield* jsDoc({\n description: `Idempotently deploys the ${app.name} smart contract.`,\n params: {\n params: 'The arguments for the contract calls and any additional parameters for the call',\n },\n returns: 'The deployment result',\n })\n yield `public async deploy(params: ${name}DeployParams = {}) {`\n yield IncIndent\n\n yield `const result = await this.appFactory.deploy({`\n yield IncIndent\n yield `...params,`\n if (app.createMethods.some((m) => !m.isBare)) {\n yield `createParams: params.createParams?.method ? ${name}ParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (${name}CreateCallParams & { args: Uint8Array[] }) : undefined,`\n }\n if (app.updateMethods.some((m) => !m.isBare)) {\n yield `updateParams: params.updateParams?.method ? ${name}ParamsFactory.update._resolveByMethod(params.updateParams) : params.updateParams ? params.updateParams as (${name}UpdateCallParams & { args: Uint8Array[] }) : undefined,`\n }\n if (app.deleteMethods.some((m) => !m.isBare)) {\n yield `deleteParams: params.deleteParams?.method ? ${name}ParamsFactory.delete._resolveByMethod(params.deleteParams) : params.deleteParams ? params.deleteParams as (${name}DeleteCallParams & { args: Uint8Array[] }) : undefined,`\n }\n yield DecIndent\n yield `})`\n yield `return { result: result.result, appClient: new ${name}Client(result.appClient) }`\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n"],"names":["jsDoc","IncIndent","NewLine","DecIndentAndCloseBlock","isAbiMethod","DecIndent","indent"],"mappings":"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"}
|
package/client/app-factory.mjs
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { jsDoc, IncIndent, NewLine, DecIndentAndCloseBlock, DecIndent, indent } from '../output/writer.mjs';
|
|
2
|
-
import {
|
|
3
|
-
import { getCreateOnCompleteOptions } from './deploy-types.mjs';
|
|
4
|
-
import { ABIMethod } from 'algosdk';
|
|
2
|
+
import { isAbiMethod } from './app-client-context.mjs';
|
|
5
3
|
|
|
6
4
|
function* appFactory(ctx) {
|
|
7
5
|
const { app, name } = ctx;
|
|
@@ -99,12 +97,12 @@ function* send(ctx) {
|
|
|
99
97
|
}
|
|
100
98
|
function* createMethods(generator) {
|
|
101
99
|
const { app } = generator;
|
|
102
|
-
if (
|
|
100
|
+
if (app.createMethods.length) {
|
|
103
101
|
yield* jsDoc(`Gets available create methods`);
|
|
104
102
|
yield `create: {`;
|
|
105
103
|
yield IncIndent;
|
|
106
|
-
for (const
|
|
107
|
-
if (
|
|
104
|
+
for (const method of generator.app.createMethods) {
|
|
105
|
+
if (!isAbiMethod(method)) {
|
|
108
106
|
yield* bareMethodCallParams({
|
|
109
107
|
generator,
|
|
110
108
|
name: 'bare',
|
|
@@ -115,7 +113,6 @@ function* createMethods(generator) {
|
|
|
115
113
|
});
|
|
116
114
|
}
|
|
117
115
|
else {
|
|
118
|
-
const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig);
|
|
119
116
|
yield* abiMethodCallParams({
|
|
120
117
|
generator,
|
|
121
118
|
method,
|
|
@@ -132,17 +129,17 @@ function* createMethods(generator) {
|
|
|
132
129
|
}
|
|
133
130
|
}
|
|
134
131
|
function* paramMethods(ctx) {
|
|
135
|
-
const { app
|
|
136
|
-
yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`,
|
|
137
|
-
yield* operationMethods(ctx, `Updates an existing instance of the ${app.name} smart contract`,
|
|
138
|
-
yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`,
|
|
132
|
+
const { app } = ctx;
|
|
133
|
+
yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`, app.createMethods, 'create', 'params', true);
|
|
134
|
+
yield* operationMethods(ctx, `Updates an existing instance of the ${app.name} smart contract`, app.updateMethods, 'deployUpdate', 'params', true);
|
|
135
|
+
yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`, app.deleteMethods, 'deployDelete', 'params');
|
|
139
136
|
}
|
|
140
137
|
function* createTransactionMethods(ctx) {
|
|
141
|
-
const { app
|
|
142
|
-
yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`,
|
|
138
|
+
const { app } = ctx;
|
|
139
|
+
yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`, app.createMethods, 'create', 'createTransaction', true);
|
|
143
140
|
}
|
|
144
141
|
function* bareMethodCallParams({ generator: { app, name: clientName }, name, description, verb, type, includeCompilation, }) {
|
|
145
|
-
const onComplete = verb === 'create' ?
|
|
142
|
+
const onComplete = verb === 'create' ? app.bareMethod.createActions.inputType : undefined;
|
|
146
143
|
yield* jsDoc({
|
|
147
144
|
description: `${description}.`,
|
|
148
145
|
params: {
|
|
@@ -152,7 +149,7 @@ function* bareMethodCallParams({ generator: { app, name: clientName }, name, des
|
|
|
152
149
|
? `The ${type === 'createTransaction' ? 'transaction' : type} for a ${verb} call`
|
|
153
150
|
: `The ${verb} result`,
|
|
154
151
|
});
|
|
155
|
-
yield `${name}: ${type === 'send' ? 'async ' : ''}(params?: Expand<AppClientBareCallParams${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.
|
|
152
|
+
yield `${name}: ${type === 'send' ? 'async ' : ''}(params?: Expand<AppClientBareCallParams${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.typeLiteral ? ` & ${onComplete.typeLiteral}` : ''}>) => {`;
|
|
156
153
|
if (type === 'params' || type === 'createTransaction') {
|
|
157
154
|
yield* indent(`return this.appFactory.${type}.bare.${verb}(params)`);
|
|
158
155
|
}
|
|
@@ -161,10 +158,10 @@ function* bareMethodCallParams({ generator: { app, name: clientName }, name, des
|
|
|
161
158
|
}
|
|
162
159
|
yield '},';
|
|
163
160
|
}
|
|
164
|
-
function* abiMethodCallParams({ generator: {
|
|
165
|
-
const methodSig =
|
|
166
|
-
const uniqueName =
|
|
167
|
-
const onComplete = verb === 'create' ?
|
|
161
|
+
function* abiMethodCallParams({ generator: { name, sanitizer }, method, description, verb, type, includeCompilation, }) {
|
|
162
|
+
const methodSig = method.signature;
|
|
163
|
+
const uniqueName = method.uniqueName.original;
|
|
164
|
+
const onComplete = verb === 'create' ? method.createActions.inputType : undefined;
|
|
168
165
|
yield* jsDoc({
|
|
169
166
|
description: `${description} using the ${methodSig} ABI method.`,
|
|
170
167
|
abiDescription: method?.desc,
|
|
@@ -176,7 +173,7 @@ function* abiMethodCallParams({ generator: { app, methodSignatureToUniqueName, n
|
|
|
176
173
|
const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName);
|
|
177
174
|
const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
|
|
178
175
|
const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig);
|
|
179
|
-
yield `${methodName}: ${type === 'send' ? 'async ' : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.
|
|
176
|
+
yield `${methodName}: ${type === 'send' ? 'async ' : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.typeLiteral ? ` & ${onComplete.typeLiteral}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''}) => {`;
|
|
180
177
|
if (type === 'params' || type === 'createTransaction') {
|
|
181
178
|
yield* indent(`return this.appFactory.${type}.${verb}(${name}ParamsFactory.${verb == 'deployDelete' ? 'delete' : verb === 'deployUpdate' ? 'update' : verb}${methodNameAccessor}(params))`);
|
|
182
179
|
}
|
|
@@ -190,8 +187,8 @@ function* operationMethods(generator, description, methods, verb, type, includeC
|
|
|
190
187
|
yield* jsDoc(`Gets available ${verb} methods`);
|
|
191
188
|
yield `${verb}: {`;
|
|
192
189
|
yield IncIndent;
|
|
193
|
-
for (const
|
|
194
|
-
if (
|
|
190
|
+
for (const method of methods) {
|
|
191
|
+
if (!isAbiMethod(method)) {
|
|
195
192
|
yield* bareMethodCallParams({
|
|
196
193
|
generator,
|
|
197
194
|
name: 'bare',
|
|
@@ -202,7 +199,6 @@ function* operationMethods(generator, description, methods, verb, type, includeC
|
|
|
202
199
|
});
|
|
203
200
|
}
|
|
204
201
|
else {
|
|
205
|
-
const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig);
|
|
206
202
|
yield* abiMethodCallParams({
|
|
207
203
|
generator,
|
|
208
204
|
method,
|
|
@@ -219,7 +215,7 @@ function* operationMethods(generator, description, methods, verb, type, includeC
|
|
|
219
215
|
}
|
|
220
216
|
}
|
|
221
217
|
function* deployMethod(ctx) {
|
|
222
|
-
const { app,
|
|
218
|
+
const { app, name } = ctx;
|
|
223
219
|
yield* jsDoc({
|
|
224
220
|
description: `Idempotently deploys the ${app.name} smart contract.`,
|
|
225
221
|
params: {
|
|
@@ -232,13 +228,13 @@ function* deployMethod(ctx) {
|
|
|
232
228
|
yield `const result = await this.appFactory.deploy({`;
|
|
233
229
|
yield IncIndent;
|
|
234
230
|
yield `...params,`;
|
|
235
|
-
if (
|
|
231
|
+
if (app.createMethods.some((m) => !m.isBare)) {
|
|
236
232
|
yield `createParams: params.createParams?.method ? ${name}ParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (${name}CreateCallParams & { args: Uint8Array[] }) : undefined,`;
|
|
237
233
|
}
|
|
238
|
-
if (
|
|
234
|
+
if (app.updateMethods.some((m) => !m.isBare)) {
|
|
239
235
|
yield `updateParams: params.updateParams?.method ? ${name}ParamsFactory.update._resolveByMethod(params.updateParams) : params.updateParams ? params.updateParams as (${name}UpdateCallParams & { args: Uint8Array[] }) : undefined,`;
|
|
240
236
|
}
|
|
241
|
-
if (
|
|
237
|
+
if (app.deleteMethods.some((m) => !m.isBare)) {
|
|
242
238
|
yield `deleteParams: params.deleteParams?.method ? ${name}ParamsFactory.delete._resolveByMethod(params.deleteParams) : params.deleteParams ? params.deleteParams as (${name}DeleteCallParams & { args: Uint8Array[] }) : undefined,`;
|
|
243
239
|
}
|
|
244
240
|
yield DecIndent;
|