@gear-js/api
Version:
A JavaScript library that provides functionality to connect GEAR Component APIs.
75 lines (71 loc) • 2.5 kB
JavaScript
;
var types = require('@polkadot/types');
var json = require('../utils/json.js');
var metadata = require('./metadata.js');
var index = require('../default/index.js');
class CreateType {
registry;
metadata;
constructor(hexRegistry) {
if (!hexRegistry) {
this.registry = new types.TypeRegistry();
this.registerDefaultTypes();
}
else {
this.metadata = new metadata.GearMetadata(hexRegistry);
}
}
registerDefaultTypes() {
this.registry.setKnownTypes({ types: index.gearTypes });
this.registry.register(index.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 (json.isJSON(payload)) {
payload = json.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);
}
}
exports.CreateType = CreateType;