@gear-js/api
Version:
A JavaScript library that provides functionality to connect GEAR Component APIs.
73 lines (70 loc) • 2.46 kB
JavaScript
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 };