@dedot/codegen 0.0.1-next.f5bf4fc2.1 → 0.1.0
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/{generator → chaintypes/generator}/ApiGen.d.ts +13 -13
- package/chaintypes/generator/ConstsGen.d.ts +4 -0
- package/{generator → chaintypes/generator}/ConstsGen.js +8 -9
- package/chaintypes/generator/ErrorsGen.d.ts +5 -0
- package/{generator → chaintypes/generator}/ErrorsGen.js +11 -12
- package/chaintypes/generator/EventsGen.d.ts +5 -0
- package/{generator → chaintypes/generator}/EventsGen.js +11 -12
- package/chaintypes/generator/IndexGen.d.ts +5 -0
- package/chaintypes/generator/IndexGen.js +17 -0
- package/chaintypes/generator/JsonRpcGen.d.ts +8 -0
- package/chaintypes/generator/JsonRpcGen.js +55 -0
- package/chaintypes/generator/QueryGen.d.ts +5 -0
- package/chaintypes/generator/QueryGen.js +63 -0
- package/chaintypes/generator/RuntimeApisGen.d.ts +9 -0
- package/{generator → chaintypes/generator}/RuntimeApisGen.js +98 -24
- package/chaintypes/generator/TxGen.d.ts +5 -0
- package/{generator → chaintypes/generator}/TxGen.js +18 -16
- package/chaintypes/generator/TypesGen.d.ts +11 -0
- package/chaintypes/generator/TypesGen.js +55 -0
- package/chaintypes/generator/index.d.ts +10 -0
- package/chaintypes/generator/index.js +10 -0
- package/chaintypes/index.d.ts +3 -0
- package/chaintypes/index.js +49 -0
- package/chaintypes/templates/consts.hbs +7 -0
- package/chaintypes/templates/errors.hbs +7 -0
- package/chaintypes/templates/events.hbs +7 -0
- package/chaintypes/templates/index.hbs +27 -0
- package/chaintypes/templates/json-rpc.hbs +5 -0
- package/chaintypes/templates/query.hbs +7 -0
- package/chaintypes/templates/runtime.hbs +8 -0
- package/chaintypes/templates/tx.hbs +9 -0
- package/{cjs → chaintypes}/templates/types.hbs +1 -1
- package/cjs/{generator → chaintypes/generator}/ConstsGen.js +12 -13
- package/cjs/chaintypes/generator/ErrorsGen.js +40 -0
- package/cjs/{generator → chaintypes/generator}/EventsGen.js +17 -18
- package/cjs/chaintypes/generator/IndexGen.js +21 -0
- package/cjs/chaintypes/generator/JsonRpcGen.js +59 -0
- package/cjs/chaintypes/generator/QueryGen.js +67 -0
- package/cjs/chaintypes/generator/RuntimeApisGen.js +193 -0
- package/cjs/{generator → chaintypes/generator}/TxGen.js +27 -25
- package/cjs/chaintypes/generator/TypesGen.js +59 -0
- package/cjs/chaintypes/generator/index.js +26 -0
- package/cjs/chaintypes/index.js +77 -0
- package/cjs/chaintypes/templates/consts.hbs +7 -0
- package/cjs/chaintypes/templates/errors.hbs +7 -0
- package/cjs/chaintypes/templates/events.hbs +7 -0
- package/cjs/chaintypes/templates/index.hbs +27 -0
- package/cjs/chaintypes/templates/json-rpc.hbs +5 -0
- package/cjs/chaintypes/templates/query.hbs +7 -0
- package/cjs/chaintypes/templates/runtime.hbs +8 -0
- package/cjs/chaintypes/templates/tx.hbs +9 -0
- package/{templates → cjs/chaintypes/templates}/types.hbs +1 -1
- package/cjs/index.js +4 -62
- package/cjs/{generator/TypesGen.js → shared/BaseTypesGen.js} +123 -178
- package/cjs/{generator → shared}/TypeImports.js +29 -3
- package/cjs/{generator → shared}/index.js +3 -10
- package/cjs/{generator → shared}/known-codecs.js +24 -5
- package/cjs/typink/generator/ConstructorQueryGen.js +24 -0
- package/cjs/typink/generator/ConstructorTxGen.js +24 -0
- package/cjs/typink/generator/EventsGen.js +35 -0
- package/cjs/typink/generator/IndexGen.js +24 -0
- package/cjs/typink/generator/QueryGen.js +72 -0
- package/cjs/typink/generator/TxGen.js +25 -0
- package/cjs/typink/generator/TypesGen.js +28 -0
- package/cjs/typink/generator/index.js +23 -0
- package/cjs/typink/index.js +40 -0
- package/cjs/typink/templates/constructor-query.hbs +7 -0
- package/cjs/typink/templates/constructor-tx.hbs +7 -0
- package/cjs/typink/templates/events.hbs +8 -0
- package/cjs/typink/templates/index.hbs +16 -0
- package/cjs/typink/templates/query.hbs +7 -0
- package/cjs/typink/templates/tx.hbs +7 -0
- package/cjs/typink/templates/types.hbs +5 -0
- package/cjs/{generator/utils.js → utils.js} +34 -5
- package/index.d.ts +2 -4
- package/index.js +2 -48
- package/package.json +15 -18
- package/{generator/TypesGen.d.ts → shared/BaseTypesGen.d.ts} +13 -12
- package/{generator/TypesGen.js → shared/BaseTypesGen.js} +111 -166
- package/{generator → shared}/TypeImports.d.ts +12 -1
- package/{generator → shared}/TypeImports.js +29 -3
- package/shared/index.d.ts +3 -0
- package/shared/index.js +3 -0
- package/{generator → shared}/known-codecs.d.ts +1 -1
- package/{generator → shared}/known-codecs.js +22 -3
- package/typink/generator/ConstructorQueryGen.d.ts +6 -0
- package/typink/generator/ConstructorQueryGen.js +20 -0
- package/typink/generator/ConstructorTxGen.d.ts +6 -0
- package/typink/generator/ConstructorTxGen.js +20 -0
- package/typink/generator/EventsGen.d.ts +7 -0
- package/typink/generator/EventsGen.js +31 -0
- package/typink/generator/IndexGen.d.ts +6 -0
- package/typink/generator/IndexGen.js +20 -0
- package/typink/generator/QueryGen.d.ts +12 -0
- package/typink/generator/QueryGen.js +68 -0
- package/typink/generator/TxGen.d.ts +6 -0
- package/typink/generator/TxGen.js +21 -0
- package/typink/generator/TypesGen.d.ts +7 -0
- package/typink/generator/TypesGen.js +24 -0
- package/typink/generator/index.d.ts +7 -0
- package/typink/generator/index.js +7 -0
- package/typink/index.d.ts +2 -0
- package/typink/index.js +33 -0
- package/typink/templates/constructor-query.hbs +7 -0
- package/typink/templates/constructor-tx.hbs +7 -0
- package/typink/templates/events.hbs +8 -0
- package/typink/templates/index.hbs +16 -0
- package/typink/templates/query.hbs +7 -0
- package/typink/templates/tx.hbs +7 -0
- package/typink/templates/types.hbs +5 -0
- package/{generator/utils.d.ts → utils.d.ts} +6 -1
- package/{generator/utils.js → utils.js} +32 -4
- package/cjs/genSupportedChainTypes.js +0 -83
- package/cjs/generator/ErrorsGen.js +0 -41
- package/cjs/generator/IndexGen.js +0 -18
- package/cjs/generator/QueryGen.js +0 -59
- package/cjs/generator/RpcGen.js +0 -176
- package/cjs/generator/RuntimeApisGen.js +0 -119
- package/cjs/generator/known-types.js +0 -33
- package/cjs/packageInfo.js +0 -5
- package/cjs/templates/consts.hbs +0 -7
- package/cjs/templates/errors.hbs +0 -7
- package/cjs/templates/events.hbs +0 -7
- package/cjs/templates/index.hbs +0 -22
- package/cjs/templates/query.hbs +0 -7
- package/cjs/templates/rpc.hbs +0 -7
- package/cjs/templates/runtime.hbs +0 -8
- package/cjs/templates/tx.hbs +0 -9
- package/cjs/types.js +0 -2
- package/genSupportedChainTypes.d.ts +0 -1
- package/genSupportedChainTypes.js +0 -78
- package/generator/ConstsGen.d.ts +0 -4
- package/generator/ErrorsGen.d.ts +0 -5
- package/generator/EventsGen.d.ts +0 -5
- package/generator/IndexGen.d.ts +0 -6
- package/generator/IndexGen.js +0 -14
- package/generator/QueryGen.d.ts +0 -5
- package/generator/QueryGen.js +0 -55
- package/generator/RpcGen.d.ts +0 -10
- package/generator/RpcGen.js +0 -172
- package/generator/RuntimeApisGen.d.ts +0 -9
- package/generator/TxGen.d.ts +0 -5
- package/generator/index.d.ts +0 -10
- package/generator/index.js +0 -10
- package/generator/known-types.d.ts +0 -6
- package/generator/known-types.js +0 -30
- package/packageInfo.d.ts +0 -4
- package/packageInfo.js +0 -2
- package/templates/consts.hbs +0 -7
- package/templates/errors.hbs +0 -7
- package/templates/events.hbs +0 -7
- package/templates/index.hbs +0 -22
- package/templates/query.hbs +0 -7
- package/templates/rpc.hbs +0 -7
- package/templates/runtime.hbs +0 -8
- package/templates/tx.hbs +0 -9
- package/types.d.ts +0 -6
- package/types.js +0 -1
- /package/{generator → chaintypes/generator}/ApiGen.js +0 -0
- /package/cjs/{generator → chaintypes/generator}/ApiGen.js +0 -0
- /package/cjs/{generator/dirname.js → dirname.js} +0 -0
- /package/{generator/dirname.d.ts → dirname.d.ts} +0 -0
- /package/{generator/dirname.js → dirname.js} +0 -0
|
@@ -1,70 +1,96 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const util_1 = require("@polkadot/util");
|
|
5
|
-
const codecs_1 = require("@dedot/codecs");
|
|
3
|
+
exports.BaseTypesGen = exports.BASIC_KNOWN_TYPES = void 0;
|
|
6
4
|
const utils_1 = require("@dedot/utils");
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const known_codecs_1 = require("./known-codecs");
|
|
11
|
-
// Skip generate types for these
|
|
12
|
-
// as we do have native types for them
|
|
13
|
-
const SKIP_TYPES = [
|
|
14
|
-
'BoundedBTreeMap',
|
|
15
|
-
'BoundedBTreeSet',
|
|
16
|
-
'BoundedVec',
|
|
17
|
-
'Box',
|
|
18
|
-
'BTreeMap',
|
|
19
|
-
'BTreeSet',
|
|
20
|
-
'Cow',
|
|
21
|
-
'Option',
|
|
22
|
-
'Range',
|
|
23
|
-
'RangeInclusive',
|
|
24
|
-
'Result',
|
|
25
|
-
'WeakBoundedVec',
|
|
26
|
-
'WrapperKeepOpaque',
|
|
27
|
-
'WrapperOpaque',
|
|
28
|
-
];
|
|
5
|
+
const utils_js_1 = require("../utils.js");
|
|
6
|
+
const TypeImports_js_1 = require("./TypeImports.js");
|
|
7
|
+
const known_codecs_js_1 = require("./known-codecs.js");
|
|
29
8
|
// These are common & generic types, so we'll remove these from all paths at index 1
|
|
30
9
|
// This helps make the type name shorter
|
|
31
10
|
const PATH_RM_INDEX_1 = ['generic', 'misc', 'pallet', 'traits', 'types'];
|
|
32
11
|
exports.BASIC_KNOWN_TYPES = ['BitSequence', 'Bytes', 'BytesLike', 'FixedBytes', 'FixedArray', 'Result'];
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
metadata;
|
|
36
|
-
/**
|
|
37
|
-
* Types will be generated its definition out.
|
|
38
|
-
*/
|
|
12
|
+
class BaseTypesGen {
|
|
13
|
+
types;
|
|
39
14
|
includedTypes;
|
|
40
|
-
registry;
|
|
41
15
|
typeImports;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
this.
|
|
45
|
-
this.includedTypes =
|
|
46
|
-
this.typeImports = new
|
|
16
|
+
skipTypes;
|
|
17
|
+
constructor(types) {
|
|
18
|
+
this.types = types;
|
|
19
|
+
this.includedTypes = {};
|
|
20
|
+
this.typeImports = new TypeImports_js_1.TypeImports();
|
|
21
|
+
this.skipTypes = [];
|
|
47
22
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
let defTypeOut = '';
|
|
51
|
-
Object.values(this.includedTypes)
|
|
52
|
-
.filter(({ skip, knownType }) => !(skip || knownType))
|
|
53
|
-
.forEach(({ name, nameOut, id, docs }) => {
|
|
54
|
-
defTypeOut += `${(0, utils_2.commentBlock)(docs)}export type ${nameOut} = ${this.generateType(id, 0, true)};\n\n`;
|
|
55
|
-
if (this.#shouldGenerateTypeIn(id)) {
|
|
56
|
-
defTypeOut += `export type ${name} = ${this.generateType(id)};\n\n`;
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
const importTypes = this.typeImports.toImports('./types');
|
|
60
|
-
const template = (0, utils_2.compileTemplate)('types.hbs');
|
|
61
|
-
return (0, utils_2.beautifySourceCode)(template({ importTypes, defTypeOut }));
|
|
23
|
+
shouldGenerateTypeIn(_id) {
|
|
24
|
+
return false;
|
|
62
25
|
}
|
|
63
26
|
typeCache = {};
|
|
64
27
|
clearCache() {
|
|
65
28
|
this.typeCache = {};
|
|
66
29
|
this.typeImports.clear();
|
|
67
30
|
}
|
|
31
|
+
includeTypes() {
|
|
32
|
+
const pathsCount = new Map();
|
|
33
|
+
const typesWithPath = this.types.filter((one) => one.path.length > 0);
|
|
34
|
+
const skipIds = [];
|
|
35
|
+
const typeSuffixes = new Map();
|
|
36
|
+
typesWithPath.forEach(({ path, id }) => {
|
|
37
|
+
const joinedPath = path.join('::');
|
|
38
|
+
if (pathsCount.has(joinedPath)) {
|
|
39
|
+
// We compare 2 types with the same path here,
|
|
40
|
+
// if they are the same type -> skip the current one, keep the first occurrence
|
|
41
|
+
// if they are not the same type but has the same path -> we'll try to calculate & add a suffix for the current type name
|
|
42
|
+
const firstOccurrenceTypeId = pathsCount.get(joinedPath)[0];
|
|
43
|
+
const sameType = this.typeEql(firstOccurrenceTypeId, id);
|
|
44
|
+
if (sameType) {
|
|
45
|
+
skipIds.push(id);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
pathsCount.get(joinedPath).push(id);
|
|
49
|
+
typeSuffixes.set(id, this.extractDupTypeSuffix(id, firstOccurrenceTypeId, pathsCount.get(joinedPath).length));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
pathsCount.set(joinedPath, [id]);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return typesWithPath.reduce((o, type) => {
|
|
57
|
+
const { path, id } = type;
|
|
58
|
+
const joinedPath = path.join('::');
|
|
59
|
+
if (this.skipTypes.includes(joinedPath) || this.skipTypes.includes(path.at(-1))) {
|
|
60
|
+
return o;
|
|
61
|
+
}
|
|
62
|
+
const suffix = typeSuffixes.get(id) || '';
|
|
63
|
+
let knownType = false;
|
|
64
|
+
let name, nameOut;
|
|
65
|
+
const [isKnownCodecType, codecName] = (0, known_codecs_js_1.checkKnownCodecType)(joinedPath);
|
|
66
|
+
if (isKnownCodecType) {
|
|
67
|
+
const codecType = (0, known_codecs_js_1.findKnownCodecType)(codecName);
|
|
68
|
+
name = codecType.typeIn;
|
|
69
|
+
nameOut = codecType.typeOut;
|
|
70
|
+
knownType = true;
|
|
71
|
+
}
|
|
72
|
+
else if (PATH_RM_INDEX_1.includes(path[1])) {
|
|
73
|
+
const newPath = path.slice();
|
|
74
|
+
newPath.splice(1, 1);
|
|
75
|
+
name = this.cleanPath(newPath);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
name = this.cleanPath(path);
|
|
79
|
+
}
|
|
80
|
+
if (this.shouldGenerateTypeIn(id)) {
|
|
81
|
+
nameOut = name;
|
|
82
|
+
name = name.endsWith('Like') ? name : `${name}Like`;
|
|
83
|
+
}
|
|
84
|
+
o[id] = {
|
|
85
|
+
name: `${name}${suffix}`,
|
|
86
|
+
nameOut: nameOut ? `${nameOut}${suffix}` : `${name}${suffix}`,
|
|
87
|
+
knownType,
|
|
88
|
+
skip: skipIds.includes(id),
|
|
89
|
+
...type,
|
|
90
|
+
};
|
|
91
|
+
return o;
|
|
92
|
+
}, {});
|
|
93
|
+
}
|
|
68
94
|
generateType(typeId, nestedLevel = 0, typeOut = false) {
|
|
69
95
|
if (nestedLevel > 0) {
|
|
70
96
|
const includedDef = this.includedTypes[typeId];
|
|
@@ -95,15 +121,15 @@ class TypesGen {
|
|
|
95
121
|
return type;
|
|
96
122
|
}
|
|
97
123
|
#generateType(typeId, nestedLevel = 0, typeOut = false) {
|
|
98
|
-
const def = this.
|
|
124
|
+
const def = this.types[typeId];
|
|
99
125
|
if (!def) {
|
|
100
126
|
throw new Error(`Type def not found ${JSON.stringify(def)}`);
|
|
101
127
|
}
|
|
102
|
-
const {
|
|
103
|
-
const {
|
|
104
|
-
switch (
|
|
128
|
+
const { typeDef, path, docs } = def;
|
|
129
|
+
const { type, value } = typeDef;
|
|
130
|
+
switch (type) {
|
|
105
131
|
case 'Primitive':
|
|
106
|
-
const $codec = (0,
|
|
132
|
+
const $codec = (0, known_codecs_js_1.findKnownCodec)(value.kind);
|
|
107
133
|
if ($codec.nativeType) {
|
|
108
134
|
return $codec.nativeType;
|
|
109
135
|
}
|
|
@@ -151,12 +177,12 @@ class TypesGen {
|
|
|
151
177
|
return 'null';
|
|
152
178
|
}
|
|
153
179
|
else if (members.every((x) => x.fields.length === 0)) {
|
|
154
|
-
return members.map(({ name, docs }) => `${(0,
|
|
180
|
+
return members.map(({ name, docs }) => `${(0, utils_js_1.commentBlock)(docs)}'${(0, utils_1.stringPascalCase)(name)}'`).join(' | ');
|
|
155
181
|
}
|
|
156
182
|
else {
|
|
157
183
|
const membersType = [];
|
|
158
184
|
for (const { fields, name, docs } of members) {
|
|
159
|
-
const keyName = (0,
|
|
185
|
+
const keyName = (0, utils_1.stringPascalCase)(name);
|
|
160
186
|
if (fields.length === 0) {
|
|
161
187
|
membersType.push([keyName, null, docs]);
|
|
162
188
|
}
|
|
@@ -164,7 +190,7 @@ class TypesGen {
|
|
|
164
190
|
const valueType = fields.length === 1
|
|
165
191
|
? this.generateType(fields[0].typeId, nestedLevel + 1, typeOut)
|
|
166
192
|
: `[${fields
|
|
167
|
-
.map(({ typeId, docs }) => `${(0,
|
|
193
|
+
.map(({ typeId, docs }) => `${(0, utils_js_1.commentBlock)(docs)}${this.generateType(typeId, nestedLevel + 1, typeOut)}`)
|
|
168
194
|
.join(', ')}]`;
|
|
169
195
|
membersType.push([keyName, valueType, docs]);
|
|
170
196
|
}
|
|
@@ -172,14 +198,14 @@ class TypesGen {
|
|
|
172
198
|
membersType.push([keyName, this.generateObjectType(fields, nestedLevel + 1, typeOut), docs]);
|
|
173
199
|
}
|
|
174
200
|
}
|
|
175
|
-
const { tagKey, valueKey } = this.
|
|
201
|
+
const { tagKey, valueKey } = this.getEnumOptions(typeId);
|
|
176
202
|
return membersType
|
|
177
203
|
.map(([keyName, valueType, docs]) => ({
|
|
178
|
-
|
|
204
|
+
type: `${tagKey}: '${keyName}'`,
|
|
179
205
|
value: valueType ? `, ${valueKey}${this.#isOptionalType(valueType) ? '?' : ''}: ${valueType} ` : '',
|
|
180
206
|
docs,
|
|
181
207
|
}))
|
|
182
|
-
.map(({
|
|
208
|
+
.map(({ type, value, docs }) => `${(0, utils_js_1.commentBlock)(docs)}{ ${type}${value} }`)
|
|
183
209
|
.join(' | ');
|
|
184
210
|
}
|
|
185
211
|
}
|
|
@@ -201,9 +227,9 @@ class TypesGen {
|
|
|
201
227
|
return this.generateType(value.typeParam, nestedLevel + 1, typeOut);
|
|
202
228
|
case 'Sequence':
|
|
203
229
|
case 'SizedVec': {
|
|
204
|
-
const fixedSize =
|
|
205
|
-
const $innerType = this.
|
|
206
|
-
if ($innerType.
|
|
230
|
+
const fixedSize = type === 'SizedVec' ? `${value.len}` : null;
|
|
231
|
+
const $innerType = this.types[value.typeParam].typeDef;
|
|
232
|
+
if ($innerType.type === 'Primitive' && $innerType.value.kind === 'u8') {
|
|
207
233
|
return fixedSize ? `FixedBytes<${fixedSize}>` : typeOut ? 'Bytes' : 'BytesLike';
|
|
208
234
|
}
|
|
209
235
|
else {
|
|
@@ -212,7 +238,7 @@ class TypesGen {
|
|
|
212
238
|
}
|
|
213
239
|
}
|
|
214
240
|
default:
|
|
215
|
-
throw new Error(`Invalid type! ${
|
|
241
|
+
throw new Error(`Invalid type! ${type}`);
|
|
216
242
|
}
|
|
217
243
|
}
|
|
218
244
|
generateObjectType(fields, nestedLevel = 0, typeOut = false) {
|
|
@@ -226,104 +252,26 @@ class TypesGen {
|
|
|
226
252
|
};
|
|
227
253
|
});
|
|
228
254
|
return `{${props
|
|
229
|
-
.map(({ name, type, optional, docs }) => `${(0,
|
|
255
|
+
.map(({ name, type, optional, docs }) => `${(0, utils_js_1.commentBlock)(docs)}${name}${optional ? '?' : ''}: ${type}`)
|
|
230
256
|
.join(',\n')}}`;
|
|
231
257
|
}
|
|
232
258
|
#isOptionalType(type) {
|
|
233
259
|
return type.endsWith('| undefined');
|
|
234
260
|
}
|
|
235
|
-
#includedTypes() {
|
|
236
|
-
const { types } = this.metadata;
|
|
237
|
-
const pathsCount = new Map();
|
|
238
|
-
const typesWithPath = types.filter((one) => one.path.length > 0);
|
|
239
|
-
const skipIds = [];
|
|
240
|
-
const typeSuffixes = new Map();
|
|
241
|
-
typesWithPath.forEach(({ path, id }) => {
|
|
242
|
-
const joinedPath = path.join('::');
|
|
243
|
-
if (pathsCount.has(joinedPath)) {
|
|
244
|
-
// We compare 2 types with the same path here,
|
|
245
|
-
// if they are the same type -> skip the current one, keep the first occurrence
|
|
246
|
-
// if they are not the same type but has the same path -> we'll try to calculate & add a suffix for the current type name
|
|
247
|
-
const firstOccurrenceTypeId = pathsCount.get(joinedPath)[0];
|
|
248
|
-
const sameType = this.typeEql(firstOccurrenceTypeId, id);
|
|
249
|
-
if (sameType) {
|
|
250
|
-
skipIds.push(id);
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
pathsCount.get(joinedPath).push(id);
|
|
254
|
-
typeSuffixes.set(id, this.#extractDupTypeSuffix(id, firstOccurrenceTypeId, pathsCount.get(joinedPath).length));
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
else {
|
|
258
|
-
pathsCount.set(joinedPath, [id]);
|
|
259
|
-
}
|
|
260
|
-
});
|
|
261
|
-
return typesWithPath.reduce((o, type) => {
|
|
262
|
-
const { path, id } = type;
|
|
263
|
-
const joinedPath = path.join('::');
|
|
264
|
-
if (SKIP_TYPES.includes(joinedPath) || SKIP_TYPES.includes(path.at(-1))) {
|
|
265
|
-
return o;
|
|
266
|
-
}
|
|
267
|
-
const suffix = typeSuffixes.get(id) || '';
|
|
268
|
-
let knownType = false;
|
|
269
|
-
let name, nameOut;
|
|
270
|
-
if ((0, known_codecs_1.isKnownCodecType)(joinedPath)) {
|
|
271
|
-
const codecType = (0, known_codecs_1.findKnownCodecType)(path.at(-1));
|
|
272
|
-
name = codecType.typeIn;
|
|
273
|
-
nameOut = codecType.typeOut;
|
|
274
|
-
knownType = true;
|
|
275
|
-
}
|
|
276
|
-
else if (PATH_RM_INDEX_1.includes(path[1])) {
|
|
277
|
-
const newPath = path.slice();
|
|
278
|
-
newPath.splice(1, 1);
|
|
279
|
-
name = this.#cleanPath(newPath);
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
name = this.#cleanPath(path);
|
|
283
|
-
}
|
|
284
|
-
if (this.#shouldGenerateTypeIn(id)) {
|
|
285
|
-
nameOut = name;
|
|
286
|
-
name = name.endsWith('Like') ? name : `${name}Like`;
|
|
287
|
-
}
|
|
288
|
-
o[id] = {
|
|
289
|
-
name: `${name}${suffix}`,
|
|
290
|
-
nameOut: nameOut ? `${nameOut}${suffix}` : `${name}${suffix}`,
|
|
291
|
-
knownType,
|
|
292
|
-
skip: skipIds.includes(id),
|
|
293
|
-
...type,
|
|
294
|
-
};
|
|
295
|
-
return o;
|
|
296
|
-
}, {});
|
|
297
|
-
}
|
|
298
261
|
#removeGenericPart(typeName) {
|
|
299
|
-
if (typeName.match(WRAPPER_TYPE_REGEX)) {
|
|
300
|
-
return typeName.replace(WRAPPER_TYPE_REGEX, (_, $1) => $1);
|
|
262
|
+
if (typeName.match(utils_js_1.WRAPPER_TYPE_REGEX)) {
|
|
263
|
+
return typeName.replace(utils_js_1.WRAPPER_TYPE_REGEX, (_, $1) => $1);
|
|
301
264
|
}
|
|
302
265
|
else {
|
|
303
266
|
return typeName;
|
|
304
267
|
}
|
|
305
268
|
}
|
|
306
|
-
|
|
307
|
-
* @description Remove duplicated part of the path
|
|
308
|
-
*
|
|
309
|
-
* Example:
|
|
310
|
-
* ["pallet_staking", "pallet", "pallet", "Event"]
|
|
311
|
-
* => ["pallet_staking", "pallet", "Event"]
|
|
312
|
-
*
|
|
313
|
-
* @param path
|
|
314
|
-
* @private
|
|
315
|
-
*/
|
|
316
|
-
#cleanPath(path) {
|
|
269
|
+
cleanPath(path) {
|
|
317
270
|
return path
|
|
318
|
-
.map((one) => (0,
|
|
271
|
+
.map((one) => (0, utils_1.stringPascalCase)(one))
|
|
319
272
|
.filter((one, idx, currentPath) => idx === 0 || one !== currentPath[idx - 1])
|
|
320
273
|
.join('');
|
|
321
274
|
}
|
|
322
|
-
#shouldGenerateTypeIn(id) {
|
|
323
|
-
const { callTypeId } = this.metadata.extrinsic;
|
|
324
|
-
const palletCallTypeIds = this.registry.getPalletCallTypeIds();
|
|
325
|
-
return callTypeId === id || palletCallTypeIds.includes(id);
|
|
326
|
-
}
|
|
327
275
|
eqlCache = new Map();
|
|
328
276
|
typeEql(idA, idB, level = 0) {
|
|
329
277
|
const cacheKey = `${idA}==${idB}`;
|
|
@@ -336,36 +284,36 @@ class TypesGen {
|
|
|
336
284
|
#typeEql(idA, idB, lvl = 0) {
|
|
337
285
|
if (idA === idB)
|
|
338
286
|
return true;
|
|
339
|
-
const
|
|
340
|
-
const
|
|
341
|
-
const typeB = types[idB];
|
|
287
|
+
const typeA = this.types[idA];
|
|
288
|
+
const typeB = this.types[idB];
|
|
342
289
|
if (typeA.path.join('::') !== typeB.path.join('::'))
|
|
343
290
|
return false;
|
|
344
|
-
const {
|
|
345
|
-
const {
|
|
291
|
+
const { typeDef: defA, params: paramsA } = typeA;
|
|
292
|
+
const { typeDef: defB, params: paramsB } = typeB;
|
|
346
293
|
if (!this.#eqlArray(paramsA, paramsB, (valA, valB) => this.#eqlTypeParam(valA, valB))) {
|
|
347
294
|
return false;
|
|
348
295
|
}
|
|
349
|
-
if (defA.
|
|
296
|
+
if (defA.type !== defB.type)
|
|
350
297
|
return false;
|
|
351
|
-
if (defA.
|
|
298
|
+
if (defA.type === 'BitSequence')
|
|
352
299
|
return true;
|
|
353
|
-
if (defA.
|
|
300
|
+
if (defA.type === 'Primitive' && defB.type === 'Primitive') {
|
|
354
301
|
return defA.value.kind === defB.value.kind;
|
|
355
302
|
}
|
|
356
|
-
if ((defA.
|
|
303
|
+
if ((defA.type === 'Compact' && defB.type === 'Compact') ||
|
|
304
|
+
(defA.type === 'Sequence' && defB.type === 'Sequence')) {
|
|
357
305
|
return this.typeEql(defA.value.typeParam, defB.value.typeParam, lvl + 1);
|
|
358
306
|
}
|
|
359
|
-
if (defA.
|
|
307
|
+
if (defA.type === 'SizedVec' && defB.type === 'SizedVec') {
|
|
360
308
|
return defA.value.len === defB.value.len && this.typeEql(defA.value.typeParam, defB.value.typeParam, lvl + 1);
|
|
361
309
|
}
|
|
362
|
-
if (defA.
|
|
310
|
+
if (defA.type === 'Tuple' && defB.type === 'Tuple') {
|
|
363
311
|
return this.#eqlArray(defA.value.fields, defB.value.fields, (val1, val2) => this.typeEql(val1, val2, lvl + 1));
|
|
364
312
|
}
|
|
365
|
-
if (defA.
|
|
313
|
+
if (defA.type === 'Struct' && defB.type === 'Struct') {
|
|
366
314
|
return this.#eqlFields(defA.value.fields, defB.value.fields, lvl);
|
|
367
315
|
}
|
|
368
|
-
if (defA.
|
|
316
|
+
if (defA.type === 'Enum' && defB.type === 'Enum') {
|
|
369
317
|
return this.#eqlArray(defA.value.members, defB.value.members, (val1, val2) => val1.name === val2.name && val1.index === val2.index && this.#eqlFields(val1.fields, val2.fields, lvl));
|
|
370
318
|
}
|
|
371
319
|
return false;
|
|
@@ -381,19 +329,18 @@ class TypesGen {
|
|
|
381
329
|
(param1.typeId === undefined) === (param2.typeId === undefined) &&
|
|
382
330
|
(param1.typeId === undefined || this.#typeEql(param1.typeId, param2.typeId)));
|
|
383
331
|
}
|
|
384
|
-
|
|
385
|
-
const
|
|
386
|
-
const
|
|
387
|
-
const dupTypeParams = types[dupTypeId].params;
|
|
332
|
+
extractDupTypeSuffix(dupTypeId, originalTypeId, dupCount) {
|
|
333
|
+
const originalTypeParams = this.types[originalTypeId].params;
|
|
334
|
+
const dupTypeParams = this.types[dupTypeId].params;
|
|
388
335
|
const diffParam = dupTypeParams.find((one, idx) => !this.#eqlTypeParam(one, originalTypeParams[idx]));
|
|
389
336
|
// TODO make sure these suffix is unique if a type is duplicated more than 2 times
|
|
390
337
|
if (diffParam?.typeId) {
|
|
391
|
-
const diffType = types[diffParam.typeId];
|
|
338
|
+
const diffType = this.types[diffParam.typeId];
|
|
392
339
|
if (diffType.path.length > 0) {
|
|
393
|
-
return (0,
|
|
340
|
+
return (0, utils_1.stringPascalCase)(diffType.path.at(-1));
|
|
394
341
|
}
|
|
395
|
-
else if (diffType.type
|
|
396
|
-
return (0,
|
|
342
|
+
else if (diffType.typeDef.type === 'Primitive') {
|
|
343
|
+
return (0, utils_1.stringPascalCase)(diffType.typeDef.value.kind);
|
|
397
344
|
}
|
|
398
345
|
}
|
|
399
346
|
// Last resort!
|
|
@@ -404,7 +351,7 @@ class TypesGen {
|
|
|
404
351
|
typeName.forEach((one) => this.addTypeImport(one));
|
|
405
352
|
return;
|
|
406
353
|
}
|
|
407
|
-
if ((0,
|
|
354
|
+
if ((0, utils_js_1.isNativeType)(typeName)) {
|
|
408
355
|
return;
|
|
409
356
|
}
|
|
410
357
|
for (let type of Object.values(this.includedTypes)) {
|
|
@@ -426,12 +373,10 @@ class TypesGen {
|
|
|
426
373
|
this.typeImports.addCodecType(typeName);
|
|
427
374
|
return;
|
|
428
375
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
this.typeImports.addOutType(typeName);
|
|
434
|
-
}
|
|
376
|
+
this.typeImports.addOutType(typeName);
|
|
377
|
+
}
|
|
378
|
+
getEnumOptions(_typeId) {
|
|
379
|
+
return { tagKey: 'type', valueKey: 'value' };
|
|
435
380
|
}
|
|
436
381
|
}
|
|
437
|
-
exports.
|
|
382
|
+
exports.BaseTypesGen = BaseTypesGen;
|
|
@@ -8,30 +8,47 @@ class TypeImports {
|
|
|
8
8
|
codecTypes;
|
|
9
9
|
// Known types that're not codecs or chain/portable types defined in @dedot/types
|
|
10
10
|
knownTypes;
|
|
11
|
+
knownJsonRpcTypes;
|
|
11
12
|
// External types to define explicitly
|
|
12
13
|
outTypes;
|
|
14
|
+
// Know types defined in @dedot/contracts
|
|
15
|
+
contractTypes;
|
|
16
|
+
// Know types defined in @dedot/api/chaintypes or dedot/chaintypes
|
|
17
|
+
chainTypes;
|
|
13
18
|
constructor() {
|
|
14
19
|
this.portableTypes = new Set();
|
|
15
20
|
this.codecTypes = new Set();
|
|
16
21
|
this.knownTypes = new Set();
|
|
22
|
+
this.knownJsonRpcTypes = new Set();
|
|
17
23
|
this.outTypes = new Set();
|
|
24
|
+
this.contractTypes = new Set();
|
|
25
|
+
this.chainTypes = new Set();
|
|
18
26
|
}
|
|
19
27
|
clear() {
|
|
20
28
|
this.portableTypes.clear();
|
|
21
29
|
this.codecTypes.clear();
|
|
22
30
|
this.knownTypes.clear();
|
|
31
|
+
this.knownJsonRpcTypes.clear();
|
|
23
32
|
this.outTypes.clear();
|
|
33
|
+
this.contractTypes.clear();
|
|
34
|
+
this.chainTypes.clear();
|
|
24
35
|
}
|
|
25
|
-
toImports(
|
|
36
|
+
toImports(config) {
|
|
37
|
+
const { excludeModules = [], useSubPaths = false } = config || {};
|
|
26
38
|
// TODO generate outTypes!
|
|
39
|
+
const prefix = useSubPaths ? '' : '@';
|
|
27
40
|
const toImports = [
|
|
28
|
-
[this.knownTypes,
|
|
29
|
-
[this.
|
|
41
|
+
[this.knownTypes, `${prefix}dedot/types`],
|
|
42
|
+
[this.knownJsonRpcTypes, `${prefix}dedot/types/json-rpc`],
|
|
43
|
+
[this.codecTypes, `${prefix}dedot/codecs`],
|
|
44
|
+
[this.contractTypes, `${prefix}dedot/contracts`],
|
|
45
|
+
[this.chainTypes, prefix ? '@dedot/api/chaintypes' : 'dedot/chaintypes'],
|
|
30
46
|
[this.portableTypes, './types'],
|
|
31
47
|
];
|
|
32
48
|
return toImports
|
|
33
49
|
.filter(([_, module]) => !excludeModules.includes(module))
|
|
34
50
|
.map(([types, module]) => this.#toImportLine(types, module))
|
|
51
|
+
.filter((line) => line.length > 0)
|
|
35
52
|
.join('\n');
|
|
36
53
|
}
|
|
37
54
|
#toImportLine(types, module) {
|
|
@@ -49,8 +66,17 @@ class TypeImports {
|
|
|
49
66
|
addKnownType(...types) {
|
|
50
67
|
types.forEach((one) => this.knownTypes.add(one));
|
|
51
68
|
}
|
|
69
|
+
addKnownJsonRpcType(...types) {
|
|
70
|
+
types.forEach((one) => this.knownJsonRpcTypes.add(one));
|
|
71
|
+
}
|
|
52
72
|
addOutType(...types) {
|
|
53
73
|
types.forEach((one) => this.outTypes.add(one));
|
|
54
74
|
}
|
|
75
|
+
addContractType(...types) {
|
|
76
|
+
types.forEach((one) => this.contractTypes.add(one));
|
|
77
|
+
}
|
|
78
|
+
addChainType(...types) {
|
|
79
|
+
types.forEach((one) => this.chainTypes.add(one));
|
|
80
|
+
}
|
|
55
81
|
}
|
|
56
82
|
exports.TypeImports = TypeImports;
|
|
@@ -14,13 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./
|
|
20
|
-
__exportStar(require("./QueryGen"), exports);
|
|
21
|
-
__exportStar(require("./RpcGen"), exports);
|
|
22
|
-
__exportStar(require("./IndexGen"), exports);
|
|
23
|
-
__exportStar(require("./ErrorsGen"), exports);
|
|
24
|
-
__exportStar(require("./EventsGen"), exports);
|
|
25
|
-
__exportStar(require("./TxGen"), exports);
|
|
26
|
-
__exportStar(require("./RuntimeApisGen"), exports);
|
|
17
|
+
__exportStar(require("./BaseTypesGen.js"), exports);
|
|
18
|
+
__exportStar(require("./known-codecs.js"), exports);
|
|
19
|
+
__exportStar(require("./TypeImports.js"), exports);
|
|
@@ -23,10 +23,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
27
|
-
const $ = __importStar(require("@dedot/shape"));
|
|
26
|
+
exports.checkKnownCodecType = exports.findKnownWrapperCodec = exports.findKnownCodec = exports.findKnownCodecType = exports.looseTypeCodecs = exports.normalizeCodecName = void 0;
|
|
28
27
|
const Codecs = __importStar(require("@dedot/codecs"));
|
|
29
28
|
const codecs_1 = require("@dedot/codecs");
|
|
29
|
+
const $ = __importStar(require("@dedot/shape"));
|
|
30
30
|
const utils_1 = require("@dedot/utils");
|
|
31
31
|
const normalizeCodecName = (name) => {
|
|
32
32
|
return name.startsWith('$') ? name : `$${name}`;
|
|
@@ -57,6 +57,8 @@ const KNOWN_PATHS = [
|
|
|
57
57
|
/^primitive_types::\w+$/,
|
|
58
58
|
/^sp_arithmetic::per_things::\w+$/,
|
|
59
59
|
/^sp_arithmetic::fixed_point::\w+$/,
|
|
60
|
+
'ink_primitives::types::Hash',
|
|
61
|
+
{ path: 'ink_primitives::types::AccountId', codec: 'AccountId32' },
|
|
60
62
|
];
|
|
61
63
|
const WRAPPER_TYPE_REGEX = /^(\w+)<(.*)>$/;
|
|
62
64
|
const TUPLE_TYPE_REGEX = /^\[(.*)]$/;
|
|
@@ -144,8 +146,25 @@ function findKnownWrapperCodec(typeName) {
|
|
|
144
146
|
}
|
|
145
147
|
}
|
|
146
148
|
exports.findKnownWrapperCodec = findKnownWrapperCodec;
|
|
147
|
-
function
|
|
149
|
+
function checkKnownCodecType(path) {
|
|
148
150
|
const joinedPath = Array.isArray(path) ? path.join('::') : path;
|
|
149
|
-
|
|
151
|
+
const knownPath = KNOWN_PATHS.find((one) => {
|
|
152
|
+
if (typeof one === 'string') {
|
|
153
|
+
return one === joinedPath;
|
|
154
|
+
}
|
|
155
|
+
else if (one instanceof RegExp) {
|
|
156
|
+
return one.test(joinedPath);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
return one.path === joinedPath;
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
if (!knownPath) {
|
|
163
|
+
return [false, ''];
|
|
164
|
+
}
|
|
165
|
+
if (typeof knownPath === 'string' || knownPath instanceof RegExp) {
|
|
166
|
+
return [true, joinedPath.split('::').at(-1)];
|
|
167
|
+
}
|
|
168
|
+
return [true, knownPath.codec];
|
|
150
169
|
}
|
|
151
|
-
exports.
|
|
170
|
+
exports.checkKnownCodecType = checkKnownCodecType;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConstructorQueryGen = void 0;
|
|
4
|
+
const utils_js_1 = require("../../utils.js");
|
|
5
|
+
const QueryGen_js_1 = require("./QueryGen.js");
|
|
6
|
+
class ConstructorQueryGen extends QueryGen_js_1.QueryGen {
|
|
7
|
+
generate(useSubPaths = false) {
|
|
8
|
+
this.typesGen.clearCache();
|
|
9
|
+
this.typesGen.typeImports.addKnownType('GenericSubstrateApi');
|
|
10
|
+
this.typesGen.typeImports.addContractType('GenericConstructorQuery', 'GenericConstructorQueryCall', 'ConstructorCallOptions', 'ContractInstantiateResult');
|
|
11
|
+
const { constructors } = this.contractMetadata.spec;
|
|
12
|
+
const constructorsOut = this.doGenerate(constructors, 'ConstructorCallOptions');
|
|
13
|
+
const importTypes = this.typesGen.typeImports.toImports({ useSubPaths });
|
|
14
|
+
const template = (0, utils_js_1.compileTemplate)('typink/templates/constructor-query.hbs');
|
|
15
|
+
return (0, utils_js_1.beautifySourceCode)(template({ importTypes, constructorsOut }));
|
|
16
|
+
}
|
|
17
|
+
generateMethodDef(def) {
|
|
18
|
+
const { args } = def;
|
|
19
|
+
args.forEach(({ type: { type } }) => this.importType(type));
|
|
20
|
+
const paramsOut = this.generateParamsOut(args);
|
|
21
|
+
return `GenericConstructorQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} options: ConstructorCallOptions) => Promise<ContractInstantiateResult<ChainApi>>>`;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.ConstructorQueryGen = ConstructorQueryGen;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConstructorTxGen = void 0;
|
|
4
|
+
const utils_js_1 = require("../../utils.js");
|
|
5
|
+
const QueryGen_js_1 = require("./QueryGen.js");
|
|
6
|
+
class ConstructorTxGen extends QueryGen_js_1.QueryGen {
|
|
7
|
+
generate(useSubPaths = false) {
|
|
8
|
+
this.typesGen.clearCache();
|
|
9
|
+
this.typesGen.typeImports.addKnownType('GenericSubstrateApi');
|
|
10
|
+
this.typesGen.typeImports.addContractType('GenericConstructorTx', 'GenericConstructorTxCall', 'ConstructorTxOptions', 'GenericInstantiateSubmittableExtrinsic');
|
|
11
|
+
const { constructors } = this.contractMetadata.spec;
|
|
12
|
+
const constructorsOut = this.doGenerate(constructors, 'ConstructorTxOptions');
|
|
13
|
+
const importTypes = this.typesGen.typeImports.toImports({ useSubPaths });
|
|
14
|
+
const template = (0, utils_js_1.compileTemplate)('typink/templates/constructor-tx.hbs');
|
|
15
|
+
return (0, utils_js_1.beautifySourceCode)(template({ importTypes, constructorsOut }));
|
|
16
|
+
}
|
|
17
|
+
generateMethodDef(def) {
|
|
18
|
+
const { args } = def;
|
|
19
|
+
args.forEach(({ type: { type } }) => this.importType(type));
|
|
20
|
+
const paramsOut = this.generateParamsOut(args);
|
|
21
|
+
return `GenericConstructorTxCall<ChainApi, (${paramsOut && `${paramsOut},`} options: ConstructorTxOptions) => GenericInstantiateSubmittableExtrinsic<ChainApi>>`;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.ConstructorTxGen = ConstructorTxGen;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventsGen = void 0;
|
|
4
|
+
const utils_1 = require("@dedot/utils");
|
|
5
|
+
const utils_js_1 = require("../../utils.js");
|
|
6
|
+
const QueryGen_js_1 = require("./QueryGen.js");
|
|
7
|
+
class EventsGen extends QueryGen_js_1.QueryGen {
|
|
8
|
+
generate(useSubPaths = false) {
|
|
9
|
+
this.typesGen.clearCache();
|
|
10
|
+
this.typesGen.typeImports.addContractType('GenericContractEvents', 'GenericContractEvent');
|
|
11
|
+
const { events } = this.contractMetadata.spec;
|
|
12
|
+
let eventsOut = '';
|
|
13
|
+
events.forEach((event) => {
|
|
14
|
+
const { docs, label } = event;
|
|
15
|
+
const isV5 = 'signature_topic' in event;
|
|
16
|
+
eventsOut += `${(0, utils_js_1.commentBlock)(docs, '\n', isV5 ? event.signature_topic ? `@signature_topic: ${event.signature_topic}` : '- Anonymous event' : '')}`;
|
|
17
|
+
eventsOut += `${(0, utils_1.stringPascalCase)(label)}: ${this.#generateEventDef(event)};\n\n`;
|
|
18
|
+
});
|
|
19
|
+
const importTypes = this.typesGen.typeImports.toImports({ useSubPaths });
|
|
20
|
+
const template = (0, utils_js_1.compileTemplate)('typink/templates/events.hbs');
|
|
21
|
+
return (0, utils_js_1.beautifySourceCode)(template({ importTypes, eventsOut }));
|
|
22
|
+
}
|
|
23
|
+
#generateEventDef(event) {
|
|
24
|
+
const { args, label } = event;
|
|
25
|
+
args.forEach(({ type: { type } }) => this.importType(type));
|
|
26
|
+
const paramsOut = this.generateParamsOut(args);
|
|
27
|
+
return `GenericContractEvent<'${(0, utils_1.stringPascalCase)(label)}', {${paramsOut}}>`;
|
|
28
|
+
}
|
|
29
|
+
generateParamsOut(args) {
|
|
30
|
+
return args
|
|
31
|
+
.map(({ type: { type }, label, docs, indexed }) => `${(0, utils_js_1.commentBlock)(docs, '\n', `@indexed: ${indexed}`)}${(0, utils_1.stringCamelCase)(label)}: ${this.typesGen.generateType(type, 1)}`)
|
|
32
|
+
.join(', ');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.EventsGen = EventsGen;
|