@pezkuwi/typegen 16.5.5 → 16.5.6
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/LICENSE +201 -0
- package/augment.js +2 -0
- package/bundle.js +2 -0
- package/cjs/augment.d.ts +2 -0
- package/cjs/augment.js +4 -0
- package/cjs/bundle.d.ts +2 -0
- package/cjs/bundle.js +7 -0
- package/cjs/extractChain.js +44 -0
- package/cjs/fromChain.js +95 -0
- package/cjs/fromDefs.js +82 -0
- package/cjs/generate/consts.js +91 -0
- package/cjs/generate/errors.js +59 -0
- package/cjs/generate/events.js +139 -0
- package/cjs/generate/index.js +23 -0
- package/cjs/generate/interfaceRegistry.js +64 -0
- package/cjs/generate/lookup.js +240 -0
- package/cjs/generate/query.js +140 -0
- package/cjs/generate/rpc.js +115 -0
- package/cjs/generate/runtime.js +233 -0
- package/{build → cjs}/generate/tsDef.d.ts +1 -1
- package/cjs/generate/tsDef.js +254 -0
- package/cjs/generate/tx.js +121 -0
- package/cjs/generate/types.js +16 -0
- package/cjs/index.js +5 -0
- package/cjs/interfacesTs.js +28 -0
- package/cjs/metadataMd.js +652 -0
- package/cjs/package.json +3 -0
- package/cjs/packageDetect.js +8 -0
- package/cjs/packageInfo.js +4 -0
- package/cjs/util/assert.js +15 -0
- package/cjs/util/derived.js +128 -0
- package/cjs/util/docs.js +10 -0
- package/cjs/util/file.js +33 -0
- package/{build → cjs}/util/formatting.d.ts +1 -1
- package/cjs/util/formatting.js +237 -0
- package/cjs/util/imports.js +126 -0
- package/{build → cjs}/util/index.d.ts +1 -0
- package/cjs/util/index.js +39 -0
- package/cjs/util/initMeta.js +22 -0
- package/cjs/util/register.js +10 -0
- package/cjs/util/wsMeta.js +60 -0
- package/extractChain.d.ts +1 -0
- package/extractChain.js +40 -0
- package/fromChain.d.ts +1 -0
- package/fromChain.js +91 -0
- package/fromDefs.d.ts +1 -0
- package/fromDefs.js +78 -0
- package/generate/consts.d.ts +5 -0
- package/generate/consts.js +87 -0
- package/generate/errors.d.ts +4 -0
- package/generate/errors.js +55 -0
- package/generate/events.d.ts +5 -0
- package/generate/events.js +135 -0
- package/{src/generate/index.ts → generate/index.d.ts} +0 -3
- package/generate/index.js +10 -0
- package/generate/interfaceRegistry.d.ts +4 -0
- package/generate/interfaceRegistry.js +59 -0
- package/generate/lookup.d.ts +4 -0
- package/generate/lookup.js +235 -0
- package/generate/query.d.ts +5 -0
- package/generate/query.js +136 -0
- package/generate/rpc.d.ts +6 -0
- package/generate/rpc.js +110 -0
- package/generate/runtime.d.ts +7 -0
- package/generate/runtime.js +228 -0
- package/generate/tsDef.d.ts +16 -0
- package/generate/tsDef.js +246 -0
- package/generate/tx.d.ts +5 -0
- package/generate/tx.js +117 -0
- package/generate/types.d.ts +12 -0
- package/generate/types.js +13 -0
- package/index.d.ts +2 -0
- package/index.js +2 -0
- package/interfacesTs.d.ts +1 -0
- package/interfacesTs.js +24 -0
- package/metadataMd.d.ts +1 -0
- package/metadataMd.js +648 -0
- package/package.json +520 -24
- package/packageDetect.d.ts +1 -0
- package/{src/packageDetect.ts → packageDetect.js} +0 -8
- package/packageInfo.d.ts +6 -0
- package/packageInfo.js +1 -0
- package/scripts/{polkadot-types-chain-info.mjs → pezkuwi-types-chain-info.mjs} +1 -1
- package/scripts/{polkadot-types-from-chain.mjs → pezkuwi-types-from-chain.mjs} +1 -1
- package/scripts/{polkadot-types-from-defs.mjs → pezkuwi-types-from-defs.mjs} +1 -1
- package/{build/scripts/polkadot-types-internal-interfaces.mjs → scripts/pezkuwi-types-internal-interfaces.mjs} +1 -1
- package/{build/scripts/polkadot-types-internal-metadata.mjs → scripts/pezkuwi-types-internal-metadata.mjs} +1 -1
- package/{src/templates → templates}/calls.hbs +2 -2
- package/{src/templates → templates}/consts.hbs +2 -2
- package/{src/templates → templates}/errors.hbs +2 -2
- package/{src/templates → templates}/events.hbs +2 -2
- package/{src/templates → templates}/interfaceRegistry.hbs +2 -2
- package/{src/templates → templates}/lookup/types.hbs +2 -2
- package/{src/templates → templates}/query.hbs +2 -2
- package/{src/templates → templates}/rpc.hbs +2 -2
- package/{src/templates → templates}/tx.hbs +2 -2
- package/util/assert.d.ts +2 -0
- package/util/assert.js +10 -0
- package/util/derived.d.ts +4 -0
- package/util/derived.js +125 -0
- package/util/docs.d.ts +1 -0
- package/util/docs.js +6 -0
- package/util/file.d.ts +2 -0
- package/util/file.js +28 -0
- package/util/formatting.d.ts +11 -0
- package/util/formatting.js +230 -0
- package/util/imports.d.ts +23 -0
- package/util/imports.js +121 -0
- package/{src/util/index.ts → util/index.d.ts} +6 -8
- package/util/index.js +34 -0
- package/util/initMeta.d.ts +12 -0
- package/util/initMeta.js +19 -0
- package/util/register.d.ts +4 -0
- package/util/register.js +7 -0
- package/util/wsMeta.d.ts +4 -0
- package/util/wsMeta.js +55 -0
- package/build/scripts/polkadot-types-chain-info.mjs +0 -7
- package/build/scripts/polkadot-types-from-chain.mjs +0 -7
- package/build/scripts/polkadot-types-from-defs.mjs +0 -7
- package/scripts/polkadot-types-internal-interfaces.mjs +0 -7
- package/scripts/polkadot-types-internal-metadata.mjs +0 -7
- package/src/augment.ts +0 -5
- package/src/bundle.ts +0 -5
- package/src/extractChain.ts +0 -54
- package/src/fromChain.ts +0 -123
- package/src/fromDefs.ts +0 -106
- package/src/generate/consts.ts +0 -112
- package/src/generate/errors.ts +0 -75
- package/src/generate/events.ts +0 -165
- package/src/generate/interfaceRegistry.ts +0 -85
- package/src/generate/lookup.ts +0 -294
- package/src/generate/query.ts +0 -169
- package/src/generate/rpc.ts +0 -158
- package/src/generate/runtime.ts +0 -284
- package/src/generate/tsDef.ts +0 -321
- package/src/generate/tx.ts +0 -152
- package/src/generate/types.ts +0 -26
- package/src/index.ts +0 -6
- package/src/interfacesTs.ts +0 -35
- package/src/metadataMd.ts +0 -844
- package/src/packageInfo.ts +0 -6
- package/src/util/assert.ts +0 -18
- package/src/util/derived.spec.ts +0 -58
- package/src/util/derived.ts +0 -133
- package/src/util/docs.ts +0 -13
- package/src/util/file.ts +0 -42
- package/src/util/formatting.spec.ts +0 -30
- package/src/util/formatting.ts +0 -295
- package/src/util/imports.ts +0 -164
- package/src/util/initMeta.ts +0 -37
- package/src/util/register.ts +0 -12
- package/src/util/wsMeta.ts +0 -70
- package/tsconfig.build.json +0 -28
- package/tsconfig.build.tsbuildinfo +0 -1
- package/tsconfig.scripts.json +0 -19
- package/tsconfig.spec.json +0 -17
- /package/{build/augment.d.ts → augment.d.ts} +0 -0
- /package/{build/bundle.d.ts → bundle.d.ts} +0 -0
- /package/{build → cjs}/extractChain.d.ts +0 -0
- /package/{build → cjs}/fromChain.d.ts +0 -0
- /package/{build → cjs}/fromDefs.d.ts +0 -0
- /package/{build → cjs}/generate/consts.d.ts +0 -0
- /package/{build → cjs}/generate/errors.d.ts +0 -0
- /package/{build → cjs}/generate/events.d.ts +0 -0
- /package/{build → cjs}/generate/index.d.ts +0 -0
- /package/{build → cjs}/generate/interfaceRegistry.d.ts +0 -0
- /package/{build → cjs}/generate/lookup.d.ts +0 -0
- /package/{build → cjs}/generate/query.d.ts +0 -0
- /package/{build → cjs}/generate/rpc.d.ts +0 -0
- /package/{build → cjs}/generate/runtime.d.ts +0 -0
- /package/{build → cjs}/generate/tx.d.ts +0 -0
- /package/{build → cjs}/generate/types.d.ts +0 -0
- /package/{build → cjs}/index.d.ts +0 -0
- /package/{build → cjs}/interfacesTs.d.ts +0 -0
- /package/{build → cjs}/metadataMd.d.ts +0 -0
- /package/{build → cjs}/packageDetect.d.ts +0 -0
- /package/{build → cjs}/packageInfo.d.ts +0 -0
- /package/{build → cjs}/util/assert.d.ts +0 -0
- /package/{build → cjs}/util/derived.d.ts +0 -0
- /package/{build → cjs}/util/docs.d.ts +0 -0
- /package/{build → cjs}/util/file.d.ts +0 -0
- /package/{build → cjs}/util/imports.d.ts +0 -0
- /package/{build → cjs}/util/initMeta.d.ts +0 -0
- /package/{build → cjs}/util/register.d.ts +0 -0
- /package/{build → cjs}/util/wsMeta.d.ts +0 -0
- /package/{src/templates → templates}/docs.hbs +0 -0
- /package/{src/templates → templates}/header.hbs +0 -0
- /package/{src/templates → templates}/lookup/defs-named.hbs +0 -0
- /package/{src/templates → templates}/lookup/defs.hbs +0 -0
- /package/{src/templates → templates}/lookup/index.hbs +0 -0
- /package/{src/templates → templates}/tsDef/index.hbs +0 -0
- /package/{src/templates → templates}/tsDef/moduleTypes.hbs +0 -0
- /package/{src/templates → templates}/tsDef/types.hbs +0 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRpcTypes = generateRpcTypes;
|
|
4
|
+
exports.generateDefaultRpc = generateDefaultRpc;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const handlebars_1 = tslib_1.__importDefault(require("handlebars"));
|
|
7
|
+
const defaultDefinitions = tslib_1.__importStar(require("@pezkuwi/types/interfaces/definitions"));
|
|
8
|
+
const static_bizinikiwi_1 = tslib_1.__importDefault(require("@pezkuwi/types-support/metadata/static-bizinikiwi"));
|
|
9
|
+
const index_js_1 = require("../util/index.js");
|
|
10
|
+
const StorageKeyType = 'StorageKey | string | Uint8Array | any';
|
|
11
|
+
const generateRpcTypesTemplate = handlebars_1.default.compile((0, index_js_1.readTemplate)('rpc'));
|
|
12
|
+
/** @internal */
|
|
13
|
+
function generateRpcTypes(registry, importDefinitions, dest, extraTypes) {
|
|
14
|
+
(0, index_js_1.writeFile)(dest, () => {
|
|
15
|
+
const allTypes = { '@pezkuwi/types/interfaces': importDefinitions, ...extraTypes };
|
|
16
|
+
const imports = (0, index_js_1.createImports)(allTypes);
|
|
17
|
+
const definitions = imports.definitions;
|
|
18
|
+
const allDefs = Object.entries(allTypes).reduce((defs, [path, obj]) => {
|
|
19
|
+
return Object.entries(obj).reduce((defs, [key, value]) => ({ ...defs, [`${path}/${key}`]: value }), defs);
|
|
20
|
+
}, {});
|
|
21
|
+
const rpcKeys = Object
|
|
22
|
+
.keys(definitions)
|
|
23
|
+
.filter((key) => Object.keys(definitions[key].rpc || {}).length !== 0)
|
|
24
|
+
.sort();
|
|
25
|
+
const additional = {};
|
|
26
|
+
const modules = rpcKeys.map((sectionFullName) => {
|
|
27
|
+
const rpc = definitions[sectionFullName].rpc || {};
|
|
28
|
+
const section = sectionFullName.split('/').pop();
|
|
29
|
+
const allMethods = Object.keys(rpc).sort().map((methodName) => {
|
|
30
|
+
const def = rpc[methodName];
|
|
31
|
+
let args;
|
|
32
|
+
let type;
|
|
33
|
+
let generic;
|
|
34
|
+
// These are too hard to type with generics, do manual overrides
|
|
35
|
+
if (section === 'state') {
|
|
36
|
+
(0, index_js_1.setImports)(allDefs, imports, ['Codec', 'Hash', 'StorageKey', 'Vec']);
|
|
37
|
+
if (methodName === 'getStorage') {
|
|
38
|
+
generic = 'T = Codec';
|
|
39
|
+
args = [`key: ${StorageKeyType}, block?: Hash | Uint8Array | string`];
|
|
40
|
+
type = 'T';
|
|
41
|
+
}
|
|
42
|
+
else if (methodName === 'queryStorage') {
|
|
43
|
+
generic = 'T = Codec[]';
|
|
44
|
+
args = [`keys: Vec<StorageKey> | (${StorageKeyType})[], fromBlock?: Hash | Uint8Array | string, toBlock?: Hash | Uint8Array | string`];
|
|
45
|
+
type = '[Hash, T][]';
|
|
46
|
+
}
|
|
47
|
+
else if (methodName === 'queryStorageAt') {
|
|
48
|
+
generic = 'T = Codec[]';
|
|
49
|
+
args = [`keys: Vec<StorageKey> | (${StorageKeyType})[], at?: Hash | Uint8Array | string`];
|
|
50
|
+
type = 'T';
|
|
51
|
+
}
|
|
52
|
+
else if (methodName === 'subscribeStorage') {
|
|
53
|
+
generic = 'T = Codec[]';
|
|
54
|
+
args = [`keys?: Vec<StorageKey> | (${StorageKeyType})[]`];
|
|
55
|
+
type = 'T';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (args === undefined) {
|
|
59
|
+
(0, index_js_1.setImports)(allDefs, imports, [def.type]);
|
|
60
|
+
args = def.params.map((param) => {
|
|
61
|
+
const similarTypes = (0, index_js_1.getSimilarTypes)(registry, definitions, param.type, imports);
|
|
62
|
+
(0, index_js_1.setImports)(allDefs, imports, [param.type, ...similarTypes]);
|
|
63
|
+
return `${param.name}${param.isOptional ? '?' : ''}: ${similarTypes.join(' | ')}`;
|
|
64
|
+
});
|
|
65
|
+
type = (0, index_js_1.formatType)(registry, allDefs, def.type, imports);
|
|
66
|
+
generic = '';
|
|
67
|
+
}
|
|
68
|
+
const item = {
|
|
69
|
+
args: args.join(', '),
|
|
70
|
+
docs: def.deprecated
|
|
71
|
+
? [`@deprecated ${def.deprecated}`, def.description]
|
|
72
|
+
: [def.description],
|
|
73
|
+
generic,
|
|
74
|
+
name: methodName,
|
|
75
|
+
type
|
|
76
|
+
};
|
|
77
|
+
if (def.aliasSection) {
|
|
78
|
+
if (!additional[def.aliasSection]) {
|
|
79
|
+
additional[def.aliasSection] = {
|
|
80
|
+
items: [],
|
|
81
|
+
name: def.aliasSection
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
additional[def.aliasSection].items.push(item);
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return item;
|
|
88
|
+
}).filter((item) => !!item);
|
|
89
|
+
return {
|
|
90
|
+
items: allMethods,
|
|
91
|
+
name: section || 'unknown'
|
|
92
|
+
};
|
|
93
|
+
}).concat(...Object.values(additional)).sort((a, b) => a.name.localeCompare(b.name));
|
|
94
|
+
imports.typesTypes['Observable'] = true;
|
|
95
|
+
return generateRpcTypesTemplate({
|
|
96
|
+
headerType: 'chain',
|
|
97
|
+
imports,
|
|
98
|
+
modules,
|
|
99
|
+
types: [
|
|
100
|
+
...Object.keys(imports.localTypes).sort().map((packagePath) => ({
|
|
101
|
+
file: packagePath.replace('@pezkuwi/types-augment', '@pezkuwi/types'),
|
|
102
|
+
types: Object.keys(imports.localTypes[packagePath])
|
|
103
|
+
})),
|
|
104
|
+
{
|
|
105
|
+
file: '@pezkuwi/rpc-core/types',
|
|
106
|
+
types: ['AugmentedRpc']
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function generateDefaultRpc(dest = 'packages/rpc-augment/src/augment/jsonrpc.ts', extraTypes = {}) {
|
|
113
|
+
const { registry } = (0, index_js_1.initMeta)(static_bizinikiwi_1.default, extraTypes);
|
|
114
|
+
generateRpcTypes(registry, defaultDefinitions, dest, extraTypes);
|
|
115
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateCallTypes = generateCallTypes;
|
|
4
|
+
exports.generateDefaultRuntime = generateDefaultRuntime;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const handlebars_1 = tslib_1.__importDefault(require("handlebars"));
|
|
7
|
+
const defaultDefs = tslib_1.__importStar(require("@pezkuwi/types/interfaces/definitions"));
|
|
8
|
+
const definitions_1 = tslib_1.__importDefault(require("@pezkuwi/types-augment/lookup/definitions"));
|
|
9
|
+
const util_1 = require("@pezkuwi/util");
|
|
10
|
+
const util_crypto_1 = require("@pezkuwi/util-crypto");
|
|
11
|
+
const index_js_1 = require("../util/index.js");
|
|
12
|
+
const types_js_1 = require("./types.js");
|
|
13
|
+
const generateCallsTypesTemplate = handlebars_1.default.compile((0, index_js_1.readTemplate)('calls'));
|
|
14
|
+
const aliases = {
|
|
15
|
+
AssetHubZagrosRuntimeRuntimeCall: 'RuntimeCall',
|
|
16
|
+
AssetHubPezkuwiRuntimeRuntimeCall: 'RuntimeCall',
|
|
17
|
+
AssetHubDicleRuntimeOriginCaller: 'OriginCaller',
|
|
18
|
+
AssetHubDicleRuntimeRuntimeCall: 'RuntimeCall',
|
|
19
|
+
DicleRuntimeConstantsProxyProxyType: 'ProxyType',
|
|
20
|
+
KitchensinkRuntimeRuntimeCall: 'RuntimeCall',
|
|
21
|
+
KitchensinkRuntimeRuntimeParametersKey: 'RuntimeParametersKey',
|
|
22
|
+
OpaqueValue: 'Bytes',
|
|
23
|
+
PezkuwiTeyrchainPrimitivesPrimitivesId: 'ParaId',
|
|
24
|
+
PezkuwiTeyrchainPrimitivesPrimitivesValidationCodeHash: 'ValidationCodeHash',
|
|
25
|
+
PezkuwiPrimitivesV7SlashingOpaqueKeyOwnershipProof: 'OpaqueKeyOwnershipProof',
|
|
26
|
+
PezkuwiPrimitivesV8SlashingOpaqueKeyOwnershipProof: 'OpaqueKeyOwnershipProof',
|
|
27
|
+
PezkuwiRuntimeRuntimeCall: 'RuntimeCall',
|
|
28
|
+
PrimitiveTypesH160: 'H160',
|
|
29
|
+
PrimitiveTypesH256: 'H256',
|
|
30
|
+
PrimitiveTypesU256: 'U256',
|
|
31
|
+
PezspConsensusBabeOpaqueKeyOwnershipProof: 'OpaqueKeyOwnershipProof',
|
|
32
|
+
PezspConsensusSlotsSlot: 'Slot',
|
|
33
|
+
PezspConsensusSlotsSlotDuration: 'SlotDuration',
|
|
34
|
+
PezspCoreCryptoAccountId32: 'AccountId32',
|
|
35
|
+
PezspCoreOpaqueMetadata: 'OpaqueMetadata',
|
|
36
|
+
PezspRuntimeOpaqueValue: 'Bytes',
|
|
37
|
+
PezspRuntimeUncheckedExtrinsic: 'Extrinsic',
|
|
38
|
+
StagingDicleRuntimeOriginCaller: 'OriginCaller',
|
|
39
|
+
StagingDicleRuntimeRuntimeCall: 'RuntimeCall',
|
|
40
|
+
StagingDicleRuntimeRuntimeParameters: 'RuntimeParameters',
|
|
41
|
+
StagingDicleRuntimeRuntimeParametersKey: 'RuntimeParametersKey',
|
|
42
|
+
StagingZagrosRuntimeRuntimeCall: 'RuntimeCall'
|
|
43
|
+
};
|
|
44
|
+
const getTypesViaAlias = (registry, id) => {
|
|
45
|
+
const rawTypeName = registry.lookup.getName(id) || registry.lookup.getTypeDef(id).type;
|
|
46
|
+
const typeName = (0, index_js_1.rebrandTypeName)(rawTypeName);
|
|
47
|
+
if (aliases[typeName]) {
|
|
48
|
+
return aliases[typeName];
|
|
49
|
+
}
|
|
50
|
+
return typeName;
|
|
51
|
+
};
|
|
52
|
+
/** @internal */
|
|
53
|
+
function getMethods(registry, methods) {
|
|
54
|
+
const result = {};
|
|
55
|
+
methods.forEach((m) => {
|
|
56
|
+
const { deprecationInfo, docs, inputs, name, output } = m;
|
|
57
|
+
let description = docs.map((d) => d.toString()).join();
|
|
58
|
+
if (!deprecationInfo.isNotDeprecated) {
|
|
59
|
+
const deprecationNotice = (0, types_js_1.getDeprecationNotice)(deprecationInfo, (0, util_1.stringCamelCase)(name));
|
|
60
|
+
const notice = description.length ? `\n * ${deprecationNotice}` : ` * ${deprecationNotice}`;
|
|
61
|
+
description += notice;
|
|
62
|
+
}
|
|
63
|
+
result[name.toString()] = {
|
|
64
|
+
description,
|
|
65
|
+
params: inputs.map(({ name, type }) => {
|
|
66
|
+
return { name: name.toString(), type: getTypesViaAlias(registry, type) };
|
|
67
|
+
}),
|
|
68
|
+
type: getTypesViaAlias(registry, output)
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
/** @internal */
|
|
74
|
+
function getRuntimeDefViaMetadata(registry) {
|
|
75
|
+
const result = {};
|
|
76
|
+
const { apis } = registry.metadata;
|
|
77
|
+
for (let i = 0, count = apis.length; i < count; i++) {
|
|
78
|
+
const { methods, name } = apis[i];
|
|
79
|
+
result[name.toString()] = [{
|
|
80
|
+
methods: getMethods(registry, methods),
|
|
81
|
+
// We set the version to 0 here since it will not be relevant when we are grabbing the runtime apis
|
|
82
|
+
// from the Metadata.
|
|
83
|
+
version: 0
|
|
84
|
+
}];
|
|
85
|
+
}
|
|
86
|
+
return Object.entries(result);
|
|
87
|
+
}
|
|
88
|
+
/** @internal */
|
|
89
|
+
function getDefs(apis, defs, registry) {
|
|
90
|
+
const named = {};
|
|
91
|
+
const all = Object.values(defs);
|
|
92
|
+
const isApiInMetadata = registry.metadata.apis.length > 0;
|
|
93
|
+
if (isApiInMetadata) {
|
|
94
|
+
const sections = getRuntimeDefViaMetadata(registry);
|
|
95
|
+
for (let j = 0, jcount = sections.length; j < jcount; j++) {
|
|
96
|
+
const [_section, secs] = sections[j];
|
|
97
|
+
const sec = secs[0];
|
|
98
|
+
const sectionHash = (0, util_crypto_1.blake2AsHex)(_section, 64);
|
|
99
|
+
const section = (0, util_1.stringCamelCase)(_section);
|
|
100
|
+
const methods = Object.entries(sec.methods);
|
|
101
|
+
if (!named[section]) {
|
|
102
|
+
named[section] = {};
|
|
103
|
+
}
|
|
104
|
+
for (let m = 0, mcount = methods.length; m < mcount; m++) {
|
|
105
|
+
const [_method, def] = methods[m];
|
|
106
|
+
const method = (0, util_1.stringCamelCase)(_method);
|
|
107
|
+
named[section][method] = (0, util_1.objectSpread)({ method, name: `${_section}_${_method}`, section, sectionHash }, def);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
for (let j = 0, jcount = all.length; j < jcount; j++) {
|
|
113
|
+
const set = all[j].runtime;
|
|
114
|
+
if (set) {
|
|
115
|
+
const sections = Object.entries(set);
|
|
116
|
+
for (let i = 0, scount = sections.length; i < scount; i++) {
|
|
117
|
+
const [_section, sec] = sections[i];
|
|
118
|
+
const sectionHash = (0, util_crypto_1.blake2AsHex)(_section, 64);
|
|
119
|
+
const api = apis?.find(([h]) => h === sectionHash);
|
|
120
|
+
if (api) {
|
|
121
|
+
const ver = sec.find(({ version }) => version === api[1]);
|
|
122
|
+
if (ver) {
|
|
123
|
+
const methods = Object.entries(ver.methods);
|
|
124
|
+
const mcount = methods.length;
|
|
125
|
+
if (mcount) {
|
|
126
|
+
const section = (0, util_1.stringCamelCase)(_section);
|
|
127
|
+
if (!named[section]) {
|
|
128
|
+
named[section] = {};
|
|
129
|
+
}
|
|
130
|
+
for (let m = 0; m < mcount; m++) {
|
|
131
|
+
const [_method, def] = methods[m];
|
|
132
|
+
const method = (0, util_1.stringCamelCase)(_method);
|
|
133
|
+
named[section][method] = (0, util_1.objectSpread)({ method, name: `${_section}_${method}`, section, sectionHash, version: ver.version }, def);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
console.warn(`Unable to find matching version for runtime ${_section}, expected ${api[1]}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return named;
|
|
146
|
+
}
|
|
147
|
+
/** @internal */
|
|
148
|
+
function generateCallTypes(registry, meta, dest, extraTypes, isStrict, customLookupDefinitions) {
|
|
149
|
+
(0, index_js_1.writeFile)(dest, () => {
|
|
150
|
+
const allTypes = {
|
|
151
|
+
'@pezkuwi/types-augment': {
|
|
152
|
+
lookup: {
|
|
153
|
+
...definitions_1.default,
|
|
154
|
+
...customLookupDefinitions
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
'@pezkuwi/types/interfaces': defaultDefs,
|
|
158
|
+
...extraTypes
|
|
159
|
+
};
|
|
160
|
+
const imports = (0, index_js_1.createImports)(allTypes);
|
|
161
|
+
// find the system.Version in metadata
|
|
162
|
+
let apis = null;
|
|
163
|
+
const sysp = meta.asLatest.pallets.find(({ name }) => name.eq('System'));
|
|
164
|
+
if (sysp) {
|
|
165
|
+
const verc = sysp.constants.find(({ name }) => name.eq('Version'));
|
|
166
|
+
if (verc) {
|
|
167
|
+
apis = registry.createType('RuntimeVersion', verc.value).apis.map(([k, v]) => [k.toHex(), v.toNumber()]);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
console.error('Unable to find System.Version pallet, skipping API extraction');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
console.error('Unable to find System pallet, skipping API extraction');
|
|
175
|
+
}
|
|
176
|
+
const allDefs = Object.entries(allTypes).reduce((defs, [path, obj]) => {
|
|
177
|
+
return Object.entries(obj).reduce((defs, [key, value]) => ({ ...defs, [`${path}/${key}`]: value }), defs);
|
|
178
|
+
}, {});
|
|
179
|
+
const definitions = getDefs(apis, imports.definitions, registry);
|
|
180
|
+
const callKeys = Object.keys(definitions);
|
|
181
|
+
const modules = callKeys.map((section) => {
|
|
182
|
+
const calls = definitions[section];
|
|
183
|
+
const allMethods = Object.keys(calls).sort().map((methodName) => {
|
|
184
|
+
const def = calls[methodName];
|
|
185
|
+
(0, index_js_1.setImports)(allDefs, imports, [def.type]);
|
|
186
|
+
const args = def.params.map((param) => {
|
|
187
|
+
const similarTypes = (0, index_js_1.getSimilarTypes)(registry, imports.definitions, param.type, imports);
|
|
188
|
+
(0, index_js_1.setImports)(allDefs, imports, [param.type, ...similarTypes]);
|
|
189
|
+
return `${param.name}: ${similarTypes.join(' | ')}`;
|
|
190
|
+
});
|
|
191
|
+
return {
|
|
192
|
+
args: args.join(', '),
|
|
193
|
+
docs: [def.description],
|
|
194
|
+
name: methodName,
|
|
195
|
+
sectionHash: def.sectionHash,
|
|
196
|
+
sectionName: def.section,
|
|
197
|
+
sectionVersion: def.version,
|
|
198
|
+
type: (0, index_js_1.formatType)(registry, allDefs, def.type, imports)
|
|
199
|
+
};
|
|
200
|
+
}).sort((a, b) => a.name.localeCompare(b.name));
|
|
201
|
+
return {
|
|
202
|
+
items: allMethods,
|
|
203
|
+
name: section || 'unknown',
|
|
204
|
+
sectionHash: allMethods.length && allMethods[0].sectionHash,
|
|
205
|
+
sectionName: allMethods.length && allMethods[0].sectionName,
|
|
206
|
+
sectionVersion: allMethods.length && allMethods[0].sectionVersion
|
|
207
|
+
};
|
|
208
|
+
}).filter(({ items }) => items.length).sort((a, b) => a.name.localeCompare(b.name));
|
|
209
|
+
if (modules.length) {
|
|
210
|
+
imports.typesTypes['Observable'] = true;
|
|
211
|
+
}
|
|
212
|
+
return generateCallsTypesTemplate({
|
|
213
|
+
headerType: 'chain',
|
|
214
|
+
imports,
|
|
215
|
+
isStrict,
|
|
216
|
+
modules,
|
|
217
|
+
types: [
|
|
218
|
+
...Object.keys(imports.localTypes).sort().map((packagePath) => ({
|
|
219
|
+
file: packagePath.replace('@pezkuwi/types-augment', '@pezkuwi/types'),
|
|
220
|
+
types: Object.keys(imports.localTypes[packagePath])
|
|
221
|
+
})),
|
|
222
|
+
{
|
|
223
|
+
file: '@pezkuwi/api-base/types',
|
|
224
|
+
types: ['ApiTypes', 'AugmentedCall', 'DecoratedCallBase']
|
|
225
|
+
}
|
|
226
|
+
]
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
function generateDefaultRuntime(dest, data, extraTypes = {}, isStrict = false, customLookupDefinitions) {
|
|
231
|
+
const { metadata, registry } = (0, index_js_1.initMeta)(data, extraTypes);
|
|
232
|
+
generateCallTypes(registry, metadata, dest, extraTypes, isStrict, customLookupDefinitions);
|
|
233
|
+
}
|
|
@@ -4,7 +4,7 @@ import type { ModuleTypes } from '../util/imports.js';
|
|
|
4
4
|
import type { TypeImports } from '../util/index.js';
|
|
5
5
|
import { TypeDefInfo } from '@pezkuwi/types-create';
|
|
6
6
|
/** @internal */
|
|
7
|
-
export declare function createGetter(definitions: Record<string, ModuleTypes>, name: string, type: string, imports: TypeImports): string;
|
|
7
|
+
export declare function createGetter(definitions: Record<string, ModuleTypes>, name: string | undefined, type: string, imports: TypeImports): string;
|
|
8
8
|
export declare const typeEncoders: Record<TypeDefInfo, (registry: Registry, definitions: Record<string, ModuleTypes>, def: TypeDef, imports: TypeImports) => string>;
|
|
9
9
|
/** @internal */
|
|
10
10
|
export declare function generateTsDefFor(registry: Registry, importDefinitions: Record<string, Record<string, ModuleTypes>>, defName: string, { types }: {
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.typeEncoders = void 0;
|
|
4
|
+
exports.createGetter = createGetter;
|
|
5
|
+
exports.generateTsDefFor = generateTsDefFor;
|
|
6
|
+
exports.generateTsDef = generateTsDef;
|
|
7
|
+
exports.generateDefaultTsDef = generateDefaultTsDef;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const handlebars_1 = tslib_1.__importDefault(require("handlebars"));
|
|
10
|
+
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
11
|
+
const create_1 = require("@pezkuwi/types/create");
|
|
12
|
+
const defaultDefinitions = tslib_1.__importStar(require("@pezkuwi/types/interfaces/definitions"));
|
|
13
|
+
const types_create_1 = require("@pezkuwi/types-create");
|
|
14
|
+
const util_1 = require("@pezkuwi/util");
|
|
15
|
+
const index_js_1 = require("../util/index.js");
|
|
16
|
+
const generateTsDefIndexTemplate = handlebars_1.default.compile((0, index_js_1.readTemplate)('tsDef/index'));
|
|
17
|
+
const generateTsDefModuleTypesTemplate = handlebars_1.default.compile((0, index_js_1.readTemplate)('tsDef/moduleTypes'));
|
|
18
|
+
const generateTsDefTypesTemplate = handlebars_1.default.compile((0, index_js_1.readTemplate)('tsDef/types'));
|
|
19
|
+
/** @internal */
|
|
20
|
+
function createGetter(definitions, name = '', type, imports) {
|
|
21
|
+
(0, index_js_1.setImports)(definitions, imports, [type]);
|
|
22
|
+
return ` readonly ${name}: ${type};\n`;
|
|
23
|
+
}
|
|
24
|
+
/** @internal */
|
|
25
|
+
function errorUnhandled(_, _definitions, def, _imports) {
|
|
26
|
+
throw new Error(`Generate: ${def.name || ''}: Unhandled type ${types_create_1.TypeDefInfo[def.info]}`);
|
|
27
|
+
}
|
|
28
|
+
/** @internal */
|
|
29
|
+
function tsExport(registry, definitions, def, imports) {
|
|
30
|
+
return (0, index_js_1.exportInterface)(def.lookupIndex, def.name, (0, index_js_1.formatType)(registry, definitions, def, imports, false));
|
|
31
|
+
}
|
|
32
|
+
/** @internal */
|
|
33
|
+
function tsEnum(registry, definitions, { lookupIndex, name: enumName, sub }, imports, withShortcut = false) {
|
|
34
|
+
(0, index_js_1.setImports)(definitions, imports, ['Enum']);
|
|
35
|
+
const indent = withShortcut ? ' ' : '';
|
|
36
|
+
const named = sub.filter(({ name }) => !!name && !name.startsWith('__Unused'));
|
|
37
|
+
const keys = named.map((def) => {
|
|
38
|
+
const { info, lookupName, name = '', sub, type } = def;
|
|
39
|
+
const getter = (0, util_1.stringPascalCase)(name.replace(' ', '_'));
|
|
40
|
+
const isComplex = [types_create_1.TypeDefInfo.Option, types_create_1.TypeDefInfo.Range, types_create_1.TypeDefInfo.RangeInclusive, types_create_1.TypeDefInfo.Result, types_create_1.TypeDefInfo.Struct, types_create_1.TypeDefInfo.Tuple, types_create_1.TypeDefInfo.Vec, types_create_1.TypeDefInfo.VecFixed].includes(info);
|
|
41
|
+
let extractedLookupName;
|
|
42
|
+
// When the parent type does not have a lookupName, and the sub type is the same
|
|
43
|
+
// type as the parent we can take the lookupName from the sub.
|
|
44
|
+
// This is specific to `StagingXcmV4Junction`.
|
|
45
|
+
// see: https://github.com/pezkuwichain/pezkuwi-api/pull/5812
|
|
46
|
+
if (sub && !Array.isArray(sub) && type.includes(`${sub.type};`)) {
|
|
47
|
+
if (sub.lookupName === 'StagingXcmV4Junction') {
|
|
48
|
+
extractedLookupName = sub.lookupName;
|
|
49
|
+
}
|
|
50
|
+
else if (sub.lookupName === 'StagingXcmV5Junction') {
|
|
51
|
+
extractedLookupName = `Vec<${sub.lookupName}>`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const asGetter = type === 'Null' || info === types_create_1.TypeDefInfo.DoNotConstruct
|
|
55
|
+
? ''
|
|
56
|
+
: createGetter(definitions, `as${getter}`, lookupName || extractedLookupName || (isComplex ? (0, index_js_1.formatType)(registry, definitions, info === types_create_1.TypeDefInfo.Struct ? def : type, imports, withShortcut) : type), imports);
|
|
57
|
+
const isGetter = info === types_create_1.TypeDefInfo.DoNotConstruct
|
|
58
|
+
? ''
|
|
59
|
+
: createGetter(definitions, `is${getter}`, 'boolean', imports);
|
|
60
|
+
switch (info) {
|
|
61
|
+
case types_create_1.TypeDefInfo.Compact:
|
|
62
|
+
case types_create_1.TypeDefInfo.Plain:
|
|
63
|
+
case types_create_1.TypeDefInfo.Range:
|
|
64
|
+
case types_create_1.TypeDefInfo.RangeInclusive:
|
|
65
|
+
case types_create_1.TypeDefInfo.Result:
|
|
66
|
+
case types_create_1.TypeDefInfo.Si:
|
|
67
|
+
case types_create_1.TypeDefInfo.Struct:
|
|
68
|
+
case types_create_1.TypeDefInfo.Tuple:
|
|
69
|
+
case types_create_1.TypeDefInfo.Vec:
|
|
70
|
+
case types_create_1.TypeDefInfo.BTreeMap:
|
|
71
|
+
case types_create_1.TypeDefInfo.BTreeSet:
|
|
72
|
+
case types_create_1.TypeDefInfo.Option:
|
|
73
|
+
case types_create_1.TypeDefInfo.VecFixed:
|
|
74
|
+
case types_create_1.TypeDefInfo.WrapperKeepOpaque:
|
|
75
|
+
case types_create_1.TypeDefInfo.WrapperOpaque:
|
|
76
|
+
return `${indent}${isGetter}${indent}${asGetter}`;
|
|
77
|
+
case types_create_1.TypeDefInfo.DoNotConstruct:
|
|
78
|
+
case types_create_1.TypeDefInfo.Null:
|
|
79
|
+
return `${indent}${isGetter}`;
|
|
80
|
+
default:
|
|
81
|
+
throw new Error(`Enum: ${enumName || 'undefined'}: Unhandled type ${types_create_1.TypeDefInfo[info]}, ${(0, util_1.stringify)(def)}`);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return (0, index_js_1.exportInterface)(lookupIndex, enumName, 'Enum', `${keys.join('')} ${indent}readonly type: ${named.map(({ name = '' }) => `'${(0, util_1.stringPascalCase)(name.replace(' ', '_'))}'`).join(' | ')};\n`, withShortcut);
|
|
85
|
+
}
|
|
86
|
+
function tsInt(_, definitions, def, imports, type = 'Int') {
|
|
87
|
+
(0, index_js_1.setImports)(definitions, imports, [type]);
|
|
88
|
+
return (0, index_js_1.exportInterface)(def.lookupIndex, def.name, type);
|
|
89
|
+
}
|
|
90
|
+
/** @internal */
|
|
91
|
+
function tsNull(_registry, definitions, { lookupIndex = -1, name }, imports) {
|
|
92
|
+
(0, index_js_1.setImports)(definitions, imports, ['Null']);
|
|
93
|
+
// * @description extends [[${base}]]
|
|
94
|
+
const doc = `/** @name ${name || ''}${lookupIndex !== -1 ? ` (${lookupIndex})` : ''} */\n`;
|
|
95
|
+
return `${doc}export type ${name || ''} = Null;`;
|
|
96
|
+
}
|
|
97
|
+
/** @internal */
|
|
98
|
+
function tsResultGetter(registry, definitions, resultName = '', getter, def, imports) {
|
|
99
|
+
const { info, lookupName, type } = def;
|
|
100
|
+
const asGetter = type === 'Null'
|
|
101
|
+
? ''
|
|
102
|
+
: createGetter(definitions, `as${getter}`, lookupName || (info === types_create_1.TypeDefInfo.Tuple ? (0, index_js_1.formatType)(registry, definitions, def, imports, false) : type), imports);
|
|
103
|
+
const isGetter = createGetter(definitions, `is${getter}`, 'boolean', imports);
|
|
104
|
+
switch (info) {
|
|
105
|
+
case types_create_1.TypeDefInfo.Option:
|
|
106
|
+
case types_create_1.TypeDefInfo.Plain:
|
|
107
|
+
case types_create_1.TypeDefInfo.Si:
|
|
108
|
+
case types_create_1.TypeDefInfo.Tuple:
|
|
109
|
+
case types_create_1.TypeDefInfo.Vec:
|
|
110
|
+
case types_create_1.TypeDefInfo.BTreeMap:
|
|
111
|
+
case types_create_1.TypeDefInfo.BTreeSet:
|
|
112
|
+
case types_create_1.TypeDefInfo.WrapperKeepOpaque:
|
|
113
|
+
case types_create_1.TypeDefInfo.WrapperOpaque:
|
|
114
|
+
return `${isGetter}${asGetter}`;
|
|
115
|
+
case types_create_1.TypeDefInfo.Null:
|
|
116
|
+
return `${isGetter}`;
|
|
117
|
+
default:
|
|
118
|
+
throw new Error(`Result: ${resultName}: Unhandled type ${types_create_1.TypeDefInfo[info]}, ${(0, util_1.stringify)(def)}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** @internal */
|
|
122
|
+
function tsResult(registry, definitions, def, imports) {
|
|
123
|
+
const [okDef, errorDef] = def.sub;
|
|
124
|
+
const inner = [
|
|
125
|
+
tsResultGetter(registry, definitions, def.name, 'Err', errorDef, imports),
|
|
126
|
+
tsResultGetter(registry, definitions, def.name, 'Ok', okDef, imports)
|
|
127
|
+
].join('');
|
|
128
|
+
(0, index_js_1.setImports)(definitions, imports, [def.type]);
|
|
129
|
+
const fmtType = def.lookupName && def.name !== def.lookupName
|
|
130
|
+
? def.lookupName
|
|
131
|
+
: (0, index_js_1.formatType)(registry, definitions, def, imports, false);
|
|
132
|
+
return (0, index_js_1.exportInterface)(def.lookupIndex, def.name, fmtType, inner);
|
|
133
|
+
}
|
|
134
|
+
/** @internal */
|
|
135
|
+
function tsSi(_registry, _definitions, typeDef, _imports) {
|
|
136
|
+
// FIXME
|
|
137
|
+
return `// SI: ${(0, util_1.stringify)(typeDef)}`;
|
|
138
|
+
}
|
|
139
|
+
/** @internal */
|
|
140
|
+
function tsSet(_, definitions, { lookupIndex, name: setName, sub }, imports) {
|
|
141
|
+
(0, index_js_1.setImports)(definitions, imports, ['Set']);
|
|
142
|
+
const types = sub.map(({ name }) => {
|
|
143
|
+
(0, util_1.assert)(name, 'Invalid TypeDef found, no name specified');
|
|
144
|
+
return createGetter(definitions, `is${name}`, 'boolean', imports);
|
|
145
|
+
});
|
|
146
|
+
return (0, index_js_1.exportInterface)(lookupIndex, setName, 'Set', types.join(''));
|
|
147
|
+
}
|
|
148
|
+
/** @internal */
|
|
149
|
+
function tsStruct(registry, definitions, { lookupIndex, name: structName, sub }, imports) {
|
|
150
|
+
(0, index_js_1.setImports)(definitions, imports, ['Struct']);
|
|
151
|
+
const keys = sub.map((def) => {
|
|
152
|
+
const fmtType = def.lookupName && def.name !== def.lookupName
|
|
153
|
+
? def.lookupName
|
|
154
|
+
: def.info === types_create_1.TypeDefInfo.Enum
|
|
155
|
+
? `${tsEnum(registry, definitions, def, imports, true)} & Enum`
|
|
156
|
+
: (0, index_js_1.formatType)(registry, definitions, def, imports, false);
|
|
157
|
+
return createGetter(definitions, def.name, fmtType, imports);
|
|
158
|
+
});
|
|
159
|
+
return (0, index_js_1.exportInterface)(lookupIndex, structName, 'Struct', keys.join(''));
|
|
160
|
+
}
|
|
161
|
+
/** @internal */
|
|
162
|
+
function tsUInt(registry, definitions, def, imports) {
|
|
163
|
+
return tsInt(registry, definitions, def, imports, 'UInt');
|
|
164
|
+
}
|
|
165
|
+
/** @internal */
|
|
166
|
+
function tsVec(registry, definitions, def, imports) {
|
|
167
|
+
const type = def.sub.type;
|
|
168
|
+
if (type === 'u8') {
|
|
169
|
+
if (def.info === types_create_1.TypeDefInfo.VecFixed) {
|
|
170
|
+
(0, index_js_1.setImports)(definitions, imports, ['U8aFixed']);
|
|
171
|
+
return (0, index_js_1.exportInterface)(def.lookupIndex, def.name, 'U8aFixed');
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
(0, index_js_1.setImports)(definitions, imports, ['Bytes']);
|
|
175
|
+
return (0, index_js_1.exportInterface)(def.lookupIndex, def.name, 'Bytes');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const fmtType = def.lookupName && def.name !== def.lookupName
|
|
179
|
+
? def.lookupName
|
|
180
|
+
: (0, index_js_1.formatType)(registry, definitions, def, imports, false);
|
|
181
|
+
return (0, index_js_1.exportInterface)(def.lookupIndex, def.name, fmtType);
|
|
182
|
+
}
|
|
183
|
+
exports.typeEncoders = {
|
|
184
|
+
[types_create_1.TypeDefInfo.BTreeMap]: tsExport,
|
|
185
|
+
[types_create_1.TypeDefInfo.BTreeSet]: tsExport,
|
|
186
|
+
[types_create_1.TypeDefInfo.Compact]: tsExport,
|
|
187
|
+
[types_create_1.TypeDefInfo.DoNotConstruct]: tsExport,
|
|
188
|
+
[types_create_1.TypeDefInfo.Enum]: tsEnum,
|
|
189
|
+
[types_create_1.TypeDefInfo.HashMap]: tsExport,
|
|
190
|
+
[types_create_1.TypeDefInfo.Int]: tsInt,
|
|
191
|
+
[types_create_1.TypeDefInfo.Linkage]: errorUnhandled,
|
|
192
|
+
[types_create_1.TypeDefInfo.Null]: tsNull,
|
|
193
|
+
[types_create_1.TypeDefInfo.Option]: tsExport,
|
|
194
|
+
[types_create_1.TypeDefInfo.Plain]: tsExport,
|
|
195
|
+
[types_create_1.TypeDefInfo.Range]: tsExport,
|
|
196
|
+
[types_create_1.TypeDefInfo.RangeInclusive]: tsExport,
|
|
197
|
+
[types_create_1.TypeDefInfo.Result]: tsResult,
|
|
198
|
+
[types_create_1.TypeDefInfo.Set]: tsSet,
|
|
199
|
+
[types_create_1.TypeDefInfo.Si]: tsSi,
|
|
200
|
+
[types_create_1.TypeDefInfo.Struct]: tsStruct,
|
|
201
|
+
[types_create_1.TypeDefInfo.Tuple]: tsExport,
|
|
202
|
+
[types_create_1.TypeDefInfo.UInt]: tsUInt,
|
|
203
|
+
[types_create_1.TypeDefInfo.Vec]: tsVec,
|
|
204
|
+
[types_create_1.TypeDefInfo.VecFixed]: tsVec,
|
|
205
|
+
[types_create_1.TypeDefInfo.WrapperKeepOpaque]: tsExport,
|
|
206
|
+
[types_create_1.TypeDefInfo.WrapperOpaque]: tsExport
|
|
207
|
+
};
|
|
208
|
+
/** @internal */
|
|
209
|
+
function generateInterfaces(registry, definitions, { types }, imports) {
|
|
210
|
+
return Object.entries(types).map(([name, type]) => {
|
|
211
|
+
const def = (0, types_create_1.getTypeDef)((0, util_1.isString)(type) ? type : (0, util_1.stringify)(type), { name });
|
|
212
|
+
return [name, exports.typeEncoders[def.info](registry, definitions, def, imports)];
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/** @internal */
|
|
216
|
+
function generateTsDefFor(registry, importDefinitions, defName, { types }, outputDir) {
|
|
217
|
+
const imports = { ...(0, index_js_1.createImports)(importDefinitions, { types }), interfaces: [] };
|
|
218
|
+
const definitions = imports.definitions;
|
|
219
|
+
const interfaces = generateInterfaces(registry, definitions, { types }, imports);
|
|
220
|
+
const items = interfaces.sort((a, b) => a[0].localeCompare(b[0])).map(([, definition]) => definition);
|
|
221
|
+
(0, index_js_1.writeFile)(node_path_1.default.join(outputDir, defName, 'types.ts'), () => generateTsDefModuleTypesTemplate({
|
|
222
|
+
headerType: 'defs',
|
|
223
|
+
imports,
|
|
224
|
+
items,
|
|
225
|
+
name: defName,
|
|
226
|
+
types: [
|
|
227
|
+
...Object.keys(imports.localTypes).sort().map((packagePath) => ({
|
|
228
|
+
file: packagePath.replace('@pezkuwi/types/augment', '@pezkuwi/types'),
|
|
229
|
+
types: Object.keys(imports.localTypes[packagePath])
|
|
230
|
+
}))
|
|
231
|
+
]
|
|
232
|
+
}), true);
|
|
233
|
+
(0, index_js_1.writeFile)(node_path_1.default.join(outputDir, defName, 'index.ts'), () => generateTsDefIndexTemplate({ headerType: 'defs' }), true);
|
|
234
|
+
}
|
|
235
|
+
/** @internal */
|
|
236
|
+
function generateTsDef(importDefinitions, outputDir, generatingPackage) {
|
|
237
|
+
const registry = new create_1.TypeRegistry();
|
|
238
|
+
(0, index_js_1.writeFile)(node_path_1.default.join(outputDir, 'types.ts'), () => {
|
|
239
|
+
const definitions = importDefinitions[generatingPackage];
|
|
240
|
+
Object.entries(definitions).forEach(([defName, obj]) => {
|
|
241
|
+
console.log(`\tExtracting interfaces for ${defName}`);
|
|
242
|
+
generateTsDefFor(registry, importDefinitions, defName, obj, outputDir);
|
|
243
|
+
});
|
|
244
|
+
return generateTsDefTypesTemplate({
|
|
245
|
+
headerType: 'defs',
|
|
246
|
+
items: Object.keys(definitions)
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
(0, index_js_1.writeFile)(node_path_1.default.join(outputDir, 'index.ts'), () => generateTsDefIndexTemplate({ headerType: 'defs' }), true);
|
|
250
|
+
}
|
|
251
|
+
/** @internal */
|
|
252
|
+
function generateDefaultTsDef() {
|
|
253
|
+
generateTsDef({ '@pezkuwi/types/interfaces': defaultDefinitions }, 'packages/types/src/interfaces', '@pezkuwi/types/interfaces');
|
|
254
|
+
}
|