@algorandfoundation/algokit-client-generator 6.0.2-beta.1 → 7.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.
- package/client/app-client-context.d.ts +122 -0
- package/client/deploy-types.d.ts +1 -11
- package/client/generate.d.ts +1 -1
- package/client/generator-context.d.ts +3 -5
- package/client/helpers/contains-non-void-method.d.ts +2 -2
- package/client/helpers/get-equivalent-type.d.ts +3 -5
- package/client/imports.d.ts +1 -2
- package/package.json +2 -3
- package/schema/load.d.ts +1 -1
- package/src/cli.js.map +1 -0
- package/src/cli.mjs.map +1 -0
- package/src/client/app-client-context.js +211 -0
- package/src/client/app-client-context.js.map +1 -0
- package/src/client/app-client-context.mjs +208 -0
- package/src/client/app-client-context.mjs.map +1 -0
- package/{client → src/client}/app-client.js +29 -51
- package/src/client/app-client.js.map +1 -0
- package/{client → src/client}/app-client.mjs +29 -51
- package/src/client/app-client.mjs.map +1 -0
- package/{client → src/client}/app-factory.js +23 -27
- package/src/client/app-factory.js.map +1 -0
- package/{client → src/client}/app-factory.mjs +23 -27
- package/src/client/app-factory.mjs.map +1 -0
- package/{client → src/client}/app-types.js +31 -60
- package/src/client/app-types.js.map +1 -0
- package/{client → src/client}/app-types.mjs +32 -61
- package/src/client/app-types.mjs.map +1 -0
- package/{client → src/client}/call-composer-types.js +31 -34
- package/src/client/call-composer-types.js.map +1 -0
- package/{client → src/client}/call-composer-types.mjs +31 -34
- package/src/client/call-composer-types.mjs.map +1 -0
- package/{client → src/client}/call-composer.js +24 -31
- package/src/client/call-composer.js.map +1 -0
- package/{client → src/client}/call-composer.mjs +24 -31
- package/src/client/call-composer.mjs.map +1 -0
- package/{client → src/client}/deploy-types.js +28 -53
- package/src/client/deploy-types.js.map +1 -0
- package/{client → src/client}/deploy-types.mjs +29 -52
- package/src/client/deploy-types.mjs.map +1 -0
- package/{client → src/client}/generate.js +2 -2
- package/src/client/generate.js.map +1 -0
- package/{client → src/client}/generate.mjs +2 -2
- package/src/client/generate.mjs.map +1 -0
- package/src/client/generator-context.js +24 -0
- package/src/client/generator-context.js.map +1 -0
- package/src/client/generator-context.mjs +21 -0
- package/src/client/generator-context.mjs.map +1 -0
- package/{client → src/client}/helpers/contains-non-void-method.js +3 -2
- package/src/client/helpers/contains-non-void-method.js.map +1 -0
- package/{client → src/client}/helpers/contains-non-void-method.mjs +3 -2
- package/src/client/helpers/contains-non-void-method.mjs.map +1 -0
- package/src/client/helpers/get-equivalent-type.js +80 -0
- package/src/client/helpers/get-equivalent-type.js.map +1 -0
- package/src/client/helpers/get-equivalent-type.mjs +77 -0
- package/src/client/helpers/get-equivalent-type.mjs.map +1 -0
- package/src/client/imports.js +18 -0
- package/src/client/imports.js.map +1 -0
- package/src/client/imports.mjs +16 -0
- package/src/client/imports.mjs.map +1 -0
- package/src/client/params-factory.js +125 -0
- package/src/client/params-factory.js.map +1 -0
- package/src/client/params-factory.mjs +123 -0
- package/src/client/params-factory.mjs.map +1 -0
- package/src/client/utility-types.js.map +1 -0
- package/src/client/utility-types.mjs.map +1 -0
- package/src/output/writer.js.map +1 -0
- package/src/output/writer.mjs.map +1 -0
- package/src/schema/load.js.map +1 -0
- package/src/schema/load.mjs.map +1 -0
- package/src/util/boom.js.map +1 -0
- package/src/util/boom.mjs.map +1 -0
- package/src/util/color-console.js.map +1 -0
- package/src/util/color-console.mjs.map +1 -0
- package/src/util/sanitization.js.map +1 -0
- package/src/util/sanitization.mjs.map +1 -0
- package/cli.js.map +0 -1
- package/cli.mjs.map +0 -1
- package/client/app-client.js.map +0 -1
- package/client/app-client.mjs.map +0 -1
- package/client/app-factory.js.map +0 -1
- package/client/app-factory.mjs.map +0 -1
- package/client/app-types.js.map +0 -1
- package/client/app-types.mjs.map +0 -1
- package/client/call-composer-types.js.map +0 -1
- package/client/call-composer-types.mjs.map +0 -1
- package/client/call-composer.js.map +0 -1
- package/client/call-composer.mjs.map +0 -1
- package/client/deploy-types.js.map +0 -1
- package/client/deploy-types.mjs.map +0 -1
- package/client/generate.js.map +0 -1
- package/client/generate.mjs.map +0 -1
- package/client/generator-context.js +0 -30
- package/client/generator-context.js.map +0 -1
- package/client/generator-context.mjs +0 -27
- package/client/generator-context.mjs.map +0 -1
- package/client/helpers/contains-non-void-method.js.map +0 -1
- package/client/helpers/contains-non-void-method.mjs.map +0 -1
- package/client/helpers/get-call-config-summary.d.ts +0 -19
- package/client/helpers/get-call-config-summary.js +0 -60
- package/client/helpers/get-call-config-summary.js.map +0 -1
- package/client/helpers/get-call-config-summary.mjs +0 -57
- package/client/helpers/get-call-config-summary.mjs.map +0 -1
- package/client/helpers/get-equivalent-type.js +0 -81
- package/client/helpers/get-equivalent-type.js.map +0 -1
- package/client/helpers/get-equivalent-type.mjs +0 -79
- package/client/helpers/get-equivalent-type.mjs.map +0 -1
- package/client/imports.js +0 -27
- package/client/imports.js.map +0 -1
- package/client/imports.mjs +0 -25
- package/client/imports.mjs.map +0 -1
- package/client/params-factory.js +0 -128
- package/client/params-factory.js.map +0 -1
- package/client/params-factory.mjs +0 -126
- package/client/params-factory.mjs.map +0 -1
- package/client/utility-types.js.map +0 -1
- package/client/utility-types.mjs.map +0 -1
- package/output/writer.js.map +0 -1
- package/output/writer.mjs.map +0 -1
- package/schema/load.js.map +0 -1
- package/schema/load.mjs.map +0 -1
- package/util/boom.js.map +0 -1
- package/util/boom.mjs.map +0 -1
- package/util/color-console.js.map +0 -1
- package/util/color-console.mjs.map +0 -1
- package/util/sanitization.js.map +0 -1
- package/util/sanitization.mjs.map +0 -1
- /package/{cli.js → src/cli.js} +0 -0
- /package/{cli.mjs → src/cli.mjs} +0 -0
- /package/{client → src/client}/utility-types.js +0 -0
- /package/{client → src/client}/utility-types.mjs +0 -0
- /package/{index.js → src/index.js} +0 -0
- /package/{index.js.map → src/index.js.map} +0 -0
- /package/{index.mjs → src/index.mjs} +0 -0
- /package/{index.mjs.map → src/index.mjs.map} +0 -0
- /package/{output → src/output}/writer.js +0 -0
- /package/{output → src/output}/writer.mjs +0 -0
- /package/{schema → src/schema}/application.schema.json.js +0 -0
- /package/{schema → src/schema}/application.schema.json.js.map +0 -0
- /package/{schema → src/schema}/application.schema.json.mjs +0 -0
- /package/{schema → src/schema}/application.schema.json.mjs.map +0 -0
- /package/{schema → src/schema}/arc56.schema.json.js +0 -0
- /package/{schema → src/schema}/arc56.schema.json.js.map +0 -0
- /package/{schema → src/schema}/arc56.schema.json.mjs +0 -0
- /package/{schema → src/schema}/arc56.schema.json.mjs.map +0 -0
- /package/{schema → src/schema}/contract.schema.json.js +0 -0
- /package/{schema → src/schema}/contract.schema.json.js.map +0 -0
- /package/{schema → src/schema}/contract.schema.json.mjs +0 -0
- /package/{schema → src/schema}/contract.schema.json.mjs.map +0 -0
- /package/{schema → src/schema}/load.js +0 -0
- /package/{schema → src/schema}/load.mjs +0 -0
- /package/{util → src/util}/boom.js +0 -0
- /package/{util → src/util}/boom.mjs +0 -0
- /package/{util → src/util}/color-console.js +0 -0
- /package/{util → src/util}/color-console.mjs +0 -0
- /package/{util → src/util}/sanitization.js +0 -0
- /package/{util → src/util}/sanitization.mjs +0 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { arc56MethodToABIMethod, ABIStructType, ABIType } from '@algorandfoundation/algokit-utils/abi';
|
|
2
|
+
import { getEquivalentType, abiTypeToTs } from './helpers/get-equivalent-type.mjs';
|
|
3
|
+
import invariant from '../../node_modules/tiny-invariant/dist/esm/tiny-invariant.mjs';
|
|
4
|
+
|
|
5
|
+
function isAbiMethod(method) {
|
|
6
|
+
return !method.isBare;
|
|
7
|
+
}
|
|
8
|
+
function createAppClientContext(appSpec, sanitizer) {
|
|
9
|
+
const methods = [];
|
|
10
|
+
for (const m of appSpec.methods) {
|
|
11
|
+
const abiMethod = arc56MethodToABIMethod(m, appSpec);
|
|
12
|
+
const baseNameIsUnique = appSpec.methods.filter((o) => o.name === m.name).length === 1;
|
|
13
|
+
methods.push({
|
|
14
|
+
isBare: false,
|
|
15
|
+
name: createSanitizableString(m.name, sanitizer),
|
|
16
|
+
desc: m.desc,
|
|
17
|
+
baseNameIsUnique,
|
|
18
|
+
uniqueName: createSanitizableString(baseNameIsUnique ? m.name : abiMethod.getSignature(), sanitizer),
|
|
19
|
+
args: abiMethod.args.map((a) => {
|
|
20
|
+
return {
|
|
21
|
+
name: a.name ? createSanitizableString(a.name, sanitizer) : undefined,
|
|
22
|
+
desc: a.description,
|
|
23
|
+
type: a.type,
|
|
24
|
+
tsInType: getEquivalentType(a.type, 'input', sanitizer),
|
|
25
|
+
defaultValue: Boolean(a.defaultValue),
|
|
26
|
+
};
|
|
27
|
+
}),
|
|
28
|
+
callActions: buildOcas(m.actions.call),
|
|
29
|
+
createActions: buildOcas(m.actions.create),
|
|
30
|
+
readonly: Boolean(m.readonly),
|
|
31
|
+
signature: abiMethod.getSignature(),
|
|
32
|
+
returns: {
|
|
33
|
+
tsOutType: getEquivalentType(abiMethod.returns.type, 'output', sanitizer),
|
|
34
|
+
type: abiMethod.returns.type === 'void' ? undefined : abiMethod.returns.type,
|
|
35
|
+
desc: abiMethod.returns.description,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const bareMethod = {
|
|
40
|
+
isBare: true,
|
|
41
|
+
createActions: buildOcas(appSpec.bareActions.create),
|
|
42
|
+
callActions: buildOcas(appSpec.bareActions.call),
|
|
43
|
+
};
|
|
44
|
+
if (bareMethod.createActions.any || bareMethod.callActions.any) {
|
|
45
|
+
methods.push(bareMethod);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
name: createSanitizableString(appSpec.name, sanitizer),
|
|
49
|
+
methods,
|
|
50
|
+
bareMethod,
|
|
51
|
+
createMethods: methods.filter((m) => m.createActions.any),
|
|
52
|
+
updateMethods: methods.filter((m) => m.callActions.updateApplication),
|
|
53
|
+
deleteMethods: methods.filter((m) => m.callActions.deleteApplication),
|
|
54
|
+
noOpMethods: methods.filter((m) => m.callActions.noOp),
|
|
55
|
+
optInMethods: methods.filter((m) => m.callActions.optIn),
|
|
56
|
+
closeOutMethods: methods.filter((m) => m.callActions.closeOut),
|
|
57
|
+
clearStateMethods: methods.filter((m) => m.callActions.clearState),
|
|
58
|
+
abiMethods: methods.filter(isAbiMethod),
|
|
59
|
+
state: {
|
|
60
|
+
maps: {
|
|
61
|
+
global: buildStorageMap(appSpec.state.maps.global, appSpec, sanitizer),
|
|
62
|
+
local: buildStorageMap(appSpec.state.maps.local, appSpec, sanitizer),
|
|
63
|
+
box: buildStorageMap(appSpec.state.maps.box, appSpec, sanitizer),
|
|
64
|
+
},
|
|
65
|
+
keys: {
|
|
66
|
+
global: buildStorageKey(appSpec.state.keys.global, appSpec, sanitizer),
|
|
67
|
+
local: buildStorageKey(appSpec.state.keys.local, appSpec, sanitizer),
|
|
68
|
+
box: buildStorageKey(appSpec.state.keys.box, appSpec, sanitizer),
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
structs: mapRecord(appSpec.structs, (def, name) => buildStructCtx(name, appSpec, sanitizer)),
|
|
72
|
+
templateVariables: mapRecord(appSpec.templateVariables ?? {}, (v) => ({
|
|
73
|
+
value: v.value,
|
|
74
|
+
type: buildTypeContext(v.type, appSpec, sanitizer),
|
|
75
|
+
})),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function buildStructCtx(name, appSpec, sanitizer) {
|
|
79
|
+
const typeCtx = buildTypeContext(name, appSpec, sanitizer);
|
|
80
|
+
const abiType = typeCtx.type;
|
|
81
|
+
invariant(abiType instanceof ABIStructType);
|
|
82
|
+
return {
|
|
83
|
+
type: typeCtx,
|
|
84
|
+
tsObjDef: buildStructObjDef(abiType.structFields, appSpec, sanitizer, 1),
|
|
85
|
+
tsTupDef: `[${Array.from(buildStructTupleDef(abiType.structFields, appSpec, sanitizer)).join(', ')}]`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function buildStructObjDef(fields, appSpec, sanitizer, indent) {
|
|
89
|
+
const indentStr = ' '.repeat(indent);
|
|
90
|
+
const closingIndent = ' '.repeat(indent - 1);
|
|
91
|
+
const lines = [];
|
|
92
|
+
for (const field of fields) {
|
|
93
|
+
const typeDef = Array.isArray(field.type)
|
|
94
|
+
? buildStructObjDef(field.type, appSpec, sanitizer, indent + 1)
|
|
95
|
+
: abiTypeToTs(field.type, 'output', sanitizer);
|
|
96
|
+
lines.push(`${indentStr}${sanitizer.makeSafePropertyIdentifier(field.name)}: ${typeDef}`);
|
|
97
|
+
}
|
|
98
|
+
return `{\n${lines.join(',\n')}\n${closingIndent}}`;
|
|
99
|
+
}
|
|
100
|
+
function* buildStructTupleDef(fields, appSpec, sanitizer) {
|
|
101
|
+
for (const field of fields) {
|
|
102
|
+
let typeDef;
|
|
103
|
+
if (Array.isArray(field.type)) {
|
|
104
|
+
typeDef = `[${Array.from(buildStructTupleDef(field.type, appSpec, sanitizer)).join(', ')}]`;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
typeDef = abiTypeToTs(field.type, 'output', sanitizer);
|
|
108
|
+
}
|
|
109
|
+
yield `${typeDef}`;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function buildStorageMap(maps, appSpec, sanitizer) {
|
|
113
|
+
return mapRecord(maps, (v) => ({
|
|
114
|
+
desc: v.desc,
|
|
115
|
+
valueType: buildTypeContext(v.valueType, appSpec, sanitizer),
|
|
116
|
+
keyType: buildTypeContext(v.keyType, appSpec, sanitizer),
|
|
117
|
+
prefix: v.prefix,
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
function buildStorageKey(keys, appSpec, sanitizer) {
|
|
121
|
+
return mapRecord(keys, (v) => ({
|
|
122
|
+
desc: v.desc,
|
|
123
|
+
valueType: buildTypeContext(v.valueType, appSpec, sanitizer),
|
|
124
|
+
keyType: buildTypeContext(v.valueType, appSpec, sanitizer),
|
|
125
|
+
key: v.key,
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
function mapRecord(input, mapper) {
|
|
129
|
+
return Object.fromEntries(Object.entries(input).map(([k, v]) => [k, mapper(v, k)]));
|
|
130
|
+
}
|
|
131
|
+
function createSanitizableString(name, sanitizer) {
|
|
132
|
+
return new Proxy({}, {
|
|
133
|
+
get(target, property) {
|
|
134
|
+
if (property === 'toString')
|
|
135
|
+
return () => name;
|
|
136
|
+
if (property === 'original')
|
|
137
|
+
return name;
|
|
138
|
+
if (property in sanitizer) {
|
|
139
|
+
return sanitizer[property](name);
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function buildOcas(actions) {
|
|
145
|
+
const isOptional = actions.includes('NoOp') || actions.length === 1;
|
|
146
|
+
const typeLiteral = actions.length
|
|
147
|
+
? `{ onComplete${isOptional ? '?' : ''}: ${actions.map((oc) => `OnApplicationComplete.${oc}`).join(' | ')} }`
|
|
148
|
+
: undefined;
|
|
149
|
+
return {
|
|
150
|
+
raw: actions,
|
|
151
|
+
any: Boolean(actions.length),
|
|
152
|
+
noOp: actions.includes('NoOp'),
|
|
153
|
+
optIn: actions.includes('OptIn'),
|
|
154
|
+
closeOut: actions.includes('CloseOut'),
|
|
155
|
+
clearState: actions.includes('ClearState'),
|
|
156
|
+
updateApplication: actions.includes('UpdateApplication'),
|
|
157
|
+
deleteApplication: actions.includes('DeleteApplication'),
|
|
158
|
+
inputType: {
|
|
159
|
+
isOptional,
|
|
160
|
+
typeLiteral,
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function buildTypeContext(typeName, appSpec, sanitizer) {
|
|
165
|
+
switch (typeName) {
|
|
166
|
+
case 'AVMBytes':
|
|
167
|
+
return {
|
|
168
|
+
isAvmBytes: true,
|
|
169
|
+
type: typeName,
|
|
170
|
+
tsInType: 'Uint8Array | string',
|
|
171
|
+
tsOutType: 'Uint8Array',
|
|
172
|
+
};
|
|
173
|
+
case 'AVMString':
|
|
174
|
+
return {
|
|
175
|
+
type: typeName,
|
|
176
|
+
tsInType: 'string',
|
|
177
|
+
tsOutType: 'string',
|
|
178
|
+
};
|
|
179
|
+
case 'AVMUint64':
|
|
180
|
+
return {
|
|
181
|
+
type: typeName,
|
|
182
|
+
tsInType: 'bigint',
|
|
183
|
+
tsOutType: 'bigint',
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (typeName in appSpec.structs) {
|
|
187
|
+
return {
|
|
188
|
+
type: ABIStructType.fromStruct(typeName, appSpec.structs),
|
|
189
|
+
tsInType: sanitizer.makeSafeTypeIdentifier(typeName),
|
|
190
|
+
tsOutType: sanitizer.makeSafeTypeIdentifier(typeName),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// Otherwise parse as ABI type
|
|
194
|
+
try {
|
|
195
|
+
const abiType = ABIType.from(typeName);
|
|
196
|
+
return {
|
|
197
|
+
type: abiType,
|
|
198
|
+
tsInType: abiTypeToTs(abiType, 'input', sanitizer),
|
|
199
|
+
tsOutType: abiTypeToTs(abiType, 'output', sanitizer),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
throw new Error(`Failed to parse storage type '${typeName}': ${error}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export { createAppClientContext, isAbiMethod };
|
|
208
|
+
//# sourceMappingURL=app-client-context.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-client-context.mjs","sources":["../../../src/client/app-client-context.ts"],"sourcesContent":["import {\n arc56MethodToABIMethod,\n Arc56Contract,\n ABIType,\n ABIReferenceType,\n ABITransactionType,\n AVMType,\n ABIStructField,\n ABIStructType,\n StorageKey,\n StorageMap,\n} from '@algorandfoundation/algokit-utils/abi'\nimport { Sanitizer } from '../util/sanitization'\nimport { abiTypeToTs, getEquivalentType } from './helpers/get-equivalent-type'\nimport invariant from 'tiny-invariant'\n\nexport type AppClientContext = {\n name: SanitizableString\n\n methods: AppClientMethodContext[]\n abiMethods: AbiMethodClientContext[]\n\n state: {\n keys: {\n global: {\n [name: string]: StorageKeyContext\n }\n local: {\n [name: string]: StorageKeyContext\n }\n box: {\n [name: string]: StorageKeyContext\n }\n }\n /** Mapping of human-readable names to StorageMap objects */\n maps: {\n global: {\n [name: string]: StorageMapContext\n }\n local: {\n [name: string]: StorageMapContext\n }\n box: {\n [name: string]: StorageMapContext\n }\n }\n }\n\n structs: Record<string, StructContext>\n\n createMethods: AppClientMethodContext[]\n updateMethods: AppClientMethodContext[]\n deleteMethods: AppClientMethodContext[]\n optInMethods: AppClientMethodContext[]\n closeOutMethods: AppClientMethodContext[]\n clearStateMethods: AppClientMethodContext[]\n noOpMethods: AppClientMethodContext[]\n\n bareMethod: BareMethodClientContext\n\n templateVariables: Record<string, TemplateVariableContext>\n}\n\nexport type AppClientMethodContext = AbiMethodClientContext | BareMethodClientContext\n\nexport function isAbiMethod(method: AppClientMethodContext): method is AbiMethodClientContext {\n return !method.isBare\n}\n\nexport type StructContext = {\n type: TypeContext\n tsObjDef: string\n tsTupDef: string\n}\n\nexport type StorageKeyContext = {\n desc?: string\n keyType: TypeContext\n valueType: TypeContext\n key: string\n}\n/** Describes a mapping of key-value pairs in storage */\nexport type StorageMapContext = {\n desc?: string\n keyType: TypeContext\n valueType: TypeContext\n prefix?: string\n}\n\nexport type TypeContext = {\n type: ABIType | AVMType\n isAvmBytes?: boolean\n tsInType: string\n tsOutType: string\n}\n\nexport type TemplateVariableContext = {\n type: TypeContext\n value: string | undefined\n}\n\nexport type AbiMethodClientContext = {\n isBare: false\n desc: string | undefined\n name: SanitizableString\n baseNameIsUnique: boolean\n uniqueName: SanitizableString\n signature: string\n args: MethodArgClientContext[]\n returns: MethodReturnClientContext\n createActions: MethodOcas\n callActions: MethodOcas\n readonly: boolean\n}\nexport type BareMethodClientContext = {\n isBare: true\n //desc: string | undefined\n createActions: MethodOcas\n callActions: MethodOcas\n //readonly: boolean\n}\n\nexport type MethodOcas = {\n raw: string[]\n any: boolean\n noOp: boolean\n optIn: boolean\n closeOut: boolean\n clearState: boolean\n updateApplication: boolean\n deleteApplication: boolean\n\n inputType: {\n isOptional: boolean\n typeLiteral: string | undefined\n }\n}\n\nexport type MethodArgClientContext = {\n name: SanitizableString | undefined\n desc: string | undefined\n type: ABIType | ABIReferenceType | ABITransactionType\n tsInType: string\n defaultValue: unknown\n}\n\nexport type MethodReturnClientContext = {\n tsOutType: string\n type: ABIType | undefined\n desc: string | undefined\n}\n\nexport type SanitizableString = {\n original: string\n} & {\n [key in keyof Sanitizer]: ReturnType<Sanitizer[key]>\n}\n\nexport function createAppClientContext(appSpec: Arc56Contract, sanitizer: Sanitizer): AppClientContext {\n const methods: AppClientMethodContext[] = []\n\n for (const m of appSpec.methods) {\n const abiMethod = arc56MethodToABIMethod(m, appSpec)\n const baseNameIsUnique = appSpec.methods.filter((o) => o.name === m.name).length === 1\n methods.push({\n isBare: false,\n name: createSanitizableString(m.name, sanitizer),\n desc: m.desc,\n baseNameIsUnique,\n uniqueName: createSanitizableString(baseNameIsUnique ? m.name : abiMethod.getSignature(), sanitizer),\n args: abiMethod.args.map((a): MethodArgClientContext => {\n return {\n name: a.name ? createSanitizableString(a.name, sanitizer) : undefined,\n desc: a.description,\n type: a.type,\n tsInType: getEquivalentType(a.type, 'input', sanitizer),\n defaultValue: Boolean(a.defaultValue),\n }\n }),\n callActions: buildOcas(m.actions.call),\n createActions: buildOcas(m.actions.create),\n readonly: Boolean(m.readonly),\n signature: abiMethod.getSignature(),\n returns: {\n tsOutType: getEquivalentType(abiMethod.returns.type, 'output', sanitizer),\n type: abiMethod.returns.type === 'void' ? undefined : abiMethod.returns.type,\n desc: abiMethod.returns.description,\n },\n })\n }\n\n const bareMethod: BareMethodClientContext = {\n isBare: true,\n createActions: buildOcas(appSpec.bareActions.create),\n callActions: buildOcas(appSpec.bareActions.call),\n }\n if (bareMethod.createActions.any || bareMethod.callActions.any) {\n methods.push(bareMethod)\n }\n\n return {\n name: createSanitizableString(appSpec.name, sanitizer),\n methods,\n bareMethod,\n createMethods: methods.filter((m) => m.createActions.any),\n updateMethods: methods.filter((m) => m.callActions.updateApplication),\n deleteMethods: methods.filter((m) => m.callActions.deleteApplication),\n noOpMethods: methods.filter((m) => m.callActions.noOp),\n optInMethods: methods.filter((m) => m.callActions.optIn),\n closeOutMethods: methods.filter((m) => m.callActions.closeOut),\n clearStateMethods: methods.filter((m) => m.callActions.clearState),\n abiMethods: methods.filter(isAbiMethod),\n\n state: {\n maps: {\n global: buildStorageMap(appSpec.state.maps.global, appSpec, sanitizer),\n local: buildStorageMap(appSpec.state.maps.local, appSpec, sanitizer),\n box: buildStorageMap(appSpec.state.maps.box, appSpec, sanitizer),\n },\n keys: {\n global: buildStorageKey(appSpec.state.keys.global, appSpec, sanitizer),\n local: buildStorageKey(appSpec.state.keys.local, appSpec, sanitizer),\n box: buildStorageKey(appSpec.state.keys.box, appSpec, sanitizer),\n },\n },\n\n structs: mapRecord(appSpec.structs, (def, name) => buildStructCtx(name, appSpec, sanitizer)),\n\n templateVariables: mapRecord(appSpec.templateVariables ?? {}, (v) => ({\n value: v.value,\n type: buildTypeContext(v.type, appSpec, sanitizer),\n })),\n }\n}\n\nfunction buildStructCtx(name: string, appSpec: Arc56Contract, sanitizer: Sanitizer): StructContext {\n const typeCtx = buildTypeContext(name, appSpec, sanitizer)\n\n const abiType = typeCtx.type\n invariant(abiType instanceof ABIStructType)\n\n return {\n type: typeCtx,\n tsObjDef: buildStructObjDef(abiType.structFields, appSpec, sanitizer, 1),\n tsTupDef: `[${Array.from(buildStructTupleDef(abiType.structFields, appSpec, sanitizer)).join(', ')}]`,\n }\n}\n\nfunction buildStructObjDef(fields: ABIStructField[], appSpec: Arc56Contract, sanitizer: Sanitizer, indent: number): string {\n const indentStr = ' '.repeat(indent)\n const closingIndent = ' '.repeat(indent - 1)\n const lines: string[] = []\n\n for (const field of fields) {\n const typeDef = Array.isArray(field.type)\n ? buildStructObjDef(field.type, appSpec, sanitizer, indent + 1)\n : abiTypeToTs(field.type, 'output', sanitizer)\n lines.push(`${indentStr}${sanitizer.makeSafePropertyIdentifier(field.name)}: ${typeDef}`)\n }\n\n return `{\\n${lines.join(',\\n')}\\n${closingIndent}}`\n}\nfunction* buildStructTupleDef(fields: ABIStructField[], appSpec: Arc56Contract, sanitizer: Sanitizer) {\n for (const field of fields) {\n let typeDef: string\n if (Array.isArray(field.type)) {\n typeDef = `[${Array.from(buildStructTupleDef(field.type, appSpec, sanitizer)).join(', ')}]`\n } else {\n typeDef = abiTypeToTs(field.type, 'output', sanitizer)\n }\n yield `${typeDef}`\n }\n}\n\nfunction buildStorageMap(\n maps: Record<string, StorageMap>,\n appSpec: Arc56Contract,\n sanitizer: Sanitizer,\n): Record<string, StorageMapContext> {\n return mapRecord(maps, (v) => ({\n desc: v.desc,\n valueType: buildTypeContext(v.valueType, appSpec, sanitizer),\n keyType: buildTypeContext(v.keyType, appSpec, sanitizer),\n prefix: v.prefix,\n }))\n}\nfunction buildStorageKey(\n keys: Record<string, StorageKey>,\n appSpec: Arc56Contract,\n sanitizer: Sanitizer,\n): Record<string, StorageKeyContext> {\n return mapRecord(keys, (v) => ({\n desc: v.desc,\n valueType: buildTypeContext(v.valueType, appSpec, sanitizer),\n keyType: buildTypeContext(v.valueType, appSpec, sanitizer),\n key: v.key,\n }))\n}\n\nfunction mapRecord<TIn, TOut>(input: Record<string, TIn>, mapper: (value: TIn, key: string) => TOut): Record<string, TOut> {\n return Object.fromEntries(Object.entries(input).map(([k, v]) => [k, mapper(v, k)]))\n}\n\nfunction createSanitizableString(name: string, sanitizer: Sanitizer): SanitizableString {\n return new Proxy<SanitizableString>({} as SanitizableString, {\n get(target, property) {\n if (property === 'toString') return () => name\n if (property === 'original') return name\n if (property in sanitizer) {\n return sanitizer[property as keyof Sanitizer](name)\n }\n },\n })\n}\n\nfunction buildOcas(actions: string[]): MethodOcas {\n const isOptional = actions.includes('NoOp') || actions.length === 1\n const typeLiteral = actions.length\n ? `{ onComplete${isOptional ? '?' : ''}: ${actions.map((oc) => `OnApplicationComplete.${oc}`).join(' | ')} }`\n : undefined\n\n return {\n raw: actions,\n any: Boolean(actions.length),\n noOp: actions.includes('NoOp'),\n optIn: actions.includes('OptIn'),\n closeOut: actions.includes('CloseOut'),\n clearState: actions.includes('ClearState'),\n updateApplication: actions.includes('UpdateApplication'),\n deleteApplication: actions.includes('DeleteApplication'),\n\n inputType: {\n isOptional,\n typeLiteral,\n },\n }\n}\n\nfunction buildTypeContext(typeName: string, appSpec: Arc56Contract, sanitizer: Sanitizer): TypeContext {\n switch (typeName) {\n case 'AVMBytes':\n return {\n isAvmBytes: true,\n type: typeName,\n tsInType: 'Uint8Array | string',\n tsOutType: 'Uint8Array',\n }\n case 'AVMString':\n return {\n type: typeName,\n tsInType: 'string',\n tsOutType: 'string',\n }\n case 'AVMUint64':\n return {\n type: typeName,\n tsInType: 'bigint',\n tsOutType: 'bigint',\n }\n }\n if (typeName in appSpec.structs) {\n return {\n type: ABIStructType.fromStruct(typeName, appSpec.structs),\n tsInType: sanitizer.makeSafeTypeIdentifier(typeName),\n tsOutType: sanitizer.makeSafeTypeIdentifier(typeName),\n }\n }\n // Otherwise parse as ABI type\n try {\n const abiType = ABIType.from(typeName)\n return {\n type: abiType,\n tsInType: abiTypeToTs(abiType, 'input', sanitizer),\n tsOutType: abiTypeToTs(abiType, 'output', sanitizer),\n }\n } catch (error) {\n throw new Error(`Failed to parse storage type '${typeName}': ${error}`)\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var writer = require('../output/writer.js');
|
|
4
|
-
var getCallConfigSummary = require('./helpers/get-call-config-summary.js');
|
|
5
|
-
var deployTypes = require('./deploy-types.js');
|
|
6
4
|
var callComposer = require('./call-composer.js');
|
|
7
|
-
var
|
|
8
|
-
var getEquivalentType = require('./helpers/get-equivalent-type.js');
|
|
9
|
-
var containsNonVoidMethod = require('./helpers/contains-non-void-method.js');
|
|
5
|
+
var appClientContext = require('./app-client-context.js');
|
|
10
6
|
|
|
11
7
|
function* appClient(ctx) {
|
|
12
8
|
const { app, name } = ctx;
|
|
@@ -35,16 +31,6 @@ function* appClient(ctx) {
|
|
|
35
31
|
appSpec: APP_SPEC,
|
|
36
32
|
})
|
|
37
33
|
}`;
|
|
38
|
-
if (containsNonVoidMethod.containsNonVoidMethod(app.methods)) {
|
|
39
|
-
yield `
|
|
40
|
-
/**
|
|
41
|
-
* Checks for decode errors on the given return value and maps the return value to the return type for the given method
|
|
42
|
-
* @returns The typed return value or undefined if there was no value
|
|
43
|
-
*/
|
|
44
|
-
decodeReturnValue<TSignature extends ${name}NonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {
|
|
45
|
-
return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined
|
|
46
|
-
}`;
|
|
47
|
-
}
|
|
48
34
|
yield `
|
|
49
35
|
/**
|
|
50
36
|
* Returns a new \`${name}Client\` client, resolving the app by creator address and name
|
|
@@ -137,16 +123,16 @@ function* send(ctx) {
|
|
|
137
123
|
yield writer.NewLine;
|
|
138
124
|
}
|
|
139
125
|
function* opMethods(ctx, type) {
|
|
140
|
-
const { app
|
|
126
|
+
const { app } = ctx;
|
|
141
127
|
if (ctx.mode === 'full') {
|
|
142
|
-
yield* operationMethods(ctx, `Updates an existing instance of the ${app.name} smart contract`,
|
|
143
|
-
yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`,
|
|
128
|
+
yield* operationMethods(ctx, `Updates an existing instance of the ${app.name} smart contract`, app.updateMethods, 'update', type, true);
|
|
129
|
+
yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`, app.deleteMethods, 'delete', type);
|
|
144
130
|
}
|
|
145
|
-
yield* operationMethods(ctx, `Opts the user into an existing instance of the ${app.name} smart contract`,
|
|
146
|
-
yield* operationMethods(ctx, `Makes a close out call to an existing instance of the ${app.name} smart contract`,
|
|
131
|
+
yield* operationMethods(ctx, `Opts the user into an existing instance of the ${app.name} smart contract`, app.optInMethods, 'optIn', type);
|
|
132
|
+
yield* operationMethods(ctx, `Makes a close out call to an existing instance of the ${app.name} smart contract`, app.closeOutMethods, 'closeOut', type);
|
|
147
133
|
}
|
|
148
134
|
function* bareMethodCall({ generator: { app }, name, description, verb, type, includeCompilation, }) {
|
|
149
|
-
const onComplete = verb === 'create' ?
|
|
135
|
+
const onComplete = verb === 'create' ? app.bareMethod.createActions.inputType : verb === 'call' ? app.bareMethod.callActions.inputType : undefined;
|
|
150
136
|
yield* writer.jsDoc({
|
|
151
137
|
description: `${description}.`,
|
|
152
138
|
params: {
|
|
@@ -154,18 +140,14 @@ function* bareMethodCall({ generator: { app }, name, description, verb, type, in
|
|
|
154
140
|
},
|
|
155
141
|
returns: `The ${verb} result`,
|
|
156
142
|
});
|
|
157
|
-
yield `${name}: (params?: Expand<AppClientBareCallParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.
|
|
143
|
+
yield `${name}: (params?: Expand<AppClientBareCallParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.typeLiteral ? ` & ${onComplete.typeLiteral}` : ''}>) => {`;
|
|
158
144
|
yield* writer.indent(`return this.appClient.${type}.bare.${verb}(params)`);
|
|
159
145
|
yield '},';
|
|
160
146
|
}
|
|
161
|
-
function* abiMethodCall({ generator: {
|
|
162
|
-
const methodSig =
|
|
163
|
-
const uniqueName =
|
|
164
|
-
const onComplete = verb === 'create'
|
|
165
|
-
? deployTypes.getCreateOnCompleteOptions(methodSig, app)
|
|
166
|
-
: verb === 'call' && !readonly
|
|
167
|
-
? deployTypes.getCallOnCompleteOptions(methodSig, app)
|
|
168
|
-
: undefined;
|
|
147
|
+
function* abiMethodCall({ generator: { sanitizer, name }, method, description, verb, type, includeCompilation, readonly, }) {
|
|
148
|
+
const methodSig = method.signature;
|
|
149
|
+
const uniqueName = method.uniqueName.original;
|
|
150
|
+
const onComplete = verb === 'create' ? method.createActions.inputType : method.callActions.inputType;
|
|
169
151
|
yield* writer.jsDoc({
|
|
170
152
|
description: verb === 'call' && method.readonly
|
|
171
153
|
? [
|
|
@@ -183,7 +165,7 @@ function* abiMethodCall({ generator: { app, methodSignatureToUniqueName, name, s
|
|
|
183
165
|
const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName);
|
|
184
166
|
const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
|
|
185
167
|
const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig);
|
|
186
|
-
yield `${!readonly ? `${methodName}: ` : ''}${type === 'send' ? 'async ' : ''}${readonly ? `${methodName}` : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' && !readonly ? ' & SendParams' : ''}${onComplete?.
|
|
168
|
+
yield `${!readonly ? `${methodName}: ` : ''}${type === 'send' ? 'async ' : ''}${readonly ? `${methodName}` : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' && !readonly ? ' & SendParams' : ''}${onComplete?.typeLiteral && !readonly ? ` & ${onComplete.typeLiteral}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''})${!readonly ? ' =>' : ''} {`;
|
|
187
169
|
if (type === 'send') {
|
|
188
170
|
yield* writer.indent(`const result = await this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`, readonly
|
|
189
171
|
? `return result.return as unknown as ${name}Returns['${methodSigSafe}']`
|
|
@@ -200,8 +182,8 @@ function* operationMethods(generator, description, methods, verb, type, includeC
|
|
|
200
182
|
yield* writer.jsDoc(`Gets available ${verb} methods`);
|
|
201
183
|
yield `${verb}: {`;
|
|
202
184
|
yield writer.IncIndent;
|
|
203
|
-
for (const
|
|
204
|
-
if (
|
|
185
|
+
for (const method of methods) {
|
|
186
|
+
if (!appClientContext.isAbiMethod(method)) {
|
|
205
187
|
yield* bareMethodCall({
|
|
206
188
|
generator,
|
|
207
189
|
name: 'bare',
|
|
@@ -212,7 +194,6 @@ function* operationMethods(generator, description, methods, verb, type, includeC
|
|
|
212
194
|
});
|
|
213
195
|
}
|
|
214
196
|
else {
|
|
215
|
-
const method = generator.app.methods.find((m) => new algosdk.ABIMethod(m).getSignature() === methodSig);
|
|
216
197
|
yield* abiMethodCall({
|
|
217
198
|
generator,
|
|
218
199
|
method,
|
|
@@ -239,7 +220,7 @@ function* clearState(generator, type) {
|
|
|
239
220
|
yield writer.NewLine;
|
|
240
221
|
}
|
|
241
222
|
function* call(generator, type) {
|
|
242
|
-
if (generator.
|
|
223
|
+
if (generator.app.bareMethod.callActions.noOp) {
|
|
243
224
|
yield* bareMethodCall({
|
|
244
225
|
generator,
|
|
245
226
|
name: 'bare',
|
|
@@ -251,11 +232,10 @@ function* call(generator, type) {
|
|
|
251
232
|
}
|
|
252
233
|
}
|
|
253
234
|
function* readonlyMethods(generator) {
|
|
254
|
-
const { app
|
|
255
|
-
for (const method of app.
|
|
256
|
-
const methodSignature = new algosdk.ABIMethod(method).getSignature();
|
|
235
|
+
const { app } = generator;
|
|
236
|
+
for (const method of app.abiMethods) {
|
|
257
237
|
// Skip non readonly methods
|
|
258
|
-
if (!
|
|
238
|
+
if (!method.readonly)
|
|
259
239
|
continue;
|
|
260
240
|
yield* abiMethodCall({
|
|
261
241
|
generator,
|
|
@@ -269,11 +249,9 @@ function* readonlyMethods(generator) {
|
|
|
269
249
|
}
|
|
270
250
|
}
|
|
271
251
|
function* noopMethods(generator, type) {
|
|
272
|
-
const { app
|
|
273
|
-
for (const method of app.
|
|
274
|
-
|
|
275
|
-
// Skip methods which don't support a no_op call config
|
|
276
|
-
if (!callConfig.callMethods.includes(methodSignature))
|
|
252
|
+
const { app } = generator;
|
|
253
|
+
for (const method of app.noOpMethods) {
|
|
254
|
+
if (!appClientContext.isAbiMethod(method))
|
|
277
255
|
continue;
|
|
278
256
|
yield* abiMethodCall({
|
|
279
257
|
generator,
|
|
@@ -308,14 +286,14 @@ function* getStateMethods({ app, sanitizer }) {
|
|
|
308
286
|
yield* writer.jsDoc(`Get all current keyed values from ${storageType} state`);
|
|
309
287
|
yield `getAll: async (): Promise<Partial<Expand<${storageType[0].toUpperCase()}${storageType.substring(1)}KeysState>>> => {`;
|
|
310
288
|
yield* writer.indent(`const result = await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getAll()`, `return {`, ...Object.keys(app.state.keys[storageType]).map((n) => {
|
|
311
|
-
return ` ${sanitizer.makeSafePropertyIdentifier(n)}: ${app.state.keys[storageType][n].valueType
|
|
289
|
+
return ` ${sanitizer.makeSafePropertyIdentifier(n)}: ${app.state.keys[storageType][n].valueType.isAvmBytes ? `new BinaryStateValue(result${sanitizer.getSafeMemberAccessor(n)})` : `result${sanitizer.getSafeMemberAccessor(n)}`},`;
|
|
312
290
|
}), `}`);
|
|
313
291
|
yield `},`;
|
|
314
292
|
for (const n of Object.keys(app.state.keys[storageType])) {
|
|
315
293
|
const name = sanitizer.makeSafePropertyIdentifier(n);
|
|
316
294
|
const k = app.state.keys[storageType][n];
|
|
317
295
|
yield* writer.jsDoc(`Get the current value of the ${n} key in ${storageType} state`);
|
|
318
|
-
yield `${name}: async (): Promise<${k.valueType
|
|
296
|
+
yield `${name}: async (): Promise<${k.valueType.isAvmBytes ? 'BinaryState' : `${k.valueType.tsOutType} | undefined`}> => { return ${k.valueType.isAvmBytes ? 'new BinaryStateValue(' : ''}(await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getValue("${sanitizer.makeSafeStringTypeLiteral(n)}"))${k.valueType.isAvmBytes ? ' as Uint8Array | undefined)' : ` as ${k.valueType.tsOutType} | undefined`} },`;
|
|
319
297
|
}
|
|
320
298
|
for (const n of Object.keys(app.state.maps[storageType])) {
|
|
321
299
|
const name = sanitizer.makeSafePropertyIdentifier(app.state.keys[storageType][n] ? `${n}Map` : n);
|
|
@@ -324,9 +302,9 @@ function* getStateMethods({ app, sanitizer }) {
|
|
|
324
302
|
yield `${name}: {`;
|
|
325
303
|
yield writer.IncIndent;
|
|
326
304
|
yield* writer.jsDoc(`Get all current values of the ${n} map in ${storageType} state`);
|
|
327
|
-
yield `getMap: async (): Promise<Map<${
|
|
305
|
+
yield `getMap: async (): Promise<Map<${m.keyType.tsOutType}, ${m.valueType.tsOutType}>> => { return (await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getMap("${sanitizer.makeSafeStringTypeLiteral(n)}")) as Map<${m.keyType.tsOutType}, ${m.valueType.tsOutType}> },`;
|
|
328
306
|
yield* writer.jsDoc(`Get a current value of the ${n} map by key from ${storageType} state`);
|
|
329
|
-
yield `value: async (key: ${
|
|
307
|
+
yield `value: async (key: ${m.keyType.tsInType}): Promise<${m.valueType.tsOutType} | undefined> => { return await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getMapValue("${sanitizer.makeSafeStringTypeLiteral(n)}", key) as ${m.valueType.tsOutType} | undefined },`;
|
|
330
308
|
yield writer.DecIndent;
|
|
331
309
|
yield `},`;
|
|
332
310
|
}
|
|
@@ -340,17 +318,17 @@ function* getStateMethods({ app, sanitizer }) {
|
|
|
340
318
|
yield writer.DecIndentAndCloseBlock;
|
|
341
319
|
yield writer.NewLine;
|
|
342
320
|
}
|
|
343
|
-
function* cloneMethod({
|
|
321
|
+
function* cloneMethod({ app }) {
|
|
344
322
|
yield* writer.jsDoc({
|
|
345
323
|
description: 'Clone this app client with different params',
|
|
346
324
|
params: {
|
|
347
|
-
params: 'The params to use for the
|
|
325
|
+
params: 'The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.',
|
|
348
326
|
},
|
|
349
327
|
returns: 'A new app client with the altered params',
|
|
350
328
|
});
|
|
351
329
|
yield `public clone(params: CloneAppClientParams) {`;
|
|
352
330
|
yield writer.IncIndent;
|
|
353
|
-
yield `return new ${name}Client(this.appClient.clone(params))`;
|
|
331
|
+
yield `return new ${app.name.makeSafeTypeIdentifier}Client(this.appClient.clone(params))`;
|
|
354
332
|
yield writer.DecIndentAndCloseBlock;
|
|
355
333
|
yield writer.NewLine;
|
|
356
334
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-client.js","sources":["../../../src/client/app-client.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { GeneratorContext } from './generator-context'\nimport { composeMethod } from './call-composer'\n\nimport { AppClientMethodContext, AbiMethodClientContext, isAbiMethod } from './app-client-context'\n\nexport function* appClient(ctx: GeneratorContext): DocumentParts {\n const { app, name } = ctx\n\n yield* jsDoc(`A client to make calls to the ${app.name} smart contract`)\n yield `export class ${name}Client {`\n yield IncIndent\n yield* jsDoc(`The underlying \\`AppClient\\` for when you want to have more flexibility`)\n yield 'public readonly appClient: _AppClient'\n yield NewLine\n\n yield `\n /**\n * Creates a new instance of \\`${name}Client\\`\n *\n * @param appClient An \\`AppClient\\` instance which has been created with the ${name} app spec\n */\n constructor(appClient: _AppClient)\n /**\n * Creates a new instance of \\`${name}Client\\`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }`\n\n yield `\n /**\n * Returns a new \\`${name}Client\\` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<${name}Client> {\n return new ${name}Client(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n\n /**\n * Returns an \\`${name}Client\\` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<${name}Client> {\n return new ${name}Client(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n\n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n\n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n\n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n\n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n\n /** A reference to the underlying \\`AlgorandClient\\` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand\n }\n\n `\n\n yield* params(ctx)\n yield* createTransaction(ctx)\n yield* send(ctx)\n yield* cloneMethod(ctx)\n yield* readonlyMethods(ctx)\n yield* getStateMethods(ctx)\n yield* composeMethod(ctx)\n yield DecIndentAndCloseBlock\n}\n\nfunction* params(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(\n `Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.`,\n )\n yield `readonly params = {`\n yield IncIndent\n yield* opMethods(ctx, 'params')\n yield* clearState(ctx, 'params')\n yield* call(ctx, 'params')\n yield* noopMethods(ctx, 'params')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* createTransaction(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Create transactions for the current app`)\n yield `readonly createTransaction = {`\n yield IncIndent\n yield* opMethods(ctx, 'createTransaction')\n yield* clearState(ctx, 'createTransaction')\n yield* call(ctx, 'createTransaction')\n yield* noopMethods(ctx, 'createTransaction')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* send(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Send calls to the current app`)\n yield `readonly send = {`\n yield IncIndent\n yield* opMethods(ctx, 'send')\n yield* clearState(ctx, 'send')\n yield* call(ctx, 'send')\n yield* noopMethods(ctx, 'send')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* opMethods(ctx: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n const { app } = ctx\n\n if (ctx.mode === 'full') {\n yield* operationMethods(ctx, `Updates an existing instance of the ${app.name} smart contract`, app.updateMethods, 'update', type, true)\n yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`, app.deleteMethods, 'delete', type)\n }\n yield* operationMethods(ctx, `Opts the user into an existing instance of the ${app.name} smart contract`, app.optInMethods, 'optIn', type)\n yield* operationMethods(\n ctx,\n `Makes a close out call to an existing instance of the ${app.name} smart contract`,\n app.closeOutMethods,\n 'closeOut',\n type,\n )\n}\n\nfunction* bareMethodCall({\n generator: { app },\n name,\n description,\n verb,\n type,\n includeCompilation,\n}: {\n generator: GeneratorContext\n name: string\n description: string\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete' | 'clearState' | 'call'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n}): DocumentParts {\n const onComplete =\n verb === 'create' ? app.bareMethod.createActions.inputType : verb === 'call' ? app.bareMethod.callActions.inputType : undefined\n yield* jsDoc({\n description: `${description}.`,\n params: {\n params: `The params for the bare (raw) call`,\n },\n returns: `The ${verb} result`,\n })\n yield `${name}: (params?: Expand<AppClientBareCallParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' ? ' & SendParams' : ''}${onComplete?.typeLiteral ? ` & ${onComplete.typeLiteral}` : ''}>) => {`\n yield* indent(`return this.appClient.${type}.bare.${verb}(params)`)\n yield '},'\n}\n\nfunction* abiMethodCall({\n generator: { sanitizer, name },\n method,\n description,\n verb,\n type,\n includeCompilation,\n readonly,\n}: {\n generator: GeneratorContext\n method: AbiMethodClientContext\n description: string\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete' | 'call'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n readonly?: boolean\n}) {\n const methodSig = method.signature\n const uniqueName = method.uniqueName.original\n const onComplete = verb === 'create' ? method.createActions.inputType : method.callActions.inputType\n yield* jsDoc({\n description:\n verb === 'call' && method.readonly\n ? [\n `${description} using the \\`${methodSig}\\` ABI method.`,\n '',\n 'This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.',\n ]\n : `${description} using the \\`${methodSig}\\` ABI method.`,\n abiDescription: method?.desc,\n params: {\n params: `The params for the smart contract call`,\n },\n returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,\n })\n const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig)\n yield `${!readonly ? `${methodName}: ` : ''}${type === 'send' ? 'async ' : ''}${readonly ? `${methodName}` : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${\n includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n }${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' && !readonly ? ' & SendParams' : ''}${onComplete?.typeLiteral && !readonly ? ` & ${onComplete.typeLiteral}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''})${!readonly ? ' =>' : ''} {`\n if (type === 'send') {\n yield* indent(\n `const result = await this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`,\n readonly\n ? `return result.return as unknown as ${name}Returns['${methodSigSafe}']`\n : `return {...result, return: result.return as unknown as (undefined | ${name}Returns['${methodSigSafe}'])}`,\n )\n } else {\n yield* indent(\n `return this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`,\n )\n }\n yield `}${!readonly ? ',' : ''}`\n yield NewLine\n}\n\nfunction* operationMethods(\n generator: GeneratorContext,\n description: string,\n methods: AppClientMethodContext[],\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete',\n type: 'params' | 'createTransaction' | 'send',\n includeCompilation?: boolean,\n): DocumentParts {\n if (methods.length) {\n yield* jsDoc(`Gets available ${verb} methods`)\n yield `${verb}: {`\n yield IncIndent\n for (const method of methods) {\n if (!isAbiMethod(method)) {\n yield* bareMethodCall({\n generator,\n name: 'bare',\n description: `${description} using a bare call`,\n verb,\n type,\n includeCompilation,\n })\n } else {\n yield* abiMethodCall({\n generator,\n method,\n description,\n verb,\n type,\n includeCompilation,\n })\n }\n }\n yield DecIndent\n yield '},'\n yield NewLine\n }\n}\n\nfunction* clearState(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n yield* bareMethodCall({\n generator,\n name: 'clearState',\n description: `Makes a clear_state call to an existing instance of the ${generator.app.name} smart contract`,\n verb: 'clearState',\n type,\n })\n yield NewLine\n}\n\nfunction* call(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n if (generator.app.bareMethod.callActions.noOp) {\n yield* bareMethodCall({\n generator,\n name: 'bare',\n description: `Makes a call to the ${generator.app.name} smart contract using a bare call`,\n verb: 'call',\n type,\n })\n yield NewLine\n }\n}\n\nfunction* readonlyMethods(generator: GeneratorContext): DocumentParts {\n const { app } = generator\n for (const method of app.abiMethods) {\n // Skip non readonly methods\n if (!method.readonly) continue\n\n yield* abiMethodCall({\n generator,\n description: `Makes a readonly (simulated) call to the ${generator.app.name} smart contract`,\n method,\n verb: 'call',\n type: 'send',\n includeCompilation: false,\n readonly: true,\n })\n }\n}\n\nfunction* noopMethods(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n const { app } = generator\n for (const method of app.noOpMethods) {\n if (!isAbiMethod(method)) continue\n yield* abiMethodCall({\n generator,\n description: `Makes a call to the ${generator.app.name} smart contract`,\n method,\n verb: 'call',\n type,\n includeCompilation: false,\n })\n }\n}\n\nfunction* getStateMethods({ app, sanitizer }: GeneratorContext): DocumentParts {\n if (Object.keys(app.state).length === 0) return\n\n yield* jsDoc(`Methods to access state for the current ${app.name} app`)\n yield 'state = {'\n yield IncIndent\n\n const storageTypes = ['global', 'local', 'box'] as const\n\n for (const storageType of storageTypes) {\n const hasKeys = Object.keys(app.state.keys[storageType]).length > 0\n const hasMaps = Object.keys(app.state.maps[storageType]).length > 0\n if (!hasKeys && !hasMaps) continue\n\n yield* jsDoc(`Methods to access ${storageType} state for the current ${app.name} app`)\n yield `${storageType}${storageType === 'local' ? ': (address: string | Address) => {' : ': {'}`\n yield IncIndent\n if (storageType === 'local') {\n yield \"const encodedAddress = typeof address === 'string' ? address : encodeAddress(address.publicKey)\"\n yield 'return {'\n yield IncIndent\n }\n\n yield* jsDoc(`Get all current keyed values from ${storageType} state`)\n yield `getAll: async (): Promise<Partial<Expand<${storageType[0].toUpperCase()}${storageType.substring(1)}KeysState>>> => {`\n yield* indent(\n `const result = await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getAll()`,\n `return {`,\n ...Object.keys(app.state.keys[storageType]).map((n) => {\n return ` ${sanitizer.makeSafePropertyIdentifier(n)}: ${app.state.keys[storageType][n].valueType.isAvmBytes ? `new BinaryStateValue(result${sanitizer.getSafeMemberAccessor(n)})` : `result${sanitizer.getSafeMemberAccessor(n)}`},`\n }),\n `}`,\n )\n yield `},`\n\n for (const n of Object.keys(app.state.keys[storageType])) {\n const name = sanitizer.makeSafePropertyIdentifier(n)\n const k = app.state.keys[storageType][n]\n yield* jsDoc(`Get the current value of the ${n} key in ${storageType} state`)\n yield `${name}: async (): Promise<${k.valueType.isAvmBytes ? 'BinaryState' : `${k.valueType.tsOutType} | undefined`}> => { return ${k.valueType.isAvmBytes ? 'new BinaryStateValue(' : ''}(await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getValue(\"${sanitizer.makeSafeStringTypeLiteral(n)}\"))${k.valueType.isAvmBytes ? ' as Uint8Array | undefined)' : ` as ${k.valueType.tsOutType} | undefined`} },`\n }\n\n for (const n of Object.keys(app.state.maps[storageType])) {\n const name = sanitizer.makeSafePropertyIdentifier(app.state.keys[storageType][n] ? `${n}Map` : n)\n const m = app.state.maps[storageType][n]\n yield* jsDoc(`Get values from the ${n} map in ${storageType} state`)\n yield `${name}: {`\n yield IncIndent\n\n yield* jsDoc(`Get all current values of the ${n} map in ${storageType} state`)\n yield `getMap: async (): Promise<Map<${m.keyType.tsOutType}, ${m.valueType.tsOutType}>> => { return (await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getMap(\"${sanitizer.makeSafeStringTypeLiteral(n)}\")) as Map<${m.keyType.tsOutType}, ${m.valueType.tsOutType}> },`\n\n yield* jsDoc(`Get a current value of the ${n} map by key from ${storageType} state`)\n yield `value: async (key: ${m.keyType.tsInType}): Promise<${m.valueType.tsOutType} | undefined> => { return await this.appClient.state.${storageType}${storageType === 'local' ? '(encodedAddress)' : ''}.getMapValue(\"${sanitizer.makeSafeStringTypeLiteral(n)}\", key) as ${m.valueType.tsOutType} | undefined },`\n\n yield DecIndent\n yield `},`\n }\n\n yield DecIndent\n if (storageType === 'local') {\n yield '}'\n yield DecIndent\n }\n yield '},'\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* cloneMethod({ app }: GeneratorContext): DocumentParts {\n yield* jsDoc({\n description: 'Clone this app client with different params',\n params: {\n params:\n 'The params to use for the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.',\n },\n returns: 'A new app client with the altered params',\n })\n yield `public clone(params: CloneAppClientParams) {`\n yield IncIndent\n yield `return new ${app.name.makeSafeTypeIdentifier}Client(this.appClient.clone(params))`\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n"],"names":["jsDoc","IncIndent","NewLine","composeMethod","DecIndentAndCloseBlock","indent","isAbiMethod","DecIndent"],"mappings":"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"}
|