@algorandfoundation/algokit-client-generator 2.6.1-beta.1 → 3.0.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 (90) hide show
  1. package/{cli.cjs → cli.js} +8 -6
  2. package/cli.js.map +1 -0
  3. package/cli.mjs +4 -2
  4. package/cli.mjs.map +1 -0
  5. package/client/{app-types.cjs → app-types.js} +20 -16
  6. package/client/app-types.js.map +1 -0
  7. package/client/app-types.mjs +18 -14
  8. package/client/app-types.mjs.map +1 -0
  9. package/client/{call-client.cjs → call-client.js} +30 -21
  10. package/client/call-client.js.map +1 -0
  11. package/client/call-client.mjs +26 -17
  12. package/client/call-client.mjs.map +1 -0
  13. package/client/{call-composer-types.cjs → call-composer-types.js} +11 -9
  14. package/client/call-composer-types.js.map +1 -0
  15. package/client/call-composer-types.mjs +8 -6
  16. package/client/call-composer-types.mjs.map +1 -0
  17. package/client/{call-composer.cjs → call-composer.js} +16 -12
  18. package/client/call-composer.js.map +1 -0
  19. package/client/call-composer.mjs +13 -9
  20. package/client/call-composer.mjs.map +1 -0
  21. package/client/{call-factory.cjs → call-factory.js} +16 -12
  22. package/client/call-factory.js.map +1 -0
  23. package/client/call-factory.mjs +13 -9
  24. package/client/call-factory.mjs.map +1 -0
  25. package/client/deploy-types.d.ts +1 -1
  26. package/client/{deploy-types.cjs → deploy-types.js} +12 -9
  27. package/client/deploy-types.js.map +1 -0
  28. package/client/deploy-types.mjs +9 -6
  29. package/client/deploy-types.mjs.map +1 -0
  30. package/client/generate.d.ts +2 -1
  31. package/client/{generate.cjs → generate.js} +12 -11
  32. package/client/generate.js.map +1 -0
  33. package/client/generate.mjs +3 -2
  34. package/client/generate.mjs.map +1 -0
  35. package/client/generator-context.d.ts +7 -1
  36. package/client/{generator-context.cjs → generator-context.js} +17 -12
  37. package/client/generator-context.js.map +1 -0
  38. package/client/generator-context.mjs +16 -11
  39. package/client/generator-context.mjs.map +1 -0
  40. package/client/helpers/{get-call-config-summary.cjs → get-call-config-summary.js} +1 -0
  41. package/client/helpers/get-call-config-summary.js.map +1 -0
  42. package/client/helpers/get-call-config-summary.mjs +1 -0
  43. package/client/helpers/get-call-config-summary.mjs.map +1 -0
  44. package/client/helpers/{get-equivalent-type.cjs → get-equivalent-type.js} +1 -0
  45. package/client/helpers/get-equivalent-type.js.map +1 -0
  46. package/client/helpers/get-equivalent-type.mjs +1 -0
  47. package/client/helpers/get-equivalent-type.mjs.map +1 -0
  48. package/client/{imports.cjs → imports.js} +1 -0
  49. package/client/imports.js.map +1 -0
  50. package/client/imports.mjs +1 -0
  51. package/client/imports.mjs.map +1 -0
  52. package/client/{utility-types.cjs → utility-types.js} +2 -1
  53. package/client/utility-types.js.map +1 -0
  54. package/client/utility-types.mjs +1 -0
  55. package/client/utility-types.mjs.map +1 -0
  56. package/{index.cjs → index.js} +4 -3
  57. package/index.js.map +1 -0
  58. package/index.mjs +1 -0
  59. package/index.mjs.map +1 -0
  60. package/output/{writer.cjs → writer.js} +1 -0
  61. package/output/writer.js.map +1 -0
  62. package/output/writer.mjs +1 -0
  63. package/output/writer.mjs.map +1 -0
  64. package/package.json +3 -1
  65. package/schema/{application.schema.json.cjs → application.schema.json.js} +1 -0
  66. package/schema/application.schema.json.js.map +1 -0
  67. package/schema/application.schema.json.mjs +1 -0
  68. package/schema/application.schema.json.mjs.map +1 -0
  69. package/schema/{contract.schema.json.cjs → contract.schema.json.js} +1 -0
  70. package/schema/contract.schema.json.js.map +1 -0
  71. package/schema/contract.schema.json.mjs +1 -0
  72. package/schema/contract.schema.json.mjs.map +1 -0
  73. package/schema/{load.cjs → load.js} +4 -3
  74. package/schema/load.js.map +1 -0
  75. package/schema/load.mjs +1 -0
  76. package/schema/load.mjs.map +1 -0
  77. package/util/{boom.cjs → boom.js} +1 -0
  78. package/util/boom.js.map +1 -0
  79. package/util/boom.mjs +1 -0
  80. package/util/boom.mjs.map +1 -0
  81. package/util/{color-console.cjs → color-console.js} +1 -0
  82. package/util/color-console.js.map +1 -0
  83. package/util/color-console.mjs +1 -0
  84. package/util/color-console.mjs.map +1 -0
  85. package/util/sanitization.d.ts +12 -5
  86. package/util/sanitization.js +56 -0
  87. package/util/sanitization.js.map +1 -0
  88. package/util/sanitization.mjs +50 -7
  89. package/util/sanitization.mjs.map +1 -0
  90. package/util/sanitization.cjs +0 -17
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var commander = require('commander');
4
- var load = require('./schema/load.cjs');
4
+ var load = require('./schema/load.js');
5
5
  var path = require('path');
6
- var generate = require('./client/generate.cjs');
7
- var writer = require('./output/writer.cjs');
8
- var colorConsole = require('./util/color-console.cjs');
6
+ var generate = require('./client/generate.js');
7
+ var writer = require('./output/writer.js');
8
+ var colorConsole = require('./util/color-console.js');
9
9
 
10
10
  function _interopNamespaceDefault(e) {
11
11
  var n = Object.create(null);
@@ -33,7 +33,8 @@ function cli(workingDirectory, args) {
33
33
  .description('Generates a TypeScript client for the given application.json file')
34
34
  .requiredOption('-a --application <path>', 'Specifies the application.json file')
35
35
  .requiredOption('-o --output <path>', 'Specifies the output file path')
36
- .action(async ({ application, output }) => {
36
+ .option('-pn --preserve-names', 'Preserve names from application.json spec instead of sanitizing them')
37
+ .action(async ({ application, output, preserveNames }) => {
37
38
  const fs = await import('fs');
38
39
  const resolvedAppJsonPath = path__namespace.resolve(workingDirectory, application);
39
40
  const resolvedOutPath = path__namespace.resolve(workingDirectory, output);
@@ -41,7 +42,7 @@ function cli(workingDirectory, args) {
41
42
  colorConsole.colorConsole.info `Reading application.json file from path ${resolvedAppJsonPath}`;
42
43
  const spec = await load.loadApplicationJson(resolvedAppJsonPath);
43
44
  colorConsole.colorConsole.info `Generating TS client for ${spec.contract.name}`;
44
- const parts = generate.generate(spec);
45
+ const parts = generate.generate(spec, { preserveNames: Boolean(preserveNames) });
45
46
  if (!fs.existsSync(resolvedOutDir)) {
46
47
  colorConsole.colorConsole.warn `Output directory ${resolvedOutDir} does not exist and will be created.`;
47
48
  fs.mkdirSync(resolvedOutDir, { recursive: true });
@@ -73,3 +74,4 @@ function cli(workingDirectory, args) {
73
74
  }
74
75
 
75
76
  exports.cli = cli;
77
+ //# sourceMappingURL=cli.js.map
package/cli.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourcesContent":["import { Command } from 'commander'\nimport { loadApplicationJson } from './schema/load'\nimport * as path from 'path'\nimport { generate } from './client/generate'\nimport { writeDocumentPartsToStream } from './output/writer'\nimport { colorConsole } from './util/color-console'\n\nexport function cli(workingDirectory: string, args: string[]) {\n const program = new Command()\n program\n .command('generate')\n .description('Generates a TypeScript client for the given application.json file')\n .requiredOption('-a --application <path>', 'Specifies the application.json file')\n .requiredOption('-o --output <path>', 'Specifies the output file path')\n .option('-pn --preserve-names', 'Preserve names from application.json spec instead of sanitizing them')\n .action(\n async ({ application, output, preserveNames }: { application: string; output: string; preserveNames?: boolean }): Promise<void> => {\n const fs = await import('fs')\n const resolvedAppJsonPath = path.resolve(workingDirectory, application)\n const resolvedOutPath = path.resolve(workingDirectory, output)\n const resolvedOutDir = path.dirname(resolvedOutPath)\n colorConsole.info`Reading application.json file from path ${resolvedAppJsonPath}`\n const spec = await loadApplicationJson(resolvedAppJsonPath)\n colorConsole.info`Generating TS client for ${spec.contract.name}`\n const parts = generate(spec, { preserveNames: Boolean(preserveNames) })\n if (!fs.existsSync(resolvedOutDir)) {\n colorConsole.warn`Output directory ${resolvedOutDir} does not exist and will be created.`\n fs.mkdirSync(resolvedOutDir, { recursive: true })\n }\n colorConsole.info`Writing TS client to ${resolvedOutPath}`\n const file = fs.createWriteStream(resolvedOutPath, {\n flags: 'w',\n })\n writeDocumentPartsToStream(parts, file)\n colorConsole.success`Operation completed successfully`\n },\n )\n .configureOutput({\n writeErr(str: string) {\n colorConsole.error`${str}`\n },\n })\n try {\n program.parse(args)\n } catch (err) {\n if (err instanceof Error) {\n colorConsole.error`Unhandled error: \\n\\n${err.stack}`\n } else {\n colorConsole.error`Unhandled error: \\n\\n${err}`\n }\n process.exit(-1)\n }\n}\n"],"names":["Command","path","colorConsole","loadApplicationJson","generate","writeDocumentPartsToStream"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOgB,SAAA,GAAG,CAAC,gBAAwB,EAAE,IAAc,EAAA;AAC1D,IAAA,MAAM,OAAO,GAAG,IAAIA,iBAAO,EAAE,CAAA;IAC7B,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,mEAAmE,CAAC;AAChF,SAAA,cAAc,CAAC,yBAAyB,EAAE,qCAAqC,CAAC;AAChF,SAAA,cAAc,CAAC,oBAAoB,EAAE,gCAAgC,CAAC;AACtE,SAAA,MAAM,CAAC,sBAAsB,EAAE,sEAAsE,CAAC;SACtG,MAAM,CACL,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAoE,KAAmB;AAChI,QAAA,MAAM,EAAE,GAAG,MAAM,OAAO,IAAI,CAAC,CAAA;QAC7B,MAAM,mBAAmB,GAAGC,eAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAA;QACvE,MAAM,eAAe,GAAGA,eAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;QAC9D,MAAM,cAAc,GAAGA,eAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;AACpD,QAAAC,yBAAY,CAAC,IAAI,CAAA,CAA2C,wCAAA,EAAA,mBAAmB,EAAE,CAAA;AACjF,QAAA,MAAM,IAAI,GAAG,MAAMC,wBAAmB,CAAC,mBAAmB,CAAC,CAAA;QAC3DD,yBAAY,CAAC,IAAI,CAAA,CAA4B,yBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAA;AACjE,QAAA,MAAM,KAAK,GAAGE,iBAAQ,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;QACvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;AAClC,YAAAF,yBAAY,CAAC,IAAI,CAAA,CAAoB,iBAAA,EAAA,cAAc,sCAAsC,CAAA;YACzF,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;SAClD;AACD,QAAAA,yBAAY,CAAC,IAAI,CAAA,CAAwB,qBAAA,EAAA,eAAe,EAAE,CAAA;AAC1D,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,EAAE;AACjD,YAAA,KAAK,EAAE,GAAG;AACX,SAAA,CAAC,CAAA;AACF,QAAAG,iCAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AACvC,QAAAH,yBAAY,CAAC,OAAO,CAAA,CAAA,gCAAA,CAAkC,CAAA;AACxD,KAAC,CACF;AACA,SAAA,eAAe,CAAC;AACf,QAAA,QAAQ,CAAC,GAAW,EAAA;AAClB,YAAAA,yBAAY,CAAC,KAAK,CAAA,CAAG,EAAA,GAAG,EAAE,CAAA;SAC3B;AACF,KAAA,CAAC,CAAA;AACJ,IAAA,IAAI;AACF,QAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;KACpB;IAAC,OAAO,GAAG,EAAE;AACZ,QAAA,IAAI,GAAG,YAAY,KAAK,EAAE;YACxBA,yBAAY,CAAC,KAAK,CAAA,CAAA,qBAAA,EAAwB,GAAG,CAAC,KAAK,EAAE,CAAA;SACtD;aAAM;AACL,YAAAA,yBAAY,CAAC,KAAK,CAAA,CAAwB,qBAAA,EAAA,GAAG,EAAE,CAAA;SAChD;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;KACjB;AACH;;;;"}
package/cli.mjs CHANGED
@@ -12,7 +12,8 @@ function cli(workingDirectory, args) {
12
12
  .description('Generates a TypeScript client for the given application.json file')
13
13
  .requiredOption('-a --application <path>', 'Specifies the application.json file')
14
14
  .requiredOption('-o --output <path>', 'Specifies the output file path')
15
- .action(async ({ application, output }) => {
15
+ .option('-pn --preserve-names', 'Preserve names from application.json spec instead of sanitizing them')
16
+ .action(async ({ application, output, preserveNames }) => {
16
17
  const fs = await import('fs');
17
18
  const resolvedAppJsonPath = path.resolve(workingDirectory, application);
18
19
  const resolvedOutPath = path.resolve(workingDirectory, output);
@@ -20,7 +21,7 @@ function cli(workingDirectory, args) {
20
21
  colorConsole.info `Reading application.json file from path ${resolvedAppJsonPath}`;
21
22
  const spec = await loadApplicationJson(resolvedAppJsonPath);
22
23
  colorConsole.info `Generating TS client for ${spec.contract.name}`;
23
- const parts = generate(spec);
24
+ const parts = generate(spec, { preserveNames: Boolean(preserveNames) });
24
25
  if (!fs.existsSync(resolvedOutDir)) {
25
26
  colorConsole.warn `Output directory ${resolvedOutDir} does not exist and will be created.`;
26
27
  fs.mkdirSync(resolvedOutDir, { recursive: true });
@@ -52,3 +53,4 @@ function cli(workingDirectory, args) {
52
53
  }
53
54
 
54
55
  export { cli };
56
+ //# sourceMappingURL=cli.mjs.map
package/cli.mjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.mjs","sources":["../src/cli.ts"],"sourcesContent":["import { Command } from 'commander'\nimport { loadApplicationJson } from './schema/load'\nimport * as path from 'path'\nimport { generate } from './client/generate'\nimport { writeDocumentPartsToStream } from './output/writer'\nimport { colorConsole } from './util/color-console'\n\nexport function cli(workingDirectory: string, args: string[]) {\n const program = new Command()\n program\n .command('generate')\n .description('Generates a TypeScript client for the given application.json file')\n .requiredOption('-a --application <path>', 'Specifies the application.json file')\n .requiredOption('-o --output <path>', 'Specifies the output file path')\n .option('-pn --preserve-names', 'Preserve names from application.json spec instead of sanitizing them')\n .action(\n async ({ application, output, preserveNames }: { application: string; output: string; preserveNames?: boolean }): Promise<void> => {\n const fs = await import('fs')\n const resolvedAppJsonPath = path.resolve(workingDirectory, application)\n const resolvedOutPath = path.resolve(workingDirectory, output)\n const resolvedOutDir = path.dirname(resolvedOutPath)\n colorConsole.info`Reading application.json file from path ${resolvedAppJsonPath}`\n const spec = await loadApplicationJson(resolvedAppJsonPath)\n colorConsole.info`Generating TS client for ${spec.contract.name}`\n const parts = generate(spec, { preserveNames: Boolean(preserveNames) })\n if (!fs.existsSync(resolvedOutDir)) {\n colorConsole.warn`Output directory ${resolvedOutDir} does not exist and will be created.`\n fs.mkdirSync(resolvedOutDir, { recursive: true })\n }\n colorConsole.info`Writing TS client to ${resolvedOutPath}`\n const file = fs.createWriteStream(resolvedOutPath, {\n flags: 'w',\n })\n writeDocumentPartsToStream(parts, file)\n colorConsole.success`Operation completed successfully`\n },\n )\n .configureOutput({\n writeErr(str: string) {\n colorConsole.error`${str}`\n },\n })\n try {\n program.parse(args)\n } catch (err) {\n if (err instanceof Error) {\n colorConsole.error`Unhandled error: \\n\\n${err.stack}`\n } else {\n colorConsole.error`Unhandled error: \\n\\n${err}`\n }\n process.exit(-1)\n }\n}\n"],"names":[],"mappings":";;;;;;;AAOgB,SAAA,GAAG,CAAC,gBAAwB,EAAE,IAAc,EAAA;AAC1D,IAAA,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAC7B,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,mEAAmE,CAAC;AAChF,SAAA,cAAc,CAAC,yBAAyB,EAAE,qCAAqC,CAAC;AAChF,SAAA,cAAc,CAAC,oBAAoB,EAAE,gCAAgC,CAAC;AACtE,SAAA,MAAM,CAAC,sBAAsB,EAAE,sEAAsE,CAAC;SACtG,MAAM,CACL,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAoE,KAAmB;AAChI,QAAA,MAAM,EAAE,GAAG,MAAM,OAAO,IAAI,CAAC,CAAA;QAC7B,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAA;QACvE,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;QAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;AACpD,QAAA,YAAY,CAAC,IAAI,CAAA,CAA2C,wCAAA,EAAA,mBAAmB,EAAE,CAAA;AACjF,QAAA,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,mBAAmB,CAAC,CAAA;QAC3D,YAAY,CAAC,IAAI,CAAA,CAA4B,yBAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAA;AACjE,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;QACvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;AAClC,YAAA,YAAY,CAAC,IAAI,CAAA,CAAoB,iBAAA,EAAA,cAAc,sCAAsC,CAAA;YACzF,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;SAClD;AACD,QAAA,YAAY,CAAC,IAAI,CAAA,CAAwB,qBAAA,EAAA,eAAe,EAAE,CAAA;AAC1D,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,EAAE;AACjD,YAAA,KAAK,EAAE,GAAG;AACX,SAAA,CAAC,CAAA;AACF,QAAA,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AACvC,QAAA,YAAY,CAAC,OAAO,CAAA,CAAA,gCAAA,CAAkC,CAAA;AACxD,KAAC,CACF;AACA,SAAA,eAAe,CAAC;AACf,QAAA,QAAQ,CAAC,GAAW,EAAA;AAClB,YAAA,YAAY,CAAC,KAAK,CAAA,CAAG,EAAA,GAAG,EAAE,CAAA;SAC3B;AACF,KAAA,CAAC,CAAA;AACJ,IAAA,IAAI;AACF,QAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;KACpB;IAAC,OAAO,GAAG,EAAE;AACZ,QAAA,IAAI,GAAG,YAAY,KAAK,EAAE;YACxB,YAAY,CAAC,KAAK,CAAA,CAAA,qBAAA,EAAwB,GAAG,CAAC,KAAK,EAAE,CAAA;SACtD;aAAM;AACL,YAAA,YAAY,CAAC,KAAK,CAAA,CAAwB,qBAAA,EAAA,GAAG,EAAE,CAAA;SAChD;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;KACjB;AACH;;;;"}
@@ -1,9 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var writer = require('../output/writer.cjs');
3
+ var writer = require('../output/writer.js');
4
4
  var algokit = require('@algorandfoundation/algokit-utils');
5
- var getEquivalentType = require('./helpers/get-equivalent-type.cjs');
6
- var sanitization = require('../util/sanitization.cjs');
5
+ var getEquivalentType = require('./helpers/get-equivalent-type.js');
7
6
 
8
7
  function _interopNamespaceDefault(e) {
9
8
  var n = Object.create(null);
@@ -34,8 +33,10 @@ function* appTypes(ctx) {
34
33
  yield writer.IncIndent;
35
34
  for (const method of app.contract.methods) {
36
35
  const methodSig = algokit__namespace.getABIMethodSignature(method);
36
+ const methodSigSafe = ctx.sanitizer.makeSafeStringTypeLiteral(methodSig);
37
37
  const uniqueName = methodSignatureToUniqueName[methodSig];
38
- yield `& Record<'${methodSig}'${methodSig !== uniqueName ? ` | '${uniqueName}'` : ''}, {`;
38
+ const uniqueNameSafe = ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName);
39
+ yield `& Record<'${methodSigSafe}'${methodSig !== uniqueName ? ` | '${uniqueNameSafe}'` : ''}, {`;
39
40
  yield writer.IncIndent;
40
41
  yield `argsObj: {`;
41
42
  yield writer.IncIndent;
@@ -47,17 +48,17 @@ function* appTypes(ctx) {
47
48
  for (const arg of argsMeta) {
48
49
  if (arg.desc)
49
50
  yield* writer.jsDoc(arg.desc);
50
- yield `${sanitization.makeSafePropertyIdentifier(arg.name)}${arg.hasDefault ? '?' : ''}: ${arg.tsType}`;
51
+ yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.hasDefault ? '?' : ''}: ${arg.tsType}`;
51
52
  }
52
53
  yield writer.DecIndentAndCloseBlock;
53
54
  yield* writer.inline(`argsTuple: [`, argsMeta
54
- .map((arg) => `${sanitization.makeSafeVariableIdentifier(arg.name)}: ${getEquivalentType.getEquivalentType(arg.type, 'input')}${arg.hasDefault ? ' | undefined' : ''}`)
55
+ .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${getEquivalentType.getEquivalentType(arg.type, 'input')}${arg.hasDefault ? ' | undefined' : ''}`)
55
56
  .join(', '), ']');
56
57
  const outputStruct = ctx.app.hints?.[methodSig]?.structs?.output;
57
58
  if (method.returns.desc)
58
59
  yield* writer.jsDoc(method.returns.desc);
59
60
  if (outputStruct) {
60
- yield `returns: ${sanitization.makeSafeTypeIdentifier(outputStruct.name)}`;
61
+ yield `returns: ${ctx.sanitizer.makeSafeTypeIdentifier(outputStruct.name)}`;
61
62
  }
62
63
  else {
63
64
  yield `returns: ${getEquivalentType.getEquivalentType(method.returns.type ?? 'void', 'output')}`;
@@ -87,7 +88,7 @@ function* appTypes(ctx) {
87
88
  yield `export type MethodReturn<TSignature extends ${name}Sig> = ${name}['methods'][TSignature]['returns']`;
88
89
  yield writer.NewLine;
89
90
  }
90
- function* structs({ app }) {
91
+ function* structs({ app, sanitizer }) {
91
92
  if (app.hints === undefined)
92
93
  return;
93
94
  for (const methodHint of Object.values(app.hints)) {
@@ -95,20 +96,20 @@ function* structs({ app }) {
95
96
  continue;
96
97
  for (const struct of Object.values(methodHint.structs)) {
97
98
  yield* writer.jsDoc(`Represents a ${struct.name} result as a struct`);
98
- yield `export type ${sanitization.makeSafeTypeIdentifier(struct.name)} = {`;
99
+ yield `export type ${sanitizer.makeSafeTypeIdentifier(struct.name)} = {`;
99
100
  yield writer.IncIndent;
100
101
  for (const [key, type] of struct.elements) {
101
- yield `${sanitization.makeSafePropertyIdentifier(key)}: ${getEquivalentType.getEquivalentType(type, 'output')}`;
102
+ yield `${sanitizer.makeSafePropertyIdentifier(key)}: ${getEquivalentType.getEquivalentType(type, 'output')}`;
102
103
  }
103
104
  yield writer.DecIndentAndCloseBlock;
104
105
  yield* writer.jsDoc(`Converts the tuple representation of a ${struct.name} to the struct representation`);
105
- yield* writer.inline(`export function ${sanitization.makeSafeTypeIdentifier(struct.name)}(`, `[${struct.elements.map(([key]) => sanitization.makeSafeVariableIdentifier(key)).join(', ')}]: `, `[${struct.elements.map(([_, type]) => getEquivalentType.getEquivalentType(type, 'output')).join(', ')}] ) {`);
106
+ yield* writer.inline(`export function ${sanitizer.makeSafeTypeIdentifier(struct.name)}(`, `[${struct.elements.map(([key]) => sanitizer.makeSafeVariableIdentifier(key)).join(', ')}]: `, `[${struct.elements.map(([_, type]) => getEquivalentType.getEquivalentType(type, 'output')).join(', ')}] ) {`);
106
107
  yield writer.IncIndent;
107
108
  yield `return {`;
108
109
  yield writer.IncIndent;
109
110
  for (const [key] of struct.elements) {
110
- const prop = sanitization.makeSafePropertyIdentifier(key);
111
- const param = sanitization.makeSafeVariableIdentifier(key);
111
+ const prop = sanitizer.makeSafePropertyIdentifier(key);
112
+ const param = sanitizer.makeSafeVariableIdentifier(key);
112
113
  yield `${prop}${prop !== param ? `: ${param}` : ''},`;
113
114
  }
114
115
  yield writer.DecIndentAndCloseBlock;
@@ -116,7 +117,7 @@ function* structs({ app }) {
116
117
  }
117
118
  }
118
119
  }
119
- function* appState({ app }) {
120
+ function* appState({ app, sanitizer }) {
120
121
  const hasLocal = app.schema.local?.declared && Object.keys(app.schema.local.declared).length;
121
122
  const hasGlobal = app.schema.global?.declared && Object.keys(app.schema.global.declared).length;
122
123
  if (hasLocal || hasGlobal) {
@@ -130,7 +131,8 @@ function* appState({ app }) {
130
131
  if (prop.descr) {
131
132
  yield* writer.jsDoc(prop.descr);
132
133
  }
133
- yield `'${prop.key}'?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
134
+ const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key);
135
+ yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
134
136
  }
135
137
  yield writer.DecIndentAndCloseBlock;
136
138
  }
@@ -141,7 +143,8 @@ function* appState({ app }) {
141
143
  if (prop.descr) {
142
144
  yield* writer.jsDoc(prop.descr);
143
145
  }
144
- yield `'${prop.key}'?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
146
+ const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key);
147
+ yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
145
148
  }
146
149
  yield writer.DecIndentAndCloseBlock;
147
150
  }
@@ -150,3 +153,4 @@ function* appState({ app }) {
150
153
  }
151
154
 
152
155
  exports.appTypes = appTypes;
156
+ //# sourceMappingURL=app-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-types.js","sources":["../../src/client/app-types.ts"],"sourcesContent":["import { GeneratorContext } from './generator-context'\nimport { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, inline, jsDoc, NewLine } from '../output/writer'\nimport * as algokit from '@algorandfoundation/algokit-utils'\nimport { getEquivalentType } from './helpers/get-equivalent-type'\n\nexport function* appTypes(ctx: GeneratorContext): DocumentParts {\n const { app, methodSignatureToUniqueName, name } = ctx\n yield* jsDoc(`Defines the types of available calls and state of the ${name} smart contract.`)\n yield `export type ${name} = {`\n yield IncIndent\n yield* jsDoc('Maps method signatures / names to their argument and return types.')\n yield 'methods:'\n yield IncIndent\n for (const method of app.contract.methods) {\n const methodSig = algokit.getABIMethodSignature(method)\n const methodSigSafe = ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const uniqueNameSafe = ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `& Record<'${methodSigSafe}'${methodSig !== uniqueName ? ` | '${uniqueNameSafe}'` : ''}, {`\n yield IncIndent\n yield `argsObj: {`\n yield IncIndent\n\n const argsMeta = method.args.map((arg) => ({\n ...arg,\n hasDefault: app.hints?.[methodSig]?.default_arguments?.[arg.name],\n tsType: getEquivalentType(arg.type, 'input'),\n }))\n\n for (const arg of argsMeta) {\n if (arg.desc) yield* jsDoc(arg.desc)\n yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.hasDefault ? '?' : ''}: ${arg.tsType}`\n }\n yield DecIndentAndCloseBlock\n yield* inline(\n `argsTuple: [`,\n argsMeta\n .map(\n (arg) =>\n `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${getEquivalentType(arg.type, 'input')}${arg.hasDefault ? ' | undefined' : ''}`,\n )\n .join(', '),\n ']',\n )\n const outputStruct = ctx.app.hints?.[methodSig]?.structs?.output\n if (method.returns.desc) yield* jsDoc(method.returns.desc)\n if (outputStruct) {\n yield `returns: ${ctx.sanitizer.makeSafeTypeIdentifier(outputStruct.name)}`\n } else {\n yield `returns: ${getEquivalentType(method.returns.type ?? 'void', 'output')}`\n }\n\n yield DecIndent\n yield '}>'\n }\n yield DecIndent\n yield* appState(ctx)\n yield DecIndentAndCloseBlock\n\n yield* jsDoc('Defines the possible abi call signatures')\n yield `export type ${name}Sig = keyof ${name}['methods']`\n yield* jsDoc(\n 'Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a' +\n ' bare call is made',\n )\n yield `export type TypedCallParams<TSignature extends ${name}Sig | undefined> = {`\n yield IncIndent\n yield 'method: TSignature'\n yield 'methodArgs: TSignature extends undefined ? undefined : Array<ABIAppCallArg | undefined>'\n yield DecIndent\n yield '} & AppClientCallCoreParams & CoreAppCallArgs'\n yield* jsDoc('Defines the arguments required for a bare call')\n yield `export type BareCallArgs = Omit<RawAppCallArgs, keyof CoreAppCallArgs>`\n\n yield* structs(ctx)\n yield* jsDoc(`Maps a method signature from the ${name} smart contract to the method's arguments in either tuple of struct form`)\n yield `export type MethodArgs<TSignature extends ${name}Sig> = ${name}['methods'][TSignature]['argsObj' | 'argsTuple']`\n yield* jsDoc(`Maps a method signature from the ${name} smart contract to the method's return type`)\n yield `export type MethodReturn<TSignature extends ${name}Sig> = ${name}['methods'][TSignature]['returns']`\n yield NewLine\n}\n\nfunction* structs({ app, sanitizer }: GeneratorContext): DocumentParts {\n if (app.hints === undefined) return\n for (const methodHint of Object.values(app.hints)) {\n if (methodHint.structs === undefined) continue\n for (const struct of Object.values(methodHint.structs)) {\n yield* jsDoc(`Represents a ${struct.name} result as a struct`)\n yield `export type ${sanitizer.makeSafeTypeIdentifier(struct.name)} = {`\n yield IncIndent\n for (const [key, type] of struct.elements) {\n yield `${sanitizer.makeSafePropertyIdentifier(key)}: ${getEquivalentType(type, 'output')}`\n }\n yield DecIndentAndCloseBlock\n yield* jsDoc(`Converts the tuple representation of a ${struct.name} to the struct representation`)\n yield* inline(\n `export function ${sanitizer.makeSafeTypeIdentifier(struct.name)}(`,\n `[${struct.elements.map(([key]) => sanitizer.makeSafeVariableIdentifier(key)).join(', ')}]: `,\n `[${struct.elements.map(([_, type]) => getEquivalentType(type, 'output')).join(', ')}] ) {`,\n )\n yield IncIndent\n yield `return {`\n yield IncIndent\n for (const [key] of struct.elements) {\n const prop = sanitizer.makeSafePropertyIdentifier(key)\n const param = sanitizer.makeSafeVariableIdentifier(key)\n yield `${prop}${prop !== param ? `: ${param}` : ''},`\n }\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n }\n }\n}\n\nfunction* appState({ app, sanitizer }: GeneratorContext): DocumentParts {\n const hasLocal = app.schema.local?.declared && Object.keys(app.schema.local.declared).length\n const hasGlobal = app.schema.global?.declared && Object.keys(app.schema.global.declared).length\n if (hasLocal || hasGlobal) {\n yield* jsDoc('Defines the shape of the global and local state of the application.')\n yield 'state: {'\n yield IncIndent\n if (hasGlobal) {\n yield 'global: {'\n yield IncIndent\n for (const prop of Object.values(app.schema.global!.declared!)) {\n if (prop.descr) {\n yield* jsDoc(prop.descr)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key)\n\n yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`\n }\n yield DecIndentAndCloseBlock\n }\n if (hasLocal) {\n yield 'local: {'\n yield IncIndent\n for (const prop of Object.values(app.schema.local!.declared!)) {\n if (prop.descr) {\n yield* jsDoc(prop.descr)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key)\n\n yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`\n }\n yield DecIndentAndCloseBlock\n }\n\n yield DecIndentAndCloseBlock\n }\n}\n"],"names":["jsDoc","IncIndent","algokit","getEquivalentType","DecIndentAndCloseBlock","inline","DecIndent","NewLine"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { jsDoc, IncIndent, DecIndentAndCloseBlock, inline, DecIndent, NewLine } from '../output/writer.mjs';
2
2
  import * as algokit from '@algorandfoundation/algokit-utils';
3
3
  import { getEquivalentType } from './helpers/get-equivalent-type.mjs';
4
- import { makeSafePropertyIdentifier, makeSafeVariableIdentifier, makeSafeTypeIdentifier } from '../util/sanitization.mjs';
5
4
 
6
5
  function* appTypes(ctx) {
7
6
  const { app, methodSignatureToUniqueName, name } = ctx;
@@ -13,8 +12,10 @@ function* appTypes(ctx) {
13
12
  yield IncIndent;
14
13
  for (const method of app.contract.methods) {
15
14
  const methodSig = algokit.getABIMethodSignature(method);
15
+ const methodSigSafe = ctx.sanitizer.makeSafeStringTypeLiteral(methodSig);
16
16
  const uniqueName = methodSignatureToUniqueName[methodSig];
17
- yield `& Record<'${methodSig}'${methodSig !== uniqueName ? ` | '${uniqueName}'` : ''}, {`;
17
+ const uniqueNameSafe = ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName);
18
+ yield `& Record<'${methodSigSafe}'${methodSig !== uniqueName ? ` | '${uniqueNameSafe}'` : ''}, {`;
18
19
  yield IncIndent;
19
20
  yield `argsObj: {`;
20
21
  yield IncIndent;
@@ -26,17 +27,17 @@ function* appTypes(ctx) {
26
27
  for (const arg of argsMeta) {
27
28
  if (arg.desc)
28
29
  yield* jsDoc(arg.desc);
29
- yield `${makeSafePropertyIdentifier(arg.name)}${arg.hasDefault ? '?' : ''}: ${arg.tsType}`;
30
+ yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.hasDefault ? '?' : ''}: ${arg.tsType}`;
30
31
  }
31
32
  yield DecIndentAndCloseBlock;
32
33
  yield* inline(`argsTuple: [`, argsMeta
33
- .map((arg) => `${makeSafeVariableIdentifier(arg.name)}: ${getEquivalentType(arg.type, 'input')}${arg.hasDefault ? ' | undefined' : ''}`)
34
+ .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${getEquivalentType(arg.type, 'input')}${arg.hasDefault ? ' | undefined' : ''}`)
34
35
  .join(', '), ']');
35
36
  const outputStruct = ctx.app.hints?.[methodSig]?.structs?.output;
36
37
  if (method.returns.desc)
37
38
  yield* jsDoc(method.returns.desc);
38
39
  if (outputStruct) {
39
- yield `returns: ${makeSafeTypeIdentifier(outputStruct.name)}`;
40
+ yield `returns: ${ctx.sanitizer.makeSafeTypeIdentifier(outputStruct.name)}`;
40
41
  }
41
42
  else {
42
43
  yield `returns: ${getEquivalentType(method.returns.type ?? 'void', 'output')}`;
@@ -66,7 +67,7 @@ function* appTypes(ctx) {
66
67
  yield `export type MethodReturn<TSignature extends ${name}Sig> = ${name}['methods'][TSignature]['returns']`;
67
68
  yield NewLine;
68
69
  }
69
- function* structs({ app }) {
70
+ function* structs({ app, sanitizer }) {
70
71
  if (app.hints === undefined)
71
72
  return;
72
73
  for (const methodHint of Object.values(app.hints)) {
@@ -74,20 +75,20 @@ function* structs({ app }) {
74
75
  continue;
75
76
  for (const struct of Object.values(methodHint.structs)) {
76
77
  yield* jsDoc(`Represents a ${struct.name} result as a struct`);
77
- yield `export type ${makeSafeTypeIdentifier(struct.name)} = {`;
78
+ yield `export type ${sanitizer.makeSafeTypeIdentifier(struct.name)} = {`;
78
79
  yield IncIndent;
79
80
  for (const [key, type] of struct.elements) {
80
- yield `${makeSafePropertyIdentifier(key)}: ${getEquivalentType(type, 'output')}`;
81
+ yield `${sanitizer.makeSafePropertyIdentifier(key)}: ${getEquivalentType(type, 'output')}`;
81
82
  }
82
83
  yield DecIndentAndCloseBlock;
83
84
  yield* jsDoc(`Converts the tuple representation of a ${struct.name} to the struct representation`);
84
- yield* inline(`export function ${makeSafeTypeIdentifier(struct.name)}(`, `[${struct.elements.map(([key]) => makeSafeVariableIdentifier(key)).join(', ')}]: `, `[${struct.elements.map(([_, type]) => getEquivalentType(type, 'output')).join(', ')}] ) {`);
85
+ yield* inline(`export function ${sanitizer.makeSafeTypeIdentifier(struct.name)}(`, `[${struct.elements.map(([key]) => sanitizer.makeSafeVariableIdentifier(key)).join(', ')}]: `, `[${struct.elements.map(([_, type]) => getEquivalentType(type, 'output')).join(', ')}] ) {`);
85
86
  yield IncIndent;
86
87
  yield `return {`;
87
88
  yield IncIndent;
88
89
  for (const [key] of struct.elements) {
89
- const prop = makeSafePropertyIdentifier(key);
90
- const param = makeSafeVariableIdentifier(key);
90
+ const prop = sanitizer.makeSafePropertyIdentifier(key);
91
+ const param = sanitizer.makeSafeVariableIdentifier(key);
91
92
  yield `${prop}${prop !== param ? `: ${param}` : ''},`;
92
93
  }
93
94
  yield DecIndentAndCloseBlock;
@@ -95,7 +96,7 @@ function* structs({ app }) {
95
96
  }
96
97
  }
97
98
  }
98
- function* appState({ app }) {
99
+ function* appState({ app, sanitizer }) {
99
100
  const hasLocal = app.schema.local?.declared && Object.keys(app.schema.local.declared).length;
100
101
  const hasGlobal = app.schema.global?.declared && Object.keys(app.schema.global.declared).length;
101
102
  if (hasLocal || hasGlobal) {
@@ -109,7 +110,8 @@ function* appState({ app }) {
109
110
  if (prop.descr) {
110
111
  yield* jsDoc(prop.descr);
111
112
  }
112
- yield `'${prop.key}'?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
113
+ const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key);
114
+ yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
113
115
  }
114
116
  yield DecIndentAndCloseBlock;
115
117
  }
@@ -120,7 +122,8 @@ function* appState({ app }) {
120
122
  if (prop.descr) {
121
123
  yield* jsDoc(prop.descr);
122
124
  }
123
- yield `'${prop.key}'?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
125
+ const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key);
126
+ yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
124
127
  }
125
128
  yield DecIndentAndCloseBlock;
126
129
  }
@@ -129,3 +132,4 @@ function* appState({ app }) {
129
132
  }
130
133
 
131
134
  export { appTypes };
135
+ //# sourceMappingURL=app-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-types.mjs","sources":["../../src/client/app-types.ts"],"sourcesContent":["import { GeneratorContext } from './generator-context'\nimport { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, inline, jsDoc, NewLine } from '../output/writer'\nimport * as algokit from '@algorandfoundation/algokit-utils'\nimport { getEquivalentType } from './helpers/get-equivalent-type'\n\nexport function* appTypes(ctx: GeneratorContext): DocumentParts {\n const { app, methodSignatureToUniqueName, name } = ctx\n yield* jsDoc(`Defines the types of available calls and state of the ${name} smart contract.`)\n yield `export type ${name} = {`\n yield IncIndent\n yield* jsDoc('Maps method signatures / names to their argument and return types.')\n yield 'methods:'\n yield IncIndent\n for (const method of app.contract.methods) {\n const methodSig = algokit.getABIMethodSignature(method)\n const methodSigSafe = ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const uniqueNameSafe = ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `& Record<'${methodSigSafe}'${methodSig !== uniqueName ? ` | '${uniqueNameSafe}'` : ''}, {`\n yield IncIndent\n yield `argsObj: {`\n yield IncIndent\n\n const argsMeta = method.args.map((arg) => ({\n ...arg,\n hasDefault: app.hints?.[methodSig]?.default_arguments?.[arg.name],\n tsType: getEquivalentType(arg.type, 'input'),\n }))\n\n for (const arg of argsMeta) {\n if (arg.desc) yield* jsDoc(arg.desc)\n yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.hasDefault ? '?' : ''}: ${arg.tsType}`\n }\n yield DecIndentAndCloseBlock\n yield* inline(\n `argsTuple: [`,\n argsMeta\n .map(\n (arg) =>\n `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${getEquivalentType(arg.type, 'input')}${arg.hasDefault ? ' | undefined' : ''}`,\n )\n .join(', '),\n ']',\n )\n const outputStruct = ctx.app.hints?.[methodSig]?.structs?.output\n if (method.returns.desc) yield* jsDoc(method.returns.desc)\n if (outputStruct) {\n yield `returns: ${ctx.sanitizer.makeSafeTypeIdentifier(outputStruct.name)}`\n } else {\n yield `returns: ${getEquivalentType(method.returns.type ?? 'void', 'output')}`\n }\n\n yield DecIndent\n yield '}>'\n }\n yield DecIndent\n yield* appState(ctx)\n yield DecIndentAndCloseBlock\n\n yield* jsDoc('Defines the possible abi call signatures')\n yield `export type ${name}Sig = keyof ${name}['methods']`\n yield* jsDoc(\n 'Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a' +\n ' bare call is made',\n )\n yield `export type TypedCallParams<TSignature extends ${name}Sig | undefined> = {`\n yield IncIndent\n yield 'method: TSignature'\n yield 'methodArgs: TSignature extends undefined ? undefined : Array<ABIAppCallArg | undefined>'\n yield DecIndent\n yield '} & AppClientCallCoreParams & CoreAppCallArgs'\n yield* jsDoc('Defines the arguments required for a bare call')\n yield `export type BareCallArgs = Omit<RawAppCallArgs, keyof CoreAppCallArgs>`\n\n yield* structs(ctx)\n yield* jsDoc(`Maps a method signature from the ${name} smart contract to the method's arguments in either tuple of struct form`)\n yield `export type MethodArgs<TSignature extends ${name}Sig> = ${name}['methods'][TSignature]['argsObj' | 'argsTuple']`\n yield* jsDoc(`Maps a method signature from the ${name} smart contract to the method's return type`)\n yield `export type MethodReturn<TSignature extends ${name}Sig> = ${name}['methods'][TSignature]['returns']`\n yield NewLine\n}\n\nfunction* structs({ app, sanitizer }: GeneratorContext): DocumentParts {\n if (app.hints === undefined) return\n for (const methodHint of Object.values(app.hints)) {\n if (methodHint.structs === undefined) continue\n for (const struct of Object.values(methodHint.structs)) {\n yield* jsDoc(`Represents a ${struct.name} result as a struct`)\n yield `export type ${sanitizer.makeSafeTypeIdentifier(struct.name)} = {`\n yield IncIndent\n for (const [key, type] of struct.elements) {\n yield `${sanitizer.makeSafePropertyIdentifier(key)}: ${getEquivalentType(type, 'output')}`\n }\n yield DecIndentAndCloseBlock\n yield* jsDoc(`Converts the tuple representation of a ${struct.name} to the struct representation`)\n yield* inline(\n `export function ${sanitizer.makeSafeTypeIdentifier(struct.name)}(`,\n `[${struct.elements.map(([key]) => sanitizer.makeSafeVariableIdentifier(key)).join(', ')}]: `,\n `[${struct.elements.map(([_, type]) => getEquivalentType(type, 'output')).join(', ')}] ) {`,\n )\n yield IncIndent\n yield `return {`\n yield IncIndent\n for (const [key] of struct.elements) {\n const prop = sanitizer.makeSafePropertyIdentifier(key)\n const param = sanitizer.makeSafeVariableIdentifier(key)\n yield `${prop}${prop !== param ? `: ${param}` : ''},`\n }\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n }\n }\n}\n\nfunction* appState({ app, sanitizer }: GeneratorContext): DocumentParts {\n const hasLocal = app.schema.local?.declared && Object.keys(app.schema.local.declared).length\n const hasGlobal = app.schema.global?.declared && Object.keys(app.schema.global.declared).length\n if (hasLocal || hasGlobal) {\n yield* jsDoc('Defines the shape of the global and local state of the application.')\n yield 'state: {'\n yield IncIndent\n if (hasGlobal) {\n yield 'global: {'\n yield IncIndent\n for (const prop of Object.values(app.schema.global!.declared!)) {\n if (prop.descr) {\n yield* jsDoc(prop.descr)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key)\n\n yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`\n }\n yield DecIndentAndCloseBlock\n }\n if (hasLocal) {\n yield 'local: {'\n yield IncIndent\n for (const prop of Object.values(app.schema.local!.declared!)) {\n if (prop.descr) {\n yield* jsDoc(prop.descr)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key)\n\n yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`\n }\n yield DecIndentAndCloseBlock\n }\n\n yield DecIndentAndCloseBlock\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var algokit = require('@algorandfoundation/algokit-utils');
4
- var writer = require('../output/writer.cjs');
5
- var sanitization = require('../util/sanitization.cjs');
6
- var getCallConfigSummary = require('./helpers/get-call-config-summary.cjs');
7
- var deployTypes = require('./deploy-types.cjs');
8
- var callComposer = require('./call-composer.cjs');
4
+ var writer = require('../output/writer.js');
5
+ var getCallConfigSummary = require('./helpers/get-call-config-summary.js');
6
+ var deployTypes = require('./deploy-types.js');
7
+ var callComposer = require('./call-composer.js');
9
8
 
10
9
  function _interopNamespaceDefault(e) {
11
10
  var n = Object.create(null);
@@ -29,7 +28,7 @@ var algokit__namespace = /*#__PURE__*/_interopNamespaceDefault(algokit);
29
28
  function* callClient(ctx) {
30
29
  const { app, name } = ctx;
31
30
  yield* writer.jsDoc(`A client to make calls to the ${app.contract.name} smart contract`);
32
- yield `export class ${sanitization.makeSafeTypeIdentifier(app.contract.name)}Client {`;
31
+ yield `export class ${ctx.sanitizer.makeSafeTypeIdentifier(app.contract.name)}Client {`;
33
32
  yield writer.IncIndent;
34
33
  yield* writer.jsDoc(`The underlying \`ApplicationClient\` for when you want to have more flexibility`);
35
34
  yield 'public readonly appClient: ApplicationClient';
@@ -37,7 +36,7 @@ function* callClient(ctx) {
37
36
  yield `private readonly sender: SendTransactionFrom | undefined`;
38
37
  yield writer.NewLine;
39
38
  yield* writer.jsDoc({
40
- description: `Creates a new instance of \`${sanitization.makeSafeTypeIdentifier(app.contract.name)}Client\``,
39
+ description: `Creates a new instance of \`${ctx.sanitizer.makeSafeTypeIdentifier(app.contract.name)}Client\``,
41
40
  params: {
42
41
  appDetails: 'appDetails The details to identify the app to deploy',
43
42
  algod: 'An algod client instance',
@@ -131,7 +130,7 @@ function* opMethods(ctx) {
131
130
  yield* operationMethod(ctx, `Opts the user into an existing instance of the ${app.contract.name} smart contract`, callConfig.optInMethods, 'optIn');
132
131
  yield* operationMethod(ctx, `Makes a close out call to an existing instance of the ${app.contract.name} smart contract`, callConfig.closeOutMethods, 'closeOut');
133
132
  }
134
- function* operationMethod({ app, methodSignatureToUniqueName, name }, description, methods, verb, includeCompilation) {
133
+ function* operationMethod({ app, methodSignatureToUniqueName, name, sanitizer }, description, methods, verb, includeCompilation) {
135
134
  let responseTypeGenericParam;
136
135
  switch (verb) {
137
136
  case 'create':
@@ -176,8 +175,11 @@ function* operationMethod({ app, methodSignatureToUniqueName, name }, descriptio
176
175
  },
177
176
  returns: `The ${verb} result${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,
178
177
  });
179
- yield `async ${sanitization.makeSafeMethodIdentifier(uniqueName)}(args: MethodArgs<'${methodSig}'>, params: AppClientCallCoreParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false ? ' = {}' : ''}) {`;
180
- yield* writer.indent(`return $this.mapReturnValue<MethodReturn<'${methodSig}'>${responseTypeGenericParam}>(await $this.appClient.${verb}(${name}CallFactory.${verb}.${sanitization.makeSafeMethodIdentifier(uniqueName)}(args, params)))`);
178
+ const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName);
179
+ const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
180
+ const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig);
181
+ yield `async ${methodName}(args: MethodArgs<'${methodSigSafe}'>, params: AppClientCallCoreParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false ? ' = {}' : ''}) {`;
182
+ yield* writer.indent(`return $this.mapReturnValue<MethodReturn<'${methodSigSafe}'>${responseTypeGenericParam}>(await $this.appClient.${verb}(${name}CallFactory.${verb}${methodNameAccessor}(args, params)))`);
181
183
  yield '},';
182
184
  }
183
185
  }
@@ -200,10 +202,11 @@ function* clearState({ app }) {
200
202
  yield writer.DecIndentAndCloseBlock;
201
203
  yield writer.NewLine;
202
204
  }
203
- function* noopMethods({ app, name, callConfig, methodSignatureToUniqueName }) {
205
+ function* noopMethods({ app, name, callConfig, methodSignatureToUniqueName, sanitizer }) {
204
206
  for (const method of app.contract.methods) {
205
207
  const methodSignature = algokit__namespace.getABIMethodSignature(method);
206
- const methodName = sanitization.makeSafeMethodIdentifier(methodSignatureToUniqueName[methodSignature]);
208
+ const methodName = sanitizer.makeSafeMethodIdentifier(methodSignatureToUniqueName[methodSignature]);
209
+ const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
207
210
  // Skip methods which don't support a no_op call config
208
211
  if (!callConfig.callMethods.includes(methodSignature))
209
212
  continue;
@@ -216,16 +219,17 @@ function* noopMethods({ app, name, callConfig, methodSignatureToUniqueName }) {
216
219
  },
217
220
  returns: `The result of the call${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,
218
221
  });
219
- yield `public ${methodName}(args: MethodArgs<'${methodSignature}'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {`;
222
+ const methodSignatureSafe = sanitizer.makeSafeStringTypeLiteral(methodSignature);
223
+ yield `public ${methodName}(args: MethodArgs<'${methodSignatureSafe}'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {`;
220
224
  yield writer.IncIndent;
221
225
  const outputTypeName = app.hints?.[methodSignature]?.structs?.output?.name;
222
- yield `return this.call(${name}CallFactory.${methodName}(args, params)${outputTypeName === undefined ? '' : `, ${sanitization.makeSafeTypeIdentifier(outputTypeName)}`})`;
226
+ yield `return this.call(${name}CallFactory${methodNameAccessor}(args, params)${outputTypeName === undefined ? '' : `, ${sanitizer.makeSafeTypeIdentifier(outputTypeName)}`})`;
223
227
  yield writer.DecIndent;
224
228
  yield '}';
225
229
  yield writer.NewLine;
226
230
  }
227
231
  }
228
- function* getStateMethods({ app, name }) {
232
+ function* getStateMethods({ app, name, sanitizer }) {
229
233
  const globalStateValues = app.schema.global?.declared && Object.values(app.schema.global?.declared);
230
234
  const localStateValues = app.schema.local?.declared && Object.values(app.schema.local?.declared);
231
235
  if (globalStateValues?.length || localStateValues?.length) {
@@ -288,12 +292,14 @@ function* getStateMethods({ app, name }) {
288
292
  yield `return {`;
289
293
  yield writer.IncIndent;
290
294
  for (const stateValue of globalStateValues) {
291
- yield `get ${stateValue.key}() {`;
295
+ const stateKey = sanitizer.makeSafePropertyIdentifier(stateValue.key);
296
+ const stateKeyLiteral = sanitizer.makeSafeStringTypeLiteral(stateValue.key);
297
+ yield `get ${stateKey}() {`;
292
298
  if (stateValue.type === 'uint64') {
293
- yield* writer.indent(`return ${name}Client.getIntegerState(state, '${stateValue.key}')`);
299
+ yield* writer.indent(`return ${name}Client.getIntegerState(state, '${stateKeyLiteral}')`);
294
300
  }
295
301
  else {
296
- yield* writer.indent(`return ${name}Client.getBinaryState(state, '${stateValue.key}')`);
302
+ yield* writer.indent(`return ${name}Client.getBinaryState(state, '${stateKeyLiteral}')`);
297
303
  }
298
304
  yield '},';
299
305
  }
@@ -314,12 +320,14 @@ function* getStateMethods({ app, name }) {
314
320
  yield `return {`;
315
321
  yield writer.IncIndent;
316
322
  for (const stateValue of localStateValues) {
317
- yield `get ${stateValue.key}() {`;
323
+ const stateKey = sanitizer.makeSafePropertyIdentifier(stateValue.key);
324
+ const stateKeyLiteral = sanitizer.makeSafeStringTypeLiteral(stateValue.key);
325
+ yield `get ${stateKey}() {`;
318
326
  if (stateValue.type === 'uint64') {
319
- yield* writer.indent(`return ${name}Client.getIntegerState(state, '${stateValue.key}')`);
327
+ yield* writer.indent(`return ${name}Client.getIntegerState(state, '${stateKeyLiteral}')`);
320
328
  }
321
329
  else {
322
- yield* writer.indent(`return ${name}Client.getBinaryState(state, '${stateValue.key}')`);
330
+ yield* writer.indent(`return ${name}Client.getBinaryState(state, '${stateKeyLiteral}')`);
323
331
  }
324
332
  yield '},';
325
333
  }
@@ -330,3 +338,4 @@ function* getStateMethods({ app, name }) {
330
338
  }
331
339
 
332
340
  exports.callClient = callClient;
341
+ //# sourceMappingURL=call-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-client.js","sources":["../../src/client/call-client.ts"],"sourcesContent":["import * as algokit from '@algorandfoundation/algokit-utils'\nimport { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, inline, jsDoc, NewLine } from '../output/writer'\n\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { GeneratorContext } from './generator-context'\nimport { getCreateOnCompleteOptions } from './deploy-types'\nimport { composeMethod } from './call-composer'\n\nexport function* callClient(ctx: GeneratorContext): DocumentParts {\n const { app, name } = ctx\n\n yield* jsDoc(`A client to make calls to the ${app.contract.name} smart contract`)\n yield `export class ${ctx.sanitizer.makeSafeTypeIdentifier(app.contract.name)}Client {`\n yield IncIndent\n yield* jsDoc(`The underlying \\`ApplicationClient\\` for when you want to have more flexibility`)\n yield 'public readonly appClient: ApplicationClient'\n yield NewLine\n yield `private readonly sender: SendTransactionFrom | undefined`\n yield NewLine\n\n yield* jsDoc({\n description: `Creates a new instance of \\`${ctx.sanitizer.makeSafeTypeIdentifier(app.contract.name)}Client\\``,\n params: {\n appDetails: 'appDetails The details to identify the app to deploy',\n algod: 'An algod client instance',\n },\n })\n\n yield `constructor(appDetails: AppDetails, private algod: Algodv2) {`\n yield IncIndent\n yield `this.sender = appDetails.sender`\n yield 'this.appClient = algokit.getAppClient({'\n yield* indent('...appDetails,', 'app: APP_SPEC')\n yield '}, algod)'\n yield DecIndent\n yield '}'\n yield NewLine\n\n yield* jsDoc({\n description: 'Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type',\n params: {\n result: 'The AppCallTransactionResult to be mapped',\n returnValueFormatter: 'An optional delegate to format the return value if required',\n },\n returns: 'The smart contract response with an updated return value',\n })\n yield* inline(\n `protected mapReturnValue<TReturn, TResult extends AppCallTransactionResult = AppCallTransactionResult>`,\n `(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): `,\n `AppCallTransactionResultOfType<TReturn> & TResult {`,\n )\n yield IncIndent\n yield `if(result.return?.decodeError) {`\n yield* indent(`throw result.return.decodeError`)\n yield `}`\n yield `const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined`\n yield IncIndent\n yield `? returnValueFormatter(result.return.returnValue)`\n yield `: result.return?.returnValue as TReturn | undefined`\n yield `return { ...result, return: returnValue } as AppCallTransactionResultOfType<TReturn> & TResult`\n yield DecIndent\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc({\n description: 'Calls the ABI method with the matching signature using an onCompletion code of NO_OP',\n params: {\n typedCallParams: 'An object containing the method signature, args, and any other relevant parameters',\n returnValueFormatter: 'An optional delegate which when provided will be used to map non-undefined return values to the target type',\n },\n returns: 'The result of the smart contract call',\n })\n yield `public async call<TSignature extends keyof ${name}['methods']>(typedCallParams: TypedCallParams<TSignature>, returnValueFormatter?: (value: any) => MethodReturn<TSignature>) {`\n yield IncIndent\n yield `return this.mapReturnValue<MethodReturn<TSignature>>(await this.appClient.call(typedCallParams), returnValueFormatter)`\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* opMethods(ctx)\n yield* clearState(ctx)\n yield* noopMethods(ctx)\n yield* getStateMethods(ctx)\n yield* composeMethod(ctx)\n yield DecIndentAndCloseBlock\n}\n\nfunction* opMethods(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig, name } = ctx\n\n yield* jsDoc({\n description: `Idempotently deploys the ${app.contract.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 deploy(params: ${name}DeployArgs & AppClientDeployCoreParams = {}): ReturnType<ApplicationClient['deploy']> {`\n yield IncIndent\n\n if (callConfig.createMethods.length) yield `const createArgs = params.createCall?.(${name}CallFactory.create)`\n if (callConfig.updateMethods.length) yield `const updateArgs = params.updateCall?.(${name}CallFactory.update)`\n if (callConfig.deleteMethods.length) yield `const deleteArgs = params.deleteCall?.(${name}CallFactory.delete)`\n\n yield `return this.appClient.deploy({`\n yield IncIndent\n yield `...params,`\n if (callConfig.updateMethods.length) yield 'updateArgs,'\n if (callConfig.deleteMethods.length) yield 'deleteArgs,'\n if (callConfig.createMethods.length) {\n yield 'createArgs,'\n yield `createOnCompleteAction: createArgs?.onCompleteAction,`\n }\n yield DecIndent\n yield `})`\n yield DecIndentAndCloseBlock\n yield NewLine\n yield* operationMethod(ctx, `Creates a new instance of the ${app.contract.name} smart contract`, callConfig.createMethods, 'create', true)\n yield* operationMethod(\n ctx,\n `Updates an existing instance of the ${app.contract.name} smart contract`,\n callConfig.updateMethods,\n 'update',\n true,\n )\n yield* operationMethod(ctx, `Deletes an existing instance of the ${app.contract.name} smart contract`, callConfig.deleteMethods, 'delete')\n yield* operationMethod(\n ctx,\n `Opts the user into an existing instance of the ${app.contract.name} smart contract`,\n callConfig.optInMethods,\n 'optIn',\n )\n yield* operationMethod(\n ctx,\n `Makes a close out call to an existing instance of the ${app.contract.name} smart contract`,\n callConfig.closeOutMethods,\n 'closeOut',\n )\n}\n\nfunction* operationMethod(\n { app, methodSignatureToUniqueName, name, sanitizer }: GeneratorContext,\n description: string,\n methods: MethodList,\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete',\n includeCompilation?: boolean,\n): DocumentParts {\n let responseTypeGenericParam\n switch (verb) {\n case 'create':\n responseTypeGenericParam = ', AppCreateCallTransactionResult'\n break\n case 'update':\n responseTypeGenericParam = ', AppUpdateCallTransactionResult'\n break\n default:\n responseTypeGenericParam = ''\n break\n }\n if (methods.length) {\n yield* jsDoc(`Gets available ${verb} methods`)\n yield `public get ${verb}() {`\n yield IncIndent\n yield `const $this = this`\n yield `return {`\n yield IncIndent\n for (const methodSig of methods) {\n const onComplete = verb === 'create' ? getCreateOnCompleteOptions(methodSig, app) : undefined\n if (methodSig === BARE_CALL) {\n yield* jsDoc({\n description: `${description} using a bare call.`,\n params: {\n args: `The arguments for the bare call`,\n },\n returns: `The ${verb} result`,\n })\n yield `async bare(args: BareCallArgs & AppClientCallCoreParams ${\n includeCompilation ? '& AppClientCompilationParams ' : ''\n }& CoreAppCallArgs${onComplete?.type ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false ? ' = {}' : ''}) {`\n yield* indent(`return $this.mapReturnValue<undefined${responseTypeGenericParam}>(await $this.appClient.${verb}(args))`)\n yield '},'\n } else {\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const method = app.contract.methods.find((m) => algokit.getABIMethodSignature(m) === methodSig)\n yield* jsDoc({\n description: `${description} using the ${methodSig} ABI method.`,\n params: {\n args: `The arguments for the smart contract call`,\n params: `Any additional parameters for the call`,\n },\n returns: `The ${verb} 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 `async ${methodName}(args: MethodArgs<'${methodSigSafe}'>, params: AppClientCallCoreParams${\n includeCompilation ? ' & AppClientCompilationParams' : ''\n }${onComplete?.type ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false ? ' = {}' : ''}) {`\n yield* indent(\n `return $this.mapReturnValue<MethodReturn<'${methodSigSafe}'>${responseTypeGenericParam}>(await $this.appClient.${verb}(${name}CallFactory.${verb}${methodNameAccessor}(args, params)))`,\n )\n yield '},'\n }\n }\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield NewLine\n }\n}\n\nfunction* clearState({ app }: GeneratorContext): DocumentParts {\n yield* jsDoc({\n description: `Makes a clear_state call to an existing instance of the ${app.contract.name} smart contract.`,\n params: {\n args: `The arguments for the bare call`,\n },\n returns: `The clear_state result`,\n })\n yield `public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) {`\n yield IncIndent\n yield `return this.appClient.clearState(args)`\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* noopMethods({ app, name, callConfig, methodSignatureToUniqueName, sanitizer }: GeneratorContext): DocumentParts {\n for (const method of app.contract.methods) {\n const methodSignature = algokit.getABIMethodSignature(method)\n const methodName = sanitizer.makeSafeMethodIdentifier(methodSignatureToUniqueName[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({\n description: `Calls the ${algokit.getABIMethodSignature(method)} ABI method.`,\n abiDescription: method.desc,\n params: {\n args: `The arguments for the contract call`,\n params: `Any additional parameters for the call`,\n },\n returns: `The result of the call${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,\n })\n const methodSignatureSafe = sanitizer.makeSafeStringTypeLiteral(methodSignature)\n yield `public ${methodName}(args: MethodArgs<'${methodSignatureSafe}'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {`\n yield IncIndent\n const outputTypeName = app.hints?.[methodSignature]?.structs?.output?.name\n yield `return this.call(${name}CallFactory${methodNameAccessor}(args, params)${\n outputTypeName === undefined ? '' : `, ${sanitizer.makeSafeTypeIdentifier(outputTypeName)}`\n })`\n yield DecIndent\n yield '}'\n yield NewLine\n }\n}\n\nfunction* getStateMethods({ app, name, sanitizer }: GeneratorContext): DocumentParts {\n const globalStateValues = app.schema.global?.declared && Object.values(app.schema.global?.declared)\n const localStateValues = app.schema.local?.declared && Object.values(app.schema.local?.declared)\n if (globalStateValues?.length || localStateValues?.length) {\n yield* jsDoc({\n description: 'Extracts a binary state value out of an AppState dictionary',\n params: {\n state: 'The state dictionary containing the state value',\n key: 'The key of the state value',\n },\n returns: 'A BinaryState instance containing the state value, or undefined if the key was not found',\n })\n yield `private static getBinaryState(state: AppState, key: string): BinaryState | undefined {`\n yield IncIndent\n yield `const value = state[key]`\n yield `if (!value) return undefined`\n yield `if (!('valueRaw' in value))`\n yield* indent(`throw new Error(\\`Failed to parse state value for \\${key}; received an int when expected a byte array\\`)`)\n yield `return {`\n yield IncIndent\n yield `asString(): string {`\n yield* indent(`return value.value`)\n yield `},`\n yield `asByteArray(): Uint8Array {`\n yield* indent(`return value.valueRaw`)\n yield `}`\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc({\n description: 'Extracts a integer state value out of an AppState dictionary',\n params: {\n state: 'The state dictionary containing the state value',\n key: 'The key of the state value',\n },\n returns: 'An IntegerState instance containing the state value, or undefined if the key was not found',\n })\n yield `private static getIntegerState(state: AppState, key: string): IntegerState | undefined {`\n yield IncIndent\n yield `const value = state[key]`\n yield `if (!value) return undefined`\n yield `if ('valueRaw' in value)`\n yield* indent(`throw new Error(\\`Failed to parse state value for \\${key}; received a byte array when expected a number\\`)`)\n yield `return {`\n yield IncIndent\n yield `asBigInt() {`\n yield* indent(`return typeof value.value === 'bigint' ? value.value : BigInt(value.value)`)\n yield `},`\n yield `asNumber(): number {`\n yield* indent(`return typeof value.value === 'bigint' ? Number(value.value) : value.value`)\n yield `},`\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield NewLine\n }\n\n if (globalStateValues?.length) {\n yield* jsDoc(`Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value`)\n yield `public async getGlobalState(): Promise<${name}['state']['global']> {`\n yield IncIndent\n yield `const state = await this.appClient.getGlobalState()`\n yield `return {`\n yield IncIndent\n for (const stateValue of globalStateValues) {\n const stateKey = sanitizer.makeSafePropertyIdentifier(stateValue.key)\n const stateKeyLiteral = sanitizer.makeSafeStringTypeLiteral(stateValue.key)\n yield `get ${stateKey}() {`\n if (stateValue.type === 'uint64') {\n yield* indent(`return ${name}Client.getIntegerState(state, '${stateKeyLiteral}')`)\n } else {\n yield* indent(`return ${name}Client.getBinaryState(state, '${stateKeyLiteral}')`)\n }\n yield '},'\n }\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield NewLine\n }\n\n if (localStateValues?.length) {\n yield* jsDoc({\n description: `Returns the smart contract's local state wrapped in a strongly typed accessor with options to format the stored value`,\n params: {\n account: `The address of the account for which to read local state from`,\n },\n })\n yield `public async getLocalState(account: string | SendTransactionFrom): Promise<${name}['state']['local']> {`\n yield IncIndent\n yield `const state = await this.appClient.getLocalState(account)`\n yield `return {`\n yield IncIndent\n for (const stateValue of localStateValues) {\n const stateKey = sanitizer.makeSafePropertyIdentifier(stateValue.key)\n const stateKeyLiteral = sanitizer.makeSafeStringTypeLiteral(stateValue.key)\n yield `get ${stateKey}() {`\n if (stateValue.type === 'uint64') {\n yield* indent(`return ${name}Client.getIntegerState(state, '${stateKeyLiteral}')`)\n } else {\n yield* indent(`return ${name}Client.getBinaryState(state, '${stateKeyLiteral}')`)\n }\n yield '},'\n }\n yield DecIndentAndCloseBlock\n yield DecIndentAndCloseBlock\n yield NewLine\n }\n}\n"],"names":["jsDoc","IncIndent","NewLine","indent","DecIndent","inline","DecIndentAndCloseBlock","composeMethod","getCreateOnCompleteOptions","BARE_CALL","algokit"],"mappings":"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"}