@open-web3/api-mobx
Version:
MobX integration for polkadot.js
63 lines (45 loc) • 1.84 kB
JavaScript
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;
;