@algorandfoundation/algokit-client-generator 3.0.6 → 3.1.0-beta.1

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.
Files changed (159) hide show
  1. package/README.md +4 -2
  2. package/client/{call-factory.d.ts → app-client.d.ts} +1 -1
  3. package/client/{call-client.d.ts → app-factory.d.ts} +1 -1
  4. package/client/deploy-types.d.ts +8 -4
  5. package/client/generate.d.ts +2 -2
  6. package/client/generator-context.d.ts +4 -4
  7. package/client/helpers/get-call-config-summary.d.ts +8 -3
  8. package/client/helpers/get-equivalent-type.d.ts +6 -1
  9. package/client/params-factory.d.ts +3 -0
  10. package/client/utility-types.d.ts +0 -7
  11. package/package.json +4 -3
  12. package/schema/load.d.ts +3 -3
  13. package/{cli.js → src/cli.js} +1 -1
  14. package/src/cli.js.map +1 -0
  15. package/{cli.mjs → src/cli.mjs} +1 -1
  16. package/src/cli.mjs.map +1 -0
  17. package/src/client/app-client.js +288 -0
  18. package/src/client/app-client.js.map +1 -0
  19. package/src/client/app-client.mjs +286 -0
  20. package/src/client/app-client.mjs.map +1 -0
  21. package/src/client/app-factory.js +238 -0
  22. package/src/client/app-factory.js.map +1 -0
  23. package/src/client/app-factory.mjs +236 -0
  24. package/src/client/app-factory.mjs.map +1 -0
  25. package/src/client/app-types.js +263 -0
  26. package/src/client/app-types.js.map +1 -0
  27. package/src/client/app-types.mjs +261 -0
  28. package/src/client/app-types.mjs.map +1 -0
  29. package/{client → src/client}/call-composer-types.js +23 -53
  30. package/src/client/call-composer-types.js.map +1 -0
  31. package/{client → src/client}/call-composer-types.mjs +23 -34
  32. package/src/client/call-composer-types.mjs.map +1 -0
  33. package/src/client/call-composer.js +135 -0
  34. package/src/client/call-composer.js.map +1 -0
  35. package/src/client/call-composer.mjs +133 -0
  36. package/src/client/call-composer.mjs.map +1 -0
  37. package/src/client/deploy-types.js +115 -0
  38. package/src/client/deploy-types.js.map +1 -0
  39. package/src/client/deploy-types.mjs +111 -0
  40. package/src/client/deploy-types.mjs.map +1 -0
  41. package/{client → src/client}/generate.js +18 -6
  42. package/src/client/generate.js.map +1 -0
  43. package/{client → src/client}/generate.mjs +18 -6
  44. package/src/client/generate.mjs.map +1 -0
  45. package/src/client/generator-context.js +23 -0
  46. package/src/client/generator-context.js.map +1 -0
  47. package/{client → src/client}/generator-context.mjs +5 -5
  48. package/src/client/generator-context.mjs.map +1 -0
  49. package/src/client/helpers/get-call-config-summary.js +60 -0
  50. package/src/client/helpers/get-call-config-summary.js.map +1 -0
  51. package/src/client/helpers/get-call-config-summary.mjs +57 -0
  52. package/src/client/helpers/get-call-config-summary.mjs.map +1 -0
  53. package/{client → src/client}/helpers/get-equivalent-type.js +10 -6
  54. package/src/client/helpers/get-equivalent-type.js.map +1 -0
  55. package/{client → src/client}/helpers/get-equivalent-type.mjs +10 -6
  56. package/src/client/helpers/get-equivalent-type.mjs.map +1 -0
  57. package/src/client/imports.js +25 -0
  58. package/src/client/imports.js.map +1 -0
  59. package/src/client/imports.mjs +23 -0
  60. package/src/client/imports.mjs.map +1 -0
  61. package/src/client/params-factory.js +126 -0
  62. package/src/client/params-factory.js.map +1 -0
  63. package/src/client/params-factory.mjs +124 -0
  64. package/src/client/params-factory.mjs.map +1 -0
  65. package/src/client/utility-types.js +44 -0
  66. package/src/client/utility-types.js.map +1 -0
  67. package/src/client/utility-types.mjs +42 -0
  68. package/src/client/utility-types.mjs.map +1 -0
  69. package/{output → src/output}/writer.js +17 -3
  70. package/src/output/writer.js.map +1 -0
  71. package/{output → src/output}/writer.mjs +17 -3
  72. package/src/output/writer.mjs.map +1 -0
  73. package/{schema → src/schema}/application.schema.json.js +2 -2
  74. package/{schema → src/schema}/application.schema.json.mjs +2 -2
  75. package/src/schema/arc56.schema.json.js +787 -0
  76. package/src/schema/arc56.schema.json.js.map +1 -0
  77. package/src/schema/arc56.schema.json.mjs +780 -0
  78. package/src/schema/arc56.schema.json.mjs.map +1 -0
  79. package/src/schema/load.js +40 -0
  80. package/src/schema/load.js.map +1 -0
  81. package/src/schema/load.mjs +37 -0
  82. package/src/schema/load.mjs.map +1 -0
  83. package/src/util/boom.js.map +1 -0
  84. package/src/util/boom.mjs.map +1 -0
  85. package/src/util/color-console.js.map +1 -0
  86. package/src/util/color-console.mjs.map +1 -0
  87. package/src/util/sanitization.js.map +1 -0
  88. package/src/util/sanitization.mjs.map +1 -0
  89. package/cli.js.map +0 -1
  90. package/cli.mjs.map +0 -1
  91. package/client/app-types.js +0 -165
  92. package/client/app-types.js.map +0 -1
  93. package/client/app-types.mjs +0 -144
  94. package/client/app-types.mjs.map +0 -1
  95. package/client/call-client.js +0 -341
  96. package/client/call-client.js.map +0 -1
  97. package/client/call-client.mjs +0 -320
  98. package/client/call-client.mjs.map +0 -1
  99. package/client/call-composer-types.js.map +0 -1
  100. package/client/call-composer-types.mjs.map +0 -1
  101. package/client/call-composer.js +0 -149
  102. package/client/call-composer.js.map +0 -1
  103. package/client/call-composer.mjs +0 -128
  104. package/client/call-composer.mjs.map +0 -1
  105. package/client/call-factory.js +0 -142
  106. package/client/call-factory.js.map +0 -1
  107. package/client/call-factory.mjs +0 -121
  108. package/client/call-factory.mjs.map +0 -1
  109. package/client/deploy-types.js +0 -97
  110. package/client/deploy-types.js.map +0 -1
  111. package/client/deploy-types.mjs +0 -94
  112. package/client/deploy-types.mjs.map +0 -1
  113. package/client/generate.js.map +0 -1
  114. package/client/generate.mjs.map +0 -1
  115. package/client/generator-context.js +0 -42
  116. package/client/generator-context.js.map +0 -1
  117. package/client/generator-context.mjs.map +0 -1
  118. package/client/helpers/get-call-config-summary.js +0 -58
  119. package/client/helpers/get-call-config-summary.js.map +0 -1
  120. package/client/helpers/get-call-config-summary.mjs +0 -55
  121. package/client/helpers/get-call-config-summary.mjs.map +0 -1
  122. package/client/helpers/get-equivalent-type.js.map +0 -1
  123. package/client/helpers/get-equivalent-type.mjs.map +0 -1
  124. package/client/imports.js +0 -31
  125. package/client/imports.js.map +0 -1
  126. package/client/imports.mjs +0 -29
  127. package/client/imports.mjs.map +0 -1
  128. package/client/utility-types.js +0 -57
  129. package/client/utility-types.js.map +0 -1
  130. package/client/utility-types.mjs +0 -54
  131. package/client/utility-types.mjs.map +0 -1
  132. package/output/writer.js.map +0 -1
  133. package/output/writer.mjs.map +0 -1
  134. package/schema/load.js +0 -26
  135. package/schema/load.js.map +0 -1
  136. package/schema/load.mjs +0 -23
  137. package/schema/load.mjs.map +0 -1
  138. package/util/boom.js.map +0 -1
  139. package/util/boom.mjs.map +0 -1
  140. package/util/color-console.js.map +0 -1
  141. package/util/color-console.mjs.map +0 -1
  142. package/util/sanitization.js.map +0 -1
  143. package/util/sanitization.mjs.map +0 -1
  144. /package/{index.js → src/index.js} +0 -0
  145. /package/{index.js.map → src/index.js.map} +0 -0
  146. /package/{index.mjs → src/index.mjs} +0 -0
  147. /package/{index.mjs.map → src/index.mjs.map} +0 -0
  148. /package/{schema → src/schema}/application.schema.json.js.map +0 -0
  149. /package/{schema → src/schema}/application.schema.json.mjs.map +0 -0
  150. /package/{schema → src/schema}/contract.schema.json.js +0 -0
  151. /package/{schema → src/schema}/contract.schema.json.js.map +0 -0
  152. /package/{schema → src/schema}/contract.schema.json.mjs +0 -0
  153. /package/{schema → src/schema}/contract.schema.json.mjs.map +0 -0
  154. /package/{util → src/util}/boom.js +0 -0
  155. /package/{util → src/util}/boom.mjs +0 -0
  156. /package/{util → src/util}/color-console.js +0 -0
  157. /package/{util → src/util}/color-console.mjs +0 -0
  158. /package/{util → src/util}/sanitization.js +0 -0
  159. /package/{util → src/util}/sanitization.mjs +0 -0
@@ -0,0 +1,135 @@
1
+ 'use strict';
2
+
3
+ var writer = require('../output/writer.js');
4
+ var getCallConfigSummary = require('./helpers/get-call-config-summary.js');
5
+ var deployTypes = require('./deploy-types.js');
6
+ var algosdk = require('algosdk');
7
+
8
+ function* composeMethod(ctx) {
9
+ const { name, callConfig } = ctx;
10
+ yield `public newGroup(): ${name}Composer {`;
11
+ yield writer.IncIndent;
12
+ yield `const client = this`;
13
+ yield `const composer = client.appClient.newGroup()`;
14
+ yield `const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []`;
15
+ yield `return {`;
16
+ yield writer.IncIndent;
17
+ yield* callComposerNoops(ctx);
18
+ // This is async and unless we bring back promiseChain (which is possible) it's not a nice
19
+ // experience to expose update method(s)
20
+ //yield* callComposerOperationMethods(ctx, callConfig.updateMethods, 'update', true)
21
+ yield* callComposerOperationMethods(ctx, callConfig.deleteMethods, 'delete');
22
+ yield* callComposerOperationMethods(ctx, callConfig.optInMethods, 'optIn');
23
+ yield* callComposerOperationMethods(ctx, callConfig.closeOutMethods, 'closeOut');
24
+ yield* callComposerClearState(ctx);
25
+ yield `addTransaction(txn: Transaction, signer?: TransactionSigner) {`;
26
+ yield writer.IncIndent;
27
+ yield 'composer.addTransaction(txn, signer)';
28
+ yield 'return this';
29
+ yield writer.DecIndent;
30
+ yield '},';
31
+ yield `composer() {`;
32
+ yield writer.IncIndent;
33
+ yield 'return composer';
34
+ yield writer.DecIndent;
35
+ yield '},';
36
+ yield `async simulate(options?: SimulateOptions) {`;
37
+ yield writer.IncIndent;
38
+ yield `const result = await composer.simulate(options)`;
39
+ yield `return {`;
40
+ yield writer.IncIndent;
41
+ yield `...result,`;
42
+ yield `returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)`;
43
+ yield writer.DecIndentAndCloseBlock;
44
+ yield writer.DecIndent;
45
+ yield '},';
46
+ yield `async execute(params?: ExecuteParams) {`;
47
+ yield writer.IncIndent;
48
+ yield `const result = await composer.execute(params)`;
49
+ yield `return {`;
50
+ yield writer.IncIndent;
51
+ yield `...result,`;
52
+ yield `returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)`;
53
+ yield writer.DecIndentAndCloseBlock;
54
+ yield writer.DecIndentAndCloseBlock;
55
+ yield writer.DecIndent;
56
+ yield `} as unknown as ${name}Composer`;
57
+ yield writer.DecIndentAndCloseBlock;
58
+ }
59
+ function* callComposerNoops({ app, callConfig, methodSignatureToUniqueName, sanitizer }) {
60
+ if (callConfig.callMethods.includes(getCallConfigSummary.BARE_CALL)) {
61
+ yield* writer.jsDoc(`Add a bare method call to the ${app.name} contract`);
62
+ yield `bare(params: AppClientBareCallParams & ${deployTypes.getCallOnCompleteOptions(getCallConfigSummary.BARE_CALL, app).type}) {`;
63
+ yield writer.IncIndent;
64
+ yield `composer.addAppCall(client.params.bare(params))`;
65
+ yield `return this`;
66
+ yield writer.DecIndent;
67
+ yield '},';
68
+ }
69
+ for (const methodSignature of callConfig.callMethods.filter((m) => m !== getCallConfigSummary.BARE_CALL).map((m) => m)) {
70
+ const methodName = sanitizer.makeSafeMethodIdentifier(methodSignatureToUniqueName[methodSignature]);
71
+ const methodSignatureSafe = sanitizer.makeSafeStringTypeLiteral(methodSignature);
72
+ const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
73
+ // Skip methods which don't support a no_op call config
74
+ if (!callConfig.callMethods.includes(methodSignature))
75
+ continue;
76
+ yield* writer.jsDoc(`Add a ${methodSignature} method call against the ${app.name} contract`);
77
+ yield `${methodName}(params: CallParams<'${methodSignatureSafe}'> & ${deployTypes.getCallOnCompleteOptions(methodSignature, app).type}) {`;
78
+ yield writer.IncIndent;
79
+ yield `composer.addAppCallMethodCall(client.params${methodNameAccessor}(params))`;
80
+ const outputTypeName = app.methods.find((m) => new algosdk.ABIMethod(m).getSignature() === methodSignature)?.returns.type;
81
+ yield `resultMappers.push(${outputTypeName && outputTypeName !== 'void' ? `(v) => client.decodeReturnValue('${methodSignatureSafe}', v)` : 'undefined'})`;
82
+ yield `return this`;
83
+ yield writer.DecIndent;
84
+ yield '},';
85
+ }
86
+ }
87
+ function* callComposerClearState({ app }) {
88
+ yield* writer.jsDoc(`Add a clear state call to the ${app.name} contract`);
89
+ yield `clearState(params: AppClientBareCallParams) {`;
90
+ yield writer.IncIndent;
91
+ yield `composer.addAppCall(client.params.clearState(params))`;
92
+ yield `return this`;
93
+ yield writer.DecIndent;
94
+ yield '},';
95
+ }
96
+ function* callComposerOperationMethods({ app, methodSignatureToUniqueName, sanitizer }, methods, verb, includeCompilation) {
97
+ const callType = verb === 'update' ? 'Update' : verb === 'delete' ? 'Delete' : 'Call';
98
+ if (methods.length) {
99
+ yield `get ${verb}() {`;
100
+ yield writer.IncIndent;
101
+ yield `const $this = this`;
102
+ yield `return {`;
103
+ yield writer.IncIndent;
104
+ for (const methodSig of methods) {
105
+ if (methodSig === getCallConfigSummary.BARE_CALL) {
106
+ yield `bare(params?: AppClientBareCallParams ${''}) {`;
107
+ yield writer.IncIndent;
108
+ yield `composer.addApp${callType}(client.params.${verb}.bare(params))`;
109
+ yield `return $this`;
110
+ yield writer.DecIndent;
111
+ yield '},';
112
+ }
113
+ else {
114
+ const uniqueName = methodSignatureToUniqueName[methodSig];
115
+ const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName);
116
+ const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
117
+ const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig);
118
+ yield `${methodName}(params: CallParams<'${methodSigSafe}'>${''}) {`;
119
+ yield writer.IncIndent;
120
+ yield `composer.addApp${callType}MethodCall(client.params.${verb}${methodNameAccessor}(params))`;
121
+ const outputTypeName = app.methods.find((m) => new algosdk.ABIMethod(m).getSignature() === methodSig)?.returns.type;
122
+ yield `resultMappers.push(${outputTypeName && outputTypeName !== 'void' ? `(v) => client.decodeReturnValue('${methodSigSafe}', v)` : 'undefined'})`;
123
+ yield `return $this`;
124
+ yield writer.DecIndent;
125
+ yield '},';
126
+ }
127
+ }
128
+ yield writer.DecIndentAndCloseBlock;
129
+ yield writer.DecIndent;
130
+ yield '},';
131
+ }
132
+ }
133
+
134
+ exports.composeMethod = composeMethod;
135
+ //# sourceMappingURL=call-composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-composer.js","sources":["../../../src/client/call-composer.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, jsDoc } from '../output/writer'\nimport { GeneratorContext } from './generator-context'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { getCallOnCompleteOptions } from './deploy-types'\nimport { ABIMethod, ABIMethodParams } from 'algosdk'\n\nexport function* composeMethod(ctx: GeneratorContext): DocumentParts {\n const { name, callConfig } = ctx\n yield `public newGroup(): ${name}Composer {`\n yield IncIndent\n\n yield `const client = this`\n yield `const composer = client.appClient.newGroup()`\n yield `const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []`\n yield `return {`\n yield IncIndent\n\n yield* callComposerNoops(ctx)\n // This is async and unless we bring back promiseChain (which is possible) it's not a nice\n // experience to expose update method(s)\n //yield* callComposerOperationMethods(ctx, callConfig.updateMethods, 'update', true)\n yield* callComposerOperationMethods(ctx, callConfig.deleteMethods, 'delete')\n yield* callComposerOperationMethods(ctx, callConfig.optInMethods, 'optIn')\n yield* callComposerOperationMethods(ctx, callConfig.closeOutMethods, 'closeOut')\n yield* callComposerClearState(ctx)\n\n yield `addTransaction(txn: Transaction, signer?: TransactionSigner) {`\n yield IncIndent\n yield 'composer.addTransaction(txn, signer)'\n yield 'return this'\n yield DecIndent\n yield '},'\n\n yield `composer() {`\n yield IncIndent\n yield 'return composer'\n yield DecIndent\n yield '},'\n\n yield `async simulate(options?: SimulateOptions) {`\n yield IncIndent\n yield `const result = await composer.simulate(options)`\n yield `return {`\n yield IncIndent\n yield `...result,`\n yield `returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)`\n yield DecIndentAndCloseBlock\n yield DecIndent\n yield '},'\n\n yield `async execute(params?: ExecuteParams) {`\n yield IncIndent\n yield `const result = await composer.execute(params)`\n yield `return {`\n yield IncIndent\n yield `...result,`\n yield `returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)`\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield DecIndent\n yield `} as unknown as ${name}Composer`\n\n yield DecIndentAndCloseBlock\n}\n\nfunction* callComposerNoops({ app, callConfig, methodSignatureToUniqueName, sanitizer }: GeneratorContext): DocumentParts {\n if (callConfig.callMethods.includes(BARE_CALL)) {\n yield* jsDoc(`Add a bare method call to the ${app.name} contract`)\n yield `bare(params: AppClientBareCallParams & ${getCallOnCompleteOptions(BARE_CALL, app).type}) {`\n yield IncIndent\n yield `composer.addAppCall(client.params.bare(params))`\n yield `return this`\n yield DecIndent\n yield '},'\n }\n\n for (const methodSignature of callConfig.callMethods.filter((m) => m !== BARE_CALL).map((m) => m as string)) {\n const methodName = sanitizer.makeSafeMethodIdentifier(methodSignatureToUniqueName[methodSignature])\n const methodSignatureSafe = sanitizer.makeSafeStringTypeLiteral(methodSignature)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n // Skip methods which don't support a no_op call config\n if (!callConfig.callMethods.includes(methodSignature)) continue\n yield* jsDoc(`Add a ${methodSignature} method call against the ${app.name} contract`)\n yield `${methodName}(params: CallParams<'${methodSignatureSafe}'> & ${getCallOnCompleteOptions(methodSignature, app).type}) {`\n yield IncIndent\n yield `composer.addAppCallMethodCall(client.params${methodNameAccessor}(params))`\n const outputTypeName = app.methods.find((m: ABIMethodParams) => new ABIMethod(m).getSignature() === methodSignature)?.returns.type\n yield `resultMappers.push(${outputTypeName && outputTypeName !== 'void' ? `(v) => client.decodeReturnValue('${methodSignatureSafe}', v)` : 'undefined'})`\n yield `return this`\n yield DecIndent\n yield '},'\n }\n}\n\nfunction* callComposerClearState({ app }: GeneratorContext): DocumentParts {\n yield* jsDoc(`Add a clear state call to the ${app.name} contract`)\n yield `clearState(params: AppClientBareCallParams) {`\n yield IncIndent\n yield `composer.addAppCall(client.params.clearState(params))`\n yield `return this`\n yield DecIndent\n yield '},'\n}\n\nfunction* callComposerOperationMethods(\n { app, methodSignatureToUniqueName, sanitizer }: GeneratorContext,\n methods: MethodList,\n verb: 'update' | 'optIn' | 'closeOut' | 'delete',\n includeCompilation?: boolean,\n): DocumentParts {\n const callType = verb === 'update' ? 'Update' : verb === 'delete' ? 'Delete' : 'Call'\n if (methods.length) {\n yield `get ${verb}() {`\n yield IncIndent\n yield `const $this = this`\n yield `return {`\n yield IncIndent\n for (const methodSig of methods) {\n if (methodSig === BARE_CALL) {\n yield `bare(params?: AppClientBareCallParams ${includeCompilation ? '& AppClientCompilationParams ' : ''}) {`\n yield IncIndent\n yield `composer.addApp${callType}(client.params.${verb}.bare(params))`\n yield `return $this`\n yield DecIndent\n yield '},'\n } else {\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig)\n yield `${methodName}(params: CallParams<'${methodSigSafe}'>${includeCompilation ? ' & AppClientCompilationParams' : ''}) {`\n yield IncIndent\n yield `composer.addApp${callType}MethodCall(client.params.${verb}${methodNameAccessor}(params))`\n const outputTypeName = app.methods.find((m: ABIMethodParams) => new ABIMethod(m).getSignature() === methodSig)?.returns.type\n yield `resultMappers.push(${outputTypeName && outputTypeName !== 'void' ? `(v) => client.decodeReturnValue('${methodSigSafe}', v)` : 'undefined'})`\n yield `return $this`\n yield DecIndent\n yield '},'\n }\n }\n yield DecIndentAndCloseBlock\n yield DecIndent\n yield '},'\n }\n}\n"],"names":["IncIndent","DecIndent","DecIndentAndCloseBlock","BARE_CALL","jsDoc","getCallOnCompleteOptions","ABIMethod"],"mappings":";;;;;;;AAMe,UAAE,aAAa,CAAC,GAAqB,EAAA;AAClD,IAAA,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,GAAG,CAAA;IAChC,MAAM,CAAA,mBAAA,EAAsB,IAAI,CAAA,UAAA,CAAY,CAAA;AAC5C,IAAA,MAAMA,gBAAS,CAAA;AAEf,IAAA,MAAM,qBAAqB,CAAA;AAC3B,IAAA,MAAM,8CAA8C,CAAA;AACpD,IAAA,MAAM,kFAAkF,CAAA;AACxF,IAAA,MAAM,UAAU,CAAA;AAChB,IAAA,MAAMA,gBAAS,CAAA;AAEf,IAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;;;;AAI7B,IAAA,OAAO,4BAA4B,CAAC,GAAG,EAAE,UAAU,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;AAC5E,IAAA,OAAO,4BAA4B,CAAC,GAAG,EAAE,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;AAC1E,IAAA,OAAO,4BAA4B,CAAC,GAAG,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;AAChF,IAAA,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAA;AAElC,IAAA,MAAM,gEAAgE,CAAA;AACtE,IAAA,MAAMA,gBAAS,CAAA;AACf,IAAA,MAAM,sCAAsC,CAAA;AAC5C,IAAA,MAAM,aAAa,CAAA;AACnB,IAAA,MAAMC,gBAAS,CAAA;AACf,IAAA,MAAM,IAAI,CAAA;AAEV,IAAA,MAAM,cAAc,CAAA;AACpB,IAAA,MAAMD,gBAAS,CAAA;AACf,IAAA,MAAM,iBAAiB,CAAA;AACvB,IAAA,MAAMC,gBAAS,CAAA;AACf,IAAA,MAAM,IAAI,CAAA;AAEV,IAAA,MAAM,6CAA6C,CAAA;AACnD,IAAA,MAAMD,gBAAS,CAAA;AACf,IAAA,MAAM,iDAAiD,CAAA;AACvD,IAAA,MAAM,UAAU,CAAA;AAChB,IAAA,MAAMA,gBAAS,CAAA;AACf,IAAA,MAAM,YAAY,CAAA;AAClB,IAAA,MAAM,qHAAqH,CAAA;AAC3H,IAAA,MAAME,6BAAsB,CAAA;AAC5B,IAAA,MAAMD,gBAAS,CAAA;AACf,IAAA,MAAM,IAAI,CAAA;AAEV,IAAA,MAAM,yCAAyC,CAAA;AAC/C,IAAA,MAAMD,gBAAS,CAAA;AACf,IAAA,MAAM,+CAA+C,CAAA;AACrD,IAAA,MAAM,UAAU,CAAA;AAChB,IAAA,MAAMA,gBAAS,CAAA;AACf,IAAA,MAAM,YAAY,CAAA;AAClB,IAAA,MAAM,qHAAqH,CAAA;AAC3H,IAAA,MAAME,6BAAsB,CAAA;AAC5B,IAAA,MAAMA,6BAAsB,CAAA;AAC5B,IAAA,MAAMD,gBAAS,CAAA;IACf,MAAM,CAAA,gBAAA,EAAmB,IAAI,CAAA,QAAA,CAAU,CAAA;AAEvC,IAAA,MAAMC,6BAAsB,CAAA;AAC9B,CAAC;AAED,UAAU,iBAAiB,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,2BAA2B,EAAE,SAAS,EAAoB,EAAA;IACvG,IAAI,UAAU,CAAC,WAAW,CAAC,QAAQ,CAACC,8BAAS,CAAC,EAAE;QAC9C,OAAOC,YAAK,CAAC,CAAA,8BAAA,EAAiC,GAAG,CAAC,IAAI,CAAW,SAAA,CAAA,CAAC,CAAA;QAClE,MAAM,CAAA,uCAAA,EAA0CC,oCAAwB,CAACF,8BAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAA,GAAA,CAAK,CAAA;AAClG,QAAA,MAAMH,gBAAS,CAAA;AACf,QAAA,MAAM,iDAAiD,CAAA;AACvD,QAAA,MAAM,aAAa,CAAA;AACnB,QAAA,MAAMC,gBAAS,CAAA;AACf,QAAA,MAAM,IAAI,CAAA;KACX;AAED,IAAA,KAAK,MAAM,eAAe,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAKE,8BAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAW,CAAC,EAAE;QAC3G,MAAM,UAAU,GAAG,SAAS,CAAC,wBAAwB,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC,CAAA;QACnG,MAAM,mBAAmB,GAAG,SAAS,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAA;QAChF,MAAM,kBAAkB,GAAG,SAAS,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;;QAEtE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC;YAAE,SAAQ;AAC/D,QAAA,OAAOC,YAAK,CAAC,CAAS,MAAA,EAAA,eAAe,CAA4B,yBAAA,EAAA,GAAG,CAAC,IAAI,CAAW,SAAA,CAAA,CAAC,CAAA;AACrF,QAAA,MAAM,CAAG,EAAA,UAAU,CAAwB,qBAAA,EAAA,mBAAmB,QAAQC,oCAAwB,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,CAAA;AAC9H,QAAA,MAAML,gBAAS,CAAA;QACf,MAAM,CAAA,2CAAA,EAA8C,kBAAkB,CAAA,SAAA,CAAW,CAAA;AACjF,QAAA,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAkB,KAAK,IAAIM,iBAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,eAAe,CAAC,EAAE,OAAO,CAAC,IAAI,CAAA;AAClI,QAAA,MAAM,sBAAsB,cAAc,IAAI,cAAc,KAAK,MAAM,GAAG,CAAA,iCAAA,EAAoC,mBAAmB,CAAO,KAAA,CAAA,GAAG,WAAW,GAAG,CAAA;AACzJ,QAAA,MAAM,aAAa,CAAA;AACnB,QAAA,MAAML,gBAAS,CAAA;AACf,QAAA,MAAM,IAAI,CAAA;KACX;AACH,CAAC;AAED,UAAU,sBAAsB,CAAC,EAAE,GAAG,EAAoB,EAAA;IACxD,OAAOG,YAAK,CAAC,CAAA,8BAAA,EAAiC,GAAG,CAAC,IAAI,CAAW,SAAA,CAAA,CAAC,CAAA;AAClE,IAAA,MAAM,+CAA+C,CAAA;AACrD,IAAA,MAAMJ,gBAAS,CAAA;AACf,IAAA,MAAM,uDAAuD,CAAA;AAC7D,IAAA,MAAM,aAAa,CAAA;AACnB,IAAA,MAAMC,gBAAS,CAAA;AACf,IAAA,MAAM,IAAI,CAAA;AACZ,CAAC;AAED,UAAU,4BAA4B,CACpC,EAAE,GAAG,EAAE,2BAA2B,EAAE,SAAS,EAAoB,EACjE,OAAmB,EACnB,IAAgD,EAChD,kBAA4B,EAAA;IAE5B,MAAM,QAAQ,GAAG,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAA;AACrF,IAAA,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,MAAM,CAAA,IAAA,EAAO,IAAI,CAAA,IAAA,CAAM,CAAA;AACvB,QAAA,MAAMD,gBAAS,CAAA;AACf,QAAA,MAAM,oBAAoB,CAAA;AAC1B,QAAA,MAAM,UAAU,CAAA;AAChB,QAAA,MAAMA,gBAAS,CAAA;AACf,QAAA,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE;AAC/B,YAAA,IAAI,SAAS,KAAKG,8BAAS,EAAE;gBAC3B,MAAM,CAAA,sCAAA,EAAgG,EAAE,CAAA,GAAA,CAAK,CAAA;AAC7G,gBAAA,MAAMH,gBAAS,CAAA;AACf,gBAAA,MAAM,CAAkB,eAAA,EAAA,QAAQ,CAAkB,eAAA,EAAA,IAAI,gBAAgB,CAAA;AACtE,gBAAA,MAAM,cAAc,CAAA;AACpB,gBAAA,MAAMC,gBAAS,CAAA;AACf,gBAAA,MAAM,IAAI,CAAA;aACX;iBAAM;AACL,gBAAA,MAAM,UAAU,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAA;gBACzD,MAAM,UAAU,GAAG,SAAS,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAA;gBACjE,MAAM,kBAAkB,GAAG,SAAS,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;gBACtE,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAA;AACpE,gBAAA,MAAM,CAAG,EAAA,UAAU,CAAwB,qBAAA,EAAA,aAAa,KAA4D,EAAE,KAAK,CAAA;AAC3H,gBAAA,MAAMD,gBAAS,CAAA;AACf,gBAAA,MAAM,kBAAkB,QAAQ,CAAA,yBAAA,EAA4B,IAAI,CAAG,EAAA,kBAAkB,WAAW,CAAA;AAChG,gBAAA,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAkB,KAAK,IAAIM,iBAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAA;AAC5H,gBAAA,MAAM,sBAAsB,cAAc,IAAI,cAAc,KAAK,MAAM,GAAG,CAAA,iCAAA,EAAoC,aAAa,CAAO,KAAA,CAAA,GAAG,WAAW,GAAG,CAAA;AACnJ,gBAAA,MAAM,cAAc,CAAA;AACpB,gBAAA,MAAML,gBAAS,CAAA;AACf,gBAAA,MAAM,IAAI,CAAA;aACX;SACF;AACD,QAAA,MAAMC,6BAAsB,CAAA;AAC5B,QAAA,MAAMD,gBAAS,CAAA;AACf,QAAA,MAAM,IAAI,CAAA;KACX;AACH;;;;"}
@@ -0,0 +1,133 @@
1
+ import { IncIndent, DecIndent, DecIndentAndCloseBlock, jsDoc } from '../output/writer.mjs';
2
+ import { BARE_CALL } from './helpers/get-call-config-summary.mjs';
3
+ import { getCallOnCompleteOptions } from './deploy-types.mjs';
4
+ import { ABIMethod } from 'algosdk';
5
+
6
+ function* composeMethod(ctx) {
7
+ const { name, callConfig } = ctx;
8
+ yield `public newGroup(): ${name}Composer {`;
9
+ yield IncIndent;
10
+ yield `const client = this`;
11
+ yield `const composer = client.appClient.newGroup()`;
12
+ yield `const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []`;
13
+ yield `return {`;
14
+ yield IncIndent;
15
+ yield* callComposerNoops(ctx);
16
+ // This is async and unless we bring back promiseChain (which is possible) it's not a nice
17
+ // experience to expose update method(s)
18
+ //yield* callComposerOperationMethods(ctx, callConfig.updateMethods, 'update', true)
19
+ yield* callComposerOperationMethods(ctx, callConfig.deleteMethods, 'delete');
20
+ yield* callComposerOperationMethods(ctx, callConfig.optInMethods, 'optIn');
21
+ yield* callComposerOperationMethods(ctx, callConfig.closeOutMethods, 'closeOut');
22
+ yield* callComposerClearState(ctx);
23
+ yield `addTransaction(txn: Transaction, signer?: TransactionSigner) {`;
24
+ yield IncIndent;
25
+ yield 'composer.addTransaction(txn, signer)';
26
+ yield 'return this';
27
+ yield DecIndent;
28
+ yield '},';
29
+ yield `composer() {`;
30
+ yield IncIndent;
31
+ yield 'return composer';
32
+ yield DecIndent;
33
+ yield '},';
34
+ yield `async simulate(options?: SimulateOptions) {`;
35
+ yield IncIndent;
36
+ yield `const result = await composer.simulate(options)`;
37
+ yield `return {`;
38
+ yield IncIndent;
39
+ yield `...result,`;
40
+ yield `returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)`;
41
+ yield DecIndentAndCloseBlock;
42
+ yield DecIndent;
43
+ yield '},';
44
+ yield `async execute(params?: ExecuteParams) {`;
45
+ yield IncIndent;
46
+ yield `const result = await composer.execute(params)`;
47
+ yield `return {`;
48
+ yield IncIndent;
49
+ yield `...result,`;
50
+ yield `returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)`;
51
+ yield DecIndentAndCloseBlock;
52
+ yield DecIndentAndCloseBlock;
53
+ yield DecIndent;
54
+ yield `} as unknown as ${name}Composer`;
55
+ yield DecIndentAndCloseBlock;
56
+ }
57
+ function* callComposerNoops({ app, callConfig, methodSignatureToUniqueName, sanitizer }) {
58
+ if (callConfig.callMethods.includes(BARE_CALL)) {
59
+ yield* jsDoc(`Add a bare method call to the ${app.name} contract`);
60
+ yield `bare(params: AppClientBareCallParams & ${getCallOnCompleteOptions(BARE_CALL, app).type}) {`;
61
+ yield IncIndent;
62
+ yield `composer.addAppCall(client.params.bare(params))`;
63
+ yield `return this`;
64
+ yield DecIndent;
65
+ yield '},';
66
+ }
67
+ for (const methodSignature of callConfig.callMethods.filter((m) => m !== BARE_CALL).map((m) => m)) {
68
+ const methodName = sanitizer.makeSafeMethodIdentifier(methodSignatureToUniqueName[methodSignature]);
69
+ const methodSignatureSafe = sanitizer.makeSafeStringTypeLiteral(methodSignature);
70
+ const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
71
+ // Skip methods which don't support a no_op call config
72
+ if (!callConfig.callMethods.includes(methodSignature))
73
+ continue;
74
+ yield* jsDoc(`Add a ${methodSignature} method call against the ${app.name} contract`);
75
+ yield `${methodName}(params: CallParams<'${methodSignatureSafe}'> & ${getCallOnCompleteOptions(methodSignature, app).type}) {`;
76
+ yield IncIndent;
77
+ yield `composer.addAppCallMethodCall(client.params${methodNameAccessor}(params))`;
78
+ const outputTypeName = app.methods.find((m) => new ABIMethod(m).getSignature() === methodSignature)?.returns.type;
79
+ yield `resultMappers.push(${outputTypeName && outputTypeName !== 'void' ? `(v) => client.decodeReturnValue('${methodSignatureSafe}', v)` : 'undefined'})`;
80
+ yield `return this`;
81
+ yield DecIndent;
82
+ yield '},';
83
+ }
84
+ }
85
+ function* callComposerClearState({ app }) {
86
+ yield* jsDoc(`Add a clear state call to the ${app.name} contract`);
87
+ yield `clearState(params: AppClientBareCallParams) {`;
88
+ yield IncIndent;
89
+ yield `composer.addAppCall(client.params.clearState(params))`;
90
+ yield `return this`;
91
+ yield DecIndent;
92
+ yield '},';
93
+ }
94
+ function* callComposerOperationMethods({ app, methodSignatureToUniqueName, sanitizer }, methods, verb, includeCompilation) {
95
+ const callType = verb === 'update' ? 'Update' : verb === 'delete' ? 'Delete' : 'Call';
96
+ if (methods.length) {
97
+ yield `get ${verb}() {`;
98
+ yield IncIndent;
99
+ yield `const $this = this`;
100
+ yield `return {`;
101
+ yield IncIndent;
102
+ for (const methodSig of methods) {
103
+ if (methodSig === BARE_CALL) {
104
+ yield `bare(params?: AppClientBareCallParams ${''}) {`;
105
+ yield IncIndent;
106
+ yield `composer.addApp${callType}(client.params.${verb}.bare(params))`;
107
+ yield `return $this`;
108
+ yield DecIndent;
109
+ yield '},';
110
+ }
111
+ else {
112
+ const uniqueName = methodSignatureToUniqueName[methodSig];
113
+ const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName);
114
+ const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
115
+ const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig);
116
+ yield `${methodName}(params: CallParams<'${methodSigSafe}'>${''}) {`;
117
+ yield IncIndent;
118
+ yield `composer.addApp${callType}MethodCall(client.params.${verb}${methodNameAccessor}(params))`;
119
+ const outputTypeName = app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)?.returns.type;
120
+ yield `resultMappers.push(${outputTypeName && outputTypeName !== 'void' ? `(v) => client.decodeReturnValue('${methodSigSafe}', v)` : 'undefined'})`;
121
+ yield `return $this`;
122
+ yield DecIndent;
123
+ yield '},';
124
+ }
125
+ }
126
+ yield DecIndentAndCloseBlock;
127
+ yield DecIndent;
128
+ yield '},';
129
+ }
130
+ }
131
+
132
+ export { composeMethod };
133
+ //# sourceMappingURL=call-composer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-composer.mjs","sources":["../../../src/client/call-composer.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, jsDoc } from '../output/writer'\nimport { GeneratorContext } from './generator-context'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { getCallOnCompleteOptions } from './deploy-types'\nimport { ABIMethod, ABIMethodParams } from 'algosdk'\n\nexport function* composeMethod(ctx: GeneratorContext): DocumentParts {\n const { name, callConfig } = ctx\n yield `public newGroup(): ${name}Composer {`\n yield IncIndent\n\n yield `const client = this`\n yield `const composer = client.appClient.newGroup()`\n yield `const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []`\n yield `return {`\n yield IncIndent\n\n yield* callComposerNoops(ctx)\n // This is async and unless we bring back promiseChain (which is possible) it's not a nice\n // experience to expose update method(s)\n //yield* callComposerOperationMethods(ctx, callConfig.updateMethods, 'update', true)\n yield* callComposerOperationMethods(ctx, callConfig.deleteMethods, 'delete')\n yield* callComposerOperationMethods(ctx, callConfig.optInMethods, 'optIn')\n yield* callComposerOperationMethods(ctx, callConfig.closeOutMethods, 'closeOut')\n yield* callComposerClearState(ctx)\n\n yield `addTransaction(txn: Transaction, signer?: TransactionSigner) {`\n yield IncIndent\n yield 'composer.addTransaction(txn, signer)'\n yield 'return this'\n yield DecIndent\n yield '},'\n\n yield `composer() {`\n yield IncIndent\n yield 'return composer'\n yield DecIndent\n yield '},'\n\n yield `async simulate(options?: SimulateOptions) {`\n yield IncIndent\n yield `const result = await composer.simulate(options)`\n yield `return {`\n yield IncIndent\n yield `...result,`\n yield `returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)`\n yield DecIndentAndCloseBlock\n yield DecIndent\n yield '},'\n\n yield `async execute(params?: ExecuteParams) {`\n yield IncIndent\n yield `const result = await composer.execute(params)`\n yield `return {`\n yield IncIndent\n yield `...result,`\n yield `returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)`\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield DecIndent\n yield `} as unknown as ${name}Composer`\n\n yield DecIndentAndCloseBlock\n}\n\nfunction* callComposerNoops({ app, callConfig, methodSignatureToUniqueName, sanitizer }: GeneratorContext): DocumentParts {\n if (callConfig.callMethods.includes(BARE_CALL)) {\n yield* jsDoc(`Add a bare method call to the ${app.name} contract`)\n yield `bare(params: AppClientBareCallParams & ${getCallOnCompleteOptions(BARE_CALL, app).type}) {`\n yield IncIndent\n yield `composer.addAppCall(client.params.bare(params))`\n yield `return this`\n yield DecIndent\n yield '},'\n }\n\n for (const methodSignature of callConfig.callMethods.filter((m) => m !== BARE_CALL).map((m) => m as string)) {\n const methodName = sanitizer.makeSafeMethodIdentifier(methodSignatureToUniqueName[methodSignature])\n const methodSignatureSafe = sanitizer.makeSafeStringTypeLiteral(methodSignature)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n // Skip methods which don't support a no_op call config\n if (!callConfig.callMethods.includes(methodSignature)) continue\n yield* jsDoc(`Add a ${methodSignature} method call against the ${app.name} contract`)\n yield `${methodName}(params: CallParams<'${methodSignatureSafe}'> & ${getCallOnCompleteOptions(methodSignature, app).type}) {`\n yield IncIndent\n yield `composer.addAppCallMethodCall(client.params${methodNameAccessor}(params))`\n const outputTypeName = app.methods.find((m: ABIMethodParams) => new ABIMethod(m).getSignature() === methodSignature)?.returns.type\n yield `resultMappers.push(${outputTypeName && outputTypeName !== 'void' ? `(v) => client.decodeReturnValue('${methodSignatureSafe}', v)` : 'undefined'})`\n yield `return this`\n yield DecIndent\n yield '},'\n }\n}\n\nfunction* callComposerClearState({ app }: GeneratorContext): DocumentParts {\n yield* jsDoc(`Add a clear state call to the ${app.name} contract`)\n yield `clearState(params: AppClientBareCallParams) {`\n yield IncIndent\n yield `composer.addAppCall(client.params.clearState(params))`\n yield `return this`\n yield DecIndent\n yield '},'\n}\n\nfunction* callComposerOperationMethods(\n { app, methodSignatureToUniqueName, sanitizer }: GeneratorContext,\n methods: MethodList,\n verb: 'update' | 'optIn' | 'closeOut' | 'delete',\n includeCompilation?: boolean,\n): DocumentParts {\n const callType = verb === 'update' ? 'Update' : verb === 'delete' ? 'Delete' : 'Call'\n if (methods.length) {\n yield `get ${verb}() {`\n yield IncIndent\n yield `const $this = this`\n yield `return {`\n yield IncIndent\n for (const methodSig of methods) {\n if (methodSig === BARE_CALL) {\n yield `bare(params?: AppClientBareCallParams ${includeCompilation ? '& AppClientCompilationParams ' : ''}) {`\n yield IncIndent\n yield `composer.addApp${callType}(client.params.${verb}.bare(params))`\n yield `return $this`\n yield DecIndent\n yield '},'\n } else {\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig)\n yield `${methodName}(params: CallParams<'${methodSigSafe}'>${includeCompilation ? ' & AppClientCompilationParams' : ''}) {`\n yield IncIndent\n yield `composer.addApp${callType}MethodCall(client.params.${verb}${methodNameAccessor}(params))`\n const outputTypeName = app.methods.find((m: ABIMethodParams) => new ABIMethod(m).getSignature() === methodSig)?.returns.type\n yield `resultMappers.push(${outputTypeName && outputTypeName !== 'void' ? `(v) => client.decodeReturnValue('${methodSigSafe}', v)` : 'undefined'})`\n yield `return $this`\n yield DecIndent\n yield '},'\n }\n }\n yield DecIndentAndCloseBlock\n yield DecIndent\n yield '},'\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ 'use strict';
2
+
3
+ var writer = require('../output/writer.js');
4
+ var getCallConfigSummary = require('./helpers/get-call-config-summary.js');
5
+ var algosdk = require('algosdk');
6
+
7
+ function getCreateOnCompleteOptions(method, app) {
8
+ const validCreateOnCompletes = method === getCallConfigSummary.BARE_CALL ? app.bareActions.create : app.methods.find((m) => new algosdk.ABIMethod(m).getSignature() === method)?.actions?.create;
9
+ const hasNoOp = validCreateOnCompletes?.includes('NoOp');
10
+ const onCompleteType = validCreateOnCompletes
11
+ ? `{onComplete${hasNoOp ? '?' : ''}: ${validCreateOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`
12
+ : {};
13
+ return {
14
+ type: onCompleteType,
15
+ isOptional: hasNoOp,
16
+ };
17
+ }
18
+ function getCallOnCompleteOptions(method, app) {
19
+ const validCallOnCompletes = method === getCallConfigSummary.BARE_CALL ? app.bareActions.call : app.methods.find((m) => new algosdk.ABIMethod(m).getSignature() === method)?.actions?.call;
20
+ const hasNoOp = validCallOnCompletes?.includes('NoOp');
21
+ const onCompleteType = validCallOnCompletes
22
+ ? `{onComplete${hasNoOp ? '?' : ''}: ${validCallOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`
23
+ : {};
24
+ return {
25
+ type: onCompleteType,
26
+ isOptional: hasNoOp,
27
+ };
28
+ }
29
+ function* deployTypes({ app, callConfig, sanitizer, methodSignatureToUniqueName }) {
30
+ const name = sanitizer.makeSafeTypeIdentifier(app.name);
31
+ if (callConfig.createMethods.length > 0) {
32
+ yield* writer.jsDoc('Defines supported create method params for this smart contract');
33
+ yield `export type ${name}CreateCallParams =`;
34
+ yield writer.IncIndent;
35
+ for (const method of callConfig.createMethods) {
36
+ const onComplete = getCreateOnCompleteOptions(method, app);
37
+ if (method === getCallConfigSummary.BARE_CALL) {
38
+ yield `| Expand<AppClientBareCallParams & {method?: undefined} & ${onComplete.type} & CreateSchema>`;
39
+ }
40
+ else {
41
+ const uniqueName = methodSignatureToUniqueName[method];
42
+ if (uniqueName !== method) {
43
+ const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName);
44
+ yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'} & ${onComplete.type} & CreateSchema>`;
45
+ }
46
+ const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method);
47
+ yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'} & ${onComplete.type} & CreateSchema>`;
48
+ }
49
+ }
50
+ yield writer.DecIndent;
51
+ }
52
+ if (callConfig.updateMethods.length > 0) {
53
+ yield* writer.jsDoc('Defines supported update method params for this smart contract');
54
+ yield `export type ${name}UpdateCallParams =`;
55
+ yield writer.IncIndent;
56
+ for (const method of callConfig.updateMethods) {
57
+ if (method === getCallConfigSummary.BARE_CALL) {
58
+ yield `| Expand<AppClientBareCallParams> & {method?: undefined}`;
59
+ }
60
+ else {
61
+ const uniqueName = methodSignatureToUniqueName[method];
62
+ if (uniqueName !== method) {
63
+ const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName);
64
+ yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`;
65
+ }
66
+ const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method);
67
+ yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`;
68
+ }
69
+ }
70
+ yield writer.DecIndent;
71
+ }
72
+ if (callConfig.deleteMethods.length > 0) {
73
+ yield* writer.jsDoc('Defines supported delete method params for this smart contract');
74
+ yield `export type ${name}DeleteCallParams =`;
75
+ yield writer.IncIndent;
76
+ for (const method of callConfig.deleteMethods) {
77
+ if (method === getCallConfigSummary.BARE_CALL) {
78
+ yield `| Expand<AppClientBareCallParams> & {method?: undefined}`;
79
+ }
80
+ else {
81
+ const uniqueName = methodSignatureToUniqueName[method];
82
+ if (uniqueName !== method) {
83
+ const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName);
84
+ yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`;
85
+ }
86
+ const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method);
87
+ yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`;
88
+ }
89
+ }
90
+ yield writer.DecIndent;
91
+ }
92
+ yield* writer.jsDoc('Defines arguments required for the deploy method.');
93
+ yield `export type ${name}DeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {`;
94
+ yield writer.IncIndent;
95
+ if (callConfig.createMethods.length) {
96
+ yield* writer.jsDoc('Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)');
97
+ yield `createParams?: ${name}CreateCallParams`;
98
+ }
99
+ if (callConfig.updateMethods.length) {
100
+ yield* writer.jsDoc('Update transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)');
101
+ yield `updateParams?: ${name}UpdateCallParams`;
102
+ }
103
+ if (callConfig.deleteMethods.length) {
104
+ yield* writer.jsDoc('Delete transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)');
105
+ yield `deleteParams?: ${name}DeleteCallParams`;
106
+ }
107
+ yield writer.DecIndent;
108
+ yield `}>`;
109
+ yield writer.NewLine;
110
+ }
111
+
112
+ exports.deployTypes = deployTypes;
113
+ exports.getCallOnCompleteOptions = getCallOnCompleteOptions;
114
+ exports.getCreateOnCompleteOptions = getCreateOnCompleteOptions;
115
+ //# sourceMappingURL=deploy-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-types.js","sources":["../../../src/client/deploy-types.ts"],"sourcesContent":["import { DecIndent, DocumentParts, IncIndent, jsDoc, NewLine } from '../output/writer'\nimport { BARE_CALL, MethodIdentifier } from './helpers/get-call-config-summary'\nimport { GeneratorContext } from './generator-context'\nimport { Arc56Contract } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { ABIMethod } from 'algosdk'\n\nexport function getCreateOnCompleteOptions(method: MethodIdentifier, app: Arc56Contract) {\n const validCreateOnCompletes =\n method === BARE_CALL ? app.bareActions.create : app.methods.find((m) => new ABIMethod(m).getSignature() === method)?.actions?.create\n const hasNoOp = validCreateOnCompletes?.includes('NoOp')\n const onCompleteType = validCreateOnCompletes\n ? `{onComplete${hasNoOp ? '?' : ''}: ${validCreateOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`\n : {}\n return {\n type: onCompleteType,\n isOptional: hasNoOp,\n }\n}\n\nexport function getCallOnCompleteOptions(method: MethodIdentifier, app: Arc56Contract) {\n const validCallOnCompletes =\n method === BARE_CALL ? app.bareActions.call : app.methods.find((m) => new ABIMethod(m).getSignature() === method)?.actions?.call\n const hasNoOp = validCallOnCompletes?.includes('NoOp')\n const onCompleteType = validCallOnCompletes\n ? `{onComplete${hasNoOp ? '?' : ''}: ${validCallOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`\n : {}\n return {\n type: onCompleteType,\n isOptional: hasNoOp,\n }\n}\n\nexport function* deployTypes({ app, callConfig, sanitizer, methodSignatureToUniqueName }: GeneratorContext): DocumentParts {\n const name = sanitizer.makeSafeTypeIdentifier(app.name)\n\n if (callConfig.createMethods.length > 0) {\n yield* jsDoc('Defines supported create method params for this smart contract')\n yield `export type ${name}CreateCallParams =`\n yield IncIndent\n for (const method of callConfig.createMethods) {\n const onComplete = getCreateOnCompleteOptions(method, app)\n if (method === BARE_CALL) {\n yield `| Expand<AppClientBareCallParams & {method?: undefined} & ${onComplete.type} & CreateSchema>`\n } else {\n const uniqueName = methodSignatureToUniqueName[method]\n if (uniqueName !== method) {\n const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'} & ${onComplete.type} & CreateSchema>`\n }\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'} & ${onComplete.type} & CreateSchema>`\n }\n }\n yield DecIndent\n }\n if (callConfig.updateMethods.length > 0) {\n yield* jsDoc('Defines supported update method params for this smart contract')\n yield `export type ${name}UpdateCallParams =`\n yield IncIndent\n for (const method of callConfig.updateMethods) {\n if (method === BARE_CALL) {\n yield `| Expand<AppClientBareCallParams> & {method?: undefined}`\n } else {\n const uniqueName = methodSignatureToUniqueName[method]\n if (uniqueName !== method) {\n const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`\n }\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`\n }\n }\n yield DecIndent\n }\n\n if (callConfig.deleteMethods.length > 0) {\n yield* jsDoc('Defines supported delete method params for this smart contract')\n yield `export type ${name}DeleteCallParams =`\n yield IncIndent\n for (const method of callConfig.deleteMethods) {\n if (method === BARE_CALL) {\n yield `| Expand<AppClientBareCallParams> & {method?: undefined}`\n } else {\n const uniqueName = methodSignatureToUniqueName[method]\n if (uniqueName !== method) {\n const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`\n }\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`\n }\n }\n yield DecIndent\n }\n\n yield* jsDoc('Defines arguments required for the deploy method.')\n yield `export type ${name}DeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {`\n yield IncIndent\n if (callConfig.createMethods.length) {\n yield* jsDoc(\n 'Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)',\n )\n yield `createParams?: ${name}CreateCallParams`\n }\n if (callConfig.updateMethods.length) {\n yield* jsDoc(\n 'Update transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)',\n )\n yield `updateParams?: ${name}UpdateCallParams`\n }\n if (callConfig.deleteMethods.length) {\n yield* jsDoc(\n 'Delete transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)',\n )\n yield `deleteParams?: ${name}DeleteCallParams`\n }\n yield DecIndent\n yield `}>`\n yield NewLine\n}\n"],"names":["BARE_CALL","ABIMethod","jsDoc","IncIndent","DecIndent","NewLine"],"mappings":";;;;;;AAMgB,SAAA,0BAA0B,CAAC,MAAwB,EAAE,GAAkB,EAAA;AACrF,IAAA,MAAM,sBAAsB,GAC1B,MAAM,KAAKA,8BAAS,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAIC,iBAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAA;IACtI,MAAM,OAAO,GAAG,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxD,MAAM,cAAc,GAAG,sBAAsB;AAC3C,UAAE,CAAA,WAAA,EAAc,OAAO,GAAG,GAAG,GAAG,EAAE,CAAA,EAAA,EAAK,sBAAsB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAyB,sBAAA,EAAA,EAAE,CAAI,EAAA,CAAA,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAG,CAAA,CAAA;UACvH,EAAE,CAAA;IACN,OAAO;AACL,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,UAAU,EAAE,OAAO;KACpB,CAAA;AACH,CAAC;AAEe,SAAA,wBAAwB,CAAC,MAAwB,EAAE,GAAkB,EAAA;AACnF,IAAA,MAAM,oBAAoB,GACxB,MAAM,KAAKD,8BAAS,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAIC,iBAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAA;IAClI,MAAM,OAAO,GAAG,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACtD,MAAM,cAAc,GAAG,oBAAoB;AACzC,UAAE,CAAA,WAAA,EAAc,OAAO,GAAG,GAAG,GAAG,EAAE,CAAA,EAAA,EAAK,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAyB,sBAAA,EAAA,EAAE,CAAI,EAAA,CAAA,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAG,CAAA,CAAA;UACrH,EAAE,CAAA;IACN,OAAO;AACL,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,UAAU,EAAE,OAAO;KACpB,CAAA;AACH,CAAC;AAEc,UAAE,WAAW,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,2BAA2B,EAAoB,EAAA;IACxG,MAAM,IAAI,GAAG,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAEvD,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,QAAA,OAAOC,YAAK,CAAC,gEAAgE,CAAC,CAAA;QAC9E,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,kBAAA,CAAoB,CAAA;AAC7C,QAAA,MAAMC,gBAAS,CAAA;AACf,QAAA,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE;YAC7C,MAAM,UAAU,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAC1D,YAAA,IAAI,MAAM,KAAKH,8BAAS,EAAE;AACxB,gBAAA,MAAM,CAA6D,0DAAA,EAAA,UAAU,CAAC,IAAI,kBAAkB,CAAA;aACrG;iBAAM;AACL,gBAAA,MAAM,UAAU,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAA;AACtD,gBAAA,IAAI,UAAU,KAAK,MAAM,EAAE;oBACzB,MAAM,UAAU,GAAG,SAAS,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAA;oBAClE,MAAM,CAAA,qBAAA,EAAwB,UAAU,CAAkB,eAAA,EAAA,UAAU,QAAQ,UAAU,CAAC,IAAI,CAAA,gBAAA,CAAkB,CAAA;iBAC9G;gBACD,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAA;gBACjE,MAAM,CAAA,qBAAA,EAAwB,aAAa,CAAkB,eAAA,EAAA,aAAa,QAAQ,UAAU,CAAC,IAAI,CAAA,gBAAA,CAAkB,CAAA;aACpH;SACF;AACD,QAAA,MAAMI,gBAAS,CAAA;KAChB;IACD,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,QAAA,OAAOF,YAAK,CAAC,gEAAgE,CAAC,CAAA;QAC9E,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,kBAAA,CAAoB,CAAA;AAC7C,QAAA,MAAMC,gBAAS,CAAA;AACf,QAAA,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE;AAC7C,YAAA,IAAI,MAAM,KAAKH,8BAAS,EAAE;AACxB,gBAAA,MAAM,0DAA0D,CAAA;aACjE;iBAAM;AACL,gBAAA,MAAM,UAAU,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAA;AACtD,gBAAA,IAAI,UAAU,KAAK,MAAM,EAAE;oBACzB,MAAM,UAAU,GAAG,SAAS,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAA;AAClE,oBAAA,MAAM,CAAwB,qBAAA,EAAA,UAAU,CAAkB,eAAA,EAAA,UAAU,KAAK,CAAA;iBAC1E;gBACD,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAA;AACjE,gBAAA,MAAM,CAAwB,qBAAA,EAAA,aAAa,CAAkB,eAAA,EAAA,aAAa,KAAK,CAAA;aAChF;SACF;AACD,QAAA,MAAMI,gBAAS,CAAA;KAChB;IAED,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,QAAA,OAAOF,YAAK,CAAC,gEAAgE,CAAC,CAAA;QAC9E,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,kBAAA,CAAoB,CAAA;AAC7C,QAAA,MAAMC,gBAAS,CAAA;AACf,QAAA,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE;AAC7C,YAAA,IAAI,MAAM,KAAKH,8BAAS,EAAE;AACxB,gBAAA,MAAM,0DAA0D,CAAA;aACjE;iBAAM;AACL,gBAAA,MAAM,UAAU,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAA;AACtD,gBAAA,IAAI,UAAU,KAAK,MAAM,EAAE;oBACzB,MAAM,UAAU,GAAG,SAAS,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAA;AAClE,oBAAA,MAAM,CAAwB,qBAAA,EAAA,UAAU,CAAkB,eAAA,EAAA,UAAU,KAAK,CAAA;iBAC1E;gBACD,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAA;AACjE,gBAAA,MAAM,CAAwB,qBAAA,EAAA,aAAa,CAAkB,eAAA,EAAA,aAAa,KAAK,CAAA;aAChF;SACF;AACD,QAAA,MAAMI,gBAAS,CAAA;KAChB;AAED,IAAA,OAAOF,YAAK,CAAC,mDAAmD,CAAC,CAAA;IACjE,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,wGAAA,CAA0G,CAAA;AACnI,IAAA,MAAMC,gBAAS,CAAA;AACf,IAAA,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE;AACnC,QAAA,OAAOD,YAAK,CACV,uLAAuL,CACxL,CAAA;QACD,MAAM,CAAA,eAAA,EAAkB,IAAI,CAAA,gBAAA,CAAkB,CAAA;KAC/C;AACD,IAAA,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE;AACnC,QAAA,OAAOA,YAAK,CACV,uLAAuL,CACxL,CAAA;QACD,MAAM,CAAA,eAAA,EAAkB,IAAI,CAAA,gBAAA,CAAkB,CAAA;KAC/C;AACD,IAAA,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE;AACnC,QAAA,OAAOA,YAAK,CACV,uLAAuL,CACxL,CAAA;QACD,MAAM,CAAA,eAAA,EAAkB,IAAI,CAAA,gBAAA,CAAkB,CAAA;KAC/C;AACD,IAAA,MAAME,gBAAS,CAAA;AACf,IAAA,MAAM,IAAI,CAAA;AACV,IAAA,MAAMC,cAAO,CAAA;AACf;;;;;;"}
@@ -0,0 +1,111 @@
1
+ import { jsDoc, IncIndent, DecIndent, NewLine } from '../output/writer.mjs';
2
+ import { BARE_CALL } from './helpers/get-call-config-summary.mjs';
3
+ import { ABIMethod } from 'algosdk';
4
+
5
+ function getCreateOnCompleteOptions(method, app) {
6
+ const validCreateOnCompletes = method === BARE_CALL ? app.bareActions.create : app.methods.find((m) => new ABIMethod(m).getSignature() === method)?.actions?.create;
7
+ const hasNoOp = validCreateOnCompletes?.includes('NoOp');
8
+ const onCompleteType = validCreateOnCompletes
9
+ ? `{onComplete${hasNoOp ? '?' : ''}: ${validCreateOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`
10
+ : {};
11
+ return {
12
+ type: onCompleteType,
13
+ isOptional: hasNoOp,
14
+ };
15
+ }
16
+ function getCallOnCompleteOptions(method, app) {
17
+ const validCallOnCompletes = method === BARE_CALL ? app.bareActions.call : app.methods.find((m) => new ABIMethod(m).getSignature() === method)?.actions?.call;
18
+ const hasNoOp = validCallOnCompletes?.includes('NoOp');
19
+ const onCompleteType = validCallOnCompletes
20
+ ? `{onComplete${hasNoOp ? '?' : ''}: ${validCallOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`
21
+ : {};
22
+ return {
23
+ type: onCompleteType,
24
+ isOptional: hasNoOp,
25
+ };
26
+ }
27
+ function* deployTypes({ app, callConfig, sanitizer, methodSignatureToUniqueName }) {
28
+ const name = sanitizer.makeSafeTypeIdentifier(app.name);
29
+ if (callConfig.createMethods.length > 0) {
30
+ yield* jsDoc('Defines supported create method params for this smart contract');
31
+ yield `export type ${name}CreateCallParams =`;
32
+ yield IncIndent;
33
+ for (const method of callConfig.createMethods) {
34
+ const onComplete = getCreateOnCompleteOptions(method, app);
35
+ if (method === BARE_CALL) {
36
+ yield `| Expand<AppClientBareCallParams & {method?: undefined} & ${onComplete.type} & CreateSchema>`;
37
+ }
38
+ else {
39
+ const uniqueName = methodSignatureToUniqueName[method];
40
+ if (uniqueName !== method) {
41
+ const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName);
42
+ yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'} & ${onComplete.type} & CreateSchema>`;
43
+ }
44
+ const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method);
45
+ yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'} & ${onComplete.type} & CreateSchema>`;
46
+ }
47
+ }
48
+ yield DecIndent;
49
+ }
50
+ if (callConfig.updateMethods.length > 0) {
51
+ yield* jsDoc('Defines supported update method params for this smart contract');
52
+ yield `export type ${name}UpdateCallParams =`;
53
+ yield IncIndent;
54
+ for (const method of callConfig.updateMethods) {
55
+ if (method === BARE_CALL) {
56
+ yield `| Expand<AppClientBareCallParams> & {method?: undefined}`;
57
+ }
58
+ else {
59
+ const uniqueName = methodSignatureToUniqueName[method];
60
+ if (uniqueName !== method) {
61
+ const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName);
62
+ yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`;
63
+ }
64
+ const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method);
65
+ yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`;
66
+ }
67
+ }
68
+ yield DecIndent;
69
+ }
70
+ if (callConfig.deleteMethods.length > 0) {
71
+ yield* jsDoc('Defines supported delete method params for this smart contract');
72
+ yield `export type ${name}DeleteCallParams =`;
73
+ yield IncIndent;
74
+ for (const method of callConfig.deleteMethods) {
75
+ if (method === BARE_CALL) {
76
+ yield `| Expand<AppClientBareCallParams> & {method?: undefined}`;
77
+ }
78
+ else {
79
+ const uniqueName = methodSignatureToUniqueName[method];
80
+ if (uniqueName !== method) {
81
+ const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName);
82
+ yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`;
83
+ }
84
+ const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method);
85
+ yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`;
86
+ }
87
+ }
88
+ yield DecIndent;
89
+ }
90
+ yield* jsDoc('Defines arguments required for the deploy method.');
91
+ yield `export type ${name}DeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {`;
92
+ yield IncIndent;
93
+ if (callConfig.createMethods.length) {
94
+ yield* jsDoc('Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)');
95
+ yield `createParams?: ${name}CreateCallParams`;
96
+ }
97
+ if (callConfig.updateMethods.length) {
98
+ yield* jsDoc('Update transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)');
99
+ yield `updateParams?: ${name}UpdateCallParams`;
100
+ }
101
+ if (callConfig.deleteMethods.length) {
102
+ yield* jsDoc('Delete transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)');
103
+ yield `deleteParams?: ${name}DeleteCallParams`;
104
+ }
105
+ yield DecIndent;
106
+ yield `}>`;
107
+ yield NewLine;
108
+ }
109
+
110
+ export { deployTypes, getCallOnCompleteOptions, getCreateOnCompleteOptions };
111
+ //# sourceMappingURL=deploy-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-types.mjs","sources":["../../../src/client/deploy-types.ts"],"sourcesContent":["import { DecIndent, DocumentParts, IncIndent, jsDoc, NewLine } from '../output/writer'\nimport { BARE_CALL, MethodIdentifier } from './helpers/get-call-config-summary'\nimport { GeneratorContext } from './generator-context'\nimport { Arc56Contract } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { ABIMethod } from 'algosdk'\n\nexport function getCreateOnCompleteOptions(method: MethodIdentifier, app: Arc56Contract) {\n const validCreateOnCompletes =\n method === BARE_CALL ? app.bareActions.create : app.methods.find((m) => new ABIMethod(m).getSignature() === method)?.actions?.create\n const hasNoOp = validCreateOnCompletes?.includes('NoOp')\n const onCompleteType = validCreateOnCompletes\n ? `{onComplete${hasNoOp ? '?' : ''}: ${validCreateOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`\n : {}\n return {\n type: onCompleteType,\n isOptional: hasNoOp,\n }\n}\n\nexport function getCallOnCompleteOptions(method: MethodIdentifier, app: Arc56Contract) {\n const validCallOnCompletes =\n method === BARE_CALL ? app.bareActions.call : app.methods.find((m) => new ABIMethod(m).getSignature() === method)?.actions?.call\n const hasNoOp = validCallOnCompletes?.includes('NoOp')\n const onCompleteType = validCallOnCompletes\n ? `{onComplete${hasNoOp ? '?' : ''}: ${validCallOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`\n : {}\n return {\n type: onCompleteType,\n isOptional: hasNoOp,\n }\n}\n\nexport function* deployTypes({ app, callConfig, sanitizer, methodSignatureToUniqueName }: GeneratorContext): DocumentParts {\n const name = sanitizer.makeSafeTypeIdentifier(app.name)\n\n if (callConfig.createMethods.length > 0) {\n yield* jsDoc('Defines supported create method params for this smart contract')\n yield `export type ${name}CreateCallParams =`\n yield IncIndent\n for (const method of callConfig.createMethods) {\n const onComplete = getCreateOnCompleteOptions(method, app)\n if (method === BARE_CALL) {\n yield `| Expand<AppClientBareCallParams & {method?: undefined} & ${onComplete.type} & CreateSchema>`\n } else {\n const uniqueName = methodSignatureToUniqueName[method]\n if (uniqueName !== method) {\n const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'} & ${onComplete.type} & CreateSchema>`\n }\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'} & ${onComplete.type} & CreateSchema>`\n }\n }\n yield DecIndent\n }\n if (callConfig.updateMethods.length > 0) {\n yield* jsDoc('Defines supported update method params for this smart contract')\n yield `export type ${name}UpdateCallParams =`\n yield IncIndent\n for (const method of callConfig.updateMethods) {\n if (method === BARE_CALL) {\n yield `| Expand<AppClientBareCallParams> & {method?: undefined}`\n } else {\n const uniqueName = methodSignatureToUniqueName[method]\n if (uniqueName !== method) {\n const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`\n }\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`\n }\n }\n yield DecIndent\n }\n\n if (callConfig.deleteMethods.length > 0) {\n yield* jsDoc('Defines supported delete method params for this smart contract')\n yield `export type ${name}DeleteCallParams =`\n yield IncIndent\n for (const method of callConfig.deleteMethods) {\n if (method === BARE_CALL) {\n yield `| Expand<AppClientBareCallParams> & {method?: undefined}`\n } else {\n const uniqueName = methodSignatureToUniqueName[method]\n if (uniqueName !== method) {\n const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`\n }\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`\n }\n }\n yield DecIndent\n }\n\n yield* jsDoc('Defines arguments required for the deploy method.')\n yield `export type ${name}DeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {`\n yield IncIndent\n if (callConfig.createMethods.length) {\n yield* jsDoc(\n 'Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)',\n )\n yield `createParams?: ${name}CreateCallParams`\n }\n if (callConfig.updateMethods.length) {\n yield* jsDoc(\n 'Update transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)',\n )\n yield `updateParams?: ${name}UpdateCallParams`\n }\n if (callConfig.deleteMethods.length) {\n yield* jsDoc(\n 'Delete transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)',\n )\n yield `deleteParams?: ${name}DeleteCallParams`\n }\n yield DecIndent\n yield `}>`\n yield NewLine\n}\n"],"names":[],"mappings":"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"}