@algorandfoundation/algokit-client-generator 3.0.6 → 4.0.0-alpha.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 (96) hide show
  1. package/README.md +4 -2
  2. package/cli.d.ts +6 -0
  3. package/cli.js +47 -16
  4. package/cli.js.map +1 -1
  5. package/cli.mjs +47 -17
  6. package/cli.mjs.map +1 -1
  7. package/client/{call-factory.d.ts → app-client.d.ts} +1 -1
  8. package/client/app-client.js +345 -0
  9. package/client/app-client.js.map +1 -0
  10. package/client/app-client.mjs +343 -0
  11. package/client/app-client.mjs.map +1 -0
  12. package/client/{call-client.d.ts → app-factory.d.ts} +1 -1
  13. package/client/app-factory.js +252 -0
  14. package/client/app-factory.js.map +1 -0
  15. package/client/app-factory.mjs +250 -0
  16. package/client/app-factory.mjs.map +1 -0
  17. package/client/app-types.js +206 -112
  18. package/client/app-types.js.map +1 -1
  19. package/client/app-types.mjs +210 -97
  20. package/client/app-types.mjs.map +1 -1
  21. package/client/call-composer-types.js +27 -57
  22. package/client/call-composer-types.js.map +1 -1
  23. package/client/call-composer-types.mjs +27 -38
  24. package/client/call-composer-types.mjs.map +1 -1
  25. package/client/call-composer.js +47 -59
  26. package/client/call-composer.js.map +1 -1
  27. package/client/call-composer.mjs +49 -42
  28. package/client/call-composer.mjs.map +1 -1
  29. package/client/deploy-types.d.ts +8 -4
  30. package/client/deploy-types.js +52 -34
  31. package/client/deploy-types.js.map +1 -1
  32. package/client/deploy-types.mjs +53 -36
  33. package/client/deploy-types.mjs.map +1 -1
  34. package/client/generate.d.ts +2 -2
  35. package/client/generate.js +18 -7
  36. package/client/generate.js.map +1 -1
  37. package/client/generate.mjs +18 -7
  38. package/client/generate.mjs.map +1 -1
  39. package/client/generator-context.d.ts +4 -4
  40. package/client/generator-context.js +5 -24
  41. package/client/generator-context.js.map +1 -1
  42. package/client/generator-context.mjs +5 -5
  43. package/client/generator-context.mjs.map +1 -1
  44. package/client/helpers/get-call-config-summary.d.ts +8 -3
  45. package/client/helpers/get-call-config-summary.js +22 -20
  46. package/client/helpers/get-call-config-summary.js.map +1 -1
  47. package/client/helpers/get-call-config-summary.mjs +22 -20
  48. package/client/helpers/get-call-config-summary.mjs.map +1 -1
  49. package/client/helpers/get-equivalent-type.d.ts +6 -1
  50. package/client/helpers/get-equivalent-type.js +20 -10
  51. package/client/helpers/get-equivalent-type.js.map +1 -1
  52. package/client/helpers/get-equivalent-type.mjs +20 -10
  53. package/client/helpers/get-equivalent-type.mjs.map +1 -1
  54. package/client/imports.js +21 -24
  55. package/client/imports.js.map +1 -1
  56. package/client/imports.mjs +21 -24
  57. package/client/imports.mjs.map +1 -1
  58. package/client/params-factory.d.ts +3 -0
  59. package/client/params-factory.js +126 -0
  60. package/client/params-factory.js.map +1 -0
  61. package/client/params-factory.mjs +124 -0
  62. package/client/params-factory.mjs.map +1 -0
  63. package/client/utility-types.d.ts +0 -7
  64. package/client/utility-types.js +37 -50
  65. package/client/utility-types.js.map +1 -1
  66. package/client/utility-types.mjs +38 -50
  67. package/client/utility-types.mjs.map +1 -1
  68. package/output/writer.d.ts +5 -5
  69. package/output/writer.js +26 -6
  70. package/output/writer.js.map +1 -1
  71. package/output/writer.mjs +26 -6
  72. package/output/writer.mjs.map +1 -1
  73. package/package.json +7 -5
  74. package/schema/application.schema.json.js +2 -2
  75. package/schema/application.schema.json.mjs +2 -2
  76. package/schema/arc56.schema.json.js +751 -0
  77. package/schema/arc56.schema.json.js.map +1 -0
  78. package/schema/arc56.schema.json.mjs +741 -0
  79. package/schema/arc56.schema.json.mjs.map +1 -0
  80. package/schema/load.d.ts +3 -3
  81. package/schema/load.js +28 -8
  82. package/schema/load.js.map +1 -1
  83. package/schema/load.mjs +29 -9
  84. package/schema/load.mjs.map +1 -1
  85. package/util/sanitization.js +13 -8
  86. package/util/sanitization.js.map +1 -1
  87. package/util/sanitization.mjs +13 -8
  88. package/util/sanitization.mjs.map +1 -1
  89. package/client/call-client.js +0 -341
  90. package/client/call-client.js.map +0 -1
  91. package/client/call-client.mjs +0 -320
  92. package/client/call-client.mjs.map +0 -1
  93. package/client/call-factory.js +0 -142
  94. package/client/call-factory.js.map +0 -1
  95. package/client/call-factory.mjs +0 -121
  96. package/client/call-factory.mjs.map +0 -1
@@ -1,160 +1,254 @@
1
1
  'use strict';
2
2
 
3
3
  var writer = require('../output/writer.js');
4
- var algokit = require('@algorandfoundation/algokit-utils');
5
4
  var getEquivalentType = require('./helpers/get-equivalent-type.js');
5
+ var algosdk = require('algosdk');
6
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
- }
7
+ function getMethodMetadata(method, ctx) {
8
+ const { methodSignatureToUniqueName } = ctx;
9
+ const methodSig = new algosdk.ABIMethod(method).getSignature();
10
+ const uniqueName = methodSignatureToUniqueName[methodSig];
11
+ let hasAppCallArgToTheRight = false;
12
+ const argsMeta = new Array();
13
+ for (let i = (method.args ?? []).length - 1; i >= 0; i--) {
14
+ const arg = method.args[i];
15
+ argsMeta.push({
16
+ ...arg,
17
+ name: arg.name ?? `arg${i + 1}`,
18
+ isOptional: !!arg.defaultValue || (hasAppCallArgToTheRight && algosdk.abiTypeIsTransaction(arg.type)),
19
+ tsType: getEquivalentType.getEquivalentType(arg.struct ?? arg.type, 'input', ctx),
18
20
  });
21
+ if (!hasAppCallArgToTheRight &&
22
+ algosdk.abiTypeIsTransaction(arg.type) &&
23
+ [algosdk.ABITransactionType.appl, algosdk.ABITransactionType.any].includes(arg.type)) {
24
+ hasAppCallArgToTheRight = true;
25
+ }
19
26
  }
20
- n.default = e;
21
- return Object.freeze(n);
27
+ argsMeta.reverse();
28
+ return { methodSig, uniqueName, argsMeta };
22
29
  }
23
-
24
- var algokit__namespace = /*#__PURE__*/_interopNamespaceDefault(algokit);
25
-
26
30
  function* appTypes(ctx) {
27
- const { app, methodSignatureToUniqueName, name } = ctx;
31
+ yield* structTypes(ctx);
32
+ yield* templateVariableTypes(ctx);
33
+ const { app, name } = ctx;
34
+ yield* writer.jsDoc(`The argument types for the ${name} contract`);
35
+ yield `export type ${name}Args = {`;
36
+ yield writer.IncIndent;
37
+ yield* writer.jsDoc('The object representation of the arguments for each method');
38
+ yield 'obj: {';
39
+ yield writer.IncIndent;
40
+ for (const method of app.methods) {
41
+ const { methodSig, argsMeta } = getMethodMetadata(method, ctx);
42
+ if (argsMeta.length) {
43
+ yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': {`;
44
+ yield writer.IncIndent;
45
+ for (const arg of argsMeta) {
46
+ if (arg.desc)
47
+ yield* writer.jsDoc(arg.desc);
48
+ yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.isOptional ? '?' : ''}: ${arg.tsType}`;
49
+ }
50
+ yield writer.DecIndentAndCloseBlock;
51
+ }
52
+ else {
53
+ yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': Record<string, never>`;
54
+ }
55
+ }
56
+ yield writer.DecIndentAndCloseBlock;
57
+ yield* writer.jsDoc('The tuple representation of the arguments for each method');
58
+ yield 'tuple: {';
59
+ yield writer.IncIndent;
60
+ for (const method of app.methods) {
61
+ const { methodSig, argsMeta } = getMethodMetadata(method, ctx);
62
+ yield* writer.inline(`'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': [`, argsMeta
63
+ .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${arg.tsType}${arg.isOptional ? ' | undefined' : ''}`)
64
+ .join(', '), ']');
65
+ }
66
+ yield writer.DecIndentAndCloseBlock;
67
+ yield writer.DecIndentAndCloseBlock;
68
+ yield writer.NewLine;
69
+ yield* writer.jsDoc('The return type for each method');
70
+ yield `export type ${name}Returns = {`;
71
+ yield writer.IncIndent;
72
+ for (const method of app.methods) {
73
+ const { methodSig } = getMethodMetadata(method, ctx);
74
+ yield* writer.inline(`'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': ${getEquivalentType.getEquivalentType(method.returns.struct ?? method.returns.type ?? 'void', 'output', ctx)}`);
75
+ }
76
+ yield writer.DecIndentAndCloseBlock;
77
+ yield writer.NewLine;
28
78
  yield* writer.jsDoc(`Defines the types of available calls and state of the ${name} smart contract.`);
29
- yield `export type ${name} = {`;
79
+ yield `export type ${name}Types = {`;
30
80
  yield writer.IncIndent;
31
81
  yield* writer.jsDoc('Maps method signatures / names to their argument and return types.');
32
- if (app.contract.methods.length == 0) {
82
+ if (app.methods.length == 0) {
33
83
  yield 'methods: {}';
34
84
  }
35
85
  else {
36
86
  yield 'methods:';
37
87
  }
38
88
  yield writer.IncIndent;
39
- for (const method of app.contract.methods) {
40
- const methodSig = algokit__namespace.getABIMethodSignature(method);
41
- const methodSigSafe = ctx.sanitizer.makeSafeStringTypeLiteral(methodSig);
42
- const uniqueName = methodSignatureToUniqueName[methodSig];
43
- const uniqueNameSafe = ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName);
44
- yield `& Record<'${methodSigSafe}'${methodSig !== uniqueName ? ` | '${uniqueNameSafe}'` : ''}, {`;
45
- yield writer.IncIndent;
46
- yield `argsObj: {`;
89
+ for (const method of app.methods) {
90
+ const { methodSig, uniqueName } = getMethodMetadata(method, ctx);
91
+ yield `& Record<'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}'${methodSig !== uniqueName ? ` | '${ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName)}'` : ''}, {`;
47
92
  yield writer.IncIndent;
48
- const argsMeta = method.args.map((arg) => ({
49
- ...arg,
50
- hasDefault: app.hints?.[methodSig]?.default_arguments?.[arg.name],
51
- tsType: getEquivalentType.getEquivalentType(arg.type, 'input'),
52
- }));
53
- for (const arg of argsMeta) {
54
- if (arg.desc)
55
- yield* writer.jsDoc(arg.desc);
56
- yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.hasDefault ? '?' : ''}: ${arg.tsType}`;
57
- }
58
- yield writer.DecIndentAndCloseBlock;
59
- yield* writer.inline(`argsTuple: [`, argsMeta
60
- .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${getEquivalentType.getEquivalentType(arg.type, 'input')}${arg.hasDefault ? ' | undefined' : ''}`)
61
- .join(', '), ']');
62
- const outputStruct = ctx.app.hints?.[methodSig]?.structs?.output;
93
+ yield `argsObj: ${name}Args['obj']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`;
94
+ yield `argsTuple: ${name}Args['tuple']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`;
63
95
  if (method.returns.desc)
64
96
  yield* writer.jsDoc(method.returns.desc);
65
- if (outputStruct) {
66
- yield `returns: ${ctx.sanitizer.makeSafeTypeIdentifier(outputStruct.name)}`;
67
- }
68
- else {
69
- yield `returns: ${getEquivalentType.getEquivalentType(method.returns.type ?? 'void', 'output')}`;
70
- }
97
+ yield `returns: ${name}Returns['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`;
71
98
  yield writer.DecIndent;
72
99
  yield '}>';
73
100
  }
74
101
  yield writer.DecIndent;
75
- yield* appState(ctx);
102
+ const hasLocal = (app.state.keys.local && Object.keys(app.state.keys.local).length > 0) ||
103
+ (app.state.maps.local && Object.keys(app.state.maps.local).length > 0);
104
+ const hasGlobal = (app.state.keys.global && Object.keys(app.state.keys.global).length > 0) ||
105
+ (app.state.maps.global && Object.keys(app.state.maps.global).length > 0);
106
+ const hasBox = (app.state.keys.box && Object.keys(app.state.keys.box).length > 0) || (app.state.maps.box && Object.keys(app.state.maps.box).length > 0);
107
+ yield* appState(ctx, { hasBox, hasGlobal, hasLocal });
76
108
  yield writer.DecIndentAndCloseBlock;
77
- yield* writer.jsDoc('Defines the possible abi call signatures');
78
- yield `export type ${name}Sig = keyof ${name}['methods']`;
79
- yield* writer.jsDoc('Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a' +
80
- ' bare call is made');
81
- yield `export type TypedCallParams<TSignature extends ${name}Sig | undefined> = {`;
82
- yield writer.IncIndent;
83
- yield 'method: TSignature';
84
- yield 'methodArgs: TSignature extends undefined ? undefined : Array<ABIAppCallArg | undefined>';
85
- yield writer.DecIndent;
86
- yield '} & AppClientCallCoreParams & CoreAppCallArgs';
87
- yield* writer.jsDoc('Defines the arguments required for a bare call');
88
- yield `export type BareCallArgs = Omit<RawAppCallArgs, keyof CoreAppCallArgs>`;
89
- yield* structs(ctx);
90
- yield* writer.jsDoc(`Maps a method signature from the ${name} smart contract to the method's arguments in either tuple of struct form`);
91
- yield `export type MethodArgs<TSignature extends ${name}Sig> = ${name}['methods'][TSignature]['argsObj' | 'argsTuple']`;
92
- yield* writer.jsDoc(`Maps a method signature from the ${name} smart contract to the method's return type`);
93
- yield `export type MethodReturn<TSignature extends ${name}Sig> = ${name}['methods'][TSignature]['returns']`;
109
+ yield writer.NewLine;
110
+ yield `
111
+ /**
112
+ * Defines the possible abi call signatures.
113
+ */
114
+ export type ${name}Signatures = keyof ${name}Types['methods']
115
+ /**
116
+ * Defines the possible abi call signatures for methods that return a non-void value.
117
+ */
118
+ export type ${name}NonVoidMethodSignatures = keyof ${name}Types['methods'] extends infer T ? T extends keyof ${name}Types['methods'] ? MethodReturn<T> extends void ? never : T : never : never
119
+ /**
120
+ * Defines an object containing all relevant parameters for a single call to the contract.
121
+ */
122
+ export type CallParams<TArgs> = Expand<
123
+ Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &
124
+ {
125
+ /** The args for the ABI method call, either as an ordered array or an object */
126
+ args: Expand<TArgs>
127
+ }
128
+ >
129
+ /**
130
+ * Maps a method signature from the ${name} smart contract to the method's arguments in either tuple or struct form
131
+ */
132
+ export type MethodArgs<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['argsObj' | 'argsTuple']
133
+ /**
134
+ * Maps a method signature from the ${name} smart contract to the method's return type
135
+ */
136
+ export type MethodReturn<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['returns']
137
+ `;
138
+ if (hasGlobal) {
139
+ yield `
140
+ /**
141
+ * Defines the shape of the keyed global state of the application.
142
+ */
143
+ export type GlobalKeysState = ${name}Types['state']['global']['keys']
144
+ `;
145
+ }
146
+ if (hasLocal) {
147
+ yield `
148
+ /**
149
+ * Defines the shape of the keyed local state of the application.
150
+ */
151
+ export type LocalKeysState = ${name}Types['state']['local']['keys']
152
+ `;
153
+ }
154
+ if (hasBox) {
155
+ yield `
156
+ /**
157
+ * Defines the shape of the keyed box state of the application.
158
+ */
159
+ export type BoxKeysState = ${name}Types['state']['box']['keys']
160
+ `;
161
+ }
94
162
  yield writer.NewLine;
95
163
  }
96
- function* structs({ app, sanitizer }) {
97
- if (app.hints === undefined)
164
+ /* eslint-disable @typescript-eslint/no-explicit-any */
165
+ function getStructAsObject(struct, ctx) {
166
+ return Object.fromEntries(struct.map((s) => [s.name, typeof s.type === 'string' ? getEquivalentType.getEquivalentType(s.type, 'output', ctx) : getStructAsObject(s.type, ctx)]));
167
+ }
168
+ function getStructAsTupleTypes(struct, ctx) {
169
+ return `[${struct.map((s) => (Array.isArray(s.type) ? getStructAsTupleTypes(s.type, ctx) : getEquivalentType.getEquivalentType(s.type, 'output', ctx))).join(', ')}]`;
170
+ }
171
+ function* structTypes(ctx) {
172
+ const { app, sanitizer } = ctx;
173
+ if (Object.keys(app.structs).length === 0)
98
174
  return;
99
- const definedStructs = new Set();
100
- for (const methodHint of Object.values(app.hints)) {
101
- if (methodHint.structs === undefined)
102
- continue;
103
- for (const struct of Object.values(methodHint.structs)) {
104
- if (definedStructs.has(struct.name))
105
- continue;
106
- definedStructs.add(struct.name);
107
- yield* writer.jsDoc(`Represents a ${struct.name} result as a struct`);
108
- yield `export type ${sanitizer.makeSafeTypeIdentifier(struct.name)} = {`;
109
- yield writer.IncIndent;
110
- for (const [key, type] of struct.elements) {
111
- yield `${sanitizer.makeSafePropertyIdentifier(key)}: ${getEquivalentType.getEquivalentType(type, 'output')}`;
175
+ yield '// Type definitions for ARC-56 structs';
176
+ yield writer.NewLine;
177
+ for (const structName of Object.keys(app.structs)) {
178
+ // Emit the struct type
179
+ yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${JSON.stringify(getStructAsObject(app.structs[structName], ctx), null, 2).replace(/"/g, '')}`;
180
+ yield writer.NewLine;
181
+ // Emit method that converts ABI tuple to the struct object
182
+ yield* writer.jsDoc(`Converts the ABI tuple representation of a ${structName} to the struct representation`);
183
+ yield* writer.inline(`export function ${sanitizer.makeSafeTypeIdentifier(structName)}FromTuple(`, `abiTuple: ${getStructAsTupleTypes(app.structs[structName], ctx)}`, `) {`);
184
+ yield* writer.indent(`return getABIStructFromABITuple(abiTuple, APP_SPEC.structs${sanitizer.getSafeMemberAccessor(structName)}, APP_SPEC.structs) as ${sanitizer.makeSafeTypeIdentifier(structName)}`);
185
+ yield '}';
186
+ yield writer.NewLine;
187
+ }
188
+ }
189
+ function* templateVariableTypes(ctx) {
190
+ if (Object.keys(ctx.app.templateVariables ?? {}).length === 0) {
191
+ return;
192
+ }
193
+ yield* writer.jsDoc('Deploy-time template variables');
194
+ yield 'export type TemplateVariables = {';
195
+ yield writer.IncIndent;
196
+ for (const name of Object.keys(ctx.app.templateVariables ?? {})) {
197
+ yield `${name}: ${getEquivalentType.getEquivalentType(ctx.app.templateVariables[name].type, 'output', ctx)},`;
198
+ }
199
+ yield writer.DecIndentAndCloseBlock;
200
+ yield writer.NewLine;
201
+ }
202
+ function* keysAndMaps(app, sanitizer, keys, maps) {
203
+ if (keys && Object.keys(keys).length) {
204
+ yield 'keys: {';
205
+ yield writer.IncIndent;
206
+ for (const name of Object.keys(keys)) {
207
+ const prop = keys[name];
208
+ if (prop.desc) {
209
+ yield* writer.jsDoc(prop.desc);
112
210
  }
113
- yield writer.DecIndentAndCloseBlock;
114
- yield* writer.jsDoc(`Converts the tuple representation of a ${struct.name} to the struct representation`);
115
- 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(', ')}] ) {`);
116
- yield writer.IncIndent;
117
- yield `return {`;
118
- yield writer.IncIndent;
119
- for (const [key] of struct.elements) {
120
- const prop = sanitizer.makeSafePropertyIdentifier(key);
121
- const param = sanitizer.makeSafeVariableIdentifier(key);
122
- yield `${prop}${prop !== param ? `: ${param}` : ''},`;
211
+ const keySafe = sanitizer.makeSafePropertyIdentifier(name);
212
+ yield `${keySafe}: ${prop.valueType === 'AVMBytes' ? 'BinaryState' : getEquivalentType.getEquivalentType(prop.valueType, 'output', { app, sanitizer })}`;
213
+ }
214
+ yield writer.DecIndentAndCloseBlock;
215
+ }
216
+ if (maps && Object.keys(maps).length) {
217
+ yield 'maps: {';
218
+ yield writer.IncIndent;
219
+ for (const name of Object.keys(maps)) {
220
+ const prop = maps[name];
221
+ if (prop.desc) {
222
+ yield* writer.jsDoc(prop.desc);
123
223
  }
124
- yield writer.DecIndentAndCloseBlock;
125
- yield writer.DecIndentAndCloseBlock;
224
+ const keySafe = sanitizer.makeSafePropertyIdentifier(name);
225
+ yield `${keySafe}: Map<${getEquivalentType.getEquivalentType(prop.keyType, 'input', { app, sanitizer })}, ${getEquivalentType.getEquivalentType(prop.valueType, 'output', { app, sanitizer })}>`;
126
226
  }
227
+ yield writer.DecIndentAndCloseBlock;
127
228
  }
128
229
  }
129
- function* appState({ app, sanitizer }) {
130
- const hasLocal = app.schema.local?.declared && Object.keys(app.schema.local.declared).length;
131
- const hasGlobal = app.schema.global?.declared && Object.keys(app.schema.global.declared).length;
230
+ function* appState({ app, sanitizer }, stateFlags) {
231
+ const { hasBox, hasGlobal, hasLocal } = stateFlags;
132
232
  if (hasLocal || hasGlobal) {
133
- yield* writer.jsDoc('Defines the shape of the global and local state of the application.');
233
+ yield* writer.jsDoc('Defines the shape of the state of the application.');
134
234
  yield 'state: {';
135
235
  yield writer.IncIndent;
136
236
  if (hasGlobal) {
137
237
  yield 'global: {';
138
238
  yield writer.IncIndent;
139
- for (const prop of Object.values(app.schema.global.declared)) {
140
- if (prop.descr) {
141
- yield* writer.jsDoc(prop.descr);
142
- }
143
- const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key);
144
- yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
145
- }
239
+ yield* keysAndMaps(app, sanitizer, app.state.keys.global, app.state.maps.global);
146
240
  yield writer.DecIndentAndCloseBlock;
147
241
  }
148
242
  if (hasLocal) {
149
243
  yield 'local: {';
150
244
  yield writer.IncIndent;
151
- for (const prop of Object.values(app.schema.local.declared)) {
152
- if (prop.descr) {
153
- yield* writer.jsDoc(prop.descr);
154
- }
155
- const keySafe = sanitizer.makeSafePropertyIdentifier(prop.key);
156
- yield `${keySafe}?: ${prop.type === 'uint64' ? 'IntegerState' : 'BinaryState'}`;
157
- }
245
+ yield* keysAndMaps(app, sanitizer, app.state.keys.local, app.state.maps.local);
246
+ yield writer.DecIndentAndCloseBlock;
247
+ }
248
+ if (hasBox) {
249
+ yield 'box: {';
250
+ yield writer.IncIndent;
251
+ yield* keysAndMaps(app, sanitizer, app.state.keys.box, app.state.maps.box);
158
252
  yield writer.DecIndentAndCloseBlock;
159
253
  }
160
254
  yield writer.DecIndentAndCloseBlock;
@@ -1 +1 @@
1
- {"version":3,"file":"app-types.js","sources":["../../src/client/app-types.ts"],"sourcesContent":["import { GeneratorContext } from './generator-context'\nimport { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, 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 if (app.contract.methods.length == 0) {\n yield 'methods: {}'\n } else {\n yield 'methods:'\n }\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 const definedStructs = new Set()\n\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 if (definedStructs.has(struct.name)) continue\n definedStructs.add(struct.name)\n\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
+ {"version":3,"file":"app-types.js","sources":["../../src/client/app-types.ts"],"sourcesContent":["import { GeneratorContext } from './generator-context'\nimport { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, inline, jsDoc, NewLine } from '../output/writer'\nimport { getEquivalentType } from './helpers/get-equivalent-type'\nimport algosdk, { ABIMethod } from 'algosdk'\nimport { Arc56Contract, Method, StorageKey, StorageMap, StructField } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { Sanitizer } from '../util/sanitization'\nimport { Expand } from '@algorandfoundation/algokit-utils/types/expand'\n\nfunction getMethodMetadata(method: Method, ctx: GeneratorContext) {\n const { methodSignatureToUniqueName } = ctx\n const methodSig = new ABIMethod(method).getSignature()\n const uniqueName = methodSignatureToUniqueName[methodSig]\n\n let hasAppCallArgToTheRight = false\n const argsMeta = new Array<Expand<Omit<(typeof method.args)[0], 'name'> & { name: string; isOptional: boolean; tsType: string }>>()\n\n for (let i = (method.args ?? []).length - 1; i >= 0; i--) {\n const arg = method.args[i]\n\n argsMeta.push({\n ...arg,\n name: arg.name ?? `arg${i + 1}`,\n isOptional: !!arg.defaultValue || (hasAppCallArgToTheRight && algosdk.abiTypeIsTransaction(arg.type)),\n tsType: getEquivalentType(arg.struct ?? arg.type, 'input', ctx),\n })\n\n if (\n !hasAppCallArgToTheRight &&\n algosdk.abiTypeIsTransaction(arg.type) &&\n [algosdk.ABITransactionType.appl, algosdk.ABITransactionType.any].includes(arg.type)\n ) {\n hasAppCallArgToTheRight = true\n }\n }\n argsMeta.reverse()\n\n return { methodSig, uniqueName, argsMeta }\n}\n\nexport function* appTypes(ctx: GeneratorContext): DocumentParts {\n yield* structTypes(ctx)\n yield* templateVariableTypes(ctx)\n\n const { app, name } = ctx\n\n yield* jsDoc(`The argument types for the ${name} contract`)\n yield `export type ${name}Args = {`\n yield IncIndent\n yield* jsDoc('The object representation of the arguments for each method')\n yield 'obj: {'\n yield IncIndent\n for (const method of app.methods) {\n const { methodSig, argsMeta } = getMethodMetadata(method, ctx)\n if (argsMeta.length) {\n yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': {`\n yield IncIndent\n for (const arg of argsMeta) {\n if (arg.desc) yield* jsDoc(arg.desc)\n yield `${ctx.sanitizer.makeSafePropertyIdentifier(arg.name)}${arg.isOptional ? '?' : ''}: ${arg.tsType}`\n }\n yield DecIndentAndCloseBlock\n } else {\n yield `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': Record<string, never>`\n }\n }\n yield DecIndentAndCloseBlock\n\n yield* jsDoc('The tuple representation of the arguments for each method')\n yield 'tuple: {'\n yield IncIndent\n for (const method of app.methods) {\n const { methodSig, argsMeta } = getMethodMetadata(method, ctx)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': [`,\n argsMeta\n .map((arg) => `${ctx.sanitizer.makeSafeVariableIdentifier(arg.name)}: ${arg.tsType}${arg.isOptional ? ' | undefined' : ''}`)\n .join(', '),\n ']',\n )\n }\n yield DecIndentAndCloseBlock\n\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc('The return type for each method')\n yield `export type ${name}Returns = {`\n yield IncIndent\n for (const method of app.methods) {\n const { methodSig } = getMethodMetadata(method, ctx)\n yield* inline(\n `'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}': ${getEquivalentType(method.returns.struct ?? method.returns.type ?? 'void', 'output', ctx)}`,\n )\n }\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield* jsDoc(`Defines the types of available calls and state of the ${name} smart contract.`)\n yield `export type ${name}Types = {`\n yield IncIndent\n yield* jsDoc('Maps method signatures / names to their argument and return types.')\n if (app.methods.length == 0) {\n yield 'methods: {}'\n } else {\n yield 'methods:'\n }\n yield IncIndent\n for (const method of app.methods) {\n const { methodSig, uniqueName } = getMethodMetadata(method, ctx)\n yield `& Record<'${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}'${methodSig !== uniqueName ? ` | '${ctx.sanitizer.makeSafeStringTypeLiteral(uniqueName)}'` : ''}, {`\n yield IncIndent\n yield `argsObj: ${name}Args['obj']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n yield `argsTuple: ${name}Args['tuple']['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n\n if (method.returns.desc) yield* jsDoc(method.returns.desc)\n yield `returns: ${name}Returns['${ctx.sanitizer.makeSafeStringTypeLiteral(methodSig)}']`\n\n yield DecIndent\n yield '}>'\n }\n yield DecIndent\n\n const hasLocal =\n (app.state.keys.local && Object.keys(app.state.keys.local).length > 0) ||\n (app.state.maps.local && Object.keys(app.state.maps.local).length > 0)\n const hasGlobal =\n (app.state.keys.global && Object.keys(app.state.keys.global).length > 0) ||\n (app.state.maps.global && Object.keys(app.state.maps.global).length > 0)\n const hasBox =\n (app.state.keys.box && Object.keys(app.state.keys.box).length > 0) || (app.state.maps.box && Object.keys(app.state.maps.box).length > 0)\n yield* appState(ctx, { hasBox, hasGlobal, hasLocal })\n\n yield DecIndentAndCloseBlock\n yield NewLine\n\n yield `\n /**\n * Defines the possible abi call signatures.\n */\n export type ${name}Signatures = keyof ${name}Types['methods']\n /**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\n export type ${name}NonVoidMethodSignatures = keyof ${name}Types['methods'] extends infer T ? T extends keyof ${name}Types['methods'] ? MethodReturn<T> extends void ? never : T : never : never\n /**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\n export type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n >\n /**\n * Maps a method signature from the ${name} smart contract to the method's arguments in either tuple or struct form\n */\n export type MethodArgs<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['argsObj' | 'argsTuple']\n /**\n * Maps a method signature from the ${name} smart contract to the method's return type\n */\n export type MethodReturn<TSignature extends ${name}Signatures> = ${name}Types['methods'][TSignature]['returns']\n `\n\n if (hasGlobal) {\n yield `\n /**\n * Defines the shape of the keyed global state of the application.\n */\n export type GlobalKeysState = ${name}Types['state']['global']['keys']\n `\n }\n\n if (hasLocal) {\n yield `\n /**\n * Defines the shape of the keyed local state of the application.\n */\n export type LocalKeysState = ${name}Types['state']['local']['keys']\n `\n }\n\n if (hasBox) {\n yield `\n /**\n * Defines the shape of the keyed box state of the application.\n */\n export type BoxKeysState = ${name}Types['state']['box']['keys']\n `\n }\n\n yield NewLine\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction getStructAsObject(struct: StructField[], ctx: GeneratorContext): Record<string, any> {\n return Object.fromEntries(\n struct.map((s) => [s.name, typeof s.type === 'string' ? getEquivalentType(s.type, 'output', ctx) : getStructAsObject(s.type, ctx)]),\n )\n}\n\nfunction getStructAsTupleTypes(struct: StructField[], ctx: GeneratorContext): string {\n return `[${struct.map((s) => (Array.isArray(s.type) ? getStructAsTupleTypes(s.type, ctx) : getEquivalentType(s.type, 'output', ctx))).join(', ')}]`\n}\n\nfunction* structTypes(ctx: GeneratorContext): DocumentParts {\n const { app, sanitizer } = ctx\n if (Object.keys(app.structs).length === 0) return\n\n yield '// Type definitions for ARC-56 structs'\n yield NewLine\n\n for (const structName of Object.keys(app.structs)) {\n // Emit the struct type\n\n yield `export type ${sanitizer.makeSafeTypeIdentifier(structName)} = ${JSON.stringify(getStructAsObject(app.structs[structName], ctx), null, 2).replace(/\"/g, '')}`\n yield NewLine\n\n // Emit method that converts ABI tuple to the struct object\n yield* jsDoc(`Converts the ABI tuple representation of a ${structName} to the struct representation`)\n yield* inline(\n `export function ${sanitizer.makeSafeTypeIdentifier(structName)}FromTuple(`,\n `abiTuple: ${getStructAsTupleTypes(app.structs[structName], ctx)}`,\n `) {`,\n )\n yield* indent(\n `return getABIStructFromABITuple(abiTuple, APP_SPEC.structs${sanitizer.getSafeMemberAccessor(structName)}, APP_SPEC.structs) as ${sanitizer.makeSafeTypeIdentifier(structName)}`,\n )\n yield '}'\n yield NewLine\n }\n}\n\nfunction* templateVariableTypes(ctx: GeneratorContext): DocumentParts {\n if (Object.keys(ctx.app.templateVariables ?? {}).length === 0) {\n return\n }\n\n yield* jsDoc('Deploy-time template variables')\n yield 'export type TemplateVariables = {'\n yield IncIndent\n\n for (const name of Object.keys(ctx.app.templateVariables ?? {})) {\n yield `${name}: ${getEquivalentType(ctx.app.templateVariables![name].type, 'output', ctx)},`\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* keysAndMaps(\n app: Arc56Contract,\n sanitizer: Sanitizer,\n keys: {\n [name: string]: StorageKey\n },\n maps: {\n [name: string]: StorageMap\n },\n): DocumentParts {\n if (keys && Object.keys(keys).length) {\n yield 'keys: {'\n yield IncIndent\n for (const name of Object.keys(keys)) {\n const prop = keys[name]\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n\n yield `${keySafe}: ${prop.valueType === 'AVMBytes' ? 'BinaryState' : getEquivalentType(prop.valueType, 'output', { app, sanitizer })}`\n }\n yield DecIndentAndCloseBlock\n }\n\n if (maps && Object.keys(maps).length) {\n yield 'maps: {'\n yield IncIndent\n for (const name of Object.keys(maps)) {\n const prop = maps[name]\n if (prop.desc) {\n yield* jsDoc(prop.desc)\n }\n const keySafe = sanitizer.makeSafePropertyIdentifier(name)\n\n yield `${keySafe}: Map<${getEquivalentType(prop.keyType, 'input', { app, sanitizer })}, ${getEquivalentType(prop.valueType, 'output', { app, sanitizer })}>`\n }\n yield DecIndentAndCloseBlock\n }\n}\n\nfunction* appState(\n { app, sanitizer }: GeneratorContext,\n stateFlags: { hasLocal: boolean; hasGlobal: boolean; hasBox: boolean },\n): DocumentParts {\n const { hasBox, hasGlobal, hasLocal } = stateFlags\n\n if (hasLocal || hasGlobal) {\n yield* jsDoc('Defines the shape of the state of the application.')\n yield 'state: {'\n yield IncIndent\n if (hasGlobal) {\n yield 'global: {'\n yield IncIndent\n yield* keysAndMaps(app, sanitizer, app.state.keys.global, app.state.maps.global)\n yield DecIndentAndCloseBlock\n }\n if (hasLocal) {\n yield 'local: {'\n yield IncIndent\n yield* keysAndMaps(app, sanitizer, app.state.keys.local, app.state.maps.local)\n yield DecIndentAndCloseBlock\n }\n if (hasBox) {\n yield 'box: {'\n yield IncIndent\n yield* keysAndMaps(app, sanitizer, app.state.keys.box, app.state.maps.box)\n yield DecIndentAndCloseBlock\n }\n yield DecIndentAndCloseBlock\n }\n}\n"],"names":["ABIMethod","getEquivalentType","jsDoc","IncIndent","DecIndentAndCloseBlock","inline","NewLine","DecIndent","indent"],"mappings":";;;;;;AAQA,SAAS,iBAAiB,CAAC,MAAc,EAAE,GAAqB,EAAA;AAC9D,IAAA,MAAM,EAAE,2BAA2B,EAAE,GAAG,GAAG,CAAA;IAC3C,MAAM,SAAS,GAAG,IAAIA,iBAAS,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAA;AACtD,IAAA,MAAM,UAAU,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAA;IAEzD,IAAI,uBAAuB,GAAG,KAAK,CAAA;AACnC,IAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAyG,CAAA;IAEnI,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACxD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE1B,QAAQ,CAAC,IAAI,CAAC;AACZ,YAAA,GAAG,GAAG;YACN,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAM,GAAA,EAAA,CAAC,GAAG,CAAC,CAAE,CAAA;AAC/B,YAAA,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,KAAK,uBAAuB,IAAI,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrG,YAAA,MAAM,EAAEC,mCAAiB,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC;AAChE,SAAA,CAAC,CAAA;AAEF,QAAA,IACE,CAAC,uBAAuB;AACxB,YAAA,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;YACtC,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EACpF;YACA,uBAAuB,GAAG,IAAI,CAAA;SAC/B;KACF;IACD,QAAQ,CAAC,OAAO,EAAE,CAAA;AAElB,IAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA;AAC5C,CAAC;AAEc,UAAE,QAAQ,CAAC,GAAqB,EAAA;AAC7C,IAAA,OAAO,WAAW,CAAC,GAAG,CAAC,CAAA;AACvB,IAAA,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAA;AAEjC,IAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,CAAA;IAEzB,OAAOC,YAAK,CAAC,8BAA8B,IAAI,CAAA,SAAA,CAAW,CAAC,CAAA;IAC3D,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,QAAA,CAAU,CAAA;AACnC,IAAA,MAAMC,gBAAS,CAAA;AACf,IAAA,OAAOD,YAAK,CAAC,4DAA4D,CAAC,CAAA;AAC1E,IAAA,MAAM,QAAQ,CAAA;AACd,IAAA,MAAMC,gBAAS,CAAA;AACf,IAAA,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE;AAChC,QAAA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAC9D,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAA,IAAA,CAAM,CAAA;AAClE,YAAA,MAAMA,gBAAS,CAAA;AACf,YAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;gBAC1B,IAAI,GAAG,CAAC,IAAI;oBAAE,OAAOD,YAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACpC,gBAAA,MAAM,CAAG,EAAA,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,UAAU,GAAG,GAAG,GAAG,EAAE,CAAA,EAAA,EAAK,GAAG,CAAC,MAAM,CAAA,CAAE,CAAA;aACzG;AACD,YAAA,MAAME,6BAAsB,CAAA;SAC7B;aAAM;YACL,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAA,wBAAA,CAA0B,CAAA;SACvF;KACF;AACD,IAAA,MAAMA,6BAAsB,CAAA;AAE5B,IAAA,OAAOF,YAAK,CAAC,2DAA2D,CAAC,CAAA;AACzE,IAAA,MAAM,UAAU,CAAA;AAChB,IAAA,MAAMC,gBAAS,CAAA;AACf,IAAA,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE;AAChC,QAAA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAC9D,QAAA,OAAOE,aAAM,CACX,IAAI,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAA,IAAA,CAAM,EAC5D,QAAQ;AACL,aAAA,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA,EAAG,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAK,EAAA,EAAA,GAAG,CAAC,MAAM,CAAG,EAAA,GAAG,CAAC,UAAU,GAAG,cAAc,GAAG,EAAE,EAAE,CAAC;AAC3H,aAAA,IAAI,CAAC,IAAI,CAAC,EACb,GAAG,CACJ,CAAA;KACF;AACD,IAAA,MAAMD,6BAAsB,CAAA;AAE5B,IAAA,MAAMA,6BAAsB,CAAA;AAC5B,IAAA,MAAME,cAAO,CAAA;AAEb,IAAA,OAAOJ,YAAK,CAAC,iCAAiC,CAAC,CAAA;IAC/C,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,WAAA,CAAa,CAAA;AACtC,IAAA,MAAMC,gBAAS,CAAA;AACf,IAAA,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE;QAChC,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AACpD,QAAA,OAAOE,aAAM,CACX,CAAA,CAAA,EAAI,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAM,GAAA,EAAAJ,mCAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAA,CAAE,CACvJ,CAAA;KACF;AACD,IAAA,MAAMG,6BAAsB,CAAA;AAC5B,IAAA,MAAME,cAAO,CAAA;IAEb,OAAOJ,YAAK,CAAC,yDAAyD,IAAI,CAAA,gBAAA,CAAkB,CAAC,CAAA;IAC7F,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,SAAA,CAAW,CAAA;AACpC,IAAA,MAAMC,gBAAS,CAAA;AACf,IAAA,OAAOD,YAAK,CAAC,oEAAoE,CAAC,CAAA;IAClF,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;AAC3B,QAAA,MAAM,aAAa,CAAA;KACpB;SAAM;AACL,QAAA,MAAM,UAAU,CAAA;KACjB;AACD,IAAA,MAAMC,gBAAS,CAAA;AACf,IAAA,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE;AAChC,QAAA,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAChE,QAAA,MAAM,CAAa,UAAA,EAAA,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAA,CAAA,EAAI,SAAS,KAAK,UAAU,GAAG,CAAA,IAAA,EAAO,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE,KAAK,CAAA;AAC3K,QAAA,MAAMA,gBAAS,CAAA;AACf,QAAA,MAAM,CAAY,SAAA,EAAA,IAAI,CAAgB,aAAA,EAAA,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAA,EAAA,CAAI,CAAA;AAC5F,QAAA,MAAM,CAAc,WAAA,EAAA,IAAI,CAAkB,eAAA,EAAA,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAA,EAAA,CAAI,CAAA;AAEhG,QAAA,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI;YAAE,OAAOD,YAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAC1D,QAAA,MAAM,CAAY,SAAA,EAAA,IAAI,CAAY,SAAA,EAAA,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAA,EAAA,CAAI,CAAA;AAExF,QAAA,MAAMK,gBAAS,CAAA;AACf,QAAA,MAAM,IAAI,CAAA;KACX;AACD,IAAA,MAAMA,gBAAS,CAAA;IAEf,MAAM,QAAQ,GACZ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;SACpE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACxE,MAAM,SAAS,GACb,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;SACtE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC1E,MAAM,MAAM,GACV,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAC1I,IAAA,OAAO,QAAQ,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;AAErD,IAAA,MAAMH,6BAAsB,CAAA;AAC5B,IAAA,MAAME,cAAO,CAAA;IAEb,MAAM,CAAA;;;;AAIQ,cAAA,EAAA,IAAI,sBAAsB,IAAI,CAAA;;;;gBAI9B,IAAI,CAAA,gCAAA,EAAmC,IAAI,CAAA,mDAAA,EAAsD,IAAI,CAAA;;;;;;;;;;;;wCAY7E,IAAI,CAAA;;AAEE,4CAAA,EAAA,IAAI,iBAAiB,IAAI,CAAA;;wCAE/B,IAAI,CAAA;;AAEI,8CAAA,EAAA,IAAI,iBAAiB,IAAI,CAAA;GACtE,CAAA;IAED,IAAI,SAAS,EAAE;QACb,MAAM,CAAA;;;;sCAI4B,IAAI,CAAA;KACrC,CAAA;KACF;IAED,IAAI,QAAQ,EAAE;QACZ,MAAM,CAAA;;;;qCAI2B,IAAI,CAAA;KACpC,CAAA;KACF;IAED,IAAI,MAAM,EAAE;QACV,MAAM,CAAA;;;;mCAIyB,IAAI,CAAA;KAClC,CAAA;KACF;AAED,IAAA,MAAMA,cAAO,CAAA;AACf,CAAC;AAED;AACA,SAAS,iBAAiB,CAAC,MAAqB,EAAE,GAAqB,EAAA;IACrE,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,GAAGL,mCAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CACpI,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAqB,EAAE,GAAqB,EAAA;IACzE,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAGA,mCAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACrJ,CAAC;AAED,UAAU,WAAW,CAAC,GAAqB,EAAA;AACzC,IAAA,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,CAAA;IAC9B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;AAEjD,IAAA,MAAM,wCAAwC,CAAA;AAC9C,IAAA,MAAMK,cAAO,CAAA;AAEb,IAAA,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;;AAGjD,QAAA,MAAM,eAAe,SAAS,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAA;AACnK,QAAA,MAAMA,cAAO,CAAA;;QAGb,OAAOJ,YAAK,CAAC,8CAA8C,UAAU,CAAA,6BAAA,CAA+B,CAAC,CAAA;AACrG,QAAA,OAAOG,aAAM,CACX,CAAmB,gBAAA,EAAA,SAAS,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA,UAAA,CAAY,EAC3E,CAAA,UAAA,EAAa,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE,EAClE,CAAA,GAAA,CAAK,CACN,CAAA;QACD,OAAOG,aAAM,CACX,6DAA6D,SAAS,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAA0B,uBAAA,EAAA,SAAS,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA,CAAE,CACjL,CAAA;AACD,QAAA,MAAM,GAAG,CAAA;AACT,QAAA,MAAMF,cAAO,CAAA;KACd;AACH,CAAC;AAED,UAAU,qBAAqB,CAAC,GAAqB,EAAA;AACnD,IAAA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7D,OAAM;KACP;AAED,IAAA,OAAOJ,YAAK,CAAC,gCAAgC,CAAC,CAAA;AAC9C,IAAA,MAAM,mCAAmC,CAAA;AACzC,IAAA,MAAMC,gBAAS,CAAA;AAEf,IAAA,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE;QAC/D,MAAM,CAAA,EAAG,IAAI,CAAK,EAAA,EAAAF,mCAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;KAC7F;AAED,IAAA,MAAMG,6BAAsB,CAAA;AAC5B,IAAA,MAAME,cAAO,CAAA;AACf,CAAC;AAED,UAAU,WAAW,CACnB,GAAkB,EAClB,SAAoB,EACpB,IAEC,EACD,IAEC,EAAA;IAED,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;AACpC,QAAA,MAAM,SAAS,CAAA;AACf,QAAA,MAAMH,gBAAS,CAAA;QACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;AACvB,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,OAAOD,YAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACxB;YACD,MAAM,OAAO,GAAG,SAAS,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAA;AAE1D,YAAA,MAAM,CAAG,EAAA,OAAO,CAAK,EAAA,EAAA,IAAI,CAAC,SAAS,KAAK,UAAU,GAAG,aAAa,GAAGD,mCAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,CAAA;SACvI;AACD,QAAA,MAAMG,6BAAsB,CAAA;KAC7B;IAED,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;AACpC,QAAA,MAAM,SAAS,CAAA;AACf,QAAA,MAAMD,gBAAS,CAAA;QACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;AACvB,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,OAAOD,YAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACxB;YACD,MAAM,OAAO,GAAG,SAAS,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAA;AAE1D,YAAA,MAAM,CAAG,EAAA,OAAO,CAAS,MAAA,EAAAD,mCAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA,EAAA,EAAKA,mCAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,GAAG,CAAA;SAC7J;AACD,QAAA,MAAMG,6BAAsB,CAAA;KAC7B;AACH,CAAC;AAED,UAAU,QAAQ,CAChB,EAAE,GAAG,EAAE,SAAS,EAAoB,EACpC,UAAsE,EAAA;IAEtE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;AAElD,IAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;AACzB,QAAA,OAAOF,YAAK,CAAC,oDAAoD,CAAC,CAAA;AAClE,QAAA,MAAM,UAAU,CAAA;AAChB,QAAA,MAAMC,gBAAS,CAAA;QACf,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,WAAW,CAAA;AACjB,YAAA,MAAMA,gBAAS,CAAA;YACf,OAAO,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAChF,YAAA,MAAMC,6BAAsB,CAAA;SAC7B;QACD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,UAAU,CAAA;AAChB,YAAA,MAAMD,gBAAS,CAAA;YACf,OAAO,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC9E,YAAA,MAAMC,6BAAsB,CAAA;SAC7B;QACD,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,QAAQ,CAAA;AACd,YAAA,MAAMD,gBAAS,CAAA;YACf,OAAO,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC1E,YAAA,MAAMC,6BAAsB,CAAA;SAC7B;AACD,QAAA,MAAMA,6BAAsB,CAAA;KAC7B;AACH;;;;"}