{"version":3,"file":"index.mjs","sources":["../../../@hive/bun-driver/dist/index.mjs"],"sourcesContent":["import { access, constants, mkdir, stat, unlink } from \"node:fs/promises\";\nimport { Driver } from \"@hive/sdk/driver\";\nimport { UnexpectedErrorEvent } from \"@hive/sdk/events\";\nimport { formatDuration } from \"@hive/sdk/format\";\nimport { Operation } from \"@hive/sdk/operation\";\nimport { SENSIBLE_DEFAULTS } from \"@hive/sdk/sqlite\";\nimport { Database } from \"bun:sqlite\";\nimport { createReadStream } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { Connection } from \"@hive/sdk/connection\";\nimport { StatementExecutionError, StatementPreparationError } from \"@hive/sdk/errors\";\nimport { ByteStream, binaryToByteStream } from \"@hive/streams\";\n\n//#region src/connection/index.ts\nvar BunDatabaseConnection = class BunDatabaseConnection extends Connection {\n\t/**\n\t* Internal `Database` (from `bun:sqlite`) instance, facilitating\n\t* native SQLite functio bindings.\n\t*/\n\tdb;\n\t/**\n\t* If the binary contents are stored on disk, the path under which they\n\t* are stored.\n\t*/\n\tpath;\n\t/**\n\t* Logger instance to use for logging.\n\t*/\n\tlogger = null;\n\t/**\n\t* Error handler to invoke with any errors which might occur during\n\t* background tasks.\n\t*/\n\tonError = null;\n\tconstructor(contents, opts) {\n\t\tsuper();\n\t\tthis.path = typeof contents === \"string\" ? contents : null;\n\t\tthis.logger = opts?.logger ?? null;\n\t\tthis.onError = opts?.onError ?? null;\n\t\tthis.db = typeof contents === \"string\" ? new Database(contents) : Database.deserialize(contents);\n\t}\n\tgetSize = async () => {\n\t\tconst size = this.path && this.path !== \":memory:\" ? await stat(this.path).then(({ size: size$1 }) => size$1) : this.db.serialize().length;\n\t\treturn size;\n\t};\n\tgetContents = async () => {\n\t\tconst tmpDir = resolve(\".tmp\");\n\t\tif (this.path && this.path !== \":memory:\") {\n\t\t\tawait mkdir(tmpDir, { recursive: true });\n\t\t\tconst tmpDb = new Database(this.path);\n\t\t\tconst tmpPath = resolve(tmpDir, `${crypto.randomUUID()}.tmp`);\n\t\t\ttmpDb.run(\"PRAGMA wal_checkpoint(TRUNCATE);\");\n\t\t\ttmpDb.run(\"VACUUM INTO ?;\", [tmpPath]);\n\t\t\ttmpDb.close();\n\t\t\tconst { size } = await stat(tmpPath);\n\t\t\tconst nodeStream = createReadStream(tmpPath);\n\t\t\tconst webStream = Readable.toWeb(nodeStream);\n\t\t\tconst logger = this.logger;\n\t\t\tconst onError = this.onError;\n\t\t\tconst { readable, writable } = new TransformStream({\n\t\t\t\ttransform(chunk, controller) {\n\t\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t\t},\n\t\t\t\tflush() {\n\t\t\t\t\tunlink(tmpPath).catch((err) => {\n\t\t\t\t\t\tconst error = new Error(`Error cleaning up temporary file \\`${tmpPath}\\`: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t\t\tlogger?.error(\"error cleaning up temporary file\", {\n\t\t\t\t\t\t\tmodule: BunDatabaseConnection.name,\n\t\t\t\t\t\t\ttrace: crypto.randomUUID(),\n\t\t\t\t\t\t\tpath: tmpPath,\n\t\t\t\t\t\t\terror\n\t\t\t\t\t\t});\n\t\t\t\t\t\tonError?.(new UnexpectedErrorEvent({\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\ttrace: crypto.randomUUID()\n\t\t\t\t\t\t}));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\twebStream.pipeTo(writable).catch((err) => {\n\t\t\t\tunlink(tmpPath).catch((err$1) => {\n\t\t\t\t\tconst error = new Error(`Error cleaning up temporary file \\`${tmpPath}\\`: ${err$1 instanceof Error ? err$1.message : String(err$1)}`);\n\t\t\t\t\tlogger?.error(\"error cleaning up temporary file\", {\n\t\t\t\t\t\tmodule: BunDatabaseConnection.name,\n\t\t\t\t\t\ttrace: crypto.randomUUID(),\n\t\t\t\t\t\tpath: tmpPath,\n\t\t\t\t\t\terror\n\t\t\t\t\t});\n\t\t\t\t\tonError?.(new UnexpectedErrorEvent({\n\t\t\t\t\t\terror,\n\t\t\t\t\t\ttrace: crypto.randomUUID()\n\t\t\t\t\t}));\n\t\t\t\t});\n\t\t\t\tthrow err;\n\t\t\t});\n\t\t\treturn new ByteStream(readable, { length: size });\n\t\t}\n\t\treturn binaryToByteStream(this.db.serialize());\n\t};\n\tquery = (transaction) => {\n\t\tconst { statements, mode } = transaction;\n\t\tconst results = [];\n\t\treturn new Promise((resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tif (mode) this.db.run(`BEGIN ${mode} TRANSACTION;`);\n\t\t\t\tfor (const statement of statements) {\n\t\t\t\t\tlet prepared;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tprepared = typeof statement === \"string\" ? this.db.prepare(statement) : this.db.prepare(statement.sql, statement.params ?? []);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\t\t\t\tthrow new StatementPreparationError(error.message, statement);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tswitch (statement.method) {\n\t\t\t\t\t\t\tcase \"all\": {\n\t\t\t\t\t\t\t\tresults.push({\n\t\t\t\t\t\t\t\t\tstatement,\n\t\t\t\t\t\t\t\t\trows: prepared.all()\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"get\": {\n\t\t\t\t\t\t\t\tresults.push({\n\t\t\t\t\t\t\t\t\tstatement,\n\t\t\t\t\t\t\t\t\trows: [prepared.get()]\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"values\": {\n\t\t\t\t\t\t\t\tresults.push({\n\t\t\t\t\t\t\t\t\tstatement,\n\t\t\t\t\t\t\t\t\trows: prepared.values() ?? []\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"run\": {\n\t\t\t\t\t\t\t\tprepared.run();\n\t\t\t\t\t\t\t\tresults.push({\n\t\t\t\t\t\t\t\t\tstatement,\n\t\t\t\t\t\t\t\t\trows: []\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\t\t\t\tthrow new StatementExecutionError(error.message, statement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (mode) this.db.run(\"COMMIT;\");\n\t\t\t\tresolve$1(results);\n\t\t\t} catch (err) {\n\t\t\t\tif (mode) this.db.run(\"ROLLBACK;\");\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t* Close the `BunDatabaseConnection` instance.\n\t*\n\t* @returns Promise resolving when the `BunDatabaseConnection` instance has\n\t* been closed.\n\t*/\n\tclose = (_opts) => {\n\t\tthis.db.close();\n\t\treturn Promise.resolve(this);\n\t};\n};\n\n//#endregion\n//#region src/index.ts\nconst exists = (path) => access(path, constants.F_OK).then(() => true).catch(() => false);\nvar BunDriver = class BunDriver extends Driver {\n\tstatic name = \"bun-driver\";\n\t/**\n\t* `Logger` instance to use for logging.\n\t*/\n\tlogger = null;\n\t/**\n\t* Error handler to invoke with any errors which might occur during\n\t* background tasks.\n\t*/\n\tonError = null;\n\t/**\n\t* List of Statements to provision a `Connection` with after opening it.\n\t*\n\t* Allows for applying custom SQLite default settings like WAL mode or a\n\t* custom page size.\n\t*/\n\tprovision;\n\tconstructor(config) {\n\t\tsuper();\n\t\tthis.provision = config?.provision ?? SENSIBLE_DEFAULTS;\n\t}\n\tstart = (opts) => {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst operation = new Operation({ trace });\n\t\tthis.logger = opts?.logger ?? null;\n\t\tthis.onError = opts?.onError ?? null;\n\t\tthis.logger?.info(\"initialized driver instance\", {\n\t\t\tmodule: BunDriver.name,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\treturn Promise.resolve(this);\n\t};\n\tstop = (opts) => {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst operation = new Operation({ trace });\n\t\tthis.logger?.info(\"closed driver instance\", {\n\t\t\tmodule: BunDriver.name,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\treturn Promise.resolve(this);\n\t};\n\topen = async (contents, opts) => {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst operation = new Operation({ trace });\n\t\tif (typeof contents === \"string\" && contents !== \":memory:\") await exists(contents).then((exists$1) => {\n\t\t\tif (!exists$1) throw new Error(\"File does not exist\");\n\t\t}).catch((err) => {\n\t\t\tconst error = new Error(`Unable to open file \\`${contents}\\`: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\tthis.logger?.error(\"unable to open database file\", {\n\t\t\t\tmodule: BunDriver.name,\n\t\t\t\ttrace,\n\t\t\t\tdur: formatDuration(operation.duration),\n\t\t\t\tpath: contents,\n\t\t\t\terror\n\t\t\t});\n\t\t\tthis.onError?.(new UnexpectedErrorEvent({\n\t\t\t\terror,\n\t\t\t\ttrace\n\t\t\t}));\n\t\t\tthrow error;\n\t\t});\n\t\tconst connection = new BunDatabaseConnection(contents);\n\t\tif (this.provision.length > 0) await connection.query({\n\t\t\tstatements: typeof contents === \"string\" && contents !== \":memory:\" ? this.provision : this.provision.filter((statement) => !statement.sql.includes(\"journal_mode = WAL\")),\n\t\t\tmode: false\n\t\t});\n\t\tthis.logger?.debug(\"opened connection\", {\n\t\t\tmodule: BunDriver.name,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration),\n\t\t\tpath: typeof contents === \"string\" ? contents : \":memory:\"\n\t\t});\n\t\treturn connection;\n\t};\n};\n\n//#endregion\nexport { BunDatabaseConnection, BunDriver };"],"names":["BunDatabaseConnection","BunDriver"],"mappings":"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"}