@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
package/cjs/generator/RpcGen.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RpcGen = void 0;
|
|
4
|
-
const specs_1 = require("@dedot/specs");
|
|
5
|
-
const utils_1 = require("@dedot/utils");
|
|
6
|
-
const generator_1 = require("../generator");
|
|
7
|
-
const utils_2 = require("./utils");
|
|
8
|
-
const known_codecs_1 = require("./known-codecs");
|
|
9
|
-
const HIDDEN_RPCS = [
|
|
10
|
-
// Ref: https://github.com/paritytech/polkadot-sdk/blob/43415ef58c143b985e09015cd000dbd65f6d3997/substrate/client/rpc-servers/src/lib.rs#L152C9-L158
|
|
11
|
-
'rpc_methods',
|
|
12
|
-
];
|
|
13
|
-
class RpcGen extends generator_1.ApiGen {
|
|
14
|
-
typesGen;
|
|
15
|
-
rpcMethods;
|
|
16
|
-
constructor(typesGen, rpcMethods) {
|
|
17
|
-
super(typesGen);
|
|
18
|
-
this.typesGen = typesGen;
|
|
19
|
-
this.rpcMethods = rpcMethods;
|
|
20
|
-
HIDDEN_RPCS.filter((one) => !rpcMethods.includes(one)).forEach((one) => rpcMethods.push(one));
|
|
21
|
-
rpcMethods.sort();
|
|
22
|
-
}
|
|
23
|
-
generate() {
|
|
24
|
-
this.typesGen.clearCache();
|
|
25
|
-
this.typesGen.typeImports.addKnownType('GenericRpcCalls', 'Unsub', 'Callback', 'GenericRpcCall');
|
|
26
|
-
const specsByModule = this.rpcMethods
|
|
27
|
-
.filter((one) => !(0, specs_1.findAliasRpcSpec)(one)) // we'll ignore alias rpc for now if defined in the specs! TODO should we generate alias rpc as well?
|
|
28
|
-
.filter((one) => !(0, specs_1.isUnsubscribeMethod)(one)) // we'll ignore unsubscribe method as well
|
|
29
|
-
.map((one) => {
|
|
30
|
-
const spec = (0, specs_1.findRpcSpec)(one);
|
|
31
|
-
if (spec) {
|
|
32
|
-
return spec;
|
|
33
|
-
}
|
|
34
|
-
const [module, ...methodParts] = one.split('_');
|
|
35
|
-
const method = methodParts.join('_');
|
|
36
|
-
return {
|
|
37
|
-
params: [],
|
|
38
|
-
type: 'GenericRpcCall',
|
|
39
|
-
module,
|
|
40
|
-
method,
|
|
41
|
-
};
|
|
42
|
-
})
|
|
43
|
-
.reduce((o, spec) => {
|
|
44
|
-
const { module, method } = spec;
|
|
45
|
-
// ignore if rpc name does not confront with the general convention
|
|
46
|
-
if (!module || !method) {
|
|
47
|
-
return o;
|
|
48
|
-
}
|
|
49
|
-
return {
|
|
50
|
-
...o,
|
|
51
|
-
[module]: o[module] ? [...o[module], spec] : [spec],
|
|
52
|
-
};
|
|
53
|
-
}, {});
|
|
54
|
-
let rpcCallsOut = '';
|
|
55
|
-
Object.keys(specsByModule).forEach((module) => {
|
|
56
|
-
const specs = specsByModule[module];
|
|
57
|
-
// TODO add alias info to docs block!
|
|
58
|
-
rpcCallsOut += `${module}: {
|
|
59
|
-
${specs.map((spec) => this.#generateMethodDef(spec)).join(',\n')},
|
|
60
|
-
|
|
61
|
-
[method: string]: GenericRpcCall,
|
|
62
|
-
},`;
|
|
63
|
-
});
|
|
64
|
-
// TODO include & define external types
|
|
65
|
-
const importTypes = this.typesGen.typeImports.toImports();
|
|
66
|
-
const template = (0, utils_2.compileTemplate)('rpc.hbs');
|
|
67
|
-
return (0, utils_2.beautifySourceCode)(template({ importTypes, rpcCallsOut }));
|
|
68
|
-
}
|
|
69
|
-
#generateMethodDef(spec) {
|
|
70
|
-
const { name, type, module, method, docs = [], params, pubsub, deprecated } = spec;
|
|
71
|
-
const rpcName = name || `${module}_${method}`;
|
|
72
|
-
let defaultDocs = [`@rpcname: ${rpcName}`];
|
|
73
|
-
if (deprecated) {
|
|
74
|
-
defaultDocs.push(`@deprecated: ${deprecated}`);
|
|
75
|
-
}
|
|
76
|
-
if (type === 'GenericRpcCall' && params.length === 0) {
|
|
77
|
-
return `${(0, utils_2.commentBlock)(defaultDocs)}${method}: GenericRpcCall`;
|
|
78
|
-
}
|
|
79
|
-
this.addTypeImport(type, false);
|
|
80
|
-
params.forEach(({ type, isScale }) => {
|
|
81
|
-
this.addTypeImport(type, !!isScale);
|
|
82
|
-
});
|
|
83
|
-
const typedParams = params.map((param) => ({
|
|
84
|
-
...param,
|
|
85
|
-
plainType: this.getGeneratedTypeName(param.type, !!param.isScale),
|
|
86
|
-
}));
|
|
87
|
-
const isSubscription = !!pubsub;
|
|
88
|
-
const paramsOut = typedParams.map(({ name, type, isOptional, isScale, plainType }) => `${name}${isOptional ? '?' : ''}: ${plainType}`);
|
|
89
|
-
const paramsDoc = typedParams.map(({ name, plainType }) => `@param {${plainType}} ${name}`);
|
|
90
|
-
const typeOut = this.getGeneratedTypeName(type, false);
|
|
91
|
-
if (isSubscription) {
|
|
92
|
-
defaultDocs.shift();
|
|
93
|
-
defaultDocs.unshift(`@pubsub: ${pubsub?.join(', ')}`);
|
|
94
|
-
paramsOut.push(`callback: Callback<${typeOut}>`);
|
|
95
|
-
return `${(0, utils_2.commentBlock)(docs, '\n', defaultDocs, paramsDoc)}${method}: GenericRpcCall<(${paramsOut.join(', ')}) => Promise<Unsub>>`;
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
return `${(0, utils_2.commentBlock)(docs, '\n', defaultDocs, paramsDoc)}${method}: GenericRpcCall<(${paramsOut.join(', ')}) => Promise<${typeOut}>>`;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// TODO check typeIn, typeOut if param type, or rpc type isScale
|
|
102
|
-
addTypeImport(type, toTypeIn = true) {
|
|
103
|
-
if (Array.isArray(type)) {
|
|
104
|
-
type.forEach((one) => this.addTypeImport(one, toTypeIn));
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
type = type.trim();
|
|
108
|
-
if ((0, utils_1.isNativeType)(type)) {
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
// Handle generic wrapper types
|
|
112
|
-
const matchArray = type.match(utils_2.WRAPPER_TYPE_REGEX);
|
|
113
|
-
if (matchArray) {
|
|
114
|
-
const [_, $1, $2] = matchArray;
|
|
115
|
-
this.addTypeImport($1, toTypeIn);
|
|
116
|
-
if ($2.match(utils_2.WRAPPER_TYPE_REGEX) || $2.match(utils_2.TUPLE_TYPE_REGEX)) {
|
|
117
|
-
this.addTypeImport($2, toTypeIn);
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
this.addTypeImport($2.split(','), toTypeIn);
|
|
121
|
-
}
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
// Check tuple type
|
|
125
|
-
if (type.match(utils_2.TUPLE_TYPE_REGEX)) {
|
|
126
|
-
this.addTypeImport(type.slice(1, -1).split(','), toTypeIn);
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
if (type.includes(' | ')) {
|
|
130
|
-
this.addTypeImport(type.split(' | ').map((one) => one.trim()), toTypeIn);
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
try {
|
|
134
|
-
const codecType = this.#getCodecType(type, toTypeIn);
|
|
135
|
-
if ((0, utils_1.isNativeType)(codecType))
|
|
136
|
-
return;
|
|
137
|
-
this.typesGen.typeImports.addCodecType(codecType);
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
catch (e) { }
|
|
141
|
-
this.typesGen.addTypeImport(type);
|
|
142
|
-
}
|
|
143
|
-
getGeneratedTypeName(type, toTypeIn = true) {
|
|
144
|
-
try {
|
|
145
|
-
const matchArray = type.match(utils_2.WRAPPER_TYPE_REGEX);
|
|
146
|
-
if (matchArray) {
|
|
147
|
-
const [_, $1, $2] = matchArray;
|
|
148
|
-
const wrapperTypeName = this.#getCodecType($1, toTypeIn);
|
|
149
|
-
if ($2.match(utils_2.WRAPPER_TYPE_REGEX) || $2.match(utils_2.TUPLE_TYPE_REGEX)) {
|
|
150
|
-
return `${wrapperTypeName}<${this.getGeneratedTypeName($2, toTypeIn)}>`;
|
|
151
|
-
}
|
|
152
|
-
const innerTypeNames = $2
|
|
153
|
-
.split(',')
|
|
154
|
-
.map((one) => this.getGeneratedTypeName(one.trim(), toTypeIn))
|
|
155
|
-
.join(', ');
|
|
156
|
-
return `${wrapperTypeName}<${innerTypeNames}>`;
|
|
157
|
-
}
|
|
158
|
-
else if (type.match(utils_2.TUPLE_TYPE_REGEX)) {
|
|
159
|
-
const innerTypeNames = type
|
|
160
|
-
.slice(1, -1)
|
|
161
|
-
.split(',')
|
|
162
|
-
.map((one) => this.getGeneratedTypeName(one.trim(), toTypeIn))
|
|
163
|
-
.join(', ');
|
|
164
|
-
return `[${innerTypeNames}]`;
|
|
165
|
-
}
|
|
166
|
-
return this.#getCodecType(type, toTypeIn);
|
|
167
|
-
}
|
|
168
|
-
catch (e) { }
|
|
169
|
-
return type;
|
|
170
|
-
}
|
|
171
|
-
#getCodecType(type, toTypeIn = true) {
|
|
172
|
-
const { typeIn, typeOut } = (0, known_codecs_1.findKnownCodecType)(type);
|
|
173
|
-
return toTypeIn ? typeIn : typeOut;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
exports.RpcGen = RpcGen;
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RuntimeApisGen = void 0;
|
|
4
|
-
const specs_1 = require("@dedot/specs");
|
|
5
|
-
const utils_1 = require("./utils");
|
|
6
|
-
const utils_2 = require("@dedot/utils");
|
|
7
|
-
const RpcGen_1 = require("./RpcGen");
|
|
8
|
-
const util_1 = require("@polkadot/util");
|
|
9
|
-
class RuntimeApisGen extends RpcGen_1.RpcGen {
|
|
10
|
-
typesGen;
|
|
11
|
-
runtimeApis;
|
|
12
|
-
constructor(typesGen, runtimeApis) {
|
|
13
|
-
super(typesGen, []);
|
|
14
|
-
this.typesGen = typesGen;
|
|
15
|
-
this.runtimeApis = runtimeApis;
|
|
16
|
-
}
|
|
17
|
-
generate() {
|
|
18
|
-
this.typesGen.clearCache();
|
|
19
|
-
this.typesGen.typeImports.addKnownType('GenericRuntimeApis', 'GenericRuntimeApiMethod');
|
|
20
|
-
let runtimeCallsOut = '';
|
|
21
|
-
if (this.metadata.apis.length > 0) {
|
|
22
|
-
this.metadata.apis.forEach((runtimeApi) => {
|
|
23
|
-
const { name: runtimeApiName, methods } = runtimeApi;
|
|
24
|
-
runtimeCallsOut += (0, utils_1.commentBlock)(`@runtimeapi: ${runtimeApiName} - ${(0, utils_2.calculateRuntimeApiHash)(runtimeApiName)}`);
|
|
25
|
-
runtimeCallsOut += `${(0, util_1.stringCamelCase)(runtimeApiName)}: {
|
|
26
|
-
${methods.map((method) => this.#generateMethodDef(runtimeApiName, method)).join('\n')}
|
|
27
|
-
|
|
28
|
-
${(0, utils_1.commentBlock)('Generic runtime api call')}[method: string]: GenericRuntimeApiMethod
|
|
29
|
-
}`;
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
const specs = this.#targetRuntimeApiSpecs();
|
|
34
|
-
specs.forEach(({ methods, runtimeApiName, runtimeApiHash, version }) => {
|
|
35
|
-
runtimeCallsOut += (0, utils_1.commentBlock)(`@runtimeapi: ${runtimeApiName} - ${runtimeApiHash}`, `@version: ${version}`);
|
|
36
|
-
runtimeCallsOut += `${(0, util_1.stringCamelCase)(runtimeApiName)}: {
|
|
37
|
-
${Object.keys(methods)
|
|
38
|
-
.map((methodName) => this.#generateMethodDefFromSpec({
|
|
39
|
-
...methods[methodName],
|
|
40
|
-
runtimeApiName,
|
|
41
|
-
methodName,
|
|
42
|
-
}))
|
|
43
|
-
.join('\n')}
|
|
44
|
-
|
|
45
|
-
${(0, utils_1.commentBlock)('Generic runtime api call')}[method: string]: GenericRuntimeApiMethod
|
|
46
|
-
}`;
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
const importTypes = this.typesGen.typeImports.toImports();
|
|
50
|
-
const template = (0, utils_1.compileTemplate)('runtime.hbs');
|
|
51
|
-
return (0, utils_1.beautifySourceCode)(template({ importTypes, runtimeCallsOut }));
|
|
52
|
-
}
|
|
53
|
-
#isOptionalType(type) {
|
|
54
|
-
return type.startsWith('Option<') || type.endsWith('| undefined');
|
|
55
|
-
}
|
|
56
|
-
#isOptionalParam(params, type, idx) {
|
|
57
|
-
return this.#isOptionalType(type) && params.slice(idx + 1).every(({ type }) => this.#isOptionalType(type));
|
|
58
|
-
}
|
|
59
|
-
#generateMethodDefFromSpec(spec) {
|
|
60
|
-
const { docs = [], params, type, runtimeApiName, methodName } = spec;
|
|
61
|
-
const callName = `${runtimeApiName}_${(0, utils_2.stringSnakeCase)(methodName)}`;
|
|
62
|
-
const defaultDocs = [`@callname: ${callName}`];
|
|
63
|
-
this.addTypeImport(type, false);
|
|
64
|
-
params.forEach(({ type }) => this.addTypeImport(type));
|
|
65
|
-
const typedParams = params.map((param, idx) => ({
|
|
66
|
-
...param,
|
|
67
|
-
isOptional: this.#isOptionalParam(params, param.type, idx),
|
|
68
|
-
plainType: this.getGeneratedTypeName(param.type),
|
|
69
|
-
}));
|
|
70
|
-
const paramsOut = typedParams
|
|
71
|
-
.map(({ name, isOptional, plainType }) => `${(0, util_1.stringCamelCase)(name)}${isOptional ? '?' : ''}: ${plainType}`)
|
|
72
|
-
.join(', ');
|
|
73
|
-
const typeOut = this.getGeneratedTypeName(type, false);
|
|
74
|
-
return `${(0, utils_1.commentBlock)(docs, '\n', defaultDocs, typedParams.map(({ plainType, name }) => `@param {${plainType}} ${name}`))}${methodName}: GenericRuntimeApiMethod<(${paramsOut}) => Promise<${typeOut}>>`;
|
|
75
|
-
}
|
|
76
|
-
#generateMethodDef(runtimeApiName, methodDef) {
|
|
77
|
-
const { name: methodName, inputs, output, docs } = methodDef;
|
|
78
|
-
const callName = `${runtimeApiName}_${(0, utils_2.stringSnakeCase)(methodName)}`;
|
|
79
|
-
const defaultDocs = [`@callname: ${callName}`];
|
|
80
|
-
const typeOut = this.typesGen.generateType(output, 1, true);
|
|
81
|
-
this.addTypeImport(typeOut, false);
|
|
82
|
-
const typedInputs = inputs
|
|
83
|
-
.map((input, idx) => ({
|
|
84
|
-
...input,
|
|
85
|
-
type: this.typesGen.generateType(input.typeId, 1),
|
|
86
|
-
}))
|
|
87
|
-
.map((input, idx, inputs) => ({
|
|
88
|
-
...input,
|
|
89
|
-
isOptional: this.#isOptionalParam(inputs, input.type, idx),
|
|
90
|
-
}));
|
|
91
|
-
this.addTypeImport(typedInputs.map((t) => t.type));
|
|
92
|
-
const paramsOut = typedInputs
|
|
93
|
-
.map(({ name, type, isOptional }) => `${(0, util_1.stringCamelCase)(name)}${isOptional ? '?' : ''}: ${type}`)
|
|
94
|
-
.join(', ');
|
|
95
|
-
return `${(0, utils_1.commentBlock)(docs, '\n', defaultDocs, typedInputs.map(({ type, name }) => `@param {${type}} ${name}`))}${(0, util_1.stringCamelCase)(methodName)}: GenericRuntimeApiMethod<(${paramsOut}) => Promise<${typeOut}>>`;
|
|
96
|
-
}
|
|
97
|
-
#targetRuntimeApiSpecs() {
|
|
98
|
-
const specs = this.runtimeApis.map(([runtimeApiHash, version]) => {
|
|
99
|
-
const runtimeApiSpec = this.#findRuntimeApiSpec(runtimeApiHash, version);
|
|
100
|
-
if (!runtimeApiSpec)
|
|
101
|
-
return;
|
|
102
|
-
return {
|
|
103
|
-
...runtimeApiSpec,
|
|
104
|
-
runtimeApiHash,
|
|
105
|
-
};
|
|
106
|
-
});
|
|
107
|
-
return specs.reduce((o, spec) => {
|
|
108
|
-
if (!spec) {
|
|
109
|
-
return o;
|
|
110
|
-
}
|
|
111
|
-
return [...o, spec];
|
|
112
|
-
}, []);
|
|
113
|
-
}
|
|
114
|
-
#findRuntimeApiSpec = (runtimeApiHash, version) => {
|
|
115
|
-
const runtimeApiName = (0, specs_1.getRuntimeApiNames)().find((one) => (0, utils_2.calculateRuntimeApiHash)(one) === runtimeApiHash);
|
|
116
|
-
return (0, specs_1.getRuntimeApiSpecs)().find((one) => one.runtimeApiName === runtimeApiName && one.version === version);
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
exports.RuntimeApisGen = RuntimeApisGen;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.knownTypes = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Known type names registered in @dedot/types
|
|
6
|
-
* Since TS interfaces are trim-off when compiling,
|
|
7
|
-
* So we need to register them explicitly here for RPC codegen process
|
|
8
|
-
*/
|
|
9
|
-
exports.knownTypes = [
|
|
10
|
-
'ExtrinsicOrHash',
|
|
11
|
-
'EpochAuthorship',
|
|
12
|
-
'BlockStats',
|
|
13
|
-
'Prevotes',
|
|
14
|
-
'Precommits',
|
|
15
|
-
'RoundState',
|
|
16
|
-
'ReportedRoundStates',
|
|
17
|
-
'JustificationNotification',
|
|
18
|
-
'EncodedFinalityProofs',
|
|
19
|
-
'LeavesProof',
|
|
20
|
-
'StorageKind',
|
|
21
|
-
'RpcMethods',
|
|
22
|
-
'ReadProof',
|
|
23
|
-
'StorageChangeSet',
|
|
24
|
-
'TraceBlockResponse',
|
|
25
|
-
'MigrationStatusResult',
|
|
26
|
-
'ChainType',
|
|
27
|
-
'ChainProperties',
|
|
28
|
-
'Health',
|
|
29
|
-
'SyncState',
|
|
30
|
-
'PeerInfo',
|
|
31
|
-
'NodeRole',
|
|
32
|
-
'NetworkState',
|
|
33
|
-
];
|
package/cjs/packageInfo.js
DELETED
package/cjs/templates/consts.hbs
DELETED
package/cjs/templates/errors.hbs
DELETED
package/cjs/templates/events.hbs
DELETED
package/cjs/templates/index.hbs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
// Generated by @dedot/codegen
|
|
2
|
-
|
|
3
|
-
import { GenericSubstrateApi } from '@dedot/types';
|
|
4
|
-
import { ChainConsts } from './consts';
|
|
5
|
-
import { ChainStorage } from './query';
|
|
6
|
-
import { RpcCalls } from './rpc';
|
|
7
|
-
import { ChainErrors } from './errors';
|
|
8
|
-
import { ChainEvents } from './events';
|
|
9
|
-
import { RuntimeApis } from './runtime';
|
|
10
|
-
import { ChainTx } from './tx';
|
|
11
|
-
|
|
12
|
-
export * from './types';
|
|
13
|
-
|
|
14
|
-
export interface {{{interfaceName}}}Api extends GenericSubstrateApi {
|
|
15
|
-
rpc: RpcCalls;
|
|
16
|
-
consts: ChainConsts;
|
|
17
|
-
query: ChainStorage;
|
|
18
|
-
errors: ChainErrors;
|
|
19
|
-
events: ChainEvents;
|
|
20
|
-
call: RuntimeApis;
|
|
21
|
-
tx: ChainTx;
|
|
22
|
-
}
|
package/cjs/templates/query.hbs
DELETED
package/cjs/templates/rpc.hbs
DELETED
package/cjs/templates/tx.hbs
DELETED
package/cjs/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { generateTypes, generateTypesFromChain } from './index';
|
|
2
|
-
import { rpc } from '@polkadot/types-support/metadata/static-substrate';
|
|
3
|
-
import staticSubstrate from '@polkadot/types-support/metadata/v15/substrate-hex';
|
|
4
|
-
import { $Metadata, PortableRegistry } from '@dedot/codecs';
|
|
5
|
-
import { ConstantExecutor } from 'dedot';
|
|
6
|
-
const NETWORKS = [
|
|
7
|
-
{
|
|
8
|
-
chain: 'substrate',
|
|
9
|
-
metadataHex: staticSubstrate,
|
|
10
|
-
rpcMethods: rpc.methods,
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
chain: 'polkadot',
|
|
14
|
-
endpoint: 'wss://rpc.polkadot.io',
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
chain: 'kusama',
|
|
18
|
-
endpoint: 'wss://kusama-rpc.polkadot.io',
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
chain: 'astar',
|
|
22
|
-
endpoint: 'wss://rpc.astar.network',
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
chain: 'moonbeam',
|
|
26
|
-
endpoint: 'wss://moonbeam.api.onfinality.io/public-ws',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
chain: 'polkadotAssetHub',
|
|
30
|
-
endpoint: 'wss://polkadot-asset-hub-rpc.polkadot.io/',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
chain: 'kusamaAssetHub',
|
|
34
|
-
endpoint: 'wss://kusama-asset-hub-rpc.polkadot.io/',
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
chain: 'rococo',
|
|
38
|
-
endpoint: 'wss://rococo-rpc.polkadot.io/',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
chain: 'rococoAssetHub',
|
|
42
|
-
endpoint: 'wss://rococo-asset-hub-rpc.polkadot.io/',
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
chain: 'aleph',
|
|
46
|
-
endpoint: 'wss://aleph-zero.api.onfinality.io/public-ws',
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
chain: 'westendAssetHub',
|
|
50
|
-
endpoint: 'wss://westend-asset-hub-rpc.polkadot.io',
|
|
51
|
-
},
|
|
52
|
-
];
|
|
53
|
-
const OUT_DIR = 'packages/chaintypes/src';
|
|
54
|
-
async function run() {
|
|
55
|
-
for (const network of NETWORKS) {
|
|
56
|
-
const { chain, endpoint, metadataHex, rpcMethods } = network;
|
|
57
|
-
if (endpoint) {
|
|
58
|
-
console.log(`Generate types for ${chain} via endpoint ${endpoint}`);
|
|
59
|
-
await generateTypesFromChain(network, endpoint, OUT_DIR);
|
|
60
|
-
}
|
|
61
|
-
else if (metadataHex && rpcMethods) {
|
|
62
|
-
console.log(`Generate types for ${chain} via raw data`);
|
|
63
|
-
const metadata = $Metadata.tryDecode(metadataHex);
|
|
64
|
-
const runtimeVersion = getRuntimeVersion(metadata);
|
|
65
|
-
await generateTypes(network, metadata.latest, rpcMethods, runtimeVersion.apis, OUT_DIR);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
console.log('DONE!');
|
|
69
|
-
}
|
|
70
|
-
const getRuntimeVersion = (metadata) => {
|
|
71
|
-
const registry = new PortableRegistry(metadata.latest);
|
|
72
|
-
const executor = new ConstantExecutor({
|
|
73
|
-
registry,
|
|
74
|
-
metadataLatest: metadata.latest,
|
|
75
|
-
});
|
|
76
|
-
return executor.execute('system', 'version');
|
|
77
|
-
};
|
|
78
|
-
run().catch(console.log);
|
package/generator/ConstsGen.d.ts
DELETED
package/generator/ErrorsGen.d.ts
DELETED
package/generator/EventsGen.d.ts
DELETED
package/generator/IndexGen.d.ts
DELETED
package/generator/IndexGen.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { beautifySourceCode, compileTemplate } from './utils';
|
|
2
|
-
import { stringPascalCase } from '@polkadot/util';
|
|
3
|
-
export class IndexGen {
|
|
4
|
-
networkInfo;
|
|
5
|
-
constructor(networkInfo) {
|
|
6
|
-
this.networkInfo = networkInfo;
|
|
7
|
-
}
|
|
8
|
-
async generate() {
|
|
9
|
-
const { chain } = this.networkInfo;
|
|
10
|
-
const interfaceName = stringPascalCase(chain);
|
|
11
|
-
const template = compileTemplate('index.hbs');
|
|
12
|
-
return beautifySourceCode(template({ interfaceName }));
|
|
13
|
-
}
|
|
14
|
-
}
|
package/generator/QueryGen.d.ts
DELETED
package/generator/QueryGen.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { stringLowerFirst } from '@polkadot/util';
|
|
2
|
-
import { normalizeName } from '@dedot/utils';
|
|
3
|
-
import { ApiGen } from '../generator';
|
|
4
|
-
import { beautifySourceCode, commentBlock, compileTemplate } from './utils';
|
|
5
|
-
export class QueryGen extends ApiGen {
|
|
6
|
-
generate() {
|
|
7
|
-
const { pallets } = this.metadata;
|
|
8
|
-
this.typesGen.clearCache();
|
|
9
|
-
this.typesGen.typeImports.addKnownType('GenericChainStorage', 'GenericStorageQuery', 'Callback');
|
|
10
|
-
let defTypeOut = '';
|
|
11
|
-
for (let pallet of pallets) {
|
|
12
|
-
const storage = pallet.storage;
|
|
13
|
-
if (!storage)
|
|
14
|
-
continue;
|
|
15
|
-
const queries = storage.entries.map((one) => this.#generateEntry(one));
|
|
16
|
-
const queryDefs = queries.map(({ name, valueType, keyType, docs }) => `${commentBlock(docs)}${name}: GenericStorageQuery<(${keyType}) => ${valueType}>`);
|
|
17
|
-
defTypeOut += commentBlock(`Pallet \`${pallet.name}\`'s storage queries`);
|
|
18
|
-
defTypeOut += `${stringLowerFirst(pallet.name)}: {
|
|
19
|
-
${queryDefs.join(',\n')}
|
|
20
|
-
|
|
21
|
-
${commentBlock('Generic pallet storage query')}[storage: string]: GenericStorageQuery;
|
|
22
|
-
},`;
|
|
23
|
-
}
|
|
24
|
-
const importTypes = this.typesGen.typeImports.toImports();
|
|
25
|
-
const template = compileTemplate('query.hbs');
|
|
26
|
-
return beautifySourceCode(template({ importTypes, defTypeOut }));
|
|
27
|
-
}
|
|
28
|
-
#generateEntry(entry) {
|
|
29
|
-
const { name, type, docs, modifier } = entry;
|
|
30
|
-
let valueType, keyType;
|
|
31
|
-
if (type.tag === 'Plain') {
|
|
32
|
-
valueType = this.typesGen.generateType(type.value.valueTypeId, 1, true);
|
|
33
|
-
}
|
|
34
|
-
else if (type.tag === 'Map') {
|
|
35
|
-
valueType = this.typesGen.generateType(type.value.valueTypeId, 1, true);
|
|
36
|
-
keyType = this.typesGen.generateType(type.value.keyTypeId, 1);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
throw Error('Invalid entry type!');
|
|
40
|
-
}
|
|
41
|
-
const isOptional = modifier === 'Optional';
|
|
42
|
-
valueType = `${valueType}${isOptional ? ' | undefined' : ''}`;
|
|
43
|
-
docs.push('\n');
|
|
44
|
-
if (keyType) {
|
|
45
|
-
docs.push(`@param {${keyType}} arg`);
|
|
46
|
-
}
|
|
47
|
-
docs.push(`@param {Callback<${valueType}> =} callback`);
|
|
48
|
-
return {
|
|
49
|
-
name: normalizeName(name),
|
|
50
|
-
valueType,
|
|
51
|
-
keyType: keyType ? `arg: ${keyType}` : '',
|
|
52
|
-
docs,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
}
|
package/generator/RpcGen.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ApiGen, TypesGen } from '../generator';
|
|
2
|
-
export declare class RpcGen extends ApiGen {
|
|
3
|
-
#private;
|
|
4
|
-
readonly typesGen: TypesGen;
|
|
5
|
-
readonly rpcMethods: string[];
|
|
6
|
-
constructor(typesGen: TypesGen, rpcMethods: string[]);
|
|
7
|
-
generate(): Promise<string>;
|
|
8
|
-
addTypeImport(type: string | string[], toTypeIn?: boolean): void;
|
|
9
|
-
getGeneratedTypeName(type: string, toTypeIn?: boolean): string;
|
|
10
|
-
}
|