UNPKG

@metamask/ocap-kernel

Version:
1 lines 3.65 kB
{"version":3,"file":"crank.mjs","sourceRoot":"","sources":["../../../src/store/methods/crank.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,qBAAqB;AAKvC;;;;;;GAMG;AACH,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,GAAiB,EAAE,GAAmB;IACpE;;OAEG;IACH,SAAS,UAAU;QACjB,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAA,qCAAqC,CAAC;QAC1D,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,SAAS,oBAAoB,CAAC,IAAY;QACxC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAA,uCAAuC,CAAC;QAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QACtC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,GAAG,CAAC,eAAe,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,SAAS,aAAa,CAAC,SAAiB;QACtC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAA,gCAAgC,CAAC;QACpD,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1C,GAAG,CAAC,iBAAiB,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;gBACrC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;gBAChC,OAAO;YACT,CAAC;QACH,CAAC;QACD,IAAI,CAAA,yBAAyB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,SAAS,QAAQ;QACf,GAAG,CAAC,OAAO,IAAI,IAAI,CAAA,2BAA2B,CAAC;QAC/C,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC3B,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,SAAS,oBAAoB;QAC3B,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC3B,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU;QACV,oBAAoB;QACpB,aAAa;QACb,QAAQ;QACR,oBAAoB;KACrB,CAAC;AACJ,CAAC","sourcesContent":["import { Fail, q } from '@endo/errors';\nimport type { KernelDatabase } from '@metamask/kernel-store';\n\nimport type { StoreContext } from '../types.ts';\n\n/**\n * Get the crank methods.\n *\n * @param ctx - The store context.\n * @param kdb - The kernel database.\n * @returns The crank methods.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function getCrankMethods(ctx: StoreContext, kdb: KernelDatabase) {\n /**\n * Start a crank.\n */\n function startCrank(): void {\n !ctx.inCrank || Fail`startCrank while already in a crank`;\n ctx.inCrank = true;\n }\n\n /**\n * Create a savepoint in the crank.\n *\n * @param name - The savepoint name.\n */\n function createCrankSavepoint(name: string): void {\n ctx.inCrank || Fail`createCrankSavepoint outside of crank`;\n const ordinal = ctx.savepoints.length;\n ctx.savepoints.push(name);\n kdb.createSavepoint(`t${ordinal}`);\n }\n\n /**\n * Rollback a crank.\n *\n * @param savepoint - The savepoint name.\n */\n function rollbackCrank(savepoint: string): void {\n ctx.inCrank || Fail`rollbackCrank outside of crank`;\n for (const ordinal of ctx.savepoints.keys()) {\n if (ctx.savepoints[ordinal] === savepoint) {\n kdb.rollbackSavepoint(`t${ordinal}`);\n ctx.savepoints.length = ordinal;\n return;\n }\n }\n Fail`no such savepoint as \"${q(savepoint)}\"`;\n }\n\n /**\n * End a crank.\n */\n function endCrank(): void {\n ctx.inCrank || Fail`endCrank outside of crank`;\n if (ctx.savepoints.length > 0) {\n kdb.releaseSavepoint('t0');\n ctx.savepoints.length = 0;\n }\n ctx.inCrank = false;\n }\n\n /**\n * Release all savepoints.\n */\n function releaseAllSavepoints(): void {\n if (ctx.savepoints.length > 0) {\n kdb.releaseSavepoint('t0');\n ctx.savepoints.length = 0;\n }\n }\n\n return {\n startCrank,\n createCrankSavepoint,\n rollbackCrank,\n endCrank,\n releaseAllSavepoints,\n };\n}\n"]}