@dedot/codegen 0.0.1-alpha.4 → 0.0.1-alpha.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/{generator → chaintypes/generator}/ApiGen.d.ts +15 -15
  2. package/chaintypes/generator/ConstsGen.d.ts +4 -0
  3. package/{generator → chaintypes/generator}/ConstsGen.js +8 -9
  4. package/chaintypes/generator/ErrorsGen.d.ts +5 -0
  5. package/{generator → chaintypes/generator}/ErrorsGen.js +11 -12
  6. package/chaintypes/generator/EventsGen.d.ts +5 -0
  7. package/{generator → chaintypes/generator}/EventsGen.js +11 -12
  8. package/chaintypes/generator/IndexGen.d.ts +5 -0
  9. package/chaintypes/generator/IndexGen.js +17 -0
  10. package/chaintypes/generator/JsonRpcGen.d.ts +8 -0
  11. package/chaintypes/generator/JsonRpcGen.js +55 -0
  12. package/chaintypes/generator/QueryGen.d.ts +5 -0
  13. package/chaintypes/generator/QueryGen.js +63 -0
  14. package/chaintypes/generator/RuntimeApisGen.d.ts +9 -0
  15. package/chaintypes/generator/RuntimeApisGen.js +189 -0
  16. package/chaintypes/generator/TxGen.d.ts +5 -0
  17. package/{generator → chaintypes/generator}/TxGen.js +18 -16
  18. package/chaintypes/generator/TypesGen.d.ts +11 -0
  19. package/chaintypes/generator/TypesGen.js +55 -0
  20. package/chaintypes/generator/index.d.ts +10 -0
  21. package/chaintypes/generator/index.js +10 -0
  22. package/chaintypes/index.d.ts +3 -0
  23. package/chaintypes/index.js +49 -0
  24. package/chaintypes/templates/consts.hbs +7 -0
  25. package/chaintypes/templates/errors.hbs +7 -0
  26. package/chaintypes/templates/events.hbs +7 -0
  27. package/chaintypes/templates/index.hbs +27 -0
  28. package/chaintypes/templates/json-rpc.hbs +5 -0
  29. package/chaintypes/templates/query.hbs +7 -0
  30. package/chaintypes/templates/runtime.hbs +8 -0
  31. package/chaintypes/templates/tx.hbs +9 -0
  32. package/chaintypes/templates/types.hbs +5 -0
  33. package/cjs/{generator → chaintypes/generator}/ConstsGen.js +12 -13
  34. package/cjs/chaintypes/generator/ErrorsGen.js +40 -0
  35. package/cjs/{generator → chaintypes/generator}/EventsGen.js +17 -18
  36. package/cjs/chaintypes/generator/IndexGen.js +21 -0
  37. package/cjs/chaintypes/generator/JsonRpcGen.js +59 -0
  38. package/cjs/chaintypes/generator/QueryGen.js +67 -0
  39. package/cjs/chaintypes/generator/RuntimeApisGen.js +193 -0
  40. package/cjs/{generator → chaintypes/generator}/TxGen.js +27 -25
  41. package/cjs/chaintypes/generator/TypesGen.js +59 -0
  42. package/cjs/chaintypes/generator/index.js +26 -0
  43. package/cjs/chaintypes/index.js +77 -0
  44. package/cjs/chaintypes/templates/consts.hbs +7 -0
  45. package/cjs/chaintypes/templates/errors.hbs +7 -0
  46. package/cjs/chaintypes/templates/events.hbs +7 -0
  47. package/cjs/chaintypes/templates/index.hbs +27 -0
  48. package/cjs/chaintypes/templates/json-rpc.hbs +5 -0
  49. package/cjs/chaintypes/templates/query.hbs +7 -0
  50. package/cjs/chaintypes/templates/runtime.hbs +8 -0
  51. package/cjs/chaintypes/templates/tx.hbs +9 -0
  52. package/cjs/chaintypes/templates/types.hbs +5 -0
  53. package/cjs/{types.js → dirname.js} +3 -0
  54. package/cjs/index.js +4 -62
  55. package/cjs/{generator/TypesGen.js → shared/BaseTypesGen.js} +123 -177
  56. package/cjs/{generator → shared}/TypeImports.js +29 -3
  57. package/cjs/{generator → shared}/index.js +3 -10
  58. package/cjs/shared/known-codecs.js +170 -0
  59. package/cjs/typink/generator/ConstructorQueryGen.js +24 -0
  60. package/cjs/typink/generator/ConstructorTxGen.js +24 -0
  61. package/cjs/typink/generator/IndexGen.js +24 -0
  62. package/cjs/typink/generator/QueryGen.js +72 -0
  63. package/cjs/typink/generator/TxGen.js +25 -0
  64. package/cjs/typink/generator/TypesGen.js +28 -0
  65. package/cjs/typink/generator/index.js +22 -0
  66. package/cjs/typink/index.js +37 -0
  67. package/cjs/typink/templates/constructor-query.hbs +7 -0
  68. package/cjs/typink/templates/constructor-tx.hbs +7 -0
  69. package/cjs/typink/templates/index.hbs +14 -0
  70. package/cjs/typink/templates/query.hbs +7 -0
  71. package/cjs/typink/templates/tx.hbs +7 -0
  72. package/cjs/typink/templates/types.hbs +5 -0
  73. package/cjs/{generator/utils.js → utils.js} +35 -11
  74. package/dirname.d.ts +1 -0
  75. package/dirname.js +6 -0
  76. package/index.d.ts +2 -4
  77. package/index.js +2 -48
  78. package/package.json +18 -19
  79. package/{generator/TypesGen.d.ts → shared/BaseTypesGen.d.ts} +13 -12
  80. package/{generator/TypesGen.js → shared/BaseTypesGen.js} +112 -166
  81. package/{generator → shared}/TypeImports.d.ts +12 -1
  82. package/{generator → shared}/TypeImports.js +29 -3
  83. package/shared/index.d.ts +3 -0
  84. package/shared/index.js +3 -0
  85. package/shared/known-codecs.d.ts +23 -0
  86. package/shared/known-codecs.js +139 -0
  87. package/typink/generator/ConstructorQueryGen.d.ts +6 -0
  88. package/typink/generator/ConstructorQueryGen.js +20 -0
  89. package/typink/generator/ConstructorTxGen.d.ts +6 -0
  90. package/typink/generator/ConstructorTxGen.js +20 -0
  91. package/typink/generator/IndexGen.d.ts +6 -0
  92. package/typink/generator/IndexGen.js +20 -0
  93. package/typink/generator/QueryGen.d.ts +12 -0
  94. package/typink/generator/QueryGen.js +68 -0
  95. package/typink/generator/TxGen.d.ts +6 -0
  96. package/typink/generator/TxGen.js +21 -0
  97. package/typink/generator/TypesGen.d.ts +7 -0
  98. package/typink/generator/TypesGen.js +24 -0
  99. package/typink/generator/index.d.ts +6 -0
  100. package/typink/generator/index.js +6 -0
  101. package/typink/index.d.ts +2 -0
  102. package/typink/index.js +30 -0
  103. package/typink/templates/constructor-query.hbs +7 -0
  104. package/typink/templates/constructor-tx.hbs +7 -0
  105. package/typink/templates/index.hbs +14 -0
  106. package/typink/templates/query.hbs +7 -0
  107. package/typink/templates/tx.hbs +7 -0
  108. package/typink/templates/types.hbs +5 -0
  109. package/{generator/utils.d.ts → utils.d.ts} +6 -2
  110. package/{generator/utils.js → utils.js} +33 -9
  111. package/cjs/genSupportedChainTypes.js +0 -79
  112. package/cjs/generator/ErrorsGen.js +0 -41
  113. package/cjs/generator/IndexGen.js +0 -18
  114. package/cjs/generator/QueryGen.js +0 -59
  115. package/cjs/generator/RpcGen.js +0 -175
  116. package/cjs/generator/RuntimeApisGen.js +0 -120
  117. package/cjs/packageInfo.js +0 -5
  118. package/genSupportedChainTypes.d.ts +0 -1
  119. package/genSupportedChainTypes.js +0 -74
  120. package/generator/ConstsGen.d.ts +0 -4
  121. package/generator/ErrorsGen.d.ts +0 -5
  122. package/generator/EventsGen.d.ts +0 -5
  123. package/generator/IndexGen.d.ts +0 -6
  124. package/generator/IndexGen.js +0 -14
  125. package/generator/QueryGen.d.ts +0 -5
  126. package/generator/QueryGen.js +0 -55
  127. package/generator/RpcGen.d.ts +0 -10
  128. package/generator/RpcGen.js +0 -171
  129. package/generator/RuntimeApisGen.d.ts +0 -9
  130. package/generator/RuntimeApisGen.js +0 -116
  131. package/generator/TxGen.d.ts +0 -5
  132. package/generator/index.d.ts +0 -10
  133. package/generator/index.js +0 -10
  134. package/packageInfo.d.ts +0 -4
  135. package/packageInfo.js +0 -2
  136. package/types.d.ts +0 -6
  137. package/types.js +0 -1
  138. /package/{generator → chaintypes/generator}/ApiGen.js +0 -0
  139. /package/cjs/{generator → chaintypes/generator}/ApiGen.js +0 -0
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RuntimeApisGen = void 0;
4
+ const runtime_specs_1 = require("@dedot/runtime-specs");
5
+ const utils_1 = require("@dedot/utils");
6
+ const index_js_1 = require("../../shared/index.js");
7
+ const utils_js_1 = require("../../utils.js");
8
+ const ApiGen_js_1 = require("./ApiGen.js");
9
+ class RuntimeApisGen extends ApiGen_js_1.ApiGen {
10
+ typesGen;
11
+ runtimeApis;
12
+ constructor(typesGen, runtimeApis) {
13
+ super(typesGen);
14
+ this.typesGen = typesGen;
15
+ this.runtimeApis = runtimeApis;
16
+ }
17
+ generate(useSubPaths = false) {
18
+ this.typesGen.clearCache();
19
+ this.typesGen.typeImports.addKnownType('GenericRuntimeApis', 'GenericRuntimeApiMethod', 'RpcVersion');
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_js_1.commentBlock)(`@runtimeapi: ${runtimeApiName} - ${(0, utils_1.calcRuntimeApiHash)(runtimeApiName)}`);
25
+ runtimeCallsOut += `${(0, utils_1.stringCamelCase)(runtimeApiName)}: {
26
+ ${methods.map((method) => this.#generateMethodDef(runtimeApiName, method)).join('\n')}
27
+
28
+ ${(0, utils_js_1.commentBlock)('Generic runtime api call')}[method: string]: GenericRuntimeApiMethod<Rv>
29
+ }`;
30
+ });
31
+ }
32
+ else {
33
+ const specs = this.#targetRuntimeApiSpecs();
34
+ specs.forEach(({ methods, runtimeApiName, runtimeApiHash, version }) => {
35
+ runtimeCallsOut += (0, utils_js_1.commentBlock)(`@runtimeapi: ${runtimeApiName} - ${runtimeApiHash}`, `@version: ${version}`);
36
+ runtimeCallsOut += `${(0, utils_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_js_1.commentBlock)('Generic runtime api call')}[method: string]: GenericRuntimeApiMethod<Rv>
46
+ }`;
47
+ });
48
+ }
49
+ const importTypes = this.typesGen.typeImports.toImports({ useSubPaths });
50
+ const template = (0, utils_js_1.compileTemplate)('chaintypes/templates/runtime.hbs');
51
+ return (0, utils_js_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_1.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, utils_1.stringCamelCase)(name)}${isOptional ? '?' : ''}: ${plainType}`)
72
+ .join(', ');
73
+ const typeOut = this.#getGeneratedTypeName(type, false);
74
+ return `${(0, utils_js_1.commentBlock)(docs, '\n', defaultDocs, typedParams.map(({ plainType, name }) => `@param {${plainType}} ${name}`))}${methodName}: GenericRuntimeApiMethod<Rv, (${paramsOut}) => Promise<${typeOut}>>`;
75
+ }
76
+ #generateMethodDef(runtimeApiName, methodDef) {
77
+ const { name: methodName, inputs, output, docs } = methodDef;
78
+ const callName = `${runtimeApiName}_${(0, utils_1.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, utils_1.stringCamelCase)(name)}${isOptional ? '?' : ''}: ${type}`)
94
+ .join(', ');
95
+ return `${(0, utils_js_1.commentBlock)(docs, '\n', defaultDocs, typedInputs.map(({ type, name }) => `@param {${type}} ${name}`))}${(0, utils_1.stringCamelCase)(methodName)}: GenericRuntimeApiMethod<Rv, (${paramsOut}) => Promise<${typeOut}>>`;
96
+ }
97
+ #targetRuntimeApiSpecs() {
98
+ const specs = Object.entries(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, runtime_specs_1.getRuntimeApiNames)().find((one) => (0, utils_1.calcRuntimeApiHash)(one) === runtimeApiHash);
116
+ return (0, runtime_specs_1.getRuntimeApiSpecs)().find((one) => one.runtimeApiName === runtimeApiName && one.version === version);
117
+ };
118
+ // TODO check typeIn, typeOut if param type, or rpc type isScale
119
+ #addTypeImport(type, toTypeIn = true) {
120
+ if (Array.isArray(type)) {
121
+ type.forEach((one) => this.#addTypeImport(one, toTypeIn));
122
+ return;
123
+ }
124
+ type = type.trim();
125
+ if ((0, utils_js_1.isNativeType)(type)) {
126
+ return;
127
+ }
128
+ // Handle generic wrapper types
129
+ const matchArray = type.match(utils_js_1.WRAPPER_TYPE_REGEX);
130
+ if (matchArray) {
131
+ const [_, $1, $2] = matchArray;
132
+ this.#addTypeImport($1, toTypeIn);
133
+ if ($2.match(utils_js_1.WRAPPER_TYPE_REGEX) || $2.match(utils_js_1.TUPLE_TYPE_REGEX)) {
134
+ this.#addTypeImport($2, toTypeIn);
135
+ }
136
+ else {
137
+ this.#addTypeImport($2.split(','), toTypeIn);
138
+ }
139
+ return;
140
+ }
141
+ // Check tuple type
142
+ if (type.match(utils_js_1.TUPLE_TYPE_REGEX)) {
143
+ this.#addTypeImport(type.slice(1, -1).split(','), toTypeIn);
144
+ return;
145
+ }
146
+ if (type.includes(' | ')) {
147
+ this.#addTypeImport(type.split(' | ').map((one) => one.trim()), toTypeIn);
148
+ return;
149
+ }
150
+ try {
151
+ const codecType = this.#getCodecType(type, toTypeIn);
152
+ if ((0, utils_js_1.isNativeType)(codecType))
153
+ return;
154
+ this.typesGen.typeImports.addCodecType(codecType);
155
+ return;
156
+ }
157
+ catch (e) { }
158
+ this.typesGen.addTypeImport(type);
159
+ }
160
+ #getGeneratedTypeName(type, toTypeIn = true) {
161
+ try {
162
+ const matchArray = type.match(utils_js_1.WRAPPER_TYPE_REGEX);
163
+ if (matchArray) {
164
+ const [_, $1, $2] = matchArray;
165
+ const wrapperTypeName = this.#getCodecType($1, toTypeIn);
166
+ if ($2.match(utils_js_1.WRAPPER_TYPE_REGEX) || $2.match(utils_js_1.TUPLE_TYPE_REGEX)) {
167
+ return `${wrapperTypeName}<${this.#getGeneratedTypeName($2, toTypeIn)}>`;
168
+ }
169
+ const innerTypeNames = $2
170
+ .split(',')
171
+ .map((one) => this.#getGeneratedTypeName(one.trim(), toTypeIn))
172
+ .join(', ');
173
+ return `${wrapperTypeName}<${innerTypeNames}>`;
174
+ }
175
+ else if (type.match(utils_js_1.TUPLE_TYPE_REGEX)) {
176
+ const innerTypeNames = type
177
+ .slice(1, -1)
178
+ .split(',')
179
+ .map((one) => this.#getGeneratedTypeName(one.trim(), toTypeIn))
180
+ .join(', ');
181
+ return `[${innerTypeNames}]`;
182
+ }
183
+ return this.#getCodecType(type, toTypeIn);
184
+ }
185
+ catch (e) { }
186
+ return type;
187
+ }
188
+ #getCodecType(type, toTypeIn = true) {
189
+ const { typeIn, typeOut } = (0, index_js_1.findKnownCodecType)(type);
190
+ return toTypeIn ? typeIn : typeOut;
191
+ }
192
+ }
193
+ exports.RuntimeApisGen = RuntimeApisGen;
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TxGen = void 0;
4
- const generator_1 = require("../generator");
5
- const util_1 = require("@polkadot/util");
6
- const utils_1 = require("./utils");
7
- class TxGen extends generator_1.ApiGen {
8
- generate() {
4
+ const utils_1 = require("@dedot/utils");
5
+ const utils_js_1 = require("../../utils.js");
6
+ const index_js_1 = require("../generator/index.js");
7
+ class TxGen extends index_js_1.ApiGen {
8
+ generate(useSubPaths = false) {
9
9
  const { pallets, types } = this.metadata;
10
10
  this.typesGen.clearCache();
11
- this.typesGen.typeImports.addKnownType('GenericChainTx', 'GenericTxCall', 'ISubmittableExtrinsic', 'ISubmittableResult', 'IRuntimeTxCall');
11
+ this.typesGen.typeImports.addKnownType('GenericChainTx', 'GenericTxCall', 'ISubmittableExtrinsic', 'ISubmittableResult', 'IRuntimeTxCall', 'RpcVersion', 'RpcV2', 'ISubmittableExtrinsicLegacy', 'TransactionEvent');
12
12
  const { callTypeId, addressTypeId, signatureTypeId } = this.metadata.extrinsic;
13
13
  const callTypeIn = this.typesGen.generateType(callTypeId, 1);
14
14
  const addressTypeIn = this.typesGen.generateType(addressTypeId, 1);
@@ -20,15 +20,15 @@ class TxGen extends generator_1.ApiGen {
20
20
  for (let pallet of pallets) {
21
21
  if (pallet.calls === undefined)
22
22
  continue;
23
- const { type } = types[pallet.calls];
24
- if (type.tag !== 'Enum')
23
+ const { typeDef } = types[pallet.calls];
24
+ if (typeDef.type !== 'Enum')
25
25
  continue;
26
- const isFlatEnum = type.value.members.every((m) => m.fields.length === 0);
27
- const typedTxs = type.value.members
26
+ const isFlatEnum = typeDef.value.members.every((m) => m.fields.length === 0);
27
+ const typedTxs = typeDef.value.members
28
28
  .map((one) => ({
29
- functionName: (0, util_1.stringCamelCase)(one.name),
29
+ functionName: (0, utils_1.stringCamelCase)(one.name),
30
30
  params: one.fields.map((f) => ({
31
- name: (0, util_1.stringCamelCase)(f.name),
31
+ name: (0, utils_1.stringCamelCase)(f.name),
32
32
  normalizedName: this.#normalizeParamName(f.name),
33
33
  type: this.typesGen.generateType(f.typeId, 1),
34
34
  docs: f.docs,
@@ -38,33 +38,35 @@ class TxGen extends generator_1.ApiGen {
38
38
  .map((f) => {
39
39
  return {
40
40
  ...f,
41
- callInput: this.#generateCallInput((0, util_1.stringPascalCase)(pallet.name), (0, util_1.stringPascalCase)(f.functionName), !isFlatEnum ? f.params.map((p) => `${p.name}: ${p.type}`) : undefined),
41
+ callInput: this.#generateCallInput((0, utils_1.stringPascalCase)(pallet.name), (0, utils_1.stringPascalCase)(f.functionName), !isFlatEnum ? f.params.map((p) => `${p.name}: ${p.type}`) : undefined),
42
42
  };
43
43
  });
44
- txDefsOut += (0, utils_1.commentBlock)(`Pallet \`${pallet.name}\`'s transaction calls`);
45
- txDefsOut += `${(0, util_1.stringCamelCase)(pallet.name)}: {
44
+ txDefsOut += (0, utils_js_1.commentBlock)(`Pallet \`${pallet.name}\`'s transaction calls`);
45
+ txDefsOut += `${(0, utils_1.stringCamelCase)(pallet.name)}: {
46
46
  ${typedTxs
47
- .map(({ functionName, params, docs, callInput }) => `${(0, utils_1.commentBlock)(docs, '\n', params.map((p) => `@param {${p.type}} ${p.normalizedName} ${p.docs}`))}${functionName}: GenericTxCall<(${params.map((p) => `${p.normalizedName}: ${p.type}`).join(', ')}) => ChainSubmittableExtrinsic<${callInput}>>`)
47
+ .map(({ functionName, params, docs, callInput }) => `${(0, utils_js_1.commentBlock)(docs, '\n', params.map((p) => `@param {${p.type}} ${p.normalizedName} ${p.docs}`))}${functionName}: GenericTxCall<Rv, (${params.map((p) => `${p.normalizedName}: ${p.type}`).join(', ')}) => ChainSubmittableExtrinsic<Rv, ${callInput}>>`)
48
48
  .join(',\n')}
49
49
 
50
- ${(0, utils_1.commentBlock)('Generic pallet tx call')}[callName: string]: GenericTxCall<TxCall>,
50
+ ${(0, utils_js_1.commentBlock)('Generic pallet tx call')}[callName: string]: GenericTxCall<Rv, TxCall<Rv>>,
51
51
  },`;
52
52
  }
53
- const importTypes = this.typesGen.typeImports.toImports();
53
+ const importTypes = this.typesGen.typeImports.toImports({ useSubPaths });
54
54
  // TODO make explicit separate type for Extra
55
55
  const defTypes = `
56
- export type ChainSubmittableExtrinsic<T extends IRuntimeTxCall = ${callTypeIn}> =
56
+ export type ChainSubmittableExtrinsic<Rv extends RpcVersion, T extends IRuntimeTxCall = ${callTypeIn}> =
57
57
  Extrinsic<${addressTypeIn}, T, ${signatureTypeIn}, any[]> &
58
- ISubmittableExtrinsic<ISubmittableResult<FrameSystemEventRecord>>
58
+ (Rv extends RpcV2
59
+ ? ISubmittableExtrinsic<ISubmittableResult<FrameSystemEventRecord, TransactionEvent>>
60
+ : ISubmittableExtrinsicLegacy<ISubmittableResult<FrameSystemEventRecord, TransactionEvent>>)
59
61
 
60
- export type TxCall = (...args: any[]) => ChainSubmittableExtrinsic;
62
+ export type TxCall<Rv extends RpcVersion> = (...args: any[]) => ChainSubmittableExtrinsic<Rv>;
61
63
  `;
62
- const template = (0, utils_1.compileTemplate)('tx.hbs');
63
- return (0, utils_1.beautifySourceCode)(template({ importTypes, defTypes, txDefsOut }));
64
+ const template = (0, utils_js_1.compileTemplate)('chaintypes/templates/tx.hbs');
65
+ return (0, utils_js_1.beautifySourceCode)(template({ importTypes, defTypes, txDefsOut }));
64
66
  }
65
67
  #normalizeParamName(name) {
66
- name = (0, util_1.stringCamelCase)(name);
67
- return (0, utils_1.isReservedWord)(name) ? `${name}_` : name;
68
+ name = (0, utils_1.stringCamelCase)(name);
69
+ return (0, utils_js_1.isReservedWord)(name) ? `${name}_` : name;
68
70
  }
69
71
  #generateCallInput(palletName, callName, params) {
70
72
  if (!params) {
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypesGen = void 0;
4
+ const codecs_1 = require("@dedot/codecs");
5
+ const index_js_1 = require("../../shared/index.js");
6
+ const utils_js_1 = require("../../utils.js");
7
+ // Skip generate types for these
8
+ // as we do have native types for them
9
+ const SKIP_TYPES = [
10
+ 'BoundedBTreeMap',
11
+ 'BoundedBTreeSet',
12
+ 'BoundedVec',
13
+ 'Box',
14
+ 'BTreeMap',
15
+ 'BTreeSet',
16
+ 'Cow',
17
+ 'Option',
18
+ 'Range',
19
+ 'RangeInclusive',
20
+ 'Result',
21
+ 'WeakBoundedVec',
22
+ 'WrapperKeepOpaque',
23
+ 'WrapperOpaque',
24
+ ];
25
+ class TypesGen extends index_js_1.BaseTypesGen {
26
+ metadata;
27
+ registry;
28
+ constructor(metadata) {
29
+ super(metadata.types);
30
+ this.metadata = metadata;
31
+ this.skipTypes = SKIP_TYPES;
32
+ this.registry = new codecs_1.PortableRegistry(this.metadata);
33
+ this.includedTypes = this.includeTypes();
34
+ }
35
+ generate(useSubPaths = false) {
36
+ this.clearCache();
37
+ let defTypeOut = '';
38
+ Object.values(this.includedTypes)
39
+ .filter(({ skip, knownType }) => !(skip || knownType))
40
+ .forEach(({ name, nameOut, id, docs }) => {
41
+ defTypeOut += `${(0, utils_js_1.commentBlock)(docs)}export type ${nameOut} = ${this.generateType(id, 0, true)};\n\n`;
42
+ if (this.shouldGenerateTypeIn(id)) {
43
+ defTypeOut += `export type ${name} = ${this.generateType(id)};\n\n`;
44
+ }
45
+ });
46
+ const importTypes = this.typeImports.toImports({ excludeModules: ['./types'], useSubPaths });
47
+ const template = (0, utils_js_1.compileTemplate)('chaintypes/templates/types.hbs');
48
+ return (0, utils_js_1.beautifySourceCode)(template({ importTypes, defTypeOut }));
49
+ }
50
+ shouldGenerateTypeIn(id) {
51
+ const { callTypeId } = this.metadata.extrinsic;
52
+ const palletCallTypeIds = this.registry.getFieldTypeIdsFromEnum(callTypeId);
53
+ return callTypeId === id || palletCallTypeIds.includes(id);
54
+ }
55
+ getEnumOptions(typeId) {
56
+ return this.registry.getEnumOptions(typeId);
57
+ }
58
+ }
59
+ exports.TypesGen = TypesGen;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./TypesGen.js"), exports);
18
+ __exportStar(require("./ApiGen.js"), exports);
19
+ __exportStar(require("./ConstsGen.js"), exports);
20
+ __exportStar(require("./QueryGen.js"), exports);
21
+ __exportStar(require("./JsonRpcGen.js"), exports);
22
+ __exportStar(require("./IndexGen.js"), exports);
23
+ __exportStar(require("./ErrorsGen.js"), exports);
24
+ __exportStar(require("./EventsGen.js"), exports);
25
+ __exportStar(require("./TxGen.js"), exports);
26
+ __exportStar(require("./RuntimeApisGen.js"), exports);
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.generateTypes = exports.generateTypesFromEndpoint = void 0;
27
+ const api_1 = require("@dedot/api");
28
+ const providers_1 = require("@dedot/providers");
29
+ const utils_1 = require("@dedot/utils");
30
+ const fs = __importStar(require("fs"));
31
+ const path = __importStar(require("path"));
32
+ const index_js_1 = require("./generator/index.js");
33
+ async function generateTypesFromEndpoint(chain, endpoint, outDir, extension = 'd.ts', useSubPaths = false) {
34
+ const api = await api_1.LegacyClient.new(new providers_1.WsProvider(endpoint));
35
+ const { methods } = await api.rpc.rpc_methods();
36
+ const apis = api.runtimeVersion.apis || {};
37
+ if (!chain) {
38
+ chain = (0, utils_1.stringCamelCase)(api.runtimeVersion.specName || 'local');
39
+ }
40
+ await generateTypes(chain, api.metadata.latest, methods, apis, outDir, extension, useSubPaths);
41
+ await api.disconnect();
42
+ }
43
+ exports.generateTypesFromEndpoint = generateTypesFromEndpoint;
44
+ async function generateTypes(chain, metadata, rpcMethods, runtimeApis, outDir = '.', extension = 'd.ts', useSubPaths = false) {
45
+ const dirPath = path.resolve(outDir, chain);
46
+ const defTypesFileName = path.join(dirPath, `types.${extension}`);
47
+ const constsTypesFileName = path.join(dirPath, `consts.${extension}`);
48
+ const queryTypesFileName = path.join(dirPath, `query.${extension}`);
49
+ const jsonRpcFileName = path.join(dirPath, `json-rpc.${extension}`);
50
+ const indexFileName = path.join(dirPath, `index.${extension}`);
51
+ const errorsFileName = path.join(dirPath, `errors.${extension}`);
52
+ const eventsFileName = path.join(dirPath, `events.${extension}`);
53
+ const runtimeApisFileName = path.join(dirPath, `runtime.${extension}`);
54
+ const txFileName = path.join(dirPath, `tx.${extension}`);
55
+ if (!fs.existsSync(dirPath)) {
56
+ fs.mkdirSync(dirPath, { recursive: true });
57
+ }
58
+ const typesGen = new index_js_1.TypesGen(metadata);
59
+ const constsGen = new index_js_1.ConstsGen(typesGen);
60
+ const queryGen = new index_js_1.QueryGen(typesGen);
61
+ const jsonRpcGen = new index_js_1.JsonRpcGen(typesGen, rpcMethods);
62
+ const indexGen = new index_js_1.IndexGen(chain);
63
+ const errorsGen = new index_js_1.ErrorsGen(typesGen);
64
+ const eventsGen = new index_js_1.EventsGen(typesGen);
65
+ const runtimeApisGen = new index_js_1.RuntimeApisGen(typesGen, runtimeApis);
66
+ const txGen = new index_js_1.TxGen(typesGen);
67
+ fs.writeFileSync(defTypesFileName, await typesGen.generate(useSubPaths));
68
+ fs.writeFileSync(errorsFileName, await errorsGen.generate(useSubPaths));
69
+ fs.writeFileSync(eventsFileName, await eventsGen.generate(useSubPaths));
70
+ fs.writeFileSync(jsonRpcFileName, await jsonRpcGen.generate(useSubPaths));
71
+ fs.writeFileSync(queryTypesFileName, await queryGen.generate(useSubPaths));
72
+ fs.writeFileSync(constsTypesFileName, await constsGen.generate(useSubPaths));
73
+ fs.writeFileSync(txFileName, await txGen.generate(useSubPaths));
74
+ fs.writeFileSync(indexFileName, await indexGen.generate(useSubPaths));
75
+ fs.writeFileSync(runtimeApisFileName, await runtimeApisGen.generate(useSubPaths));
76
+ }
77
+ exports.generateTypes = generateTypes;
@@ -0,0 +1,7 @@
1
+ // Generated by dedot cli
2
+
3
+ {{{ importTypes }}}
4
+
5
+ export interface ChainConsts<Rv extends RpcVersion> extends GenericChainConsts<Rv> {
6
+ {{{ defTypeOut }}}
7
+ }
@@ -0,0 +1,7 @@
1
+ // Generated by dedot cli
2
+
3
+ {{{ importTypes }}}
4
+
5
+ export interface ChainErrors<Rv extends RpcVersion> extends GenericChainErrors<Rv> {
6
+ {{{ defTypeOut }}}
7
+ }
@@ -0,0 +1,7 @@
1
+ // Generated by dedot cli
2
+
3
+ {{{ importTypes }}}
4
+
5
+ export interface ChainEvents<Rv extends RpcVersion> extends GenericChainEvents<Rv> {
6
+ {{{ defTypeOut }}}
7
+ }
@@ -0,0 +1,27 @@
1
+ // Generated by dedot cli
2
+
3
+ {{{importTypes}}}
4
+ import { ChainConsts } from './consts';
5
+ import { ChainStorage } from './query';
6
+ import { ChainJsonRpcApis } from './json-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 Versioned{{{interfaceName}}}Api<Rv extends RpcVersion> extends GenericSubstrateApi<Rv> {
15
+ rpc: ChainJsonRpcApis<Rv>;
16
+ consts: ChainConsts<Rv>;
17
+ query: ChainStorage<Rv>;
18
+ errors: ChainErrors<Rv>;
19
+ events: ChainEvents<Rv>;
20
+ call: RuntimeApis<Rv>;
21
+ tx: ChainTx<Rv>;
22
+ }
23
+
24
+ export interface {{{interfaceName}}}Api {
25
+ legacy: Versioned{{{interfaceName}}}Api<RpcLegacy>;
26
+ v2: Versioned{{{interfaceName}}}Api<RpcV2>;
27
+ }
@@ -0,0 +1,5 @@
1
+ // Generated by dedot cli
2
+
3
+ {{{ importTypes }}}
4
+
5
+ export type ChainJsonRpcApis<Rv extends RpcVersion> = Pick<JsonRpcApis, {{{jsonRpcMethods}}}> & GenericJsonRpcApis<Rv>;
@@ -0,0 +1,7 @@
1
+ // Generated by dedot cli
2
+
3
+ {{{ importTypes }}}
4
+
5
+ export interface ChainStorage<Rv extends RpcVersion> extends GenericChainStorage<Rv> {
6
+ {{{ defTypeOut }}}
7
+ }
@@ -0,0 +1,8 @@
1
+ // Generated by dedot cli
2
+
3
+ {{{ importTypes }}}
4
+
5
+ export interface RuntimeApis<Rv extends RpcVersion> extends GenericRuntimeApis<Rv> {
6
+ {{{ runtimeCallsOut }}}
7
+ }
8
+
@@ -0,0 +1,9 @@
1
+ // Generated by dedot cli
2
+
3
+ {{{ importTypes }}}
4
+
5
+ {{{ defTypes }}}
6
+
7
+ export interface ChainTx<Rv extends RpcVersion> extends GenericChainTx<Rv, TxCall<Rv>> {
8
+ {{{ txDefsOut }}}
9
+ }
@@ -0,0 +1,5 @@
1
+ // Generated by dedot cli
2
+
3
+ {{{ importTypes }}}
4
+
5
+ {{{ defTypeOut }}}
@@ -1,2 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.currentDirname = () => {
4
+ return __dirname;
5
+ };
package/cjs/index.js CHANGED
@@ -10,67 +10,9 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
10
10
  if (k2 === undefined) k2 = k;
11
11
  o[k2] = m[k];
12
12
  }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
24
15
  };
25
16
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.generateTypes = exports.generateTypesFromChain = void 0;
27
- const dedot_1 = require("dedot");
28
- const fs = __importStar(require("fs"));
29
- const path = __importStar(require("path"));
30
- const generator_1 = require("./generator");
31
- const util_1 = require("@polkadot/util");
32
- async function generateTypesFromChain(network, endpoint, outDir) {
33
- const api = await dedot_1.Dedot.create(endpoint);
34
- const { methods } = await api.rpc.rpc.methods();
35
- const apis = api.runtimeVersion?.apis || [];
36
- if (!network.chain) {
37
- network.chain = (0, util_1.stringCamelCase)(api.runtimeVersion?.specName || api.runtimeChain || 'local');
38
- }
39
- await generateTypes(network, api.metadataLatest, methods, apis, outDir);
40
- await api.disconnect();
41
- }
42
- exports.generateTypesFromChain = generateTypesFromChain;
43
- async function generateTypes(network, metadata, rpcMethods, runtimeApis, outDir = '.') {
44
- const dirPath = path.resolve(outDir, network.chain);
45
- const defTypesFileName = path.join(dirPath, `types.ts`);
46
- const constsTypesFileName = path.join(dirPath, `consts.ts`);
47
- const queryTypesFileName = path.join(dirPath, `query.ts`);
48
- const rpcCallsFileName = path.join(dirPath, `rpc.ts`);
49
- const indexFileName = path.join(dirPath, `index.ts`);
50
- const errorsFileName = path.join(dirPath, `errors.ts`);
51
- const eventsFileName = path.join(dirPath, `events.ts`);
52
- const runtimeApisFileName = path.join(dirPath, `runtime.ts`);
53
- const txFileName = path.join(dirPath, `tx.ts`);
54
- if (!fs.existsSync(dirPath)) {
55
- fs.mkdirSync(dirPath, { recursive: true });
56
- }
57
- const typesGen = new generator_1.TypesGen(metadata);
58
- const constsGen = new generator_1.ConstsGen(typesGen);
59
- const queryGen = new generator_1.QueryGen(typesGen);
60
- const rpcGen = new generator_1.RpcGen(typesGen, rpcMethods);
61
- const indexGen = new generator_1.IndexGen(network);
62
- const errorsGen = new generator_1.ErrorsGen(typesGen);
63
- const eventsGen = new generator_1.EventsGen(typesGen);
64
- const runtimeApisGen = new generator_1.RuntimeApisGen(typesGen, runtimeApis);
65
- const txGen = new generator_1.TxGen(typesGen);
66
- fs.writeFileSync(defTypesFileName, await typesGen.generate());
67
- fs.writeFileSync(errorsFileName, await errorsGen.generate());
68
- fs.writeFileSync(eventsFileName, await eventsGen.generate());
69
- fs.writeFileSync(rpcCallsFileName, await rpcGen.generate());
70
- fs.writeFileSync(queryTypesFileName, await queryGen.generate());
71
- fs.writeFileSync(constsTypesFileName, await constsGen.generate());
72
- fs.writeFileSync(txFileName, await txGen.generate());
73
- fs.writeFileSync(indexFileName, await indexGen.generate());
74
- fs.writeFileSync(runtimeApisFileName, await runtimeApisGen.generate());
75
- }
76
- exports.generateTypes = generateTypes;
17
+ __exportStar(require("./chaintypes/index.js"), exports);
18
+ __exportStar(require("./typink/index.js"), exports);