UNPKG

@metamask/ocap-kernel

Version:
76 lines 2.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCrankMethods = getCrankMethods; const errors_1 = require("@endo/errors"); /** * Get the crank methods. * * @param ctx - The store context. * @param kdb - The kernel database. * @returns The crank methods. */ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type function getCrankMethods(ctx, kdb) { /** * Start a crank. */ function startCrank() { !ctx.inCrank || (0, errors_1.Fail) `startCrank while already in a crank`; ctx.inCrank = true; } /** * Create a savepoint in the crank. * * @param name - The savepoint name. */ function createCrankSavepoint(name) { ctx.inCrank || (0, errors_1.Fail) `createCrankSavepoint outside of crank`; const ordinal = ctx.savepoints.length; ctx.savepoints.push(name); kdb.createSavepoint(`t${ordinal}`); } /** * Rollback a crank. * * @param savepoint - The savepoint name. */ function rollbackCrank(savepoint) { ctx.inCrank || (0, errors_1.Fail) `rollbackCrank outside of crank`; for (const ordinal of ctx.savepoints.keys()) { if (ctx.savepoints[ordinal] === savepoint) { kdb.rollbackSavepoint(`t${ordinal}`); ctx.savepoints.length = ordinal; return; } } (0, errors_1.Fail) `no such savepoint as "${(0, errors_1.q)(savepoint)}"`; } /** * End a crank. */ function endCrank() { ctx.inCrank || (0, errors_1.Fail) `endCrank outside of crank`; if (ctx.savepoints.length > 0) { kdb.releaseSavepoint('t0'); ctx.savepoints.length = 0; } ctx.inCrank = false; } /** * Release all savepoints. */ function releaseAllSavepoints() { if (ctx.savepoints.length > 0) { kdb.releaseSavepoint('t0'); ctx.savepoints.length = 0; } } return { startCrank, createCrankSavepoint, rollbackCrank, endCrank, releaseAllSavepoints, }; } //# sourceMappingURL=crank.cjs.map