{"ast":null,"code":"import * as hrana from \"@libsql/hrana-client\";\nimport { LibsqlError } from \"@libsql/core/api\";\nimport { transactionModeToBegin, ResultSetImpl } from \"@libsql/core/util\";\nexport class HranaTransaction {\n #mode;\n #version;\n // Promise that is resolved when the BEGIN statement completes, or `undefined` if we haven't executed the\n // BEGIN statement yet.\n #started;\n /** @private */\n constructor(mode, version) {\n this.#mode = mode;\n this.#version = version;\n this.#started = undefined;\n }\n execute(stmt) {\n return this.batch([stmt]).then(results => results[0]);\n }\n async batch(stmts) {\n const stream = this._getStream();\n if (stream.closed) {\n throw new LibsqlError(\"Cannot execute statements because the transaction is closed\", \"TRANSACTION_CLOSED\");\n }\n try {\n const hranaStmts = stmts.map(stmtToHrana);\n let rowsPromises;\n if (this.#started === undefined) {\n // The transaction hasn't started yet, so we need to send the BEGIN statement in a batch with\n // `hranaStmts`.\n this._getSqlCache().apply(hranaStmts);\n const batch = stream.batch(this.#version >= 3);\n const beginStep = batch.step();\n const beginPromise = beginStep.run(transactionModeToBegin(this.#mode));\n // Execute the `hranaStmts` only if the BEGIN succeeded, to make sure that we don't execute it\n // outside of a transaction.\n let lastStep = beginStep;\n rowsPromises = hranaStmts.map(hranaStmt => {\n const stmtStep = batch.step().condition(hrana.BatchCond.ok(lastStep));\n if (this.#version >= 3) {\n // If the Hrana version supports it, make sure that we are still in a transaction\n stmtStep.condition(hrana.BatchCond.not(hrana.BatchCond.isAutocommit(batch)));\n }\n const rowsPromise = stmtStep.query(hranaStmt);\n rowsPromise.catch(() => undefined); // silence Node warning\n lastStep = stmtStep;\n return rowsPromise;\n });\n // `this.#started` is resolved successfully only if the batch and the BEGIN statement inside\n // of the batch are both successful.\n this.#started = batch.execute().then(() => beginPromise).then(() => undefined);\n try {\n await this.#started;\n } catch (e) {\n // If the BEGIN failed, the transaction is unusable and we must close it. However, if the\n // BEGIN suceeds and `hranaStmts` fail, the transaction is _not_ closed.\n this.close();\n throw e;\n }\n } else {\n if (this.#version < 3) {\n // The transaction has started, so we must wait until the BEGIN statement completed to make\n // sure that we don't execute `hranaStmts` outside of a transaction.\n await this.#started;\n } else {\n // The transaction has started, but we will use `hrana.BatchCond.isAutocommit()` to make\n // sure that we don't execute `hranaStmts` outside of a transaction, so we don't have to\n // wait for `this.#started`\n }\n this._getSqlCache().apply(hranaStmts);\n const batch = stream.batch(this.#version >= 3);\n let lastStep = undefined;\n rowsPromises = hranaStmts.map(hranaStmt => {\n const stmtStep = batch.step();\n if (lastStep !== undefined) {\n stmtStep.condition(hrana.BatchCond.ok(lastStep));\n }\n if (this.#version >= 3) {\n stmtStep.condition(hrana.BatchCond.not(hrana.BatchCond.isAutocommit(batch)));\n }\n const rowsPromise = stmtStep.query(hranaStmt);\n rowsPromise.catch(() => undefined); // silence Node warning\n lastStep = stmtStep;\n return rowsPromise;\n });\n await batch.execute();\n }\n const resultSets = [];\n for (const rowsPromise of rowsPromises) {\n const rows = await rowsPromise;\n if (rows === undefined) {\n throw new LibsqlError(\"Statement in a transaction was not executed, \" + \"probably because the transaction has been rolled back\", \"TRANSACTION_CLOSED\");\n }\n resultSets.push(resultSetFromHrana(rows));\n }\n return resultSets;\n } catch (e) {\n throw mapHranaError(e);\n }\n }\n async executeMultiple(sql) {\n const stream = this._getStream();\n if (stream.closed) {\n throw new LibsqlError(\"Cannot execute statements because the transaction is closed\", \"TRANSACTION_CLOSED\");\n }\n try {\n if (this.#started === undefined) {\n // If the transaction hasn't started yet, start it now\n this.#started = stream.run(transactionModeToBegin(this.#mode)).then(() => undefined);\n try {\n await this.#started;\n } catch (e) {\n this.close();\n throw e;\n }\n } else {\n // Wait until the transaction has started\n await this.#started;\n }\n await stream.sequence(sql);\n } catch (e) {\n throw mapHranaError(e);\n }\n }\n async rollback() {\n try {\n const stream = this._getStream();\n if (stream.closed) {\n return;\n }\n if (this.#started !== undefined) {\n // We don't have to wait for the BEGIN statement to complete. If the BEGIN fails, we will\n // execute a ROLLBACK outside of an active transaction, which should be harmless.\n } else {\n // We did nothing in the transaction, so there is nothing to rollback.\n return;\n }\n // Pipeline the ROLLBACK statement and the stream close.\n const promise = stream.run(\"ROLLBACK\").catch(e => {\n throw mapHranaError(e);\n });\n stream.closeGracefully();\n await promise;\n } catch (e) {\n throw mapHranaError(e);\n } finally {\n // `this.close()` may close the `hrana.Client`, which aborts all pending stream requests, so we\n // must call it _after_ we receive the ROLLBACK response.\n // Also note that the current stream should already be closed, but we need to call `this.close()`\n // anyway, because it may need to do more cleanup.\n this.close();\n }\n }\n async commit() {\n // (this method is analogous to `rollback()`)\n try {\n const stream = this._getStream();\n if (stream.closed) {\n throw new LibsqlError(\"Cannot commit the transaction because it is already closed\", \"TRANSACTION_CLOSED\");\n }\n if (this.#started !== undefined) {\n // Make sure to execute the COMMIT only if the BEGIN was successful.\n await this.#started;\n } else {\n return;\n }\n const promise = stream.run(\"COMMIT\").catch(e => {\n throw mapHranaError(e);\n });\n stream.closeGracefully();\n await promise;\n } catch (e) {\n throw mapHranaError(e);\n } finally {\n this.close();\n }\n }\n}\nexport async function executeHranaBatch(mode, version, batch, hranaStmts, disableForeignKeys = false) {\n if (disableForeignKeys) {\n batch.step().run(\"PRAGMA foreign_keys=off\");\n }\n const beginStep = batch.step();\n const beginPromise = beginStep.run(transactionModeToBegin(mode));\n let lastStep = beginStep;\n const stmtPromises = hranaStmts.map(hranaStmt => {\n const stmtStep = batch.step().condition(hrana.BatchCond.ok(lastStep));\n if (version >= 3) {\n stmtStep.condition(hrana.BatchCond.not(hrana.BatchCond.isAutocommit(batch)));\n }\n const stmtPromise = stmtStep.query(hranaStmt);\n lastStep = stmtStep;\n return stmtPromise;\n });\n const commitStep = batch.step().condition(hrana.BatchCond.ok(lastStep));\n if (version >= 3) {\n commitStep.condition(hrana.BatchCond.not(hrana.BatchCond.isAutocommit(batch)));\n }\n const commitPromise = commitStep.run(\"COMMIT\");\n const rollbackStep = batch.step().condition(hrana.BatchCond.not(hrana.BatchCond.ok(commitStep)));\n rollbackStep.run(\"ROLLBACK\").catch(_ => undefined);\n if (disableForeignKeys) {\n batch.step().run(\"PRAGMA foreign_keys=on\");\n }\n await batch.execute();\n const resultSets = [];\n await beginPromise;\n for (const stmtPromise of stmtPromises) {\n const hranaRows = await stmtPromise;\n if (hranaRows === undefined) {\n throw new LibsqlError(\"Statement in a batch was not executed, probably because the transaction has been rolled back\", \"TRANSACTION_CLOSED\");\n }\n resultSets.push(resultSetFromHrana(hranaRows));\n }\n await commitPromise;\n return resultSets;\n}\nexport function stmtToHrana(stmt) {\n if (typeof stmt === \"string\") {\n return new hrana.Stmt(stmt);\n }\n const hranaStmt = new hrana.Stmt(stmt.sql);\n if (Array.isArray(stmt.args)) {\n hranaStmt.bindIndexes(stmt.args);\n } else {\n for (const [key, value] of Object.entries(stmt.args)) {\n hranaStmt.bindName(key, value);\n }\n }\n return hranaStmt;\n}\nexport function resultSetFromHrana(hranaRows) {\n const columns = hranaRows.columnNames.map(c => c ?? \"\");\n const columnTypes = hranaRows.columnDecltypes.map(c => c ?? \"\");\n const rows = hranaRows.rows;\n const rowsAffected = hranaRows.affectedRowCount;\n const lastInsertRowid = hranaRows.lastInsertRowid !== undefined ? hranaRows.lastInsertRowid : undefined;\n return new ResultSetImpl(columns, columnTypes, rows, rowsAffected, lastInsertRowid);\n}\nexport function mapHranaError(e) {\n if (e instanceof hrana.ClientError) {\n const code = mapHranaErrorCode(e);\n return new LibsqlError(e.message, code, undefined, e);\n }\n return e;\n}\nfunction mapHranaErrorCode(e) {\n if (e instanceof hrana.ResponseError && e.code !== undefined) {\n return e.code;\n } else if (e instanceof hrana.ProtoError) {\n return \"HRANA_PROTO_ERROR\";\n } else if (e instanceof hrana.ClosedError) {\n return e.cause instanceof hrana.ClientError ? mapHranaErrorCode(e.cause) : \"HRANA_CLOSED_ERROR\";\n } else if (e instanceof hrana.WebSocketError) {\n return \"HRANA_WEBSOCKET_ERROR\";\n } else if (e instanceof hrana.HttpServerError) {\n return \"SERVER_ERROR\";\n } else if (e instanceof hrana.ProtocolVersionError) {\n return \"PROTOCOL_VERSION_ERROR\";\n } else if (e instanceof hrana.InternalError) {\n return \"INTERNAL_ERROR\";\n } else {\n return \"UNKNOWN\";\n }\n}","map":{"version":3,"names":["hrana","LibsqlError","transactionModeToBegin","ResultSetImpl","HranaTransaction","mode","version","started","constructor","undefined","execute","stmt","batch","then","results","stmts","stream","_getStream","closed","hranaStmts","map","stmtToHrana","rowsPromises","_getSqlCache","apply","beginStep","step","beginPromise","run","lastStep","hranaStmt","stmtStep","condition","BatchCond","ok","not","isAutocommit","rowsPromise","query","catch","e","close","resultSets","rows","push","resultSetFromHrana","mapHranaError","executeMultiple","sql","sequence","rollback","promise","closeGracefully","commit","executeHranaBatch","disableForeignKeys","stmtPromises","stmtPromise","commitStep","commitPromise","rollbackStep","_","hranaRows","Stmt","Array","isArray","args","bindIndexes","key","value","Object","entries","bindName","columns","columnNames","c","columnTypes","columnDecltypes","rowsAffected","affectedRowCount","lastInsertRowid","ClientError","code","mapHranaErrorCode","message","ResponseError","ProtoError","ClosedError","cause","WebSocketError","HttpServerError","ProtocolVersionError","InternalError"],"sources":["/Users/shoofle/Projects/the-forest/node_modules/@libsql/client/lib-esm/hrana.js"],"sourcesContent":["import * as hrana from \"@libsql/hrana-client\";\nimport { LibsqlError } from \"@libsql/core/api\";\nimport { transactionModeToBegin, ResultSetImpl } from \"@libsql/core/util\";\nexport class HranaTransaction {\n #mode;\n #version;\n // Promise that is resolved when the BEGIN statement completes, or `undefined` if we haven't executed the\n // BEGIN statement yet.\n #started;\n /** @private */\n constructor(mode, version) {\n this.#mode = mode;\n this.#version = version;\n this.#started = undefined;\n }\n execute(stmt) {\n return this.batch([stmt]).then((results) => results[0]);\n }\n async batch(stmts) {\n const stream = this._getStream();\n if (stream.closed) {\n throw new LibsqlError(\"Cannot execute statements because the transaction is closed\", \"TRANSACTION_CLOSED\");\n }\n try {\n const hranaStmts = stmts.map(stmtToHrana);\n let rowsPromises;\n if (this.#started === undefined) {\n // The transaction hasn't started yet, so we need to send the BEGIN statement in a batch with\n // `hranaStmts`.\n this._getSqlCache().apply(hranaStmts);\n const batch = stream.batch(this.#version >= 3);\n const beginStep = batch.step();\n const beginPromise = beginStep.run(transactionModeToBegin(this.#mode));\n // Execute the `hranaStmts` only if the BEGIN succeeded, to make sure that we don't execute it\n // outside of a transaction.\n let lastStep = beginStep;\n rowsPromises = hranaStmts.map((hranaStmt) => {\n const stmtStep = batch\n .step()\n .condition(hrana.BatchCond.ok(lastStep));\n if (this.#version >= 3) {\n // If the Hrana version supports it, make sure that we are still in a transaction\n stmtStep.condition(hrana.BatchCond.not(hrana.BatchCond.isAutocommit(batch)));\n }\n const rowsPromise = stmtStep.query(hranaStmt);\n rowsPromise.catch(() => undefined); // silence Node warning\n lastStep = stmtStep;\n return rowsPromise;\n });\n // `this.#started` is resolved successfully only if the batch and the BEGIN statement inside\n // of the batch are both successful.\n this.#started = batch\n .execute()\n .then(() => beginPromise)\n .then(() => undefined);\n try {\n await this.#started;\n }\n catch (e) {\n // If the BEGIN failed, the transaction is unusable and we must close it. However, if the\n // BEGIN suceeds and `hranaStmts` fail, the transaction is _not_ closed.\n this.close();\n throw e;\n }\n }\n else {\n if (this.#version < 3) {\n // The transaction has started, so we must wait until the BEGIN statement completed to make\n // sure that we don't execute `hranaStmts` outside of a transaction.\n await this.#started;\n }\n else {\n // The transaction has started, but we will use `hrana.BatchCond.isAutocommit()` to make\n // sure that we don't execute `hranaStmts` outside of a transaction, so we don't have to\n // wait for `this.#started`\n }\n this._getSqlCache().apply(hranaStmts);\n const batch = stream.batch(this.#version >= 3);\n let lastStep = undefined;\n rowsPromises = hranaStmts.map((hranaStmt) => {\n const stmtStep = batch.step();\n if (lastStep !== undefined) {\n stmtStep.condition(hrana.BatchCond.ok(lastStep));\n }\n if (this.#version >= 3) {\n stmtStep.condition(hrana.BatchCond.not(hrana.BatchCond.isAutocommit(batch)));\n }\n const rowsPromise = stmtStep.query(hranaStmt);\n rowsPromise.catch(() => undefined); // silence Node warning\n lastStep = stmtStep;\n return rowsPromise;\n });\n await batch.execute();\n }\n const resultSets = [];\n for (const rowsPromise of rowsPromises) {\n const rows = await rowsPromise;\n if (rows === undefined) {\n throw new LibsqlError(\"Statement in a transaction was not executed, \" +\n \"probably because the transaction has been rolled back\", \"TRANSACTION_CLOSED\");\n }\n resultSets.push(resultSetFromHrana(rows));\n }\n return resultSets;\n }\n catch (e) {\n throw mapHranaError(e);\n }\n }\n async executeMultiple(sql) {\n const stream = this._getStream();\n if (stream.closed) {\n throw new LibsqlError(\"Cannot execute statements because the transaction is closed\", \"TRANSACTION_CLOSED\");\n }\n try {\n if (this.#started === undefined) {\n // If the transaction hasn't started yet, start it now\n this.#started = stream\n .run(transactionModeToBegin(this.#mode))\n .then(() => undefined);\n try {\n await this.#started;\n }\n catch (e) {\n this.close();\n throw e;\n }\n }\n else {\n // Wait until the transaction has started\n await this.#started;\n }\n await stream.sequence(sql);\n }\n catch (e) {\n throw mapHranaError(e);\n }\n }\n async rollback() {\n try {\n const stream = this._getStream();\n if (stream.closed) {\n return;\n }\n if (this.#started !== undefined) {\n // We don't have to wait for the BEGIN statement to complete. If the BEGIN fails, we will\n // execute a ROLLBACK outside of an active transaction, which should be harmless.\n }\n else {\n // We did nothing in the transaction, so there is nothing to rollback.\n return;\n }\n // Pipeline the ROLLBACK statement and the stream close.\n const promise = stream.run(\"ROLLBACK\").catch((e) => {\n throw mapHranaError(e);\n });\n stream.closeGracefully();\n await promise;\n }\n catch (e) {\n throw mapHranaError(e);\n }\n finally {\n // `this.close()` may close the `hrana.Client`, which aborts all pending stream requests, so we\n // must call it _after_ we receive the ROLLBACK response.\n // Also note that the current stream should already be closed, but we need to call `this.close()`\n // anyway, because it may need to do more cleanup.\n this.close();\n }\n }\n async commit() {\n // (this method is analogous to `rollback()`)\n try {\n const stream = this._getStream();\n if (stream.closed) {\n throw new LibsqlError(\"Cannot commit the transaction because it is already closed\", \"TRANSACTION_CLOSED\");\n }\n if (this.#started !== undefined) {\n // Make sure to execute the COMMIT only if the BEGIN was successful.\n await this.#started;\n }\n else {\n return;\n }\n const promise = stream.run(\"COMMIT\").catch((e) => {\n throw mapHranaError(e);\n });\n stream.closeGracefully();\n await promise;\n }\n catch (e) {\n throw mapHranaError(e);\n }\n finally {\n this.close();\n }\n }\n}\nexport async function executeHranaBatch(mode, version, batch, hranaStmts, disableForeignKeys = false) {\n if (disableForeignKeys) {\n batch.step().run(\"PRAGMA foreign_keys=off\");\n }\n const beginStep = batch.step();\n const beginPromise = beginStep.run(transactionModeToBegin(mode));\n let lastStep = beginStep;\n const stmtPromises = hranaStmts.map((hranaStmt) => {\n const stmtStep = batch.step().condition(hrana.BatchCond.ok(lastStep));\n if (version >= 3) {\n stmtStep.condition(hrana.BatchCond.not(hrana.BatchCond.isAutocommit(batch)));\n }\n const stmtPromise = stmtStep.query(hranaStmt);\n lastStep = stmtStep;\n return stmtPromise;\n });\n const commitStep = batch.step().condition(hrana.BatchCond.ok(lastStep));\n if (version >= 3) {\n commitStep.condition(hrana.BatchCond.not(hrana.BatchCond.isAutocommit(batch)));\n }\n const commitPromise = commitStep.run(\"COMMIT\");\n const rollbackStep = batch\n .step()\n .condition(hrana.BatchCond.not(hrana.BatchCond.ok(commitStep)));\n rollbackStep.run(\"ROLLBACK\").catch((_) => undefined);\n if (disableForeignKeys) {\n batch.step().run(\"PRAGMA foreign_keys=on\");\n }\n await batch.execute();\n const resultSets = [];\n await beginPromise;\n for (const stmtPromise of stmtPromises) {\n const hranaRows = await stmtPromise;\n if (hranaRows === undefined) {\n throw new LibsqlError(\"Statement in a batch was not executed, probably because the transaction has been rolled back\", \"TRANSACTION_CLOSED\");\n }\n resultSets.push(resultSetFromHrana(hranaRows));\n }\n await commitPromise;\n return resultSets;\n}\nexport function stmtToHrana(stmt) {\n if (typeof stmt === \"string\") {\n return new hrana.Stmt(stmt);\n }\n const hranaStmt = new hrana.Stmt(stmt.sql);\n if (Array.isArray(stmt.args)) {\n hranaStmt.bindIndexes(stmt.args);\n }\n else {\n for (const [key, value] of Object.entries(stmt.args)) {\n hranaStmt.bindName(key, value);\n }\n }\n return hranaStmt;\n}\nexport function resultSetFromHrana(hranaRows) {\n const columns = hranaRows.columnNames.map((c) => c ?? \"\");\n const columnTypes = hranaRows.columnDecltypes.map((c) => c ?? \"\");\n const rows = hranaRows.rows;\n const rowsAffected = hranaRows.affectedRowCount;\n const lastInsertRowid = hranaRows.lastInsertRowid !== undefined\n ? hranaRows.lastInsertRowid\n : undefined;\n return new ResultSetImpl(columns, columnTypes, rows, rowsAffected, lastInsertRowid);\n}\nexport function mapHranaError(e) {\n if (e instanceof hrana.ClientError) {\n const code = mapHranaErrorCode(e);\n return new LibsqlError(e.message, code, undefined, e);\n }\n return e;\n}\nfunction mapHranaErrorCode(e) {\n if (e instanceof hrana.ResponseError && e.code !== undefined) {\n return e.code;\n }\n else if (e instanceof hrana.ProtoError) {\n return \"HRANA_PROTO_ERROR\";\n }\n else if (e instanceof hrana.ClosedError) {\n return e.cause instanceof hrana.ClientError\n ? mapHranaErrorCode(e.cause)\n : \"HRANA_CLOSED_ERROR\";\n }\n else if (e instanceof hrana.WebSocketError) {\n return \"HRANA_WEBSOCKET_ERROR\";\n }\n else if (e instanceof hrana.HttpServerError) {\n return \"SERVER_ERROR\";\n }\n else if (e instanceof hrana.ProtocolVersionError) {\n return \"PROTOCOL_VERSION_ERROR\";\n }\n else if (e instanceof hrana.InternalError) {\n return \"INTERNAL_ERROR\";\n }\n else {\n return \"UNKNOWN\";\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}