@algorandfoundation/algokit-client-generator 3.0.6 → 4.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.
- package/README.md +4 -2
- package/cli.js +1 -1
- package/cli.js.map +1 -1
- package/cli.mjs +1 -1
- package/cli.mjs.map +1 -1
- package/client/{call-factory.d.ts → app-client.d.ts} +1 -1
- package/client/app-client.js +288 -0
- package/client/app-client.js.map +1 -0
- package/client/app-client.mjs +286 -0
- package/client/app-client.mjs.map +1 -0
- package/client/{call-client.d.ts → app-factory.d.ts} +1 -1
- package/client/app-factory.js +238 -0
- package/client/app-factory.js.map +1 -0
- package/client/app-factory.mjs +236 -0
- package/client/app-factory.mjs.map +1 -0
- package/client/app-types.js +196 -98
- package/client/app-types.js.map +1 -1
- package/client/app-types.mjs +196 -79
- package/client/app-types.mjs.map +1 -1
- package/client/call-composer-types.js +23 -53
- package/client/call-composer-types.js.map +1 -1
- package/client/call-composer-types.mjs +23 -34
- package/client/call-composer-types.mjs.map +1 -1
- package/client/call-composer.js +43 -57
- package/client/call-composer.js.map +1 -1
- package/client/call-composer.mjs +45 -40
- package/client/call-composer.mjs.map +1 -1
- package/client/deploy-types.d.ts +8 -4
- package/client/deploy-types.js +52 -34
- package/client/deploy-types.js.map +1 -1
- package/client/deploy-types.mjs +53 -36
- package/client/deploy-types.mjs.map +1 -1
- package/client/generate.d.ts +2 -2
- package/client/generate.js +18 -6
- package/client/generate.js.map +1 -1
- package/client/generate.mjs +18 -6
- package/client/generate.mjs.map +1 -1
- package/client/generator-context.d.ts +4 -4
- package/client/generator-context.js +5 -24
- package/client/generator-context.js.map +1 -1
- package/client/generator-context.mjs +5 -5
- package/client/generator-context.mjs.map +1 -1
- package/client/helpers/get-call-config-summary.d.ts +8 -3
- package/client/helpers/get-call-config-summary.js +22 -20
- package/client/helpers/get-call-config-summary.js.map +1 -1
- package/client/helpers/get-call-config-summary.mjs +22 -20
- package/client/helpers/get-call-config-summary.mjs.map +1 -1
- package/client/helpers/get-equivalent-type.d.ts +6 -1
- package/client/helpers/get-equivalent-type.js +10 -6
- package/client/helpers/get-equivalent-type.js.map +1 -1
- package/client/helpers/get-equivalent-type.mjs +10 -6
- package/client/helpers/get-equivalent-type.mjs.map +1 -1
- package/client/imports.js +18 -24
- package/client/imports.js.map +1 -1
- package/client/imports.mjs +18 -24
- package/client/imports.mjs.map +1 -1
- package/client/params-factory.d.ts +3 -0
- package/client/params-factory.js +126 -0
- package/client/params-factory.js.map +1 -0
- package/client/params-factory.mjs +124 -0
- package/client/params-factory.mjs.map +1 -0
- package/client/utility-types.d.ts +0 -7
- package/client/utility-types.js +37 -50
- package/client/utility-types.js.map +1 -1
- package/client/utility-types.mjs +38 -50
- package/client/utility-types.mjs.map +1 -1
- package/output/writer.js +17 -3
- package/output/writer.js.map +1 -1
- package/output/writer.mjs +17 -3
- package/output/writer.mjs.map +1 -1
- package/package.json +4 -3
- package/schema/application.schema.json.js +2 -2
- package/schema/application.schema.json.mjs +2 -2
- package/schema/arc56.schema.json.js +787 -0
- package/schema/arc56.schema.json.js.map +1 -0
- package/schema/arc56.schema.json.mjs +780 -0
- package/schema/arc56.schema.json.mjs.map +1 -0
- package/schema/load.d.ts +3 -3
- package/schema/load.js +21 -7
- package/schema/load.js.map +1 -1
- package/schema/load.mjs +22 -8
- package/schema/load.mjs.map +1 -1
- package/client/call-client.js +0 -341
- package/client/call-client.js.map +0 -1
- package/client/call-client.mjs +0 -320
- package/client/call-client.mjs.map +0 -1
- package/client/call-factory.js +0 -142
- package/client/call-factory.js.map +0 -1
- package/client/call-factory.mjs +0 -121
- package/client/call-factory.mjs.map +0 -1
package/client/deploy-types.mjs
CHANGED
|
@@ -1,94 +1,111 @@
|
|
|
1
|
-
import { jsDoc, IncIndent, DecIndent,
|
|
1
|
+
import { jsDoc, IncIndent, DecIndent, NewLine } from '../output/writer.mjs';
|
|
2
2
|
import { BARE_CALL } from './helpers/get-call-config-summary.mjs';
|
|
3
|
-
import {
|
|
3
|
+
import { ABIMethod } from 'algosdk';
|
|
4
4
|
|
|
5
5
|
function getCreateOnCompleteOptions(method, app) {
|
|
6
|
-
const
|
|
7
|
-
const hasNoOp =
|
|
8
|
-
const onCompleteType =
|
|
9
|
-
? `
|
|
10
|
-
.filter(([_, value]) => value === 'ALL' || value === 'CREATE')
|
|
11
|
-
.map(([oc]) => OnCompleteCodeMap[oc])
|
|
12
|
-
.join(' | ')})`
|
|
6
|
+
const validCreateOnCompletes = method === BARE_CALL ? app.bareActions.create : app.methods.find((m) => new ABIMethod(m).getSignature() === method)?.actions?.create;
|
|
7
|
+
const hasNoOp = validCreateOnCompletes?.includes('NoOp');
|
|
8
|
+
const onCompleteType = validCreateOnCompletes
|
|
9
|
+
? `{onComplete${hasNoOp ? '?' : ''}: ${validCreateOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`
|
|
13
10
|
: {};
|
|
14
11
|
return {
|
|
15
12
|
type: onCompleteType,
|
|
16
13
|
isOptional: hasNoOp,
|
|
17
14
|
};
|
|
18
15
|
}
|
|
19
|
-
function
|
|
20
|
-
const
|
|
16
|
+
function getCallOnCompleteOptions(method, app) {
|
|
17
|
+
const validCallOnCompletes = method === BARE_CALL ? app.bareActions.call : app.methods.find((m) => new ABIMethod(m).getSignature() === method)?.actions?.call;
|
|
18
|
+
const hasNoOp = validCallOnCompletes?.includes('NoOp');
|
|
19
|
+
const onCompleteType = validCallOnCompletes
|
|
20
|
+
? `{onComplete${hasNoOp ? '?' : ''}: ${validCallOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`
|
|
21
|
+
: {};
|
|
22
|
+
return {
|
|
23
|
+
type: onCompleteType,
|
|
24
|
+
isOptional: hasNoOp,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function* deployTypes({ app, callConfig, sanitizer, methodSignatureToUniqueName }) {
|
|
28
|
+
const name = sanitizer.makeSafeTypeIdentifier(app.name);
|
|
21
29
|
if (callConfig.createMethods.length > 0) {
|
|
22
|
-
yield* jsDoc(
|
|
23
|
-
yield `export type ${name}CreateCalls = (typeof ${name}CallFactory)['create']`;
|
|
24
|
-
yield* jsDoc('Defines supported create methods for this smart contract');
|
|
30
|
+
yield* jsDoc('Defines supported create method params for this smart contract');
|
|
25
31
|
yield `export type ${name}CreateCallParams =`;
|
|
26
32
|
yield IncIndent;
|
|
27
33
|
for (const method of callConfig.createMethods) {
|
|
28
34
|
const onComplete = getCreateOnCompleteOptions(method, app);
|
|
29
35
|
if (method === BARE_CALL) {
|
|
30
|
-
yield `|
|
|
36
|
+
yield `| Expand<AppClientBareCallParams & {method?: undefined} & ${onComplete.type} & CreateSchema>`;
|
|
31
37
|
}
|
|
32
38
|
else {
|
|
39
|
+
const uniqueName = methodSignatureToUniqueName[method];
|
|
40
|
+
if (uniqueName !== method) {
|
|
41
|
+
const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName);
|
|
42
|
+
yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'} & ${onComplete.type} & CreateSchema>`;
|
|
43
|
+
}
|
|
33
44
|
const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method);
|
|
34
|
-
yield `|
|
|
45
|
+
yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'} & ${onComplete.type} & CreateSchema>`;
|
|
35
46
|
}
|
|
36
47
|
}
|
|
37
48
|
yield DecIndent;
|
|
38
49
|
}
|
|
39
50
|
if (callConfig.updateMethods.length > 0) {
|
|
40
|
-
yield* jsDoc(
|
|
41
|
-
yield `export type ${name}UpdateCalls = (typeof ${name}CallFactory)['update']`;
|
|
42
|
-
yield* jsDoc('Defines supported update methods for this smart contract');
|
|
51
|
+
yield* jsDoc('Defines supported update method params for this smart contract');
|
|
43
52
|
yield `export type ${name}UpdateCallParams =`;
|
|
44
53
|
yield IncIndent;
|
|
45
54
|
for (const method of callConfig.updateMethods) {
|
|
46
55
|
if (method === BARE_CALL) {
|
|
47
|
-
yield `|
|
|
56
|
+
yield `| Expand<AppClientBareCallParams> & {method?: undefined}`;
|
|
48
57
|
}
|
|
49
58
|
else {
|
|
59
|
+
const uniqueName = methodSignatureToUniqueName[method];
|
|
60
|
+
if (uniqueName !== method) {
|
|
61
|
+
const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName);
|
|
62
|
+
yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`;
|
|
63
|
+
}
|
|
50
64
|
const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method);
|
|
51
|
-
yield `|
|
|
65
|
+
yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`;
|
|
52
66
|
}
|
|
53
67
|
}
|
|
54
68
|
yield DecIndent;
|
|
55
69
|
}
|
|
56
70
|
if (callConfig.deleteMethods.length > 0) {
|
|
57
|
-
yield* jsDoc(
|
|
58
|
-
yield `export type ${name}DeleteCalls = (typeof ${name}CallFactory)['delete']`;
|
|
59
|
-
yield* jsDoc('Defines supported delete methods for this smart contract');
|
|
71
|
+
yield* jsDoc('Defines supported delete method params for this smart contract');
|
|
60
72
|
yield `export type ${name}DeleteCallParams =`;
|
|
61
73
|
yield IncIndent;
|
|
62
74
|
for (const method of callConfig.deleteMethods) {
|
|
63
75
|
if (method === BARE_CALL) {
|
|
64
|
-
yield `|
|
|
76
|
+
yield `| Expand<AppClientBareCallParams> & {method?: undefined}`;
|
|
65
77
|
}
|
|
66
78
|
else {
|
|
79
|
+
const uniqueName = methodSignatureToUniqueName[method];
|
|
80
|
+
if (uniqueName !== method) {
|
|
81
|
+
const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName);
|
|
82
|
+
yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`;
|
|
83
|
+
}
|
|
67
84
|
const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method);
|
|
68
|
-
yield `|
|
|
85
|
+
yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`;
|
|
69
86
|
}
|
|
70
87
|
}
|
|
71
88
|
yield DecIndent;
|
|
72
89
|
}
|
|
73
90
|
yield* jsDoc('Defines arguments required for the deploy method.');
|
|
74
|
-
yield `export type ${name}
|
|
91
|
+
yield `export type ${name}DeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {`;
|
|
75
92
|
yield IncIndent;
|
|
76
|
-
yield `deployTimeParams?: TealTemplateParams`;
|
|
77
93
|
if (callConfig.createMethods.length) {
|
|
78
|
-
yield* jsDoc('
|
|
79
|
-
yield `
|
|
94
|
+
yield* jsDoc('Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)');
|
|
95
|
+
yield `createParams?: ${name}CreateCallParams`;
|
|
80
96
|
}
|
|
81
97
|
if (callConfig.updateMethods.length) {
|
|
82
|
-
yield* jsDoc('
|
|
83
|
-
yield `
|
|
98
|
+
yield* jsDoc('Update transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)');
|
|
99
|
+
yield `updateParams?: ${name}UpdateCallParams`;
|
|
84
100
|
}
|
|
85
101
|
if (callConfig.deleteMethods.length) {
|
|
86
|
-
yield* jsDoc('
|
|
87
|
-
yield `
|
|
102
|
+
yield* jsDoc('Delete transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)');
|
|
103
|
+
yield `deleteParams?: ${name}DeleteCallParams`;
|
|
88
104
|
}
|
|
89
|
-
yield
|
|
105
|
+
yield DecIndent;
|
|
106
|
+
yield `}>`;
|
|
90
107
|
yield NewLine;
|
|
91
108
|
}
|
|
92
109
|
|
|
93
|
-
export { deployTypes, getCreateOnCompleteOptions };
|
|
110
|
+
export { deployTypes, getCallOnCompleteOptions, getCreateOnCompleteOptions };
|
|
94
111
|
//# sourceMappingURL=deploy-types.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-types.mjs","sources":["../../src/client/deploy-types.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, jsDoc, NewLine } from '../output/writer'\n\nimport { BARE_CALL, MethodIdentifier } from './helpers/get-call-config-summary'\nimport { GeneratorContext } from './generator-context'\nimport { AlgoAppSpec, CallConfig } from '../schema/application'\nimport { OnCompleteCodeMap } from './utility-types'\n\nexport function getCreateOnCompleteOptions(method: MethodIdentifier, app: AlgoAppSpec) {\n const callConfig = method === BARE_CALL ? app.bare_call_config : app.hints?.[method]?.call_config\n const hasNoOp = callConfig?.no_op === 'ALL' || callConfig?.no_op === 'CREATE'\n const onCompleteType = callConfig\n ? `(${Object.entries(callConfig)\n .filter(([_, value]) => value === 'ALL' || value === 'CREATE')\n .map(([oc]) => OnCompleteCodeMap[oc as keyof CallConfig])\n .join(' | ')})`\n : {}\n return {\n type: onCompleteType,\n isOptional: hasNoOp,\n }\n}\n\nexport function* deployTypes({ app, callConfig, sanitizer }: GeneratorContext): DocumentParts {\n const name = sanitizer.makeSafeTypeIdentifier(app.contract.name)\n\n if (callConfig.createMethods.length > 0) {\n yield* jsDoc(`A factory for available 'create' calls`)\n yield `export type ${name}CreateCalls = (typeof ${name}CallFactory)['create']`\n yield* jsDoc('Defines supported create methods for this smart contract')\n yield `export type ${name}CreateCallParams =`\n yield IncIndent\n for (const method of callConfig.createMethods) {\n const onComplete = getCreateOnCompleteOptions(method, app)\n if (method === BARE_CALL) {\n yield `| (TypedCallParams<undefined> & ${onComplete.type})`\n } else {\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n yield `| (TypedCallParams<'${methodSigSafe}'> & ${onComplete.type})`\n }\n }\n yield DecIndent\n }\n if (callConfig.updateMethods.length > 0) {\n yield* jsDoc(`A factory for available 'update' calls`)\n\n yield `export type ${name}UpdateCalls = (typeof ${name}CallFactory)['update']`\n yield* jsDoc('Defines supported update methods for this smart contract')\n yield `export type ${name}UpdateCallParams =`\n yield IncIndent\n for (const method of callConfig.updateMethods) {\n if (method === BARE_CALL) {\n yield `| TypedCallParams<undefined>`\n } else {\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n\n yield `| TypedCallParams<'${methodSigSafe}'>`\n }\n }\n yield DecIndent\n }\n\n if (callConfig.deleteMethods.length > 0) {\n yield* jsDoc(`A factory for available 'delete' calls`)\n\n yield `export type ${name}DeleteCalls = (typeof ${name}CallFactory)['delete']`\n\n yield* jsDoc('Defines supported delete methods for this smart contract')\n yield `export type ${name}DeleteCallParams =`\n yield IncIndent\n for (const method of callConfig.deleteMethods) {\n if (method === BARE_CALL) {\n yield `| TypedCallParams<undefined>`\n } else {\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n\n yield `| TypedCallParams<'${methodSigSafe}'>`\n }\n }\n yield DecIndent\n }\n\n yield* jsDoc('Defines arguments required for the deploy method.')\n yield `export type ${name}DeployArgs = {`\n yield IncIndent\n yield `deployTimeParams?: TealTemplateParams`\n if (callConfig.createMethods.length) {\n yield* jsDoc('A delegate which takes a create call factory and returns the create call params for this smart contract')\n yield `createCall?: (callFactory: ${name}CreateCalls) => ${name}CreateCallParams`\n }\n if (callConfig.updateMethods.length) {\n yield* jsDoc('A delegate which takes a update call factory and returns the update call params for this smart contract')\n yield `updateCall?: (callFactory: ${name}UpdateCalls) => ${name}UpdateCallParams`\n }\n if (callConfig.deleteMethods.length) {\n yield* jsDoc('A delegate which takes a delete call factory and returns the delete call params for this smart contract')\n yield `deleteCall?: (callFactory: ${name}DeleteCalls) => ${name}DeleteCallParams`\n }\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n"],"names":[],"mappings":";;;;AAOgB,SAAA,0BAA0B,CAAC,MAAwB,EAAE,GAAgB,EAAA;IACnF,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,GAAG,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,WAAW,CAAA;AACjG,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE,KAAK,KAAK,KAAK,IAAI,UAAU,EAAE,KAAK,KAAK,QAAQ,CAAA;IAC7E,MAAM,cAAc,GAAG,UAAU;AAC/B,UAAE,CAAI,CAAA,EAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;AAC3B,aAAA,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC;AAC7D,aAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,iBAAiB,CAAC,EAAsB,CAAC,CAAC;aACxD,IAAI,CAAC,KAAK,CAAC,CAAG,CAAA,CAAA;UACjB,EAAE,CAAA;IACN,OAAO;AACL,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,UAAU,EAAE,OAAO;KACpB,CAAA;AACH,CAAC;AAEK,UAAW,WAAW,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAoB,EAAA;AAC3E,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEhE,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,QAAA,OAAO,KAAK,CAAC,CAAA,sCAAA,CAAwC,CAAC,CAAA;AACtD,QAAA,MAAM,CAAe,YAAA,EAAA,IAAI,CAAyB,sBAAA,EAAA,IAAI,wBAAwB,CAAA;AAC9E,QAAA,OAAO,KAAK,CAAC,0DAA0D,CAAC,CAAA;QACxE,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,kBAAA,CAAoB,CAAA;AAC7C,QAAA,MAAM,SAAS,CAAA;AACf,QAAA,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE;YAC7C,MAAM,UAAU,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAC1D,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,gBAAA,MAAM,CAAmC,gCAAA,EAAA,UAAU,CAAC,IAAI,GAAG,CAAA;aAC5D;iBAAM;gBACL,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAA;AACjE,gBAAA,MAAM,uBAAuB,aAAa,CAAA,KAAA,EAAQ,UAAU,CAAC,IAAI,GAAG,CAAA;aACrE;SACF;AACD,QAAA,MAAM,SAAS,CAAA;KAChB;IACD,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,QAAA,OAAO,KAAK,CAAC,CAAA,sCAAA,CAAwC,CAAC,CAAA;AAEtD,QAAA,MAAM,CAAe,YAAA,EAAA,IAAI,CAAyB,sBAAA,EAAA,IAAI,wBAAwB,CAAA;AAC9E,QAAA,OAAO,KAAK,CAAC,0DAA0D,CAAC,CAAA;QACxE,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,kBAAA,CAAoB,CAAA;AAC7C,QAAA,MAAM,SAAS,CAAA;AACf,QAAA,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE;AAC7C,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,gBAAA,MAAM,8BAA8B,CAAA;aACrC;iBAAM;gBACL,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAA;gBAEjE,MAAM,CAAA,mBAAA,EAAsB,aAAa,CAAA,EAAA,CAAI,CAAA;aAC9C;SACF;AACD,QAAA,MAAM,SAAS,CAAA;KAChB;IAED,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,QAAA,OAAO,KAAK,CAAC,CAAA,sCAAA,CAAwC,CAAC,CAAA;AAEtD,QAAA,MAAM,CAAe,YAAA,EAAA,IAAI,CAAyB,sBAAA,EAAA,IAAI,wBAAwB,CAAA;AAE9E,QAAA,OAAO,KAAK,CAAC,0DAA0D,CAAC,CAAA;QACxE,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,kBAAA,CAAoB,CAAA;AAC7C,QAAA,MAAM,SAAS,CAAA;AACf,QAAA,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE;AAC7C,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,gBAAA,MAAM,8BAA8B,CAAA;aACrC;iBAAM;gBACL,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAA;gBAEjE,MAAM,CAAA,mBAAA,EAAsB,aAAa,CAAA,EAAA,CAAI,CAAA;aAC9C;SACF;AACD,QAAA,MAAM,SAAS,CAAA;KAChB;AAED,IAAA,OAAO,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACjE,MAAM,CAAA,YAAA,EAAe,IAAI,CAAA,cAAA,CAAgB,CAAA;AACzC,IAAA,MAAM,SAAS,CAAA;AACf,IAAA,MAAM,uCAAuC,CAAA;AAC7C,IAAA,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE;AACnC,QAAA,OAAO,KAAK,CAAC,yGAAyG,CAAC,CAAA;AACvH,QAAA,MAAM,CAA8B,2BAAA,EAAA,IAAI,CAAmB,gBAAA,EAAA,IAAI,kBAAkB,CAAA;KAClF;AACD,IAAA,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE;AACnC,QAAA,OAAO,KAAK,CAAC,yGAAyG,CAAC,CAAA;AACvH,QAAA,MAAM,CAA8B,2BAAA,EAAA,IAAI,CAAmB,gBAAA,EAAA,IAAI,kBAAkB,CAAA;KAClF;AACD,IAAA,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE;AACnC,QAAA,OAAO,KAAK,CAAC,yGAAyG,CAAC,CAAA;AACvH,QAAA,MAAM,CAA8B,2BAAA,EAAA,IAAI,CAAmB,gBAAA,EAAA,IAAI,kBAAkB,CAAA;KAClF;AACD,IAAA,MAAM,sBAAsB,CAAA;AAC5B,IAAA,MAAM,OAAO,CAAA;AACf;;;;"}
|
|
1
|
+
{"version":3,"file":"deploy-types.mjs","sources":["../../src/client/deploy-types.ts"],"sourcesContent":["import { DecIndent, DocumentParts, IncIndent, jsDoc, NewLine } from '../output/writer'\nimport { BARE_CALL, MethodIdentifier } from './helpers/get-call-config-summary'\nimport { GeneratorContext } from './generator-context'\nimport { Arc56Contract } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { ABIMethod } from 'algosdk'\n\nexport function getCreateOnCompleteOptions(method: MethodIdentifier, app: Arc56Contract) {\n const validCreateOnCompletes =\n method === BARE_CALL ? app.bareActions.create : app.methods.find((m) => new ABIMethod(m).getSignature() === method)?.actions?.create\n const hasNoOp = validCreateOnCompletes?.includes('NoOp')\n const onCompleteType = validCreateOnCompletes\n ? `{onComplete${hasNoOp ? '?' : ''}: ${validCreateOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`\n : {}\n return {\n type: onCompleteType,\n isOptional: hasNoOp,\n }\n}\n\nexport function getCallOnCompleteOptions(method: MethodIdentifier, app: Arc56Contract) {\n const validCallOnCompletes =\n method === BARE_CALL ? app.bareActions.call : app.methods.find((m) => new ABIMethod(m).getSignature() === method)?.actions?.call\n const hasNoOp = validCallOnCompletes?.includes('NoOp')\n const onCompleteType = validCallOnCompletes\n ? `{onComplete${hasNoOp ? '?' : ''}: ${validCallOnCompletes.map((oc) => `OnApplicationComplete.${oc}OC`).join(' | ')}}`\n : {}\n return {\n type: onCompleteType,\n isOptional: hasNoOp,\n }\n}\n\nexport function* deployTypes({ app, callConfig, sanitizer, methodSignatureToUniqueName }: GeneratorContext): DocumentParts {\n const name = sanitizer.makeSafeTypeIdentifier(app.name)\n\n if (callConfig.createMethods.length > 0) {\n yield* jsDoc('Defines supported create method params for this smart contract')\n yield `export type ${name}CreateCallParams =`\n yield IncIndent\n for (const method of callConfig.createMethods) {\n const onComplete = getCreateOnCompleteOptions(method, app)\n if (method === BARE_CALL) {\n yield `| Expand<AppClientBareCallParams & {method?: undefined} & ${onComplete.type} & CreateSchema>`\n } else {\n const uniqueName = methodSignatureToUniqueName[method]\n if (uniqueName !== method) {\n const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'} & ${onComplete.type} & CreateSchema>`\n }\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'} & ${onComplete.type} & CreateSchema>`\n }\n }\n yield DecIndent\n }\n if (callConfig.updateMethods.length > 0) {\n yield* jsDoc('Defines supported update method params for this smart contract')\n yield `export type ${name}UpdateCallParams =`\n yield IncIndent\n for (const method of callConfig.updateMethods) {\n if (method === BARE_CALL) {\n yield `| Expand<AppClientBareCallParams> & {method?: undefined}`\n } else {\n const uniqueName = methodSignatureToUniqueName[method]\n if (uniqueName !== method) {\n const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`\n }\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`\n }\n }\n yield DecIndent\n }\n\n if (callConfig.deleteMethods.length > 0) {\n yield* jsDoc('Defines supported delete method params for this smart contract')\n yield `export type ${name}DeleteCallParams =`\n yield IncIndent\n for (const method of callConfig.deleteMethods) {\n if (method === BARE_CALL) {\n yield `| Expand<AppClientBareCallParams> & {method?: undefined}`\n } else {\n const uniqueName = methodSignatureToUniqueName[method]\n if (uniqueName !== method) {\n const methodName = sanitizer.makeSafeStringTypeLiteral(uniqueName)\n yield `| Expand<CallParams<'${methodName}'> & {method: '${methodName}'}>`\n }\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(method)\n yield `| Expand<CallParams<'${methodSigSafe}'> & {method: '${methodSigSafe}'}>`\n }\n }\n yield DecIndent\n }\n\n yield* jsDoc('Defines arguments required for the deploy method.')\n yield `export type ${name}DeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {`\n yield IncIndent\n if (callConfig.createMethods.length) {\n yield* jsDoc(\n 'Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)',\n )\n yield `createParams?: ${name}CreateCallParams`\n }\n if (callConfig.updateMethods.length) {\n yield* jsDoc(\n 'Update transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)',\n )\n yield `updateParams?: ${name}UpdateCallParams`\n }\n if (callConfig.deleteMethods.length) {\n yield* jsDoc(\n 'Delete transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)',\n )\n yield `deleteParams?: ${name}DeleteCallParams`\n }\n yield DecIndent\n yield `}>`\n yield NewLine\n}\n"],"names":[],"mappings":"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"}
|
package/client/generate.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { DocumentParts } from '../output/writer';
|
|
2
|
-
import { AlgoAppSpec } from '../schema/application';
|
|
3
2
|
import { GeneratorOptions } from './generator-context';
|
|
4
|
-
|
|
3
|
+
import { Arc56Contract } from '@algorandfoundation/algokit-utils/types/app-arc56';
|
|
4
|
+
export declare function generate(app: Arc56Contract, options?: GeneratorOptions): DocumentParts;
|
package/client/generate.js
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var writer = require('../output/writer.js');
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var paramsFactory = require('./params-factory.js');
|
|
5
|
+
var appClient = require('./app-client.js');
|
|
6
6
|
var deployTypes = require('./deploy-types.js');
|
|
7
7
|
var utilityTypes = require('./utility-types.js');
|
|
8
8
|
var imports = require('./imports.js');
|
|
9
9
|
var generatorContext = require('./generator-context.js');
|
|
10
10
|
var appTypes = require('./app-types.js');
|
|
11
11
|
var callComposerTypes = require('./call-composer-types.js');
|
|
12
|
+
var appFactory = require('./app-factory.js');
|
|
12
13
|
|
|
14
|
+
function convertStructs(s, sanitizer) {
|
|
15
|
+
return Object.fromEntries(Object.keys(s).map((key) => [
|
|
16
|
+
sanitizer.makeSafePropertyIdentifier(key),
|
|
17
|
+
typeof s[key] === 'string' ? s[key] : convertStructs(s[key], sanitizer),
|
|
18
|
+
]));
|
|
19
|
+
}
|
|
13
20
|
function* generate(app, options = { preserveNames: false }) {
|
|
14
21
|
const ctx = generatorContext.createGeneratorContext(app, options);
|
|
15
22
|
yield `/* eslint-disable */`;
|
|
@@ -17,10 +24,13 @@ function* generate(app, options = { preserveNames: false }) {
|
|
|
17
24
|
yield `/**`;
|
|
18
25
|
yield ` * This file was automatically generated by @algorandfoundation/algokit-client-generator.`;
|
|
19
26
|
yield ` * DO NOT MODIFY IT BY HAND.`;
|
|
20
|
-
yield ` * requires: @algorandfoundation/algokit-utils: ^
|
|
27
|
+
yield ` * requires: @algorandfoundation/algokit-utils: ^3`;
|
|
21
28
|
yield ` */`;
|
|
22
29
|
yield* imports.imports();
|
|
23
|
-
|
|
30
|
+
// Change the structs definition to sanitize property names according to the defined rules
|
|
31
|
+
// for instance, this may (unless you passed in --preserve-names) convert properties like my_prop to myProp
|
|
32
|
+
app.structs = Object.fromEntries(Object.keys(app.structs).map((key) => [key, convertStructs(app.structs[key], ctx.sanitizer)]));
|
|
33
|
+
yield* writer.inline('export const APP_SPEC: Arc56Contract = ', JSON.stringify(app));
|
|
24
34
|
yield writer.NewLine;
|
|
25
35
|
yield* utilityTypes.utilityTypes();
|
|
26
36
|
yield writer.NewLine;
|
|
@@ -28,10 +38,12 @@ function* generate(app, options = { preserveNames: false }) {
|
|
|
28
38
|
yield* deployTypes.deployTypes(ctx);
|
|
29
39
|
yield writer.NewLine;
|
|
30
40
|
// Write a call factory
|
|
31
|
-
yield*
|
|
41
|
+
yield* paramsFactory.paramsFactory(ctx);
|
|
32
42
|
yield writer.NewLine;
|
|
43
|
+
// Write a factory
|
|
44
|
+
yield* appFactory.appFactory(ctx);
|
|
33
45
|
// Write a client
|
|
34
|
-
yield*
|
|
46
|
+
yield* appClient.appClient(ctx);
|
|
35
47
|
yield* callComposerTypes.callComposerType(ctx);
|
|
36
48
|
}
|
|
37
49
|
|
package/client/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sources":["../../src/client/generate.ts"],"sourcesContent":["import { DocumentParts, inline, NewLine } from '../output/writer'\nimport {
|
|
1
|
+
{"version":3,"file":"generate.js","sources":["../../src/client/generate.ts"],"sourcesContent":["import { DocumentParts, inline, NewLine } from '../output/writer'\nimport { paramsFactory } from './params-factory'\nimport { appClient } from './app-client'\nimport { deployTypes } from './deploy-types'\nimport { utilityTypes } from './utility-types'\nimport { imports } from './imports'\nimport { createGeneratorContext, GeneratorOptions } from './generator-context'\nimport { appTypes } from './app-types'\nimport { callComposerType } from './call-composer-types'\nimport { Arc56Contract, StructFields } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { appFactory } from './app-factory'\nimport { Sanitizer } from '../util/sanitization'\n\nfunction convertStructs(s: StructFields, sanitizer: Sanitizer): StructFields {\n return Object.fromEntries(\n Object.keys(s).map((key) => [\n sanitizer.makeSafePropertyIdentifier(key),\n typeof s[key] === 'string' ? s[key] : convertStructs(s[key] as StructFields, sanitizer),\n ]),\n )\n}\n\nexport function* generate(app: Arc56Contract, options: GeneratorOptions = { preserveNames: false }): DocumentParts {\n const ctx = createGeneratorContext(app, options)\n yield `/* eslint-disable */`\n yield `// @ts-nocheck`\n yield `/**`\n yield ` * This file was automatically generated by @algorandfoundation/algokit-client-generator.`\n yield ` * DO NOT MODIFY IT BY HAND.`\n yield ` * requires: @algorandfoundation/algokit-utils: ^3`\n yield ` */`\n\n yield* imports()\n // Change the structs definition to sanitize property names according to the defined rules\n // for instance, this may (unless you passed in --preserve-names) convert properties like my_prop to myProp\n app.structs = Object.fromEntries(Object.keys(app.structs).map((key) => [key, convertStructs(app.structs[key], ctx.sanitizer)]))\n yield* inline('export const APP_SPEC: Arc56Contract = ', JSON.stringify(app))\n yield NewLine\n\n yield* utilityTypes()\n yield NewLine\n yield* appTypes(ctx)\n yield* deployTypes(ctx)\n yield NewLine\n\n // Write a call factory\n yield* paramsFactory(ctx)\n yield NewLine\n // Write a factory\n yield* appFactory(ctx)\n // Write a client\n yield* appClient(ctx)\n\n yield* callComposerType(ctx)\n}\n"],"names":["createGeneratorContext","imports","inline","NewLine","utilityTypes","appTypes","deployTypes","paramsFactory","appFactory","appClient","callComposerType"],"mappings":";;;;;;;;;;;;;AAaA,SAAS,cAAc,CAAC,CAAe,EAAE,SAAoB,EAAA;AAC3D,IAAA,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAC1B,QAAA,SAAS,CAAC,0BAA0B,CAAC,GAAG,CAAC;QACzC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAiB,EAAE,SAAS,CAAC;AACxF,KAAA,CAAC,CACH,CAAA;AACH,CAAC;AAEc,UAAE,QAAQ,CAAC,GAAkB,EAAE,OAAA,GAA4B,EAAE,aAAa,EAAE,KAAK,EAAE,EAAA;IAChG,MAAM,GAAG,GAAGA,uCAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AAChD,IAAA,MAAM,sBAAsB,CAAA;AAC5B,IAAA,MAAM,gBAAgB,CAAA;AACtB,IAAA,MAAM,KAAK,CAAA;AACX,IAAA,MAAM,2FAA2F,CAAA;AACjG,IAAA,MAAM,8BAA8B,CAAA;AACpC,IAAA,MAAM,oDAAoD,CAAA;AAC1D,IAAA,MAAM,KAAK,CAAA;AAEX,IAAA,OAAOC,eAAO,EAAE,CAAA;;;AAGhB,IAAA,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/H,IAAA,OAAOC,aAAM,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;AAC7E,IAAA,MAAMC,cAAO,CAAA;AAEb,IAAA,OAAOC,yBAAY,EAAE,CAAA;AACrB,IAAA,MAAMD,cAAO,CAAA;AACb,IAAA,OAAOE,iBAAQ,CAAC,GAAG,CAAC,CAAA;AACpB,IAAA,OAAOC,uBAAW,CAAC,GAAG,CAAC,CAAA;AACvB,IAAA,MAAMH,cAAO,CAAA;;AAGb,IAAA,OAAOI,2BAAa,CAAC,GAAG,CAAC,CAAA;AACzB,IAAA,MAAMJ,cAAO,CAAA;;AAEb,IAAA,OAAOK,qBAAU,CAAC,GAAG,CAAC,CAAA;;AAEtB,IAAA,OAAOC,mBAAS,CAAC,GAAG,CAAC,CAAA;AAErB,IAAA,OAAOC,kCAAgB,CAAC,GAAG,CAAC,CAAA;AAC9B;;;;"}
|
package/client/generate.mjs
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import { inline, NewLine } from '../output/writer.mjs';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { paramsFactory } from './params-factory.mjs';
|
|
3
|
+
import { appClient } from './app-client.mjs';
|
|
4
4
|
import { deployTypes } from './deploy-types.mjs';
|
|
5
5
|
import { utilityTypes } from './utility-types.mjs';
|
|
6
6
|
import { imports } from './imports.mjs';
|
|
7
7
|
import { createGeneratorContext } from './generator-context.mjs';
|
|
8
8
|
import { appTypes } from './app-types.mjs';
|
|
9
9
|
import { callComposerType } from './call-composer-types.mjs';
|
|
10
|
+
import { appFactory } from './app-factory.mjs';
|
|
10
11
|
|
|
12
|
+
function convertStructs(s, sanitizer) {
|
|
13
|
+
return Object.fromEntries(Object.keys(s).map((key) => [
|
|
14
|
+
sanitizer.makeSafePropertyIdentifier(key),
|
|
15
|
+
typeof s[key] === 'string' ? s[key] : convertStructs(s[key], sanitizer),
|
|
16
|
+
]));
|
|
17
|
+
}
|
|
11
18
|
function* generate(app, options = { preserveNames: false }) {
|
|
12
19
|
const ctx = createGeneratorContext(app, options);
|
|
13
20
|
yield `/* eslint-disable */`;
|
|
@@ -15,10 +22,13 @@ function* generate(app, options = { preserveNames: false }) {
|
|
|
15
22
|
yield `/**`;
|
|
16
23
|
yield ` * This file was automatically generated by @algorandfoundation/algokit-client-generator.`;
|
|
17
24
|
yield ` * DO NOT MODIFY IT BY HAND.`;
|
|
18
|
-
yield ` * requires: @algorandfoundation/algokit-utils: ^
|
|
25
|
+
yield ` * requires: @algorandfoundation/algokit-utils: ^3`;
|
|
19
26
|
yield ` */`;
|
|
20
27
|
yield* imports();
|
|
21
|
-
|
|
28
|
+
// Change the structs definition to sanitize property names according to the defined rules
|
|
29
|
+
// for instance, this may (unless you passed in --preserve-names) convert properties like my_prop to myProp
|
|
30
|
+
app.structs = Object.fromEntries(Object.keys(app.structs).map((key) => [key, convertStructs(app.structs[key], ctx.sanitizer)]));
|
|
31
|
+
yield* inline('export const APP_SPEC: Arc56Contract = ', JSON.stringify(app));
|
|
22
32
|
yield NewLine;
|
|
23
33
|
yield* utilityTypes();
|
|
24
34
|
yield NewLine;
|
|
@@ -26,10 +36,12 @@ function* generate(app, options = { preserveNames: false }) {
|
|
|
26
36
|
yield* deployTypes(ctx);
|
|
27
37
|
yield NewLine;
|
|
28
38
|
// Write a call factory
|
|
29
|
-
yield*
|
|
39
|
+
yield* paramsFactory(ctx);
|
|
30
40
|
yield NewLine;
|
|
41
|
+
// Write a factory
|
|
42
|
+
yield* appFactory(ctx);
|
|
31
43
|
// Write a client
|
|
32
|
-
yield*
|
|
44
|
+
yield* appClient(ctx);
|
|
33
45
|
yield* callComposerType(ctx);
|
|
34
46
|
}
|
|
35
47
|
|
package/client/generate.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.mjs","sources":["../../src/client/generate.ts"],"sourcesContent":["import { DocumentParts, inline, NewLine } from '../output/writer'\nimport {
|
|
1
|
+
{"version":3,"file":"generate.mjs","sources":["../../src/client/generate.ts"],"sourcesContent":["import { DocumentParts, inline, NewLine } from '../output/writer'\nimport { paramsFactory } from './params-factory'\nimport { appClient } from './app-client'\nimport { deployTypes } from './deploy-types'\nimport { utilityTypes } from './utility-types'\nimport { imports } from './imports'\nimport { createGeneratorContext, GeneratorOptions } from './generator-context'\nimport { appTypes } from './app-types'\nimport { callComposerType } from './call-composer-types'\nimport { Arc56Contract, StructFields } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { appFactory } from './app-factory'\nimport { Sanitizer } from '../util/sanitization'\n\nfunction convertStructs(s: StructFields, sanitizer: Sanitizer): StructFields {\n return Object.fromEntries(\n Object.keys(s).map((key) => [\n sanitizer.makeSafePropertyIdentifier(key),\n typeof s[key] === 'string' ? s[key] : convertStructs(s[key] as StructFields, sanitizer),\n ]),\n )\n}\n\nexport function* generate(app: Arc56Contract, options: GeneratorOptions = { preserveNames: false }): DocumentParts {\n const ctx = createGeneratorContext(app, options)\n yield `/* eslint-disable */`\n yield `// @ts-nocheck`\n yield `/**`\n yield ` * This file was automatically generated by @algorandfoundation/algokit-client-generator.`\n yield ` * DO NOT MODIFY IT BY HAND.`\n yield ` * requires: @algorandfoundation/algokit-utils: ^3`\n yield ` */`\n\n yield* imports()\n // Change the structs definition to sanitize property names according to the defined rules\n // for instance, this may (unless you passed in --preserve-names) convert properties like my_prop to myProp\n app.structs = Object.fromEntries(Object.keys(app.structs).map((key) => [key, convertStructs(app.structs[key], ctx.sanitizer)]))\n yield* inline('export const APP_SPEC: Arc56Contract = ', JSON.stringify(app))\n yield NewLine\n\n yield* utilityTypes()\n yield NewLine\n yield* appTypes(ctx)\n yield* deployTypes(ctx)\n yield NewLine\n\n // Write a call factory\n yield* paramsFactory(ctx)\n yield NewLine\n // Write a factory\n yield* appFactory(ctx)\n // Write a client\n yield* appClient(ctx)\n\n yield* callComposerType(ctx)\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAaA,SAAS,cAAc,CAAC,CAAe,EAAE,SAAoB,EAAA;AAC3D,IAAA,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAC1B,QAAA,SAAS,CAAC,0BAA0B,CAAC,GAAG,CAAC;QACzC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAiB,EAAE,SAAS,CAAC;AACxF,KAAA,CAAC,CACH,CAAA;AACH,CAAC;AAEc,UAAE,QAAQ,CAAC,GAAkB,EAAE,OAAA,GAA4B,EAAE,aAAa,EAAE,KAAK,EAAE,EAAA;IAChG,MAAM,GAAG,GAAG,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AAChD,IAAA,MAAM,sBAAsB,CAAA;AAC5B,IAAA,MAAM,gBAAgB,CAAA;AACtB,IAAA,MAAM,KAAK,CAAA;AACX,IAAA,MAAM,2FAA2F,CAAA;AACjG,IAAA,MAAM,8BAA8B,CAAA;AACpC,IAAA,MAAM,oDAAoD,CAAA;AAC1D,IAAA,MAAM,KAAK,CAAA;AAEX,IAAA,OAAO,OAAO,EAAE,CAAA;;;AAGhB,IAAA,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/H,IAAA,OAAO,MAAM,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;AAC7E,IAAA,MAAM,OAAO,CAAA;AAEb,IAAA,OAAO,YAAY,EAAE,CAAA;AACrB,IAAA,MAAM,OAAO,CAAA;AACb,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;AACpB,IAAA,OAAO,WAAW,CAAC,GAAG,CAAC,CAAA;AACvB,IAAA,MAAM,OAAO,CAAA;;AAGb,IAAA,OAAO,aAAa,CAAC,GAAG,CAAC,CAAA;AACzB,IAAA,MAAM,OAAO,CAAA;;AAEb,IAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;;AAEtB,IAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;AAErB,IAAA,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAA;AAC9B;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { AlgoAppSpec } from '../schema/application';
|
|
2
1
|
import { CallConfigSummary } from './helpers/get-call-config-summary';
|
|
3
2
|
import { Sanitizer } from '../util/sanitization';
|
|
3
|
+
import { Arc56Contract } from '@algorandfoundation/algokit-utils/types/app-arc56';
|
|
4
4
|
export type GeneratorContext = {
|
|
5
|
-
app:
|
|
5
|
+
app: Arc56Contract;
|
|
6
6
|
name: string;
|
|
7
7
|
callConfig: CallConfigSummary;
|
|
8
8
|
methodSignatureToUniqueName: Record<string, string>;
|
|
@@ -11,9 +11,9 @@ export type GeneratorContext = {
|
|
|
11
11
|
export type GeneratorOptions = {
|
|
12
12
|
preserveNames: boolean;
|
|
13
13
|
};
|
|
14
|
-
export declare const createGeneratorContext: (app:
|
|
14
|
+
export declare const createGeneratorContext: (app: Arc56Contract, options: GeneratorOptions) => {
|
|
15
15
|
sanitizer: Sanitizer;
|
|
16
|
-
app:
|
|
16
|
+
app: Arc56Contract;
|
|
17
17
|
name: string;
|
|
18
18
|
callConfig: CallConfigSummary;
|
|
19
19
|
methodSignatureToUniqueName: Record<string, string>;
|
|
@@ -2,37 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
var getCallConfigSummary = require('./helpers/get-call-config-summary.js');
|
|
4
4
|
var sanitization = require('../util/sanitization.js');
|
|
5
|
-
var
|
|
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
|
-
});
|
|
19
|
-
}
|
|
20
|
-
n.default = e;
|
|
21
|
-
return Object.freeze(n);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
var algokit__namespace = /*#__PURE__*/_interopNamespaceDefault(algokit);
|
|
5
|
+
var algosdk = require('algosdk');
|
|
25
6
|
|
|
26
7
|
const createGeneratorContext = (app, options) => {
|
|
27
8
|
const sanitizer = sanitization.getSanitizer(options);
|
|
28
9
|
return {
|
|
29
10
|
sanitizer,
|
|
30
11
|
app,
|
|
31
|
-
name: sanitizer.makeSafeTypeIdentifier(app.
|
|
12
|
+
name: sanitizer.makeSafeTypeIdentifier(app.name),
|
|
32
13
|
callConfig: getCallConfigSummary.getCallConfigSummary(app),
|
|
33
|
-
methodSignatureToUniqueName: app.
|
|
34
|
-
const signature =
|
|
35
|
-
acc[signature] = app.
|
|
14
|
+
methodSignatureToUniqueName: app.methods.reduce((acc, cur) => {
|
|
15
|
+
const signature = new algosdk.ABIMethod(cur).getSignature();
|
|
16
|
+
acc[signature] = app.methods.some((m) => m.name === cur.name && m !== cur) ? signature : cur.name;
|
|
36
17
|
return acc;
|
|
37
18
|
}, {}),
|
|
38
19
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator-context.js","sources":["../../src/client/generator-context.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"generator-context.js","sources":["../../src/client/generator-context.ts"],"sourcesContent":["import { CallConfigSummary, getCallConfigSummary } from './helpers/get-call-config-summary'\nimport { getSanitizer, Sanitizer } from '../util/sanitization'\nimport { Arc56Contract } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { ABIMethod } from 'algosdk'\n\nexport type GeneratorContext = {\n app: Arc56Contract\n name: string\n callConfig: CallConfigSummary\n methodSignatureToUniqueName: Record<string, string>\n sanitizer: Sanitizer\n}\n\nexport type GeneratorOptions = {\n preserveNames: boolean\n}\n\nexport const createGeneratorContext = (app: Arc56Contract, options: GeneratorOptions) => {\n const sanitizer = getSanitizer(options)\n return {\n sanitizer,\n app,\n name: sanitizer.makeSafeTypeIdentifier(app.name),\n callConfig: getCallConfigSummary(app),\n methodSignatureToUniqueName: app.methods.reduce(\n (acc, cur) => {\n const signature = new ABIMethod(cur).getSignature()\n acc[signature] = app.methods.some((m) => m.name === cur.name && m !== cur) ? signature : cur.name\n return acc\n },\n {} as Record<string, string>,\n ),\n }\n}\n"],"names":["getSanitizer","getCallConfigSummary","ABIMethod"],"mappings":";;;;;;MAiBa,sBAAsB,GAAG,CAAC,GAAkB,EAAE,OAAyB,KAAI;AACtF,IAAA,MAAM,SAAS,GAAGA,yBAAY,CAAC,OAAO,CAAC,CAAA;IACvC,OAAO;QACL,SAAS;QACT,GAAG;QACH,IAAI,EAAE,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChD,QAAA,UAAU,EAAEC,yCAAoB,CAAC,GAAG,CAAC;AACrC,QAAA,2BAA2B,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAC7C,CAAC,GAAG,EAAE,GAAG,KAAI;YACX,MAAM,SAAS,GAAG,IAAIC,iBAAS,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAA;AACnD,YAAA,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI,CAAA;AACjG,YAAA,OAAO,GAAG,CAAA;SACX,EACD,EAA4B,CAC7B;KACF,CAAA;AACH;;;;"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { getCallConfigSummary } from './helpers/get-call-config-summary.mjs';
|
|
2
2
|
import { getSanitizer } from '../util/sanitization.mjs';
|
|
3
|
-
import
|
|
3
|
+
import { ABIMethod } from 'algosdk';
|
|
4
4
|
|
|
5
5
|
const createGeneratorContext = (app, options) => {
|
|
6
6
|
const sanitizer = getSanitizer(options);
|
|
7
7
|
return {
|
|
8
8
|
sanitizer,
|
|
9
9
|
app,
|
|
10
|
-
name: sanitizer.makeSafeTypeIdentifier(app.
|
|
10
|
+
name: sanitizer.makeSafeTypeIdentifier(app.name),
|
|
11
11
|
callConfig: getCallConfigSummary(app),
|
|
12
|
-
methodSignatureToUniqueName: app.
|
|
13
|
-
const signature =
|
|
14
|
-
acc[signature] = app.
|
|
12
|
+
methodSignatureToUniqueName: app.methods.reduce((acc, cur) => {
|
|
13
|
+
const signature = new ABIMethod(cur).getSignature();
|
|
14
|
+
acc[signature] = app.methods.some((m) => m.name === cur.name && m !== cur) ? signature : cur.name;
|
|
15
15
|
return acc;
|
|
16
16
|
}, {}),
|
|
17
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator-context.mjs","sources":["../../src/client/generator-context.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"generator-context.mjs","sources":["../../src/client/generator-context.ts"],"sourcesContent":["import { CallConfigSummary, getCallConfigSummary } from './helpers/get-call-config-summary'\nimport { getSanitizer, Sanitizer } from '../util/sanitization'\nimport { Arc56Contract } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { ABIMethod } from 'algosdk'\n\nexport type GeneratorContext = {\n app: Arc56Contract\n name: string\n callConfig: CallConfigSummary\n methodSignatureToUniqueName: Record<string, string>\n sanitizer: Sanitizer\n}\n\nexport type GeneratorOptions = {\n preserveNames: boolean\n}\n\nexport const createGeneratorContext = (app: Arc56Contract, options: GeneratorOptions) => {\n const sanitizer = getSanitizer(options)\n return {\n sanitizer,\n app,\n name: sanitizer.makeSafeTypeIdentifier(app.name),\n callConfig: getCallConfigSummary(app),\n methodSignatureToUniqueName: app.methods.reduce(\n (acc, cur) => {\n const signature = new ABIMethod(cur).getSignature()\n acc[signature] = app.methods.some((m) => m.name === cur.name && m !== cur) ? signature : cur.name\n return acc\n },\n {} as Record<string, string>,\n ),\n }\n}\n"],"names":[],"mappings":";;;;MAiBa,sBAAsB,GAAG,CAAC,GAAkB,EAAE,OAAyB,KAAI;AACtF,IAAA,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACvC,OAAO;QACL,SAAS;QACT,GAAG;QACH,IAAI,EAAE,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChD,QAAA,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC;AACrC,QAAA,2BAA2B,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAC7C,CAAC,GAAG,EAAE,GAAG,KAAI;YACX,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAA;AACnD,YAAA,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI,CAAA;AACjG,YAAA,OAAO,GAAG,CAAA;SACX,EACD,EAA4B,CAC7B;KACF,CAAA;AACH;;;;"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Arc56Contract } from '@algorandfoundation/algokit-utils/types/app-arc56';
|
|
2
2
|
export declare const BARE_CALL: unique symbol;
|
|
3
3
|
export type MethodIdentifier = string | typeof BARE_CALL;
|
|
4
4
|
export type MethodList = Array<MethodIdentifier>;
|
|
5
|
+
export type OnComplete = 'NoOp' | 'OptIn' | 'CloseOut' | 'ClearState' | 'UpdateApplication' | 'DeleteApplication';
|
|
6
|
+
export type Actions = {
|
|
7
|
+
create: ('NoOp' | 'OptIn' | 'DeleteApplication')[];
|
|
8
|
+
call: OnComplete[];
|
|
9
|
+
};
|
|
5
10
|
export type CallConfigSummary = {
|
|
6
11
|
createMethods: MethodList;
|
|
7
12
|
callMethods: MethodList;
|
|
@@ -10,5 +15,5 @@ export type CallConfigSummary = {
|
|
|
10
15
|
optInMethods: MethodList;
|
|
11
16
|
closeOutMethods: MethodList;
|
|
12
17
|
};
|
|
13
|
-
export declare const getCallConfigSummary: (app:
|
|
14
|
-
export declare const getCreateOnComplete: (app:
|
|
18
|
+
export declare const getCallConfigSummary: (app: Arc56Contract) => CallConfigSummary;
|
|
19
|
+
export declare const getCreateOnComplete: (app: Arc56Contract, method: MethodIdentifier) => string;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var algosdk = require('algosdk');
|
|
4
|
+
|
|
3
5
|
const BARE_CALL = Symbol('bare');
|
|
4
6
|
const getCallConfigSummary = (app) => {
|
|
5
7
|
const result = {
|
|
@@ -10,47 +12,47 @@ const getCallConfigSummary = (app) => {
|
|
|
10
12
|
optInMethods: [],
|
|
11
13
|
closeOutMethods: [],
|
|
12
14
|
};
|
|
13
|
-
if (app.
|
|
14
|
-
addToConfig(result, BARE_CALL, app.
|
|
15
|
+
if (app.bareActions) {
|
|
16
|
+
addToConfig(result, BARE_CALL, app.bareActions);
|
|
15
17
|
}
|
|
16
|
-
if (app.
|
|
17
|
-
for (const
|
|
18
|
-
if (
|
|
19
|
-
addToConfig(result,
|
|
18
|
+
if (app.methods) {
|
|
19
|
+
for (const m of app.methods) {
|
|
20
|
+
if (m.actions) {
|
|
21
|
+
addToConfig(result, new algosdk.ABIMethod(m).getSignature(), m.actions);
|
|
20
22
|
}
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
return result;
|
|
24
26
|
};
|
|
25
27
|
const addToConfig = (result, method, config) => {
|
|
26
|
-
if (hasCall(config
|
|
28
|
+
if (hasCall(config, 'NoOp')) {
|
|
27
29
|
result.callMethods.push(method);
|
|
28
30
|
}
|
|
29
|
-
if (hasCreate(config
|
|
30
|
-
hasCreate(config
|
|
31
|
-
hasCreate(config
|
|
32
|
-
hasCreate(config
|
|
33
|
-
hasCreate(config
|
|
31
|
+
if (hasCreate(config, 'NoOp') ||
|
|
32
|
+
hasCreate(config, 'OptIn') ||
|
|
33
|
+
hasCreate(config, 'CloseOut') ||
|
|
34
|
+
hasCreate(config, 'UpdateApplication') ||
|
|
35
|
+
hasCreate(config, 'DeleteApplication')) {
|
|
34
36
|
result.createMethods.push(method);
|
|
35
37
|
}
|
|
36
|
-
if (hasCall(config
|
|
38
|
+
if (hasCall(config, 'DeleteApplication')) {
|
|
37
39
|
result.deleteMethods.push(method);
|
|
38
40
|
}
|
|
39
|
-
if (hasCall(config
|
|
41
|
+
if (hasCall(config, 'UpdateApplication')) {
|
|
40
42
|
result.updateMethods.push(method);
|
|
41
43
|
}
|
|
42
|
-
if (hasCall(config
|
|
44
|
+
if (hasCall(config, 'OptIn')) {
|
|
43
45
|
result.optInMethods.push(method);
|
|
44
46
|
}
|
|
45
|
-
if (hasCall(config
|
|
47
|
+
if (hasCall(config, 'CloseOut')) {
|
|
46
48
|
result.closeOutMethods.push(method);
|
|
47
49
|
}
|
|
48
50
|
};
|
|
49
|
-
const hasCall = (config) => {
|
|
50
|
-
return config
|
|
51
|
+
const hasCall = (config, action) => {
|
|
52
|
+
return config?.call.includes(action);
|
|
51
53
|
};
|
|
52
|
-
const hasCreate = (config) => {
|
|
53
|
-
return config
|
|
54
|
+
const hasCreate = (config, action) => {
|
|
55
|
+
return (config?.create).includes(action);
|
|
54
56
|
};
|
|
55
57
|
|
|
56
58
|
exports.BARE_CALL = BARE_CALL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-call-config-summary.js","sources":["../../../src/client/helpers/get-call-config-summary.ts"],"sourcesContent":["import { pascalCase } from 'change-case'\nimport {
|
|
1
|
+
{"version":3,"file":"get-call-config-summary.js","sources":["../../../src/client/helpers/get-call-config-summary.ts"],"sourcesContent":["import { pascalCase } from 'change-case'\nimport { Arc56Contract } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { ABIMethod } from 'algosdk'\n\nexport const BARE_CALL = Symbol('bare')\n\nexport type MethodIdentifier = string | typeof BARE_CALL\n\nexport type MethodList = Array<MethodIdentifier>\n\nexport type OnComplete = 'NoOp' | 'OptIn' | 'CloseOut' | 'ClearState' | 'UpdateApplication' | 'DeleteApplication'\n\nexport type Actions = {\n create: ('NoOp' | 'OptIn' | 'DeleteApplication')[]\n call: OnComplete[]\n}\n\nexport type CallConfigSummary = {\n createMethods: MethodList\n callMethods: MethodList\n deleteMethods: MethodList\n updateMethods: MethodList\n optInMethods: MethodList\n closeOutMethods: MethodList\n}\nexport const getCallConfigSummary = (app: Arc56Contract) => {\n const result: CallConfigSummary = {\n createMethods: [],\n callMethods: [],\n deleteMethods: [],\n updateMethods: [],\n optInMethods: [],\n closeOutMethods: [],\n }\n if (app.bareActions) {\n addToConfig(result, BARE_CALL, app.bareActions)\n }\n if (app.methods) {\n for (const m of app.methods) {\n if (m.actions) {\n addToConfig(result, new ABIMethod(m).getSignature(), m.actions)\n }\n }\n }\n return result\n}\n\nexport const getCreateOnComplete = (app: Arc56Contract, method: MethodIdentifier) => {\n const actions = method === BARE_CALL ? app.bareActions : app.methods?.find((m) => m.name === method)?.actions\n if (!actions) {\n return ''\n }\n const hasNoOp = actions.create.includes('NoOp')\n return `{ onCompleteAction${hasNoOp ? '?' : ''}: ${getCreateOnCompleteTypes(actions)} }`\n}\n\nconst getCreateOnCompleteTypes = (config: Actions) => {\n return config.create.map((oc) => `'${oc}' | OnApplicationComplete.${pascalCase(oc)}OC`).join(' | ')\n}\n\nconst addToConfig = (result: CallConfigSummary, method: MethodIdentifier, config: Actions) => {\n if (hasCall(config, 'NoOp')) {\n result.callMethods.push(method)\n }\n if (\n hasCreate(config, 'NoOp') ||\n hasCreate(config, 'OptIn') ||\n hasCreate(config, 'CloseOut') ||\n hasCreate(config, 'UpdateApplication') ||\n hasCreate(config, 'DeleteApplication')\n ) {\n result.createMethods.push(method)\n }\n if (hasCall(config, 'DeleteApplication')) {\n result.deleteMethods.push(method)\n }\n if (hasCall(config, 'UpdateApplication')) {\n result.updateMethods.push(method)\n }\n if (hasCall(config, 'OptIn')) {\n result.optInMethods.push(method)\n }\n if (hasCall(config, 'CloseOut')) {\n result.closeOutMethods.push(method)\n }\n}\n\nconst hasCall = (config: Actions | undefined, action: OnComplete) => {\n return config?.call.includes(action)\n}\nconst hasCreate = (config: Actions | undefined, action: OnComplete) => {\n return (config?.create as OnComplete[]).includes(action)\n}\n"],"names":["ABIMethod"],"mappings":";;;;MAIa,SAAS,GAAG,MAAM,CAAC,MAAM,EAAC;AAqB1B,MAAA,oBAAoB,GAAG,CAAC,GAAkB,KAAI;AACzD,IAAA,MAAM,MAAM,GAAsB;AAChC,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,eAAe,EAAE,EAAE;KACpB,CAAA;AACD,IAAA,IAAI,GAAG,CAAC,WAAW,EAAE;QACnB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;KAChD;AACD,IAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACf,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,gBAAA,WAAW,CAAC,MAAM,EAAE,IAAIA,iBAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;aAChE;SACF;KACF;AACD,IAAA,OAAO,MAAM,CAAA;AACf,EAAC;AAeD,MAAM,WAAW,GAAG,CAAC,MAAyB,EAAE,MAAwB,EAAE,MAAe,KAAI;AAC3F,IAAA,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;AAC3B,QAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KAChC;AACD,IAAA,IACE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;AACzB,QAAA,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;AAC1B,QAAA,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;AAC7B,QAAA,SAAS,CAAC,MAAM,EAAE,mBAAmB,CAAC;AACtC,QAAA,SAAS,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACtC;AACA,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KAClC;AACD,IAAA,IAAI,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE;AACxC,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KAClC;AACD,IAAA,IAAI,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE;AACxC,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KAClC;AACD,IAAA,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;AAC5B,QAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KACjC;AACD,IAAA,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;AAC/B,QAAA,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KACpC;AACH,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,MAA2B,EAAE,MAAkB,KAAI;IAClE,OAAO,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACtC,CAAC,CAAA;AACD,MAAM,SAAS,GAAG,CAAC,MAA2B,EAAE,MAAkB,KAAI;IACpE,OAAO,CAAC,MAAM,EAAE,MAAuB,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC1D,CAAC;;;;;"}
|