@polkadot/types
Version:
Implementation of the Parity codec
48 lines (47 loc) • 1.86 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getUniqTypes = getUniqTypes;
const flattenUniq_js_1 = require("./flattenUniq.js");
const validateTypes_js_1 = require("./validateTypes.js");
/** @internal */
function extractTypes(lookup, types) {
return types.map(({ type }) => lookup.getTypeDef(type).type);
}
/** @internal */
function extractFieldTypes(lookup, type) {
return lookup.getSiType(type).def.asVariant.variants.map(({ fields }) => extractTypes(lookup, fields));
}
/** @internal */
function getPalletNames({ lookup, pallets }) {
return pallets.reduce((all, { calls, constants, events, storage }) => {
all.push([extractTypes(lookup, constants)]);
if (calls.isSome) {
all.push(extractFieldTypes(lookup, calls.unwrap().type));
}
if (events.isSome) {
all.push(extractFieldTypes(lookup, events.unwrap().type));
}
if (storage.isSome) {
all.push(storage.unwrap().items.map(({ type }) => {
if (type.isPlain) {
return [lookup.getTypeDef(type.asPlain).type];
}
const { hashers, key, value } = type.asMap;
return hashers.length === 1
? [
lookup.getTypeDef(value).type,
lookup.getTypeDef(key).type
]
: [
lookup.getTypeDef(value).type,
...lookup.getSiType(key).def.asTuple.map((t) => lookup.getTypeDef(t).type)
];
}));
}
return all;
}, []);
}
/** @internal */
function getUniqTypes(registry, meta, throwError) {
return (0, validateTypes_js_1.validateTypes)(registry, throwError, (0, flattenUniq_js_1.flattenUniq)(getPalletNames(meta)));
}
;