import { ChannelIterator, ConnectionUnavailableError, Features, Publisher, RpcEngine, UnexpectedConnectionError, parseRpcError } from "surrealdb";
import { createRequire } from "node:module";

//#region napi/index.js
const require = createRequire(import.meta.url);
new URL(".", import.meta.url).pathname;
const { readFileSync } = require("node:fs");
let nativeBinding = null;
const loadErrors = [];
const isMusl = () => {
	let musl = false;
	if (process.platform === "linux") {
		musl = isMuslFromFilesystem();
		if (musl === null) musl = isMuslFromReport();
		if (musl === null) musl = isMuslFromChildProcess();
	}
	return musl;
};
const isFileMusl = (f) => f.includes("libc.musl-") || f.includes("ld-musl-");
const isMuslFromFilesystem = () => {
	try {
		return readFileSync("/usr/bin/ldd", "utf-8").includes("musl");
	} catch {
		return null;
	}
};
const isMuslFromReport = () => {
	let report = null;
	if (typeof process.report?.getReport === "function") {
		process.report.excludeNetwork = true;
		report = process.report.getReport();
	}
	if (!report) return null;
	if (report.header && report.header.glibcVersionRuntime) return false;
	if (Array.isArray(report.sharedObjects)) {
		if (report.sharedObjects.some(isFileMusl)) return true;
	}
	return false;
};
const isMuslFromChildProcess = () => {
	try {
		return require("child_process").execSync("ldd --version", { encoding: "utf8" }).includes("musl");
	} catch (e) {
		return false;
	}
};
function requireNative() {
	if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) try {
		nativeBinding = require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH);
	} catch (err) {
		loadErrors.push(err);
	}
	else if (process.platform === "android") if (process.arch === "arm64") {
		try {
			return require("./surrealdb-node.android-arm64.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-android-arm64");
			const bindingPackageVersion = require("@surrealdb/node-android-arm64/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else if (process.arch === "arm") {
		try {
			return require("./surrealdb-node.android-arm-eabi.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-android-arm-eabi");
			const bindingPackageVersion = require("@surrealdb/node-android-arm-eabi/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else loadErrors.push(/* @__PURE__ */ new Error(`Unsupported architecture on Android ${process.arch}`));
	else if (process.platform === "win32") if (process.arch === "x64") {
		try {
			return require("./surrealdb-node.win32-x64-msvc.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-win32-x64-msvc");
			const bindingPackageVersion = require("@surrealdb/node-win32-x64-msvc/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else if (process.arch === "ia32") {
		try {
			return require("./surrealdb-node.win32-ia32-msvc.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-win32-ia32-msvc");
			const bindingPackageVersion = require("@surrealdb/node-win32-ia32-msvc/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else if (process.arch === "arm64") {
		try {
			return require("./surrealdb-node.win32-arm64-msvc.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-win32-arm64-msvc");
			const bindingPackageVersion = require("@surrealdb/node-win32-arm64-msvc/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else loadErrors.push(/* @__PURE__ */ new Error(`Unsupported architecture on Windows: ${process.arch}`));
	else if (process.platform === "darwin") {
		try {
			return require("./surrealdb-node.darwin-universal.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-darwin-universal");
			const bindingPackageVersion = require("@surrealdb/node-darwin-universal/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
		if (process.arch === "x64") {
			try {
				return require("./surrealdb-node.darwin-x64.node");
			} catch (e) {
				loadErrors.push(e);
			}
			try {
				const binding = require("@surrealdb/node-darwin-x64");
				const bindingPackageVersion = require("@surrealdb/node-darwin-x64/package.json").version;
				if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
				return binding;
			} catch (e) {
				loadErrors.push(e);
			}
		} else if (process.arch === "arm64") {
			try {
				return require("./surrealdb-node.darwin-arm64.node");
			} catch (e) {
				loadErrors.push(e);
			}
			try {
				const binding = require("@surrealdb/node-darwin-arm64");
				const bindingPackageVersion = require("@surrealdb/node-darwin-arm64/package.json").version;
				if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
				return binding;
			} catch (e) {
				loadErrors.push(e);
			}
		} else loadErrors.push(/* @__PURE__ */ new Error(`Unsupported architecture on macOS: ${process.arch}`));
	} else if (process.platform === "freebsd") if (process.arch === "x64") {
		try {
			return require("./surrealdb-node.freebsd-x64.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-freebsd-x64");
			const bindingPackageVersion = require("@surrealdb/node-freebsd-x64/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else if (process.arch === "arm64") {
		try {
			return require("./surrealdb-node.freebsd-arm64.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-freebsd-arm64");
			const bindingPackageVersion = require("@surrealdb/node-freebsd-arm64/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else loadErrors.push(/* @__PURE__ */ new Error(`Unsupported architecture on FreeBSD: ${process.arch}`));
	else if (process.platform === "linux") if (process.arch === "x64") if (isMusl()) {
		try {
			return require("./surrealdb-node.linux-x64-musl.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-linux-x64-musl");
			const bindingPackageVersion = require("@surrealdb/node-linux-x64-musl/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else {
		try {
			return require("./surrealdb-node.linux-x64-gnu.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-linux-x64-gnu");
			const bindingPackageVersion = require("@surrealdb/node-linux-x64-gnu/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	}
	else if (process.arch === "arm64") if (isMusl()) {
		try {
			return require("./surrealdb-node.linux-arm64-musl.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-linux-arm64-musl");
			const bindingPackageVersion = require("@surrealdb/node-linux-arm64-musl/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else {
		try {
			return require("./surrealdb-node.linux-arm64-gnu.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-linux-arm64-gnu");
			const bindingPackageVersion = require("@surrealdb/node-linux-arm64-gnu/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	}
	else if (process.arch === "arm") if (isMusl()) {
		try {
			return require("./surrealdb-node.linux-arm-musleabihf.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-linux-arm-musleabihf");
			const bindingPackageVersion = require("@surrealdb/node-linux-arm-musleabihf/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else {
		try {
			return require("./surrealdb-node.linux-arm-gnueabihf.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-linux-arm-gnueabihf");
			const bindingPackageVersion = require("@surrealdb/node-linux-arm-gnueabihf/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	}
	else if (process.arch === "riscv64") if (isMusl()) {
		try {
			return require("./surrealdb-node.linux-riscv64-musl.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-linux-riscv64-musl");
			const bindingPackageVersion = require("@surrealdb/node-linux-riscv64-musl/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else {
		try {
			return require("./surrealdb-node.linux-riscv64-gnu.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-linux-riscv64-gnu");
			const bindingPackageVersion = require("@surrealdb/node-linux-riscv64-gnu/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	}
	else if (process.arch === "ppc64") {
		try {
			return require("./surrealdb-node.linux-ppc64-gnu.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-linux-ppc64-gnu");
			const bindingPackageVersion = require("@surrealdb/node-linux-ppc64-gnu/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else if (process.arch === "s390x") {
		try {
			return require("./surrealdb-node.linux-s390x-gnu.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-linux-s390x-gnu");
			const bindingPackageVersion = require("@surrealdb/node-linux-s390x-gnu/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else loadErrors.push(/* @__PURE__ */ new Error(`Unsupported architecture on Linux: ${process.arch}`));
	else if (process.platform === "openharmony") if (process.arch === "arm64") {
		try {
			return require("./surrealdb-node.openharmony-arm64.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-openharmony-arm64");
			const bindingPackageVersion = require("@surrealdb/node-openharmony-arm64/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else if (process.arch === "x64") {
		try {
			return require("./surrealdb-node.openharmony-x64.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-openharmony-x64");
			const bindingPackageVersion = require("@surrealdb/node-openharmony-x64/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else if (process.arch === "arm") {
		try {
			return require("./surrealdb-node.openharmony-arm.node");
		} catch (e) {
			loadErrors.push(e);
		}
		try {
			const binding = require("@surrealdb/node-openharmony-arm");
			const bindingPackageVersion = require("@surrealdb/node-openharmony-arm/package.json").version;
			if (bindingPackageVersion !== "3.0.2" && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== "0") throw new Error(`Native binding package version mismatch, expected 3.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`);
			return binding;
		} catch (e) {
			loadErrors.push(e);
		}
	} else loadErrors.push(/* @__PURE__ */ new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`));
	else loadErrors.push(/* @__PURE__ */ new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`));
}
nativeBinding = requireNative();
if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
	try {
		nativeBinding = require("./surrealdb-node.wasi.cjs");
	} catch (err) {
		if (process.env.NAPI_RS_FORCE_WASI) loadErrors.push(err);
	}
	if (!nativeBinding) try {
		nativeBinding = require("@surrealdb/node-wasm32-wasi");
	} catch (err) {
		if (process.env.NAPI_RS_FORCE_WASI) loadErrors.push(err);
	}
}
if (!nativeBinding) {
	if (loadErrors.length > 0) throw new Error("Cannot find native binding. npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). Please try `npm i` again after removing both package-lock.json and node_modules directory.", { cause: loadErrors });
	throw new Error(`Failed to load native binding`);
}
const { NotificationReceiver, SurrealNodeEngine } = nativeBinding;

//#endregion
//#region src-ts/engine.ts
/**
* The engine implementation responsible for communicating with an embedded
* WebAssembly build of SurrealDB.
*/
var NodeEngine = class extends RpcEngine {
	#engine;
	#notificationReceiver;
	#publisher = new Publisher();
	#subscriptions = new Publisher();
	#active = false;
	#abort;
	#options;
	constructor(context, options) {
		super(context);
		this.#options = options;
	}
	features = new Set([
		Features.LiveQueries,
		Features.Sessions,
		Features.Transactions,
		Features.Api,
		Features.ExportImportRaw
	]);
	open(state) {
		this.#abort?.abort();
		this.#abort = new AbortController();
		this.#active = true;
		this._state = state;
		this.#initialize(state, this.#abort.signal);
	}
	async close() {
		this._state = void 0;
		this.#abort?.abort();
		this.#abort = void 0;
		this.#active = false;
		this.#engine?.free();
		this.#engine = void 0;
		this.#notificationReceiver = void 0;
		this.#publisher.publish("disconnected");
	}
	ready() {}
	subscribe(event, listener) {
		return this.#publisher.subscribe(event, listener);
	}
	liveQuery(id) {
		const channel = new ChannelIterator(() => {
			unsub1();
			unsub2();
		});
		const unsub1 = this.#subscriptions.subscribe(id.toString(), (msg) => {
			channel.submit(msg);
		});
		const unsub2 = this.#publisher.subscribe("disconnected", () => {
			channel.cancel();
		});
		return channel;
	}
	async send(request) {
		if (!this.#active || !this.#engine) throw new ConnectionUnavailableError();
		const id = this._context.uniqueId();
		const payload = this._context.codecs.cbor.encode({
			id,
			...request
		});
		const response = await this.#engine.execute(payload);
		const decoded = this._context.codecs.cbor.decode(response);
		if (decoded && typeof decoded === "object" && "error" in decoded) throw parseRpcError(decoded.error);
		return decoded;
	}
	async importSql(data) {
		if (!this.#active || !this.#engine) throw new ConnectionUnavailableError();
		if (data instanceof ReadableStream) {
			const reader = data.getReader();
			const decoder = new TextDecoder();
			let sql = "";
			while (true) {
				const { done, value } = await reader.read();
				if (done) break;
				sql += decoder.decode(value, { stream: true });
			}
			return this.#engine.import(sql + decoder.decode());
		}
		return this.#engine.import(data);
	}
	async exportSql(options) {
		if (!this.#active || !this.#engine) throw new ConnectionUnavailableError();
		const payload = this._context.codecs.cbor.encode(options);
		const sql = await this.#engine.export(payload);
		return new Response(sql);
	}
	async #initialize(state, signal) {
		try {
			this.#engine = await SurrealNodeEngine.connect(state.url.toString(), this.#options);
			if (signal.aborted) return;
			this.#notificationReceiver = await this.#engine.notifications();
			(async () => {
				while (this.#active && this.#notificationReceiver) {
					const value = await this.#notificationReceiver.recv();
					if (value === null) break;
					const payload = this._context.codecs.cbor.decode(value);
					if (payload.id) this.#subscriptions.publish(payload.id.toString(), {
						queryId: payload.id,
						action: payload.action,
						recordId: payload.record,
						value: payload.result
					});
				}
			})();
			this.#publisher.publish("connected");
		} catch (err) {
			this.#publisher.publish("error", new UnexpectedConnectionError(err));
		}
	}
};

//#endregion
//#region src-ts/index.ts
/**
* Configure the `mem`, `rocksdb`, `surrealkv`, and `surrealkv+versioned` Nodejs engines for the JavaScript SDK.
*
* While this package is called `@surrealdb/node`, it is also compatible with Bun and Deno.
*
* @param options Optional connection options to configure the Nodejs engines.
* @example
* ```ts
* import { Surreal, createRemoteEngines } from "surrealdb";
* import { createNodeEngines } from "@surrealdb/node";
*
* const db = new Surreal({
*     engines: {
*         ...createRemoteEngines(),
*         ...createNodeEngines(),
*     },
* });
* ```
*/
const createNodeEngines = (options) => ({
	mem: (ctx) => new NodeEngine(ctx, options),
	rocksdb: (ctx) => new NodeEngine(ctx, options),
	surrealkv: (ctx) => new NodeEngine(ctx, options),
	"surrealkv+versioned": (ctx) => new NodeEngine(ctx, options)
});

//#endregion
export { NodeEngine, createNodeEngines };