UNPKG

@open-web3/api-mobx

Version:
63 lines (45 loc) 1.84 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.createStorage = void 0; var _memoizee = _interopRequireDefault(require("memoizee")); var _util = require("@polkadot/util"); var _stateTracker = _interopRequireDefault(require("./stateTracker")); var _observableStorage = require("./observableStorage"); const createStorage = (api, ws) => { const obj = {}; const metadata = api.runtimeMetadata.asLatest; const tracker = new _stateTracker.default(ws); for (const moduleMetadata of metadata.pallets) { const moduleName = (0, _util.stringCamelCase)(moduleMetadata.name.toString()); const storage = {}; for (const entry of moduleMetadata.storage.unwrapOrDefault().items) { const type = entry.type; const entryName = (0, _util.stringCamelCase)(entry.name.toString()); if (type.isPlain) { const val = new _observableStorage.ObservableStorageEntry(api, tracker, moduleName, entryName); Object.defineProperty(storage, entryName, { configurable: false, enumerable: true, get: () => val.value }); } else if (type.isMap) { const accessorImpl = (0, _memoizee.default)(key => { return new _observableStorage.ObservableStorageEntry(api, tracker, moduleName, entryName, [key]); }); const accessor = key => accessorImpl(key.toString()).value; const entries = new _observableStorage.ObservableStorageMapEntries(api, tracker, moduleName, entryName); accessor.entries = () => entries.value; storage[entryName] = accessor; } } obj[moduleName] = storage; } obj.block = { get hash() { return tracker.blockHash; } }; return obj; }; exports.createStorage = createStorage;