UNPKG

@gear-js/api

Version:

A JavaScript library that provides functionality to connect GEAR Component APIs.

73 lines (70 loc) 2.46 kB
import { TypeRegistry } from '@polkadot/types'; import { isJSON, toJSON } from '../utils/json.js'; import { GearMetadata } from './metadata.js'; import { gearTypes } from '../default/index.js'; class CreateType { registry; metadata; constructor(hexRegistry) { if (!hexRegistry) { this.registry = new TypeRegistry(); this.registerDefaultTypes(); } else { this.metadata = new GearMetadata(hexRegistry); } } registerDefaultTypes() { this.registry.setKnownTypes({ types: gearTypes }); this.registry.register(gearTypes); } /** * * @param type `TypeName` to encode or decode payload * @param payload `Payload` that have to be encoded or decoded * @returns Codec * @example * ```javascript * const createType = new CreateType(); * const encoded = createType.create('String', 'Hello, World'); * console.log(encoded.toHex()); // 0x48656c6c6f2c20576f726c6421 * * const decoded = createType.create('String', '0x48656c6c6f2c20576f726c6421'); * console.log(decoded.toHuman()); // "Hello, World!" */ create(typeOrTypeIndex, payload) { let [type, index] = typeof typeOrTypeIndex === 'string' ? [typeOrTypeIndex, undefined] : [undefined, typeOrTypeIndex]; if (payload === undefined) { payload = '0x'; } else if (isJSON(payload)) { payload = toJSON(payload); } if (type === undefined) { type = 'Bytes'; } if (this.metadata) { index = index || this.metadata.getTypeIndexByName(type); return this.metadata.createType(index, payload); } return this.registry.createType(type, payload); } /** * * @param type `TypeName` to encode or decode payload * @param payload `Payload` that have to be encoded or decoded * @param hexRegistry registry in hex format * @param defaultTypes set to true if you want to register default types too * @returns Codec * @example * ```javascript * const encoded = CreateType.create('String', 'Hello, World'); * console.log(encoded.toHex()); // 0x48656c6c6f2c20576f726c6421 * ``` */ static create(type, payload, hexRegistry) { const createType = new CreateType(hexRegistry); return createType.create(type, payload); } } export { CreateType };