UNPKG

@ocap/statedb-memory

Version:

OCAP statedb adapter that uses memory as backend statedb, just for test purpose

42 lines (40 loc) 2.03 kB
Object.defineProperty(exports, '__esModule', { value: true }); const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs'); const require_table_base = require('./base.cjs'); let _ocap_statedb = require("@ocap/statedb"); let _ocap_state_lib_states_account = require("@ocap/state/lib/states/account"); //#region src/table/account.ts /** * Account 表 * 扩展基础表,增加账户迁移追踪功能 */ var AccountStateDB = class extends require_table_base.default { async _get(address, context = {}) { const { traceMigration = true } = context; const normalizedAddress = (0, _ocap_state_lib_states_account.ensureChecksumAddress)(address); if (!traceMigration) return super._get(normalizedAddress, context); return (0, _ocap_statedb.followMigrationChain)(normalizedAddress, (addr) => super._get(addr, context), _ocap_state_lib_states_account.ensureChecksumAddress); } async _create(key, attrs = {}, context) { const address = (0, _ocap_state_lib_states_account.ensureChecksumAddress)(key); const { migratedTo } = attrs; if (migratedTo?.length) { if (await (0, _ocap_statedb.wouldCreateMigrationCycle)(address, migratedTo, (addr) => super._get(addr, context), _ocap_state_lib_states_account.ensureChecksumAddress)) throw new Error(`Circular migration detected: ${address} -> ${migratedTo.join(", ")}`); } return super._create(address, { ...attrs, [this.uniqIndex]: address }, context); } async _update(key, updates, context) { const address = (0, _ocap_state_lib_states_account.ensureChecksumAddress)(key); const { migratedTo } = updates; if (migratedTo?.length) { if (await (0, _ocap_statedb.wouldCreateMigrationCycle)(address, migratedTo, (addr) => super._get(addr, context), _ocap_state_lib_states_account.ensureChecksumAddress)) throw new Error(`Circular migration detected: ${address} -> ${migratedTo.join(", ")}`); } return super._update(address, updates, context); } }; var account_default = AccountStateDB; //#endregion exports.default = account_default;