@algorandfoundation/algokit-client-generator 2.6.0 → 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 (140) hide show
  1. package/bin/cli.mjs +4 -0
  2. package/cli.d.ts +0 -1
  3. package/cli.js +47 -49
  4. package/cli.js.map +1 -1
  5. package/cli.mjs +56 -0
  6. package/cli.mjs.map +1 -0
  7. package/client/app-types.d.ts +0 -1
  8. package/client/app-types.js +92 -97
  9. package/client/app-types.js.map +1 -1
  10. package/client/app-types.mjs +135 -0
  11. package/client/app-types.mjs.map +1 -0
  12. package/client/call-client.d.ts +0 -1
  13. package/client/call-client.js +145 -143
  14. package/client/call-client.js.map +1 -1
  15. package/client/call-client.mjs +320 -0
  16. package/client/call-client.mjs.map +1 -0
  17. package/client/call-composer-types.d.ts +0 -1
  18. package/client/call-composer-types.js +60 -62
  19. package/client/call-composer-types.js.map +1 -1
  20. package/client/call-composer-types.mjs +122 -0
  21. package/client/call-composer-types.mjs.map +1 -0
  22. package/client/call-composer.d.ts +0 -1
  23. package/client/call-composer.js +76 -78
  24. package/client/call-composer.js.map +1 -1
  25. package/client/call-composer.mjs +128 -0
  26. package/client/call-composer.mjs.map +1 -0
  27. package/client/call-factory.d.ts +0 -1
  28. package/client/call-factory.js +62 -62
  29. package/client/call-factory.js.map +1 -1
  30. package/client/call-factory.mjs +121 -0
  31. package/client/call-factory.mjs.map +1 -0
  32. package/client/deploy-types.d.ts +1 -2
  33. package/client/deploy-types.js +42 -40
  34. package/client/deploy-types.js.map +1 -1
  35. package/client/deploy-types.mjs +94 -0
  36. package/client/deploy-types.mjs.map +1 -0
  37. package/client/generate.d.ts +2 -2
  38. package/client/generate.js +28 -27
  39. package/client/generate.js.map +1 -1
  40. package/client/generate.mjs +36 -0
  41. package/client/generate.mjs.map +1 -0
  42. package/client/generator-context.d.ts +7 -2
  43. package/client/generator-context.js +39 -38
  44. package/client/generator-context.js.map +1 -1
  45. package/client/generator-context.mjs +21 -0
  46. package/client/generator-context.mjs.map +1 -0
  47. package/client/helpers/get-call-config-summary.d.ts +1 -2
  48. package/client/helpers/get-call-config-summary.js +8 -25
  49. package/client/helpers/get-call-config-summary.js.map +1 -1
  50. package/client/helpers/get-call-config-summary.mjs +55 -0
  51. package/client/helpers/get-call-config-summary.mjs.map +1 -0
  52. package/client/helpers/get-equivalent-type.d.ts +0 -1
  53. package/client/helpers/get-equivalent-type.js +21 -20
  54. package/client/helpers/get-equivalent-type.js.map +1 -1
  55. package/client/helpers/get-equivalent-type.mjs +57 -0
  56. package/client/helpers/get-equivalent-type.mjs.map +1 -0
  57. package/client/imports.d.ts +0 -1
  58. package/client/imports.js +4 -4
  59. package/client/imports.js.map +1 -1
  60. package/client/imports.mjs +28 -0
  61. package/client/imports.mjs.map +1 -0
  62. package/client/utility-types.d.ts +0 -1
  63. package/client/utility-types.js +27 -25
  64. package/client/utility-types.js.map +1 -1
  65. package/client/utility-types.mjs +48 -0
  66. package/client/utility-types.mjs.map +1 -0
  67. package/dev.d.ts +0 -1
  68. package/index.d.ts +0 -1
  69. package/index.js +14 -12
  70. package/index.js.map +1 -1
  71. package/index.mjs +4 -0
  72. package/index.mjs.map +1 -0
  73. package/output/writer.d.ts +0 -1
  74. package/output/writer.js +45 -38
  75. package/output/writer.js.map +1 -1
  76. package/output/writer.mjs +140 -0
  77. package/output/writer.mjs.map +1 -0
  78. package/package.json +9 -4
  79. package/schema/application.schema.json.js +375 -0
  80. package/schema/application.schema.json.js.map +1 -0
  81. package/schema/application.schema.json.mjs +364 -0
  82. package/schema/application.schema.json.mjs.map +1 -0
  83. package/schema/contract.schema.json.js +160 -0
  84. package/schema/contract.schema.json.js.map +1 -0
  85. package/schema/contract.schema.json.mjs +149 -0
  86. package/schema/contract.schema.json.mjs.map +1 -0
  87. package/schema/load.d.ts +0 -1
  88. package/schema/load.js +16 -41
  89. package/schema/load.js.map +1 -1
  90. package/schema/load.mjs +23 -0
  91. package/schema/load.mjs.map +1 -0
  92. package/tests/approval-tests.spec.d.ts +0 -1
  93. package/tests/util.d.ts +1 -0
  94. package/util/boom.d.ts +0 -1
  95. package/util/boom.js +4 -4
  96. package/util/boom.js.map +1 -1
  97. package/util/boom.mjs +6 -0
  98. package/util/boom.mjs.map +1 -0
  99. package/util/color-console.d.ts +0 -1
  100. package/util/color-console.js +12 -13
  101. package/util/color-console.js.map +1 -1
  102. package/util/color-console.mjs +17 -0
  103. package/util/color-console.mjs.map +1 -0
  104. package/util/not-falsy.d.ts +0 -1
  105. package/util/sanitization.d.ts +12 -6
  106. package/util/sanitization.js +54 -15
  107. package/util/sanitization.js.map +1 -1
  108. package/util/sanitization.mjs +54 -0
  109. package/util/sanitization.mjs.map +1 -0
  110. package/bin/cli.js +0 -4
  111. package/cli.d.ts.map +0 -1
  112. package/client/app-types.d.ts.map +0 -1
  113. package/client/call-client.d.ts.map +0 -1
  114. package/client/call-composer-types.d.ts.map +0 -1
  115. package/client/call-composer.d.ts.map +0 -1
  116. package/client/call-factory.d.ts.map +0 -1
  117. package/client/deploy-types.d.ts.map +0 -1
  118. package/client/generate.d.ts.map +0 -1
  119. package/client/generator-context.d.ts.map +0 -1
  120. package/client/helpers/get-call-config-summary.d.ts.map +0 -1
  121. package/client/helpers/get-equivalent-type.d.ts.map +0 -1
  122. package/client/imports.d.ts.map +0 -1
  123. package/client/utility-types.d.ts.map +0 -1
  124. package/dev.d.ts.map +0 -1
  125. package/dev.js +0 -5
  126. package/dev.js.map +0 -1
  127. package/index.d.ts.map +0 -1
  128. package/output/writer.d.ts.map +0 -1
  129. package/schema/application.schema.json +0 -354
  130. package/schema/contract.schema.json +0 -139
  131. package/schema/load.d.ts.map +0 -1
  132. package/tests/approval-tests.spec.d.ts.map +0 -1
  133. package/tests/approval-tests.spec.js +0 -24
  134. package/tests/approval-tests.spec.js.map +0 -1
  135. package/util/boom.d.ts.map +0 -1
  136. package/util/color-console.d.ts.map +0 -1
  137. package/util/not-falsy.d.ts.map +0 -1
  138. package/util/not-falsy.js +0 -6
  139. package/util/not-falsy.js.map +0 -1
  140. package/util/sanitization.d.ts.map +0 -1
package/bin/cli.mjs ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { cli } from '../cli.mjs'
4
+ cli(process.cwd(), process.argv)
package/cli.d.ts CHANGED
@@ -1,2 +1 @@
1
1
  export declare function cli(workingDirectory: string, args: string[]): void;
2
- //# sourceMappingURL=cli.d.ts.map
package/cli.js CHANGED
@@ -1,65 +1,62 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
1
+ 'use strict';
2
+
3
+ var commander = require('commander');
4
+ var load = require('./schema/load.js');
5
+ var path = require('path');
6
+ var generate = require('./client/generate.js');
7
+ var writer = require('./output/writer.js');
8
+ var colorConsole = require('./util/color-console.js');
9
+
10
+ function _interopNamespaceDefault(e) {
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
7
22
  }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.cli = void 0;
27
- const commander_1 = require("commander");
28
- const load_1 = require("./schema/load");
29
- const path = __importStar(require("path"));
30
- const generate_1 = require("./client/generate");
31
- const writer_1 = require("./output/writer");
32
- const color_console_1 = require("./util/color-console");
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
28
+
33
29
  function cli(workingDirectory, args) {
34
- const program = new commander_1.Command();
30
+ const program = new commander.Command();
35
31
  program
36
32
  .command('generate')
37
33
  .description('Generates a TypeScript client for the given application.json file')
38
34
  .requiredOption('-a --application <path>', 'Specifies the application.json file')
39
35
  .requiredOption('-o --output <path>', 'Specifies the output file path')
40
- .action(async ({ application, output }) => {
41
- const fs = await Promise.resolve().then(() => __importStar(require('fs')));
42
- const resolvedAppJsonPath = path.resolve(workingDirectory, application);
43
- const resolvedOutPath = path.resolve(workingDirectory, output);
44
- const resolvedOutDir = path.dirname(resolvedOutPath);
45
- color_console_1.colorConsole.info `Reading application.json file from path ${resolvedAppJsonPath}`;
46
- const spec = await (0, load_1.loadApplicationJson)(resolvedAppJsonPath);
47
- color_console_1.colorConsole.info `Generating TS client for ${spec.contract.name}`;
48
- const parts = (0, generate_1.generate)(spec);
36
+ .option('-pn --preserve-names', 'Preserve names from application.json spec instead of sanitizing them')
37
+ .action(async ({ application, output, preserveNames }) => {
38
+ const fs = await import('fs');
39
+ const resolvedAppJsonPath = path__namespace.resolve(workingDirectory, application);
40
+ const resolvedOutPath = path__namespace.resolve(workingDirectory, output);
41
+ const resolvedOutDir = path__namespace.dirname(resolvedOutPath);
42
+ colorConsole.colorConsole.info `Reading application.json file from path ${resolvedAppJsonPath}`;
43
+ const spec = await load.loadApplicationJson(resolvedAppJsonPath);
44
+ colorConsole.colorConsole.info `Generating TS client for ${spec.contract.name}`;
45
+ const parts = generate.generate(spec, { preserveNames: Boolean(preserveNames) });
49
46
  if (!fs.existsSync(resolvedOutDir)) {
50
- color_console_1.colorConsole.warn `Output directory ${resolvedOutDir} does not exist and will be created.`;
47
+ colorConsole.colorConsole.warn `Output directory ${resolvedOutDir} does not exist and will be created.`;
51
48
  fs.mkdirSync(resolvedOutDir, { recursive: true });
52
49
  }
53
- color_console_1.colorConsole.info `Writing TS client to ${resolvedOutPath}`;
50
+ colorConsole.colorConsole.info `Writing TS client to ${resolvedOutPath}`;
54
51
  const file = fs.createWriteStream(resolvedOutPath, {
55
52
  flags: 'w',
56
53
  });
57
- (0, writer_1.writeDocumentPartsToStream)(parts, file);
58
- color_console_1.colorConsole.success `Operation completed successfully`;
54
+ writer.writeDocumentPartsToStream(parts, file);
55
+ colorConsole.colorConsole.success `Operation completed successfully`;
59
56
  })
60
57
  .configureOutput({
61
58
  writeErr(str) {
62
- color_console_1.colorConsole.error `${str}`;
59
+ colorConsole.colorConsole.error `${str}`;
63
60
  },
64
61
  });
65
62
  try {
@@ -67,13 +64,14 @@ function cli(workingDirectory, args) {
67
64
  }
68
65
  catch (err) {
69
66
  if (err instanceof Error) {
70
- color_console_1.colorConsole.error `Unhandled error: \n\n${err.stack}`;
67
+ colorConsole.colorConsole.error `Unhandled error: \n\n${err.stack}`;
71
68
  }
72
69
  else {
73
- color_console_1.colorConsole.error `Unhandled error: \n\n${err}`;
70
+ colorConsole.colorConsole.error `Unhandled error: \n\n${err}`;
74
71
  }
75
72
  process.exit(-1);
76
73
  }
77
74
  }
75
+
78
76
  exports.cli = cli;
79
- //# sourceMappingURL=cli.js.map
77
+ //# sourceMappingURL=cli.js.map
package/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAmC;AACnC,wCAAmD;AACnD,2CAA4B;AAC5B,gDAA4C;AAC5C,4CAA4D;AAC5D,wDAAmD;AAEnD,SAAgB,GAAG,CAAC,gBAAwB,EAAE,IAAc;IAC1D,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAA;IAC7B,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,mEAAmE,CAAC;SAChF,cAAc,CAAC,yBAAyB,EAAE,qCAAqC,CAAC;SAChF,cAAc,CAAC,oBAAoB,EAAE,gCAAgC,CAAC;SACtE,MAAM,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAA2C,EAAiB,EAAE;QAChG,MAAM,EAAE,GAAG,wDAAa,IAAI,GAAC,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;QACpD,4BAAY,CAAC,IAAI,CAAA,2CAA2C,mBAAmB,EAAE,CAAA;QACjF,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAmB,EAAC,mBAAmB,CAAC,CAAA;QAC3D,4BAAY,CAAC,IAAI,CAAA,4BAA4B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QACjE,MAAM,KAAK,GAAG,IAAA,mBAAQ,EAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;YAClC,4BAAY,CAAC,IAAI,CAAA,oBAAoB,cAAc,sCAAsC,CAAA;YACzF,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;SAClD;QACD,4BAAY,CAAC,IAAI,CAAA,wBAAwB,eAAe,EAAE,CAAA;QAC1D,MAAM,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,EAAE;YACjD,KAAK,EAAE,GAAG;SACX,CAAC,CAAA;QACF,IAAA,mCAA0B,EAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACvC,4BAAY,CAAC,OAAO,CAAA,kCAAkC,CAAA;IACxD,CAAC,CAAC;SACD,eAAe,CAAC;QACf,QAAQ,CAAC,GAAW;YAClB,4BAAY,CAAC,KAAK,CAAA,GAAG,GAAG,EAAE,CAAA;QAC5B,CAAC;KACF,CAAC,CAAA;IACJ,IAAI;QACF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;KACpB;IAAC,OAAO,GAAG,EAAE;QACZ,IAAI,GAAG,YAAY,KAAK,EAAE;YACxB,4BAAY,CAAC,KAAK,CAAA,wBAAwB,GAAG,CAAC,KAAK,EAAE,CAAA;SACtD;aAAM;YACL,4BAAY,CAAC,KAAK,CAAA,wBAAwB,GAAG,EAAE,CAAA;SAChD;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;KACjB;AACH,CAAC;AA1CD,kBA0CC"}
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 ADDED
@@ -0,0 +1,56 @@
1
+ import { Command } from 'commander';
2
+ import { loadApplicationJson } from './schema/load.mjs';
3
+ import * as path from 'path';
4
+ import { generate } from './client/generate.mjs';
5
+ import { writeDocumentPartsToStream } from './output/writer.mjs';
6
+ import { colorConsole } from './util/color-console.mjs';
7
+
8
+ function cli(workingDirectory, args) {
9
+ const program = new Command();
10
+ program
11
+ .command('generate')
12
+ .description('Generates a TypeScript client for the given application.json file')
13
+ .requiredOption('-a --application <path>', 'Specifies the application.json file')
14
+ .requiredOption('-o --output <path>', 'Specifies the output file path')
15
+ .option('-pn --preserve-names', 'Preserve names from application.json spec instead of sanitizing them')
16
+ .action(async ({ application, output, preserveNames }) => {
17
+ const fs = await import('fs');
18
+ const resolvedAppJsonPath = path.resolve(workingDirectory, application);
19
+ const resolvedOutPath = path.resolve(workingDirectory, output);
20
+ const resolvedOutDir = path.dirname(resolvedOutPath);
21
+ colorConsole.info `Reading application.json file from path ${resolvedAppJsonPath}`;
22
+ const spec = await loadApplicationJson(resolvedAppJsonPath);
23
+ colorConsole.info `Generating TS client for ${spec.contract.name}`;
24
+ const parts = generate(spec, { preserveNames: Boolean(preserveNames) });
25
+ if (!fs.existsSync(resolvedOutDir)) {
26
+ colorConsole.warn `Output directory ${resolvedOutDir} does not exist and will be created.`;
27
+ fs.mkdirSync(resolvedOutDir, { recursive: true });
28
+ }
29
+ colorConsole.info `Writing TS client to ${resolvedOutPath}`;
30
+ const file = fs.createWriteStream(resolvedOutPath, {
31
+ flags: 'w',
32
+ });
33
+ writeDocumentPartsToStream(parts, file);
34
+ colorConsole.success `Operation completed successfully`;
35
+ })
36
+ .configureOutput({
37
+ writeErr(str) {
38
+ colorConsole.error `${str}`;
39
+ },
40
+ });
41
+ try {
42
+ program.parse(args);
43
+ }
44
+ catch (err) {
45
+ if (err instanceof Error) {
46
+ colorConsole.error `Unhandled error: \n\n${err.stack}`;
47
+ }
48
+ else {
49
+ colorConsole.error `Unhandled error: \n\n${err}`;
50
+ }
51
+ process.exit(-1);
52
+ }
53
+ }
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,4 +1,3 @@
1
1
  import { GeneratorContext } from './generator-context';
2
2
  import { DocumentParts } from '../output/writer';
3
3
  export declare function appTypes(ctx: GeneratorContext): DocumentParts;
4
- //# sourceMappingURL=app-types.d.ts.map
@@ -1,161 +1,156 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
1
+ 'use strict';
2
+
3
+ var writer = require('../output/writer.js');
4
+ var algokit = require('@algorandfoundation/algokit-utils');
5
+ var getEquivalentType = require('./helpers/get-equivalent-type.js');
6
+
7
+ function _interopNamespaceDefault(e) {
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
16
+ });
17
+ }
18
+ });
7
19
  }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.appTypes = void 0;
27
- const writer_1 = require("../output/writer");
28
- const algokit = __importStar(require("@algorandfoundation/algokit-utils"));
29
- const get_equivalent_type_1 = require("./helpers/get-equivalent-type");
30
- const sanitization_1 = require("../util/sanitization");
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ var algokit__namespace = /*#__PURE__*/_interopNamespaceDefault(algokit);
25
+
31
26
  function* appTypes(ctx) {
32
- var _a, _b, _c, _d;
33
27
  const { app, methodSignatureToUniqueName, name } = ctx;
34
- yield* (0, writer_1.jsDoc)(`Defines the types of available calls and state of the ${name} smart contract.`);
28
+ yield* writer.jsDoc(`Defines the types of available calls and state of the ${name} smart contract.`);
35
29
  yield `export type ${name} = {`;
36
- yield writer_1.IncIndent;
37
- yield* (0, writer_1.jsDoc)('Maps method signatures / names to their argument and return types.');
30
+ yield writer.IncIndent;
31
+ yield* writer.jsDoc('Maps method signatures / names to their argument and return types.');
38
32
  yield 'methods:';
39
- yield writer_1.IncIndent;
33
+ yield writer.IncIndent;
40
34
  for (const method of app.contract.methods) {
41
- const methodSig = algokit.getABIMethodSignature(method);
35
+ const methodSig = algokit__namespace.getABIMethodSignature(method);
36
+ const methodSigSafe = ctx.sanitizer.makeSafeStringTypeLiteral(methodSig);
42
37
  const uniqueName = methodSignatureToUniqueName[methodSig];
43
- yield `& Record<'${methodSig}'${methodSig !== uniqueName ? ` | '${uniqueName}'` : ''}, {`;
44
- yield writer_1.IncIndent;
38
+ const uniqueNameSafe = ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName);
39
+ yield `& Record<'${methodSigSafe}'${methodSig !== uniqueName ? ` | '${uniqueNameSafe}'` : ''}, {`;
40
+ yield writer.IncIndent;
45
41
  yield `argsObj: {`;
46
- yield writer_1.IncIndent;
47
- const argsMeta = method.args.map((arg) => {
48
- var _a, _b, _c;
49
- return ({
50
- ...arg,
51
- hasDefault: (_c = (_b = (_a = app.hints) === null || _a === void 0 ? void 0 : _a[methodSig]) === null || _b === void 0 ? void 0 : _b.default_arguments) === null || _c === void 0 ? void 0 : _c[arg.name],
52
- tsType: (0, get_equivalent_type_1.getEquivalentType)(arg.type, 'input'),
53
- });
54
- });
42
+ yield writer.IncIndent;
43
+ const argsMeta = method.args.map((arg) => ({
44
+ ...arg,
45
+ hasDefault: app.hints?.[methodSig]?.default_arguments?.[arg.name],
46
+ tsType: getEquivalentType.getEquivalentType(arg.type, 'input'),
47
+ }));
55
48
  for (const arg of argsMeta) {
56
49
  if (arg.desc)
57
- yield* (0, writer_1.jsDoc)(arg.desc);
58
- yield `${(0, sanitization_1.makeSafePropertyIdentifier)(arg.name)}${arg.hasDefault ? '?' : ''}: ${arg.tsType}`;
50
+ yield* writer.jsDoc(arg.desc);
51
+ yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.hasDefault ? '?' : ''}: ${arg.tsType}`;
59
52
  }
60
- yield writer_1.DecIndentAndCloseBlock;
61
- yield* (0, writer_1.inline)(`argsTuple: [`, argsMeta
62
- .map((arg) => `${(0, sanitization_1.makeSafeVariableIdentifier)(arg.name)}: ${(0, get_equivalent_type_1.getEquivalentType)(arg.type, 'input')}${arg.hasDefault ? ' | undefined' : ''}`)
53
+ yield writer.DecIndentAndCloseBlock;
54
+ yield* writer.inline(`argsTuple: [`, argsMeta
55
+ .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${getEquivalentType.getEquivalentType(arg.type, 'input')}${arg.hasDefault ? ' | undefined' : ''}`)
63
56
  .join(', '), ']');
64
- const outputStruct = (_c = (_b = (_a = ctx.app.hints) === null || _a === void 0 ? void 0 : _a[methodSig]) === null || _b === void 0 ? void 0 : _b.structs) === null || _c === void 0 ? void 0 : _c.output;
57
+ const outputStruct = ctx.app.hints?.[methodSig]?.structs?.output;
65
58
  if (method.returns.desc)
66
- yield* (0, writer_1.jsDoc)(method.returns.desc);
59
+ yield* writer.jsDoc(method.returns.desc);
67
60
  if (outputStruct) {
68
- yield `returns: ${(0, sanitization_1.makeSafeTypeIdentifier)(outputStruct.name)}`;
61
+ yield `returns: ${ctx.sanitizer.makeSafeTypeIdentifier(outputStruct.name)}`;
69
62
  }
70
63
  else {
71
- yield `returns: ${(0, get_equivalent_type_1.getEquivalentType)((_d = method.returns.type) !== null && _d !== void 0 ? _d : 'void', 'output')}`;
64
+ yield `returns: ${getEquivalentType.getEquivalentType(method.returns.type ?? 'void', 'output')}`;
72
65
  }
73
- yield writer_1.DecIndent;
66
+ yield writer.DecIndent;
74
67
  yield '}>';
75
68
  }
76
- yield writer_1.DecIndent;
69
+ yield writer.DecIndent;
77
70
  yield* appState(ctx);
78
- yield writer_1.DecIndentAndCloseBlock;
79
- yield* (0, writer_1.jsDoc)('Defines the possible abi call signatures');
71
+ yield writer.DecIndentAndCloseBlock;
72
+ yield* writer.jsDoc('Defines the possible abi call signatures');
80
73
  yield `export type ${name}Sig = keyof ${name}['methods']`;
81
- yield* (0, writer_1.jsDoc)('Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a' +
74
+ yield* writer.jsDoc('Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a' +
82
75
  ' bare call is made');
83
76
  yield `export type TypedCallParams<TSignature extends ${name}Sig | undefined> = {`;
84
- yield writer_1.IncIndent;
77
+ yield writer.IncIndent;
85
78
  yield 'method: TSignature';
86
79
  yield 'methodArgs: TSignature extends undefined ? undefined : Array<ABIAppCallArg | undefined>';
87
- yield writer_1.DecIndent;
80
+ yield writer.DecIndent;
88
81
  yield '} & AppClientCallCoreParams & CoreAppCallArgs';
89
- yield* (0, writer_1.jsDoc)('Defines the arguments required for a bare call');
82
+ yield* writer.jsDoc('Defines the arguments required for a bare call');
90
83
  yield `export type BareCallArgs = Omit<RawAppCallArgs, keyof CoreAppCallArgs>`;
91
84
  yield* structs(ctx);
92
- yield* (0, writer_1.jsDoc)(`Maps a method signature from the ${name} smart contract to the method's arguments in either tuple of struct form`);
85
+ yield* writer.jsDoc(`Maps a method signature from the ${name} smart contract to the method's arguments in either tuple of struct form`);
93
86
  yield `export type MethodArgs<TSignature extends ${name}Sig> = ${name}['methods'][TSignature]['argsObj' | 'argsTuple']`;
94
- yield* (0, writer_1.jsDoc)(`Maps a method signature from the ${name} smart contract to the method's return type`);
87
+ yield* writer.jsDoc(`Maps a method signature from the ${name} smart contract to the method's return type`);
95
88
  yield `export type MethodReturn<TSignature extends ${name}Sig> = ${name}['methods'][TSignature]['returns']`;
96
- yield writer_1.NewLine;
89
+ yield writer.NewLine;
97
90
  }
98
- exports.appTypes = appTypes;
99
- function* structs({ app }) {
91
+ function* structs({ app, sanitizer }) {
100
92
  if (app.hints === undefined)
101
93
  return;
102
94
  for (const methodHint of Object.values(app.hints)) {
103
95
  if (methodHint.structs === undefined)
104
96
  continue;
105
97
  for (const struct of Object.values(methodHint.structs)) {
106
- yield* (0, writer_1.jsDoc)(`Represents a ${struct.name} result as a struct`);
107
- yield `export type ${(0, sanitization_1.makeSafeTypeIdentifier)(struct.name)} = {`;
108
- yield writer_1.IncIndent;
98
+ yield* writer.jsDoc(`Represents a ${struct.name} result as a struct`);
99
+ yield `export type ${sanitizer.makeSafeTypeIdentifier(struct.name)} = {`;
100
+ yield writer.IncIndent;
109
101
  for (const [key, type] of struct.elements) {
110
- yield `${(0, sanitization_1.makeSafePropertyIdentifier)(key)}: ${(0, get_equivalent_type_1.getEquivalentType)(type, 'output')}`;
102
+ yield `${sanitizer.makeSafePropertyIdentifier(key)}: ${getEquivalentType.getEquivalentType(type, 'output')}`;
111
103
  }
112
- yield writer_1.DecIndentAndCloseBlock;
113
- yield* (0, writer_1.jsDoc)(`Converts the tuple representation of a ${struct.name} to the struct representation`);
114
- yield* (0, writer_1.inline)(`export function ${(0, sanitization_1.makeSafeTypeIdentifier)(struct.name)}(`, `[${struct.elements.map(([key]) => (0, sanitization_1.makeSafeVariableIdentifier)(key)).join(', ')}]: `, `[${struct.elements.map(([_, type]) => (0, get_equivalent_type_1.getEquivalentType)(type, 'output')).join(', ')}] ) {`);
115
- yield writer_1.IncIndent;
104
+ yield writer.DecIndentAndCloseBlock;
105
+ yield* writer.jsDoc(`Converts the tuple representation of a ${struct.name} to the struct representation`);
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(', ')}] ) {`);
107
+ yield writer.IncIndent;
116
108
  yield `return {`;
117
- yield writer_1.IncIndent;
109
+ yield writer.IncIndent;
118
110
  for (const [key] of struct.elements) {
119
- const prop = (0, sanitization_1.makeSafePropertyIdentifier)(key);
120
- const param = (0, sanitization_1.makeSafeVariableIdentifier)(key);
111
+ const prop = sanitizer.makeSafePropertyIdentifier(key);
112
+ const param = sanitizer.makeSafeVariableIdentifier(key);
121
113
  yield `${prop}${prop !== param ? `: ${param}` : ''},`;
122
114
  }
123
- yield writer_1.DecIndentAndCloseBlock;
124
- yield writer_1.DecIndentAndCloseBlock;
115
+ yield writer.DecIndentAndCloseBlock;
116
+ yield writer.DecIndentAndCloseBlock;
125
117
  }
126
118
  }
127
119
  }
128
- function* appState({ app }) {
129
- var _a, _b;
130
- const hasLocal = ((_a = app.schema.local) === null || _a === void 0 ? void 0 : _a.declared) && Object.keys(app.schema.local.declared).length;
131
- const hasGlobal = ((_b = app.schema.global) === null || _b === void 0 ? void 0 : _b.declared) && Object.keys(app.schema.global.declared).length;
120
+ function* appState({ app, sanitizer }) {
121
+ const hasLocal = app.schema.local?.declared && Object.keys(app.schema.local.declared).length;
122
+ const hasGlobal = app.schema.global?.declared && Object.keys(app.schema.global.declared).length;
132
123
  if (hasLocal || hasGlobal) {
133
- yield* (0, writer_1.jsDoc)('Defines the shape of the global and local state of the application.');
124
+ yield* writer.jsDoc('Defines the shape of the global and local state of the application.');
134
125
  yield 'state: {';
135
- yield writer_1.IncIndent;
126
+ yield writer.IncIndent;
136
127
  if (hasGlobal) {
137
128
  yield 'global: {';
138
- yield writer_1.IncIndent;
129
+ yield writer.IncIndent;
139
130
  for (const prop of Object.values(app.schema.global.declared)) {
140
131
  if (prop.descr) {
141
- yield* (0, writer_1.jsDoc)(prop.descr);
132
+ yield* writer.jsDoc(prop.descr);
142
133
  }
143
- yield `'${prop.key}'?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
134
+ const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key);
135
+ yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
144
136
  }
145
- yield writer_1.DecIndentAndCloseBlock;
137
+ yield writer.DecIndentAndCloseBlock;
146
138
  }
147
139
  if (hasLocal) {
148
140
  yield 'local: {';
149
- yield writer_1.IncIndent;
141
+ yield writer.IncIndent;
150
142
  for (const prop of Object.values(app.schema.local.declared)) {
151
143
  if (prop.descr) {
152
- yield* (0, writer_1.jsDoc)(prop.descr);
144
+ yield* writer.jsDoc(prop.descr);
153
145
  }
154
- yield `'${prop.key}'?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
146
+ const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key);
147
+ yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
155
148
  }
156
- yield writer_1.DecIndentAndCloseBlock;
149
+ yield writer.DecIndentAndCloseBlock;
157
150
  }
158
- yield writer_1.DecIndentAndCloseBlock;
151
+ yield writer.DecIndentAndCloseBlock;
159
152
  }
160
153
  }
161
- //# sourceMappingURL=app-types.js.map
154
+
155
+ exports.appTypes = appTypes;
156
+ //# sourceMappingURL=app-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-types.js","sourceRoot":"","sources":["../../src/client/app-types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAAsH;AACtH,2EAA4D;AAC5D,uEAAiE;AACjE,uDAAqH;AAErH,QAAe,CAAC,CAAC,QAAQ,CAAC,GAAqB;;IAC7C,MAAM,EAAE,GAAG,EAAE,2BAA2B,EAAE,IAAI,EAAE,GAAG,GAAG,CAAA;IACtD,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,yDAAyD,IAAI,kBAAkB,CAAC,CAAA;IAC7F,MAAM,eAAe,IAAI,MAAM,CAAA;IAC/B,MAAM,kBAAS,CAAA;IACf,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,oEAAoE,CAAC,CAAA;IAClF,MAAM,UAAU,CAAA;IAChB,MAAM,kBAAS,CAAA;IACf,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;QACvD,MAAM,UAAU,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAA;QACzD,MAAM,aAAa,SAAS,IAAI,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAA;QACzF,MAAM,kBAAS,CAAA;QACf,MAAM,YAAY,CAAA;QAClB,MAAM,kBAAS,CAAA;QAEf,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;;YAAC,OAAA,CAAC;gBACzC,GAAG,GAAG;gBACN,UAAU,EAAE,MAAA,MAAA,MAAA,GAAG,CAAC,KAAK,0CAAG,SAAS,CAAC,0CAAE,iBAAiB,0CAAG,GAAG,CAAC,IAAI,CAAC;gBACjE,MAAM,EAAE,IAAA,uCAAiB,EAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;aAC7C,CAAC,CAAA;SAAA,CAAC,CAAA;QAEH,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,IAAI,GAAG,CAAC,IAAI;gBAAE,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACpC,MAAM,GAAG,IAAA,yCAA0B,EAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE,CAAA;SAC3F;QACD,MAAM,+BAAsB,CAAA;QAC5B,KAAK,CAAC,CAAC,IAAA,eAAM,EACX,cAAc,EACd,QAAQ;aACL,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,IAAA,yCAA0B,EAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAA,uCAAiB,EAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5H;aACA,IAAI,CAAC,IAAI,CAAC,EACb,GAAG,CACJ,CAAA;QACD,MAAM,YAAY,GAAG,MAAA,MAAA,MAAA,GAAG,CAAC,GAAG,CAAC,KAAK,0CAAG,SAAS,CAAC,0CAAE,OAAO,0CAAE,MAAM,CAAA;QAChE,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI;YAAE,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC1D,IAAI,YAAY,EAAE;YAChB,MAAM,YAAY,IAAA,qCAAsB,EAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAA;SAC9D;aAAM;YACL,MAAM,YAAY,IAAA,uCAAiB,EAAC,MAAA,MAAM,CAAC,OAAO,CAAC,IAAI,mCAAI,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAA;SAC/E;QAED,MAAM,kBAAS,CAAA;QACf,MAAM,IAAI,CAAA;KACX;IACD,MAAM,kBAAS,CAAA;IACf,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACpB,MAAM,+BAAsB,CAAA;IAE5B,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,0CAA0C,CAAC,CAAA;IACxD,MAAM,eAAe,IAAI,eAAe,IAAI,aAAa,CAAA;IACzD,KAAK,CAAC,CAAC,IAAA,cAAK,EACV,0HAA0H;QACxH,oBAAoB,CACvB,CAAA;IACD,MAAM,kDAAkD,IAAI,sBAAsB,CAAA;IAClF,MAAM,kBAAS,CAAA;IACf,MAAM,oBAAoB,CAAA;IAC1B,MAAM,yFAAyF,CAAA;IAC/F,MAAM,kBAAS,CAAA;IACf,MAAM,+CAA+C,CAAA;IACrD,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,gDAAgD,CAAC,CAAA;IAC9D,MAAM,wEAAwE,CAAA;IAE9E,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACnB,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,oCAAoC,IAAI,0EAA0E,CAAC,CAAA;IAChI,MAAM,6CAA6C,IAAI,UAAU,IAAI,kDAAkD,CAAA;IACvH,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,oCAAoC,IAAI,6CAA6C,CAAC,CAAA;IACnG,MAAM,+CAA+C,IAAI,UAAU,IAAI,oCAAoC,CAAA;IAC3G,MAAM,gBAAO,CAAA;AACf,CAAC;AAzED,4BAyEC;AAED,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAoB;IACzC,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;QAAE,OAAM;IACnC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACjD,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS;YAAE,SAAQ;QAC9C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YACtD,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,gBAAgB,MAAM,CAAC,IAAI,qBAAqB,CAAC,CAAA;YAC9D,MAAM,eAAe,IAAA,qCAAsB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAA;YAC9D,MAAM,kBAAS,CAAA;YACf,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACzC,MAAM,GAAG,IAAA,yCAA0B,EAAC,GAAG,CAAC,KAAK,IAAA,uCAAiB,EAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAA;aACjF;YACD,MAAM,+BAAsB,CAAA;YAC5B,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,0CAA0C,MAAM,CAAC,IAAI,+BAA+B,CAAC,CAAA;YAClG,KAAK,CAAC,CAAC,IAAA,eAAM,EACX,mBAAmB,IAAA,qCAAsB,EAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EACzD,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAA,yCAA0B,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EACnF,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAA,uCAAiB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAC5F,CAAA;YACD,MAAM,kBAAS,CAAA;YACf,MAAM,UAAU,CAAA;YAChB,MAAM,kBAAS,CAAA;YACf,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACnC,MAAM,IAAI,GAAG,IAAA,yCAA0B,EAAC,GAAG,CAAC,CAAA;gBAC5C,MAAM,KAAK,GAAG,IAAA,yCAA0B,EAAC,GAAG,CAAC,CAAA;gBAC7C,MAAM,GAAG,IAAI,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAA;aACtD;YACD,MAAM,+BAAsB,CAAA;YAC5B,MAAM,+BAAsB,CAAA;SAC7B;KACF;AACH,CAAC;AAED,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAoB;;IAC1C,MAAM,QAAQ,GAAG,CAAA,MAAA,GAAG,CAAC,MAAM,CAAC,KAAK,0CAAE,QAAQ,KAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAA;IAC5F,MAAM,SAAS,GAAG,CAAA,MAAA,GAAG,CAAC,MAAM,CAAC,MAAM,0CAAE,QAAQ,KAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAA;IAC/F,IAAI,QAAQ,IAAI,SAAS,EAAE;QACzB,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,qEAAqE,CAAC,CAAA;QACnF,MAAM,UAAU,CAAA;QAChB,MAAM,kBAAS,CAAA;QACf,IAAI,SAAS,EAAE;YACb,MAAM,WAAW,CAAA;YACjB,MAAM,kBAAS,CAAA;YACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAO,CAAC,QAAS,CAAC,EAAE;gBAC9D,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,IAAI,CAAC,KAAK,CAAC,CAAA;iBACzB;gBAED,MAAM,IAAI,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;aACnF;YACD,MAAM,+BAAsB,CAAA;SAC7B;QACD,IAAI,QAAQ,EAAE;YACZ,MAAM,UAAU,CAAA;YAChB,MAAM,kBAAS,CAAA;YACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAM,CAAC,QAAS,CAAC,EAAE;gBAC7D,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,KAAK,CAAC,CAAC,IAAA,cAAK,EAAC,IAAI,CAAC,KAAK,CAAC,CAAA;iBACzB;gBAED,MAAM,IAAI,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;aACnF;YACD,MAAM,+BAAsB,CAAA;SAC7B;QAED,MAAM,+BAAsB,CAAA;KAC7B;AACH,CAAC"}
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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"}