{
  "version": 3,
  "sources": ["../src/util/emitter.ts", "../src/cbor/gap.ts", "../src/cbor/index.ts", "../src/cbor/constants.ts", "../src/cbor/encoded.ts", "../src/errors.ts", "../src/cbor/error.ts", "../src/cbor/writer.ts", "../src/cbor/partial.ts", "../src/cbor/tagged.ts", "../src/cbor/encoder.ts", "../src/cbor/reader.ts", "../src/cbor/util.ts", "../src/cbor/decoder.ts", "../src/data/types/datetime.ts", "../src/data/value.ts", "../src/data/types/decimal.ts", "../src/data/types/duration.ts", "../src/data/types/future.ts", "../src/data/types/geometry.ts", "../src/util/equals.ts", "../src/util/escape.ts", "../node_modules/uuidv7/dist/index.js", "../src/data/types/uuid.ts", "../src/data/types/recordid.ts", "../src/data/types/table.ts", "../src/util/to-surrealql-string.ts", "../src/data/types/range.ts", "../src/data/cbor.ts", "../src/util/prepared-query.ts", "../src/util/tagged-template.ts", "../src/types.ts", "../src/util/jsonify.ts", "../node_modules/@tauri-apps/api/external/tslib/tslib.es6.js", "../node_modules/@tauri-apps/api/core.js", "../node_modules/@tauri-apps/plugin-http/dist-js/index.js", "../src/util/version-check.ts", "../src/util/get-incremental-id.ts", "../src/util/string-prefixes.ts", "../src/engines/abstract.ts", "../src/util/process-auth-vars.ts", "../src/engines/http.ts", "../node_modules/isows/utils.ts", "../node_modules/isows/native.ts", "../src/engines/ws.ts", "../src/surreal.ts"],
  "sourcesContent": ["export type Listener<Args extends unknown[] = unknown[]> = (\r\n\t...args: Args\r\n) => unknown;\r\nexport type UnknownEvents = Record<string, unknown[]>;\r\n\r\n/**\r\n * A class used to subscribe to and emit events\r\n */\r\nexport class Emitter<Events extends UnknownEvents = UnknownEvents> {\r\n\tprivate collectable: Partial<{\r\n\t\t[K in keyof Events]: Events[K][];\r\n\t}> = {};\r\n\r\n\tprivate listeners: Partial<{\r\n\t\t[K in keyof Events]: Listener<Events[K]>[];\r\n\t}> = {};\r\n\r\n\tprivate readonly interceptors: Partial<{\r\n\t\t[K in keyof Events]: (...args: Events[K]) => Promise<Events[K]>;\r\n\t}>;\r\n\r\n\tconstructor({\r\n\t\tinterceptors,\r\n\t}: {\r\n\t\tinterceptors?: Partial<{\r\n\t\t\t[K in keyof Events]: (...args: Events[K]) => Promise<Events[K]>;\r\n\t\t}>;\r\n\t} = {}) {\r\n\t\tthis.interceptors = interceptors ?? {};\r\n\t}\r\n\r\n\tsubscribe<Event extends keyof Events>(\r\n\t\tevent: Event,\r\n\t\tlistener: Listener<Events[Event]>,\r\n\t\thistoric = false,\r\n\t): void {\r\n\t\tif (!this.listeners[event]) {\r\n\t\t\tthis.listeners[event] = [];\r\n\t\t}\r\n\r\n\t\tif (!this.isSubscribed(event, listener)) {\r\n\t\t\tthis.listeners[event]?.push(listener);\r\n\r\n\t\t\tif (historic && this.collectable[event]) {\r\n\t\t\t\tconst buffer = this.collectable[event];\r\n\t\t\t\tthis.collectable[event] = [];\r\n\t\t\t\tfor (const args of buffer) {\r\n\t\t\t\t\tlistener(...args);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribeOnce<Event extends keyof Events>(\r\n\t\tevent: Event,\r\n\t\thistoric = false,\r\n\t): Promise<Events[Event]> {\r\n\t\treturn new Promise<Events[Event]>((resolve) => {\r\n\t\t\tlet resolved = false;\r\n\t\t\tconst listener = (...args: Events[Event]) => {\r\n\t\t\t\tif (!resolved) {\r\n\t\t\t\t\tresolved = true;\r\n\t\t\t\t\tthis.unSubscribe(event, listener);\r\n\t\t\t\t\tresolve(args);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tthis.subscribe(event, listener, historic);\r\n\t\t});\r\n\t}\r\n\r\n\tunSubscribe<Event extends keyof Events>(\r\n\t\tevent: Event,\r\n\t\tlistener: Listener<Events[Event]>,\r\n\t): void {\r\n\t\tif (this.listeners[event]) {\r\n\t\t\tconst index = this.listeners[event]?.findIndex((v) => v === listener);\r\n\t\t\tif (index) {\r\n\t\t\t\tthis.listeners[event]?.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisSubscribed<Event extends keyof Events>(\r\n\t\tevent: Event,\r\n\t\tlistener: Listener<Events[Event]>,\r\n\t): boolean {\r\n\t\treturn !!this.listeners[event]?.includes(listener);\r\n\t}\r\n\r\n\tasync emit<Event extends keyof Events>(\r\n\t\tevent: Event,\r\n\t\targs: Events[Event],\r\n\t\tcollectable = false,\r\n\t): Promise<void> {\r\n\t\tconst interceptor = this.interceptors[event];\r\n\t\tconst computedArgs = interceptor ? await interceptor(...args) : args;\r\n\r\n\t\tif (this.listeners[event]?.length === 0 && collectable) {\r\n\t\t\tif (!this.collectable[event]) {\r\n\t\t\t\tthis.collectable[event] = [];\r\n\t\t\t}\r\n\r\n\t\t\tthis.collectable[event]?.push(args);\r\n\t\t}\r\n\r\n\t\tfor (const listener of this.listeners[event] ?? []) {\r\n\t\t\tlistener(...computedArgs);\r\n\t\t}\r\n\t}\r\n\r\n\treset({\r\n\t\tcollectable,\r\n\t\tlisteners,\r\n\t}: {\r\n\t\tcollectable?: boolean | keyof Events | (keyof Events)[];\r\n\t\tlisteners?: boolean | keyof Events | (keyof Events)[];\r\n\t}): void {\r\n\t\tif (Array.isArray(collectable)) {\r\n\t\t\tfor (const k of collectable) {\r\n\t\t\t\tdelete this.collectable[k];\r\n\t\t\t}\r\n\t\t} else if (typeof collectable === \"string\") {\r\n\t\t\tdelete this.collectable[collectable];\r\n\t\t} else if (collectable !== false) {\r\n\t\t\tthis.collectable = {};\r\n\t\t}\r\n\r\n\t\tif (Array.isArray(listeners)) {\r\n\t\t\tfor (const k of listeners) {\r\n\t\t\t\tdelete this.listeners[k];\r\n\t\t\t}\r\n\t\t} else if (typeof listeners === \"string\") {\r\n\t\t\tdelete this.listeners[listeners];\r\n\t\t} else if (listeners !== false) {\r\n\t\t\tthis.listeners = {};\r\n\t\t}\r\n\t}\r\n\r\n\tscanListeners(filter?: (k: keyof Events) => boolean): (keyof Events)[] {\r\n\t\tlet listeners = Object.keys(this.listeners) as (keyof Events)[];\r\n\t\tif (filter) listeners = listeners.filter(filter);\r\n\t\treturn listeners;\r\n\t}\r\n}\r\n", "// Why is the default value being stored in an array? undefined, null, false, etc... are all valid defaults,\r\n// and specifying a field on a class as optional will make it undefined by default.\r\n\r\nexport type Fill<T = unknown> = [Gap<T>, T];\r\nexport class Gap<T = unknown> {\r\n\treadonly args: [T?] = [];\r\n\tconstructor(...args: [T?]) {\r\n\t\tthis.args = args;\r\n\t}\r\n\r\n\tfill(value: T): Fill<T> {\r\n\t\treturn [this, value];\r\n\t}\r\n\r\n\thasDefault(): boolean {\r\n\t\treturn this.args.length === 1;\r\n\t}\r\n\r\n\tget default(): T | undefined {\r\n\t\treturn this.args[0];\r\n\t}\r\n}\r\n", "export * from \"./constants\";\r\nexport * from \"./encoder\";\r\nexport * from \"./decoder\";\r\nexport * from \"./util\";\r\nexport * from \"./reader\";\r\nexport * from \"./writer\";\r\nexport * from \"./tagged\";\r\nexport * from \"./error\";\r\nexport * from \"./gap\";\r\nexport * from \"./partial\";\r\nexport * from \"./encoded\";\r\n", "export type Replacer = (v: unknown) => unknown;\r\nexport type Major = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;\r\nexport const POW_2_53: number = 2 ** 53;\r\nexport const POW_2_64: bigint = BigInt(2 ** 64);\r\n", "export class Encoded {\r\n\tconstructor(readonly encoded: ArrayBuffer) {}\r\n}\r\n", "export class SurrealDbError extends Error {}\r\n\r\nexport class NoActiveSocket extends SurrealDbError {\r\n\tname = \"NoActiveSocket\";\r\n\tmessage =\r\n\t\t\"No socket is currently connected to a SurrealDB instance. Please call the .connect() method first!\";\r\n}\r\n\r\nexport class NoConnectionDetails extends SurrealDbError {\r\n\tname = \"NoConnectionDetails\";\r\n\tmessage =\r\n\t\t\"No connection details for the HTTP api have been provided. Please call the .connect() method first!\";\r\n}\r\n\r\nexport class UnexpectedResponse extends SurrealDbError {\r\n\tname = \"UnexpectedResponse\";\r\n\tmessage =\r\n\t\t\"The returned response from the SurrealDB instance is in an unexpected format. Unable to process response!\";\r\n}\r\n\r\nexport class InvalidURLProvided extends SurrealDbError {\r\n\tname = \"InvalidURLProvided\";\r\n\tmessage =\r\n\t\t\"The provided string is either not a URL or is a URL but with an invalid protocol!\";\r\n}\r\n\r\nexport class EngineDisconnected extends SurrealDbError {\r\n\tname = \"EngineDisconnected\";\r\n\tmessage = \"The engine reported the connection to SurrealDB has dropped\";\r\n}\r\n\r\nexport class UnexpectedServerResponse extends SurrealDbError {\r\n\tname = \"UnexpectedServerResponse\";\r\n\r\n\tconstructor(public readonly response: unknown) {\r\n\t\tsuper();\r\n\t\tthis.message = `${response}`;\r\n\t}\r\n}\r\n\r\nexport class UnexpectedConnectionError extends SurrealDbError {\r\n\tname = \"UnexpectedConnectionError\";\r\n\r\n\tconstructor(public readonly error: unknown) {\r\n\t\tsuper();\r\n\t\tthis.message = `${error}`;\r\n\t}\r\n}\r\n\r\nexport class UnsupportedEngine extends SurrealDbError {\r\n\tname = \"UnsupportedEngine\";\r\n\tmessage =\r\n\t\t\"The engine you are trying to connect to is not supported or configured.\";\r\n\r\n\tconstructor(public readonly engine: string) {\r\n\t\tsuper();\r\n\t}\r\n}\r\n\r\nexport class FeatureUnavailableForEngine extends SurrealDbError {\r\n\tname = \"FeatureUnavailableForEngine\";\r\n\tmessage =\r\n\t\t\"The feature you are trying to use is not available on this engine.\";\r\n}\r\n\r\nexport class ConnectionUnavailable extends SurrealDbError {\r\n\tname = \"ConnectionUnavailable\";\r\n\tmessage = \"There is no connection available at this moment.\";\r\n}\r\n\r\nexport class MissingNamespaceDatabase extends SurrealDbError {\r\n\tname = \"MissingNamespaceDatabase\";\r\n\tmessage = \"There is no namespace and/or database selected.\";\r\n}\r\n\r\nexport class HttpConnectionError extends SurrealDbError {\r\n\tname = \"HttpConnectionError\";\r\n\r\n\tconstructor(\r\n\t\tpublic readonly message: string,\r\n\t\tpublic readonly status: number,\r\n\t\tpublic readonly statusText: string,\r\n\t\tpublic readonly buffer: ArrayBuffer,\r\n\t) {\r\n\t\tsuper();\r\n\t}\r\n}\r\n\r\nexport class ResponseError extends SurrealDbError {\r\n\tname = \"ResponseError\";\r\n\r\n\tconstructor(public readonly message: string) {\r\n\t\tsuper();\r\n\t}\r\n}\r\n\r\nexport class NoNamespaceSpecified extends SurrealDbError {\r\n\tname = \"NoNamespaceSpecified\";\r\n\tmessage = \"Please specify a namespace to use.\";\r\n}\r\n\r\nexport class NoDatabaseSpecified extends SurrealDbError {\r\n\tname = \"NoDatabaseSpecified\";\r\n\tmessage = \"Please specify a database to use.\";\r\n}\r\n\r\nexport class NoTokenReturned extends SurrealDbError {\r\n\tname = \"NoTokenReturned\";\r\n\tmessage = \"Did not receive an authentication token.\";\r\n}\r\n\r\nexport class UnsupportedVersion extends SurrealDbError {\r\n\tname = \"UnsupportedVersion\";\r\n\tversion: string;\r\n\tsupportedRange: string;\r\n\r\n\tconstructor(version: string, supportedRange: string) {\r\n\t\tsuper();\r\n\t\tthis.version = version;\r\n\t\tthis.supportedRange = supportedRange;\r\n\t\tthis.message = `The version \"${version}\" reported by the engine is not supported by this library, expected a version that satisfies \"${supportedRange}\".`;\r\n\t}\r\n}\r\n\r\nexport class VersionRetrievalFailure extends SurrealDbError {\r\n\tname = \"VersionRetrievalFailure\";\r\n\tmessage =\r\n\t\t\"Failed to retrieve remote version. If the server is behind a proxy, make sure it's configured correctly.\";\r\n\r\n\tconstructor(readonly error?: Error | undefined) {\r\n\t\tsuper();\r\n\t}\r\n}\r\n", "import { SurrealDbError } from \"../errors\";\r\n\r\nexport abstract class CborError extends SurrealDbError {\r\n\tabstract readonly name: string;\r\n\treadonly message: string;\r\n\r\n\tconstructor(message: string) {\r\n\t\tsuper();\r\n\t\tthis.message = message;\r\n\t}\r\n}\r\n\r\nexport class CborNumberError extends CborError {\r\n\tname = \"CborNumberError\";\r\n}\r\n\r\nexport class CborRangeError extends CborError {\r\n\tname = \"CborRangeError\";\r\n}\r\n\r\nexport class CborInvalidMajorError extends CborError {\r\n\tname = \"CborInvalidMajorError\";\r\n}\r\n\r\nexport class CborBreak extends CborError {\r\n\tname = \"CborBreak\";\r\n\tconstructor() {\r\n\t\tsuper(\"Came across a break which was not intercepted by the decoder\");\r\n\t}\r\n}\r\n\r\nexport class CborPartialDisabled extends CborError {\r\n\tname = \"CborPartialDisabled\";\r\n\tconstructor() {\r\n\t\tsuper(\r\n\t\t\t\"Tried to insert a Gap into a CBOR value, while partial mode is not enabled\",\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport class CborFillMissing extends CborError {\r\n\tname = \"CborFillMissing\";\r\n\tconstructor() {\r\n\t\tsuper(\"Fill for a gap is missing, and gap has no default\");\r\n\t}\r\n}\r\n", "import type { Major, Replacer } from \"./constants\";\r\nimport type { Gap } from \"./gap\";\r\nimport { PartiallyEncoded } from \"./partial\";\r\n\r\nexport class Writer {\r\n\tprivate _chunks: [ArrayBuffer, Gap][] = [];\r\n\tprivate _pos = 0;\r\n\tprivate _buf: ArrayBuffer;\r\n\tprivate _view: DataView;\r\n\tprivate _byte: Uint8Array;\r\n\r\n\tconstructor(readonly byteLength = 256) {\r\n\t\tthis._buf = new ArrayBuffer(this.byteLength);\r\n\t\tthis._view = new DataView(this._buf);\r\n\t\tthis._byte = new Uint8Array(this._buf);\r\n\t}\r\n\r\n\tchunk(gap: Gap): void {\r\n\t\tthis._chunks.push([this._buf.slice(0, this._pos), gap]);\r\n\t\tthis._buf = new ArrayBuffer(this.byteLength);\r\n\t\tthis._view = new DataView(this._buf);\r\n\t\tthis._byte = new Uint8Array(this._buf);\r\n\t\tthis._pos = 0;\r\n\t}\r\n\r\n\tget chunks(): [ArrayBuffer, Gap][] {\r\n\t\treturn this._chunks;\r\n\t}\r\n\r\n\tget buffer(): ArrayBuffer {\r\n\t\treturn this._buf.slice(0, this._pos);\r\n\t}\r\n\r\n\tprivate claim(length: number) {\r\n\t\tconst pos = this._pos;\r\n\t\tthis._pos += length;\r\n\t\tif (this._pos <= this._buf.byteLength) return pos;\r\n\r\n\t\tlet newLen = this._buf.byteLength << 1;\r\n\t\twhile (newLen < this._pos) newLen <<= 1;\r\n\t\tif (newLen > this._buf.byteLength) {\r\n\t\t\tconst oldb = this._byte;\r\n\t\t\tthis._buf = new ArrayBuffer(newLen);\r\n\t\t\tthis._view = new DataView(this._buf);\r\n\t\t\tthis._byte = new Uint8Array(this._buf);\r\n\t\t\tthis._byte.set(oldb);\r\n\t\t}\r\n\t\treturn pos;\r\n\t}\r\n\r\n\twriteUint8(value: number): void {\r\n\t\tconst pos = this.claim(1);\r\n\t\tthis._view.setUint8(pos, value);\r\n\t}\r\n\r\n\twriteUint16(value: number): void {\r\n\t\tconst pos = this.claim(2);\r\n\t\tthis._view.setUint16(pos, value);\r\n\t}\r\n\r\n\twriteUint32(value: number): void {\r\n\t\tconst pos = this.claim(4);\r\n\t\tthis._view.setUint32(pos, value);\r\n\t}\r\n\r\n\twriteUint64(value: bigint): void {\r\n\t\tconst pos = this.claim(8);\r\n\t\tthis._view.setBigUint64(pos, value);\r\n\t}\r\n\r\n\twriteUint8Array(data: Uint8Array): void {\r\n\t\tif (data.byteLength === 0) return;\r\n\t\tconst pos = this.claim(data.byteLength);\r\n\t\tthis._byte.set(data, pos);\r\n\t}\r\n\r\n\twriteArrayBuffer(data: ArrayBuffer): void {\r\n\t\tif (data.byteLength === 0) return;\r\n\t\tthis.writeUint8Array(new Uint8Array(data));\r\n\t}\r\n\r\n\twritePartiallyEncoded(data: PartiallyEncoded): void {\r\n\t\tfor (const [buf, gap] of data.chunks) {\r\n\t\t\tthis.writeArrayBuffer(buf);\r\n\t\t\tthis.chunk(gap);\r\n\t\t}\r\n\r\n\t\tthis.writeArrayBuffer(data.end);\r\n\t}\r\n\r\n\twriteFloat32(value: number): void {\r\n\t\tconst pos = this.claim(4);\r\n\t\tthis._view.setFloat32(pos, value);\r\n\t}\r\n\r\n\twriteFloat64(value: number): void {\r\n\t\tconst pos = this.claim(8);\r\n\t\tthis._view.setFloat64(pos, value);\r\n\t}\r\n\r\n\twriteMajor(type: Major, length: number | bigint): void {\r\n\t\tconst base = type << 5;\r\n\t\tif (length < 24) {\r\n\t\t\tthis.writeUint8(base + Number(length));\r\n\t\t} else if (length < 0x100) {\r\n\t\t\tthis.writeUint8(base + 24);\r\n\t\t\tthis.writeUint8(Number(length));\r\n\t\t} else if (length < 0x10000) {\r\n\t\t\tthis.writeUint8(base + 25);\r\n\t\t\tthis.writeUint16(Number(length));\r\n\t\t} else if (length < 0x100000000) {\r\n\t\t\tthis.writeUint8(base + 26);\r\n\t\t\tthis.writeUint32(Number(length));\r\n\t\t} else {\r\n\t\t\tthis.writeUint8(base + 27);\r\n\t\t\tthis.writeUint64(BigInt(length));\r\n\t\t}\r\n\t}\r\n\r\n\toutput<Partial extends boolean = false>(\r\n\t\tpartial: Partial,\r\n\t\treplacer?: Replacer,\r\n\t): Partial extends true ? PartiallyEncoded : ArrayBuffer {\r\n\t\tif (partial) {\r\n\t\t\treturn new PartiallyEncoded(\r\n\t\t\t\tthis._chunks,\r\n\t\t\t\tthis.buffer,\r\n\t\t\t\treplacer,\r\n\t\t\t) as Partial extends true ? PartiallyEncoded : ArrayBuffer;\r\n\t\t}\r\n\r\n\t\treturn this.buffer as Partial extends true ? PartiallyEncoded : ArrayBuffer;\r\n\t}\r\n}\r\n", "import type { Replacer } from \"./constants\";\r\nimport { type EncoderOptions, encode } from \"./encoder\";\r\nimport { CborFillMissing } from \"./error\";\r\nimport type { Fill, Gap } from \"./gap\";\r\nimport { Writer } from \"./writer\";\r\n\r\nexport class PartiallyEncoded {\r\n\tconstructor(\r\n\t\treadonly chunks: [ArrayBuffer, Gap][],\r\n\t\treadonly end: ArrayBuffer,\r\n\t\treadonly replacer: Replacer | undefined,\r\n\t) {}\r\n\r\n\tbuild<Partial extends boolean = false>(\r\n\t\tfills: Fill[],\r\n\t\tpartial?: Partial,\r\n\t): Partial extends true ? PartiallyEncoded : ArrayBuffer {\r\n\t\tconst writer = new Writer();\r\n\t\tconst map = new Map(fills);\r\n\r\n\t\tfor (const [buffer, gap] of this.chunks) {\r\n\t\t\tconst hasValue = map.has(gap) || gap.hasDefault();\r\n\t\t\tif (!partial && !hasValue) throw new CborFillMissing();\r\n\t\t\twriter.writeArrayBuffer(buffer);\r\n\r\n\t\t\tif (hasValue) {\r\n\t\t\t\tconst data = map.get(gap) ?? gap.default;\r\n\t\t\t\tencode(data, {\r\n\t\t\t\t\twriter,\r\n\t\t\t\t\treplacer: this.replacer,\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\twriter.chunk(gap);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\twriter.writeArrayBuffer(this.end);\r\n\t\treturn writer.output<Partial>(!!partial as Partial, this.replacer);\r\n\t}\r\n}\r\n\r\nexport function partiallyEncodeObject(\r\n\tobject: Record<string, unknown>,\r\n\toptions?: EncoderOptions<true>,\r\n): Record<string, PartiallyEncoded> {\r\n\treturn Object.fromEntries(\r\n\t\tObject.entries(object).map(([k, v]) => [\r\n\t\t\tk,\r\n\t\t\tencode(v, { ...options, partial: true }),\r\n\t\t]),\r\n\t);\r\n}\r\n", "export class Tagged<T = unknown> {\r\n\tconstructor(\r\n\t\treadonly tag: number | bigint,\r\n\t\treadonly value: T,\r\n\t) {}\r\n}\r\n", "import { POW_2_53, POW_2_64, type Replacer } from \"./constants\";\r\nimport { Encoded } from \"./encoded\";\r\nimport { CborNumberError, CborPartialDisabled } from \"./error\";\r\nimport { type Fill, Gap } from \"./gap\";\r\nimport { PartiallyEncoded } from \"./partial\";\r\nimport { Tagged } from \"./tagged\";\r\nimport { Writer } from \"./writer\";\r\n\r\nlet textEncoder: TextEncoder;\r\n\r\nexport interface EncoderOptions<Partial extends boolean> {\r\n\treplacer?: Replacer;\r\n\twriter?: Writer;\r\n\tpartial?: Partial;\r\n\tfills?: Fill[];\r\n}\r\n\r\nexport function encode<Partial extends boolean = false>(\r\n\tinput: unknown,\r\n\toptions: EncoderOptions<Partial> = {},\r\n): Partial extends true ? PartiallyEncoded : ArrayBuffer {\r\n\tconst w = options.writer ?? new Writer();\r\n\tconst fillsMap = new Map(options.fills ?? []);\r\n\r\n\tfunction inner(input: unknown) {\r\n\t\tconst value = options.replacer ? options.replacer(input) : input;\r\n\r\n\t\tif (value === undefined) return w.writeUint8(0xf7);\r\n\t\tif (value === null) return w.writeUint8(0xf6);\r\n\t\tif (value === true) return w.writeUint8(0xf5);\r\n\t\tif (value === false) return w.writeUint8(0xf4);\r\n\r\n\t\tswitch (typeof value) {\r\n\t\t\tcase \"number\": {\r\n\t\t\t\tif (Number.isInteger(value)) {\r\n\t\t\t\t\tif (value >= 0 && value <= POW_2_53) {\r\n\t\t\t\t\t\tw.writeMajor(0, value);\r\n\t\t\t\t\t} else if (value < 0 && value >= -POW_2_53) {\r\n\t\t\t\t\t\tw.writeMajor(1, -(value + 1));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow new CborNumberError(\"Number too big to be encoded\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Better precision when encoded as 64-bit\r\n\t\t\t\t\tw.writeUint8(0xfb);\r\n\t\t\t\t\tw.writeFloat64(value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tcase \"bigint\": {\r\n\t\t\t\tif (value >= 0 && value < POW_2_64) {\r\n\t\t\t\t\tw.writeMajor(0, value);\r\n\t\t\t\t} else if (value <= 0 && value >= -POW_2_64) {\r\n\t\t\t\t\tw.writeMajor(1, -(value + 1n));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow new CborNumberError(\"BigInt too big to be encoded\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tcase \"string\": {\r\n\t\t\t\ttextEncoder ??= new TextEncoder();\r\n\t\t\t\tconst encoded = textEncoder.encode(value);\r\n\t\t\t\tw.writeMajor(3, encoded.byteLength);\r\n\t\t\t\tw.writeUint8Array(encoded);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tdefault: {\r\n\t\t\t\tif (Array.isArray(value)) {\r\n\t\t\t\t\tw.writeMajor(4, value.length);\r\n\t\t\t\t\tfor (const v of value) {\r\n\t\t\t\t\t\tinner(v);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (value instanceof Tagged) {\r\n\t\t\t\t\tw.writeMajor(6, value.tag);\r\n\t\t\t\t\tinner(value.value);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (value instanceof Encoded) {\r\n\t\t\t\t\tw.writeArrayBuffer(value.encoded);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (value instanceof Gap) {\r\n\t\t\t\t\tif (fillsMap.has(value)) {\r\n\t\t\t\t\t\tinner(fillsMap.get(value));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (!options.partial) throw new CborPartialDisabled();\r\n\t\t\t\t\t\tw.chunk(value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (value instanceof PartiallyEncoded) {\r\n\t\t\t\t\tconst res = value.build<Partial>(\r\n\t\t\t\t\t\toptions.fills ?? [],\r\n\t\t\t\t\t\toptions.partial,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (options.partial) {\r\n\t\t\t\t\t\tw.writePartiallyEncoded(res as PartiallyEncoded);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tw.writeArrayBuffer(res as ArrayBuffer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tvalue instanceof Uint8Array ||\r\n\t\t\t\t\tvalue instanceof Uint16Array ||\r\n\t\t\t\t\tvalue instanceof Uint32Array ||\r\n\t\t\t\t\tvalue instanceof Int8Array ||\r\n\t\t\t\t\tvalue instanceof Int16Array ||\r\n\t\t\t\t\tvalue instanceof Int32Array ||\r\n\t\t\t\t\tvalue instanceof Float32Array ||\r\n\t\t\t\t\tvalue instanceof Float64Array ||\r\n\t\t\t\t\tvalue instanceof ArrayBuffer\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst v = new Uint8Array(value);\r\n\t\t\t\t\tw.writeMajor(2, v.byteLength);\r\n\t\t\t\t\tw.writeUint8Array(v);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst entries =\r\n\t\t\t\t\tvalue instanceof Map\r\n\t\t\t\t\t\t? Array.from(value.entries())\r\n\t\t\t\t\t\t: Object.entries(value);\r\n\r\n\t\t\t\tw.writeMajor(5, entries.length);\r\n\t\t\t\tfor (const v of entries.flat()) {\r\n\t\t\t\t\tinner(v);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinner(input);\r\n\treturn w.output<Partial>(!!options.partial as Partial, options.replacer);\r\n}\r\n", "import { type Major, POW_2_53 } from \"./constants\";\r\nimport { CborInvalidMajorError, CborRangeError } from \"./error\";\r\n\r\nexport class Reader {\r\n\tprivate _buf: ArrayBufferLike;\r\n\tprivate _view: DataView;\r\n\tprivate _byte: Uint8Array;\r\n\tprivate _pos = 0;\r\n\r\n\tconstructor(buffer: ArrayBufferLike) {\r\n\t\tthis._buf = new ArrayBuffer(buffer.byteLength);\r\n\t\tthis._view = new DataView(this._buf);\r\n\t\tthis._byte = new Uint8Array(this._buf);\r\n\t\tthis._byte.set(new Uint8Array(buffer));\r\n\t}\r\n\r\n\tprivate read<T>(amount: number, res: T): T {\r\n\t\tthis._pos += amount;\r\n\t\treturn res;\r\n\t}\r\n\r\n\treadUint8(): number {\r\n\t\ttry {\r\n\t\t\treturn this.read(1, this._view.getUint8(this._pos));\r\n\t\t} catch (e) {\r\n\t\t\tif (e instanceof RangeError) throw new CborRangeError(e.message);\r\n\t\t\tthrow e;\r\n\t\t}\r\n\t}\r\n\r\n\treadUint16(): number {\r\n\t\ttry {\r\n\t\t\treturn this.read(2, this._view.getUint16(this._pos));\r\n\t\t} catch (e) {\r\n\t\t\tif (e instanceof RangeError) throw new CborRangeError(e.message);\r\n\t\t\tthrow e;\r\n\t\t}\r\n\t}\r\n\r\n\treadUint32(): number {\r\n\t\ttry {\r\n\t\t\treturn this.read(4, this._view.getUint32(this._pos));\r\n\t\t} catch (e) {\r\n\t\t\tif (e instanceof RangeError) throw new CborRangeError(e.message);\r\n\t\t\tthrow e;\r\n\t\t}\r\n\t}\r\n\r\n\treadUint64(): bigint {\r\n\t\ttry {\r\n\t\t\treturn this.read(8, this._view.getBigUint64(this._pos));\r\n\t\t} catch (e) {\r\n\t\t\tif (e instanceof RangeError) throw new CborRangeError(e.message);\r\n\t\t\tthrow e;\r\n\t\t}\r\n\t}\r\n\r\n\t// https://stackoverflow.com/a/5684578\r\n\treadFloat16(): number {\r\n\t\tconst bytes = this.readUint16();\r\n\t\tconst s = (bytes & 0x8000) >> 15;\r\n\t\tconst e = (bytes & 0x7c00) >> 10;\r\n\t\tconst f = bytes & 0x03ff;\r\n\r\n\t\tif (e === 0) {\r\n\t\t\treturn (s ? -1 : 1) * 2 ** -14 * (f / 2 ** 10);\r\n\t\t}\r\n\r\n\t\tif (e === 0x1f) {\r\n\t\t\treturn f ? Number.NaN : (s ? -1 : 1) * Number.POSITIVE_INFINITY;\r\n\t\t}\r\n\r\n\t\treturn (s ? -1 : 1) * 2 ** (e - 15) * (1 + f / 2 ** 10);\r\n\t}\r\n\r\n\treadFloat32(): number {\r\n\t\ttry {\r\n\t\t\treturn this.read(4, this._view.getFloat32(this._pos));\r\n\t\t} catch (e) {\r\n\t\t\tif (e instanceof RangeError) throw new CborRangeError(e.message);\r\n\t\t\tthrow e;\r\n\t\t}\r\n\t}\r\n\r\n\treadFloat64(): number {\r\n\t\ttry {\r\n\t\t\treturn this.read(8, this._view.getFloat64(this._pos));\r\n\t\t} catch (e) {\r\n\t\t\tif (e instanceof RangeError) throw new CborRangeError(e.message);\r\n\t\t\tthrow e;\r\n\t\t}\r\n\t}\r\n\r\n\treadBytes(amount: number): Uint8Array {\r\n\t\tconst available = this._byte.length - this._pos;\r\n\t\tif (available < amount)\r\n\t\t\tthrow new CborRangeError(\r\n\t\t\t\t`The argument must be between 0 and ${available}`,\r\n\t\t\t);\r\n\r\n\t\treturn this.read(amount, this._byte.slice(this._pos, this._pos + amount));\r\n\t}\r\n\r\n\treadMajor(): [Major, number] {\r\n\t\tconst byte = this.readUint8();\r\n\t\tconst major = (byte >> 5) as Major;\r\n\t\tif (major < 0 || major > 7)\r\n\t\t\tthrow new CborInvalidMajorError(\"Received invalid major type\");\r\n\t\treturn [major, byte & 0x1f];\r\n\t}\r\n\r\n\treadMajorLength(length: number): number | bigint {\r\n\t\tif (length <= 23) return length;\r\n\r\n\t\tswitch (length) {\r\n\t\t\tcase 24:\r\n\t\t\t\treturn this.readUint8();\r\n\t\t\tcase 25:\r\n\t\t\t\treturn this.readUint16();\r\n\t\t\tcase 26:\r\n\t\t\t\treturn this.readUint32();\r\n\t\t\tcase 27: {\r\n\t\t\t\tconst read = this.readUint64();\r\n\t\t\t\treturn read > POW_2_53 ? read : Number(read);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthrow new CborRangeError(\"Expected a final length\");\r\n\t}\r\n}\r\n", "import type { Major } from \"./constants\";\r\nimport { CborInvalidMajorError, CborRangeError } from \"./error\";\r\nimport type { Reader } from \"./reader\";\r\nimport { Writer } from \"./writer\";\r\n\r\nexport function infiniteBytes(r: Reader, forMajor: Major): ArrayBuffer {\r\n\tconst w = new Writer();\r\n\twhile (true) {\r\n\t\tconst [major, len] = r.readMajor();\r\n\r\n\t\t// Received break signal\r\n\t\tif (major === 7 && len === 31) break;\r\n\r\n\t\t// Resource type has to match\r\n\t\tif (major !== forMajor)\r\n\t\t\tthrow new CborInvalidMajorError(\r\n\t\t\t\t`Expected a resource of the same major (${forMajor}) while processing an infinite resource`,\r\n\t\t\t);\r\n\r\n\t\t// Cannot have an infinite resource in an infinite resource\r\n\t\tif (len === 31)\r\n\t\t\tthrow new CborRangeError(\r\n\t\t\t\t\"Expected a finite resource while processing an infinite resource\",\r\n\t\t\t);\r\n\r\n\t\tw.writeUint8Array(r.readBytes(Number(r.readMajorLength(len))));\r\n\t}\r\n\r\n\treturn w.buffer;\r\n}\r\n", "import type { Replacer } from \"./constants\";\r\nimport { CborBreak, CborInvalidMajorError } from \"./error\";\r\nimport { Reader } from \"./reader\";\r\nimport { Tagged } from \"./tagged\";\r\nimport { infiniteBytes } from \"./util\";\r\n\r\nlet textDecoder: TextDecoder;\r\n\r\nexport interface DecodeOptions {\r\n\tmap?: \"object\" | \"map\";\r\n\treplacer?: Replacer;\r\n}\r\n\r\nexport function decode(\r\n\tinput: ArrayBufferLike | Reader,\r\n\toptions: DecodeOptions = {},\r\n\t// biome-ignore lint/suspicious/noExplicitAny: Don't know what it will return\r\n): any {\r\n\tconst r = input instanceof Reader ? input : new Reader(input);\r\n\r\n\tfunction inner() {\r\n\t\tconst [major, len] = r.readMajor();\r\n\t\tswitch (major) {\r\n\t\t\tcase 0:\r\n\t\t\t\treturn r.readMajorLength(len);\r\n\t\t\tcase 1: {\r\n\t\t\t\tconst l = r.readMajorLength(len);\r\n\t\t\t\treturn typeof l === \"bigint\" ? -(l + 1n) : -(l + 1);\r\n\t\t\t}\r\n\t\t\tcase 2: {\r\n\t\t\t\tif (len === 31) return infiniteBytes(r, 2);\r\n\t\t\t\treturn r.readBytes(Number(r.readMajorLength(len))).buffer;\r\n\t\t\t}\r\n\t\t\tcase 3: {\r\n\t\t\t\tconst encoded =\r\n\t\t\t\t\tlen === 31\r\n\t\t\t\t\t\t? infiniteBytes(r, 3)\r\n\t\t\t\t\t\t: r.readBytes(Number(r.readMajorLength(len)));\r\n\r\n\t\t\t\ttextDecoder ??= new TextDecoder();\r\n\t\t\t\treturn textDecoder.decode(encoded);\r\n\t\t\t}\r\n\r\n\t\t\tcase 4: {\r\n\t\t\t\tif (len === 31) {\r\n\t\t\t\t\tconst arr = [];\r\n\t\t\t\t\twhile (true) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tarr.push(decode());\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\tif (e instanceof CborBreak) break;\r\n\t\t\t\t\t\t\tthrow e;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn arr;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst l = r.readMajorLength(len);\r\n\t\t\t\tconst arr = Array(l);\r\n\t\t\t\tfor (let i = 0; i < l; i++) arr[i] = decode();\r\n\t\t\t\treturn arr;\r\n\t\t\t}\r\n\r\n\t\t\tcase 5: {\r\n\t\t\t\tconst entries: [string, unknown][] = [];\r\n\t\t\t\tif (len === 31) {\r\n\t\t\t\t\twhile (true) {\r\n\t\t\t\t\t\tlet key: string;\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tkey = decode();\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\tif (e instanceof CborBreak) break;\r\n\t\t\t\t\t\t\tthrow e;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tconst value = decode();\r\n\t\t\t\t\t\tentries.push([key, value]);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst l = r.readMajorLength(len);\r\n\t\t\t\t\tfor (let i = 0; i < l; i++) {\r\n\t\t\t\t\t\tconst key = decode();\r\n\t\t\t\t\t\tconst value = decode();\r\n\t\t\t\t\t\tentries[i] = [key, value];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn options.map === \"map\"\r\n\t\t\t\t\t? new Map(entries)\r\n\t\t\t\t\t: Object.fromEntries(entries);\r\n\t\t\t}\r\n\r\n\t\t\tcase 6: {\r\n\t\t\t\tconst tag = r.readMajorLength(len);\r\n\t\t\t\tconst value = decode();\r\n\t\t\t\treturn new Tagged(tag, value);\r\n\t\t\t}\r\n\r\n\t\t\tcase 7: {\r\n\t\t\t\tswitch (len) {\r\n\t\t\t\t\tcase 20:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\tcase 21:\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\tcase 22:\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\tcase 23:\r\n\t\t\t\t\t\treturn undefined;\r\n\t\t\t\t\tcase 25:\r\n\t\t\t\t\t\treturn r.readFloat16();\r\n\t\t\t\t\tcase 26:\r\n\t\t\t\t\t\treturn r.readFloat32();\r\n\t\t\t\t\tcase 27:\r\n\t\t\t\t\t\treturn r.readFloat64();\r\n\t\t\t\t\tcase 31:\r\n\t\t\t\t\t\tthrow new CborBreak();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthrow new CborInvalidMajorError(\r\n\t\t\t`Unable to decode value with major tag ${major}`,\r\n\t\t);\r\n\t}\r\n\r\n\t// biome-ignore lint/suspicious/noExplicitAny: Don't know what it will return\r\n\tfunction decode(): any {\r\n\t\treturn options.replacer ? options.replacer(inner()) : inner();\r\n\t}\r\n\r\n\treturn decode();\r\n}\r\n", "export function msToNs(ms: number): number {\r\n\treturn ms * 1000000;\r\n}\r\n\r\nexport function nsToMs(ns: number): number {\r\n\treturn Math.floor(ns / 1000000);\r\n}\r\n\r\nexport function dateToCborCustomDate(date: Date): [number, number] {\r\n\tconst s = Math.floor(date.getTime() / 1000);\r\n\tconst ms = date.getTime() - s * 1000;\r\n\treturn [s, ms * 1000000];\r\n}\r\n\r\nexport function cborCustomDateToDate([s, ns]: [number, number]): Date {\r\n\tconst date = new Date(0);\r\n\tdate.setUTCSeconds(Number(s));\r\n\tdate.setMilliseconds(Math.floor(Number(ns) / 1000000));\r\n\treturn date;\r\n}\r\n", "/**\r\n * A complex SurrealQL value type\r\n */\r\nexport abstract class Value {\r\n\t/**\r\n\t * Compare equality with another value.\r\n\t */\r\n\tabstract equals(other: unknown): boolean;\r\n\r\n\t/**\r\n\t * Convert this value to a serializable string\r\n\t */\r\n\tabstract toJSON(): unknown;\r\n\r\n\t/**\r\n\t * Convert this value to a string representation\r\n\t */\r\n\tabstract toString(): string;\r\n}\r\n", "import { Value } from \"../value\";\r\n\r\n/**\r\n * A SurrealQL decimal value.\r\n */\r\nexport class Decimal extends Value {\r\n\treadonly decimal: string;\r\n\r\n\tconstructor(decimal: string | number | Decimal) {\r\n\t\tsuper();\r\n\t\tthis.decimal = decimal.toString();\r\n\t}\r\n\r\n\tequals(other: unknown): boolean {\r\n\t\tif (!(other instanceof Decimal)) return false;\r\n\t\treturn this.decimal === other.decimal;\r\n\t}\r\n\r\n\ttoString(): string {\r\n\t\treturn this.decimal;\r\n\t}\r\n\r\n\ttoJSON(): string {\r\n\t\treturn this.decimal;\r\n\t}\r\n}\r\n", "import { SurrealDbError } from \"../../errors\";\r\nimport { Value } from \"../value\";\r\n\r\nconst millisecond = 1;\r\nconst microsecond = millisecond / 1000;\r\nconst nanosecond = microsecond / 1000;\r\nconst second = 1000 * millisecond;\r\nconst minute = 60 * second;\r\nconst hour = 60 * minute;\r\nconst day = 24 * hour;\r\nconst week = 7 * day;\r\n\r\nconst units = new Map([\r\n\t[\"ns\", nanosecond],\r\n\t[\"\u00B5s\", microsecond],\r\n\t[\"\u03BCs\", microsecond], // They look similar, but this unit is a different charachter than the one above it.\r\n\t[\"us\", microsecond], // needs to come last to be the displayed unit\r\n\t[\"ms\", millisecond],\r\n\t[\"s\", second],\r\n\t[\"m\", minute],\r\n\t[\"h\", hour],\r\n\t[\"d\", day],\r\n\t[\"w\", week],\r\n]);\r\n\r\nconst unitsReverse = Array.from(units).reduce((map, [unit, size]) => {\r\n\tmap.set(size, unit);\r\n\treturn map;\r\n}, new Map<number, string>());\r\n\r\nconst durationPartRegex = new RegExp(\r\n\t`^(\\\\d+)(${Array.from(units.keys()).join(\"|\")})`,\r\n);\r\n\r\n/**\r\n * A SurrealQL duration value.\r\n */\r\nexport class Duration extends Value {\r\n\treadonly _milliseconds: number;\r\n\r\n\tconstructor(input: Duration | number | string) {\r\n\t\tsuper();\r\n\r\n\t\tif (input instanceof Duration) {\r\n\t\t\tthis._milliseconds = input._milliseconds;\r\n\t\t} else if (typeof input === \"string\") {\r\n\t\t\tthis._milliseconds = Duration.parseString(input);\r\n\t\t} else {\r\n\t\t\tthis._milliseconds = input;\r\n\t\t}\r\n\t}\r\n\r\n\tstatic fromCompact([s, ns]: [number, number] | [number] | []): Duration {\r\n\t\ts = s ?? 0;\r\n\t\tns = ns ?? 0;\r\n\t\tconst ms = s * 1000 + ns / 1000000;\r\n\t\treturn new Duration(ms);\r\n\t}\r\n\r\n\tequals(other: unknown): boolean {\r\n\t\tif (!(other instanceof Duration)) return false;\r\n\t\treturn this._milliseconds === other._milliseconds;\r\n\t}\r\n\r\n\ttoCompact(): [number, number] | [number] | [] {\r\n\t\tconst s = Math.floor(this._milliseconds / 1000);\r\n\t\tconst ns = Math.floor((this._milliseconds - s * 1000) * 1000000);\r\n\t\treturn ns > 0 ? [s, ns] : s > 0 ? [s] : [];\r\n\t}\r\n\r\n\ttoString(): string {\r\n\t\tlet left = this._milliseconds;\r\n\t\tlet result = \"\";\r\n\t\tfunction scrap(size: number) {\r\n\t\t\tconst num = Math.floor(left / size);\r\n\t\t\tif (num > 0) left = left % size;\r\n\t\t\treturn num;\r\n\t\t}\r\n\r\n\t\tfor (const [size, unit] of Array.from(unitsReverse).reverse()) {\r\n\t\t\tconst scrapped = scrap(size);\r\n\t\t\tif (scrapped > 0) result += `${scrapped}${unit}`;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\ttoJSON(): string {\r\n\t\treturn this.toString();\r\n\t}\r\n\r\n\tstatic parseString(input: string): number {\r\n\t\tlet ms = 0;\r\n\t\tlet left = input;\r\n\t\twhile (left !== \"\") {\r\n\t\t\tconst match = left.match(durationPartRegex);\r\n\t\t\tif (match) {\r\n\t\t\t\tconst amount = Number.parseInt(match[1]);\r\n\t\t\t\tconst factor = units.get(match[2]);\r\n\t\t\t\tif (factor === undefined)\r\n\t\t\t\t\tthrow new SurrealDbError(`Invalid duration unit: ${match[2]}`);\r\n\r\n\t\t\t\tms += amount * factor;\r\n\t\t\t\tleft = left.slice(match[0].length);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tthrow new SurrealDbError(\"Could not match a next duration part\");\r\n\t\t}\r\n\r\n\t\treturn ms;\r\n\t}\r\n\r\n\tstatic nanoseconds(nanoseconds: number): Duration {\r\n\t\treturn new Duration(Math.floor(nanoseconds * nanosecond));\r\n\t}\r\n\r\n\tstatic microseconds(microseconds: number): Duration {\r\n\t\treturn new Duration(Math.floor(microseconds * microsecond));\r\n\t}\r\n\r\n\tstatic milliseconds(milliseconds: number): Duration {\r\n\t\treturn new Duration(milliseconds);\r\n\t}\r\n\r\n\tstatic seconds(seconds: number): Duration {\r\n\t\treturn new Duration(seconds * second);\r\n\t}\r\n\r\n\tstatic minutes(minutes: number): Duration {\r\n\t\treturn new Duration(minutes * minute);\r\n\t}\r\n\r\n\tstatic hours(hours: number): Duration {\r\n\t\treturn new Duration(hours * hour);\r\n\t}\r\n\r\n\tstatic days(days: number): Duration {\r\n\t\treturn new Duration(days * day);\r\n\t}\r\n\r\n\tstatic weeks(weeks: number): Duration {\r\n\t\treturn new Duration(weeks * week);\r\n\t}\r\n\r\n\tget microseconds(): number {\r\n\t\treturn Math.floor(this._milliseconds / microsecond);\r\n\t}\r\n\r\n\tget nanoseconds(): number {\r\n\t\treturn Math.floor(this._milliseconds / nanosecond);\r\n\t}\r\n\r\n\tget milliseconds(): number {\r\n\t\treturn Math.floor(this._milliseconds);\r\n\t}\r\n\r\n\tget seconds(): number {\r\n\t\treturn Math.floor(this._milliseconds / second);\r\n\t}\r\n\r\n\tget minutes(): number {\r\n\t\treturn Math.floor(this._milliseconds / minute);\r\n\t}\r\n\r\n\tget hours(): number {\r\n\t\treturn Math.floor(this._milliseconds / hour);\r\n\t}\r\n\r\n\tget days(): number {\r\n\t\treturn Math.floor(this._milliseconds / day);\r\n\t}\r\n\r\n\tget weeks(): number {\r\n\t\treturn Math.floor(this._milliseconds / week);\r\n\t}\r\n}\r\n", "import { Value } from \"../value\";\r\n\r\n/**\r\n * An uncomputed SurrealQL future value.\r\n */\r\nexport class Future extends Value {\r\n\tconstructor(readonly inner: string) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tequals(other: unknown): boolean {\r\n\t\tif (!(other instanceof Future)) return false;\r\n\t\treturn this.inner === other.inner;\r\n\t}\r\n\r\n\ttoJSON(): string {\r\n\t\treturn this.toString();\r\n\t}\r\n\r\n\ttoString(): string {\r\n\t\treturn `<future> ${this.inner}`;\r\n\t}\r\n}\r\n", "import { Value } from \"../value.ts\";\r\nimport { Decimal } from \"./decimal.ts\";\r\n\r\n/**\r\n * A SurrealQL geometry value.\r\n */\r\nexport abstract class Geometry extends Value {\r\n\tabstract toJSON(): GeoJson;\r\n\tabstract is(geometry: Geometry): boolean;\r\n\tabstract clone(): Geometry;\r\n\r\n\tequals(other: unknown): boolean {\r\n\t\tif (!(other instanceof Geometry)) return false;\r\n\t\treturn this.is(other);\r\n\t}\r\n\r\n\ttoString(): string {\r\n\t\treturn JSON.stringify(this.toJSON());\r\n\t}\r\n}\r\n\r\nfunction f(num: number | Decimal) {\r\n\tif (num instanceof Decimal) return Number.parseFloat(num.decimal);\r\n\treturn num;\r\n}\r\n\r\n/**\r\n * A SurrealQL point geometry value.\r\n */\r\nexport class GeometryPoint extends Geometry {\r\n\treadonly point: [number, number];\r\n\r\n\tconstructor(point: [number | Decimal, number | Decimal] | GeometryPoint) {\r\n\t\tsuper();\r\n\t\tif (point instanceof GeometryPoint) {\r\n\t\t\tthis.point = point.clone().point;\r\n\t\t} else {\r\n\t\t\tthis.point = [f(point[0]), f(point[1])];\r\n\t\t}\r\n\t}\r\n\r\n\ttoJSON(): GeoJsonPoint {\r\n\t\treturn {\r\n\t\t\ttype: \"Point\" as const,\r\n\t\t\tcoordinates: this.coordinates,\r\n\t\t};\r\n\t}\r\n\r\n\tget coordinates(): GeoJsonPoint[\"coordinates\"] {\r\n\t\treturn this.point;\r\n\t}\r\n\r\n\tis(geometry: Geometry): geometry is GeometryPoint {\r\n\t\tif (!(geometry instanceof GeometryPoint)) return false;\r\n\t\treturn (\r\n\t\t\tthis.point[0] === geometry.point[0] && this.point[1] === geometry.point[1]\r\n\t\t);\r\n\t}\r\n\r\n\tclone(): GeometryPoint {\r\n\t\treturn new GeometryPoint([...this.point]);\r\n\t}\r\n}\r\n\r\n/**\r\n * A SurrealQL line geometry value.\r\n */\r\nexport class GeometryLine extends Geometry {\r\n\treadonly line: [GeometryPoint, GeometryPoint, ...GeometryPoint[]];\r\n\r\n\t// SurrealDB only has the concept of a \"Line\", which by spec is two points.\r\n\t// SurrealDB's \"Line\" however, is actually a \"LineString\" under the hood, which accepts two or more points\r\n\tconstructor(\r\n\t\tline: [GeometryPoint, GeometryPoint, ...GeometryPoint[]] | GeometryLine,\r\n\t) {\r\n\t\tsuper();\r\n\t\tthis.line = line instanceof GeometryLine ? line.clone().line : line;\r\n\t}\r\n\r\n\ttoJSON(): GeoJsonLineString {\r\n\t\treturn {\r\n\t\t\ttype: \"LineString\" as const,\r\n\t\t\tcoordinates: this.coordinates,\r\n\t\t};\r\n\t}\r\n\r\n\tget coordinates(): GeoJsonLineString[\"coordinates\"] {\r\n\t\treturn this.line.map(\r\n\t\t\t(g) => g.coordinates,\r\n\t\t) as GeoJsonLineString[\"coordinates\"];\r\n\t}\r\n\r\n\tclose(): void {\r\n\t\tif (!this.line[0].is(this.line.at(-1) as GeometryPoint)) {\r\n\t\t\tthis.line.push(this.line[0]);\r\n\t\t}\r\n\t}\r\n\r\n\tis(geometry: Geometry): geometry is GeometryLine {\r\n\t\tif (!(geometry instanceof GeometryLine)) return false;\r\n\t\tif (this.line.length !== geometry.line.length) return false;\r\n\t\tfor (let i = 0; i < this.line.length; i++) {\r\n\t\t\tif (!this.line[i].is(geometry.line[i])) return false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tclone(): GeometryLine {\r\n\t\treturn new GeometryLine(\r\n\t\t\tthis.line.map((p) => p.clone()) as [\r\n\t\t\t\tGeometryPoint,\r\n\t\t\t\tGeometryPoint,\r\n\t\t\t\t...GeometryPoint[],\r\n\t\t\t],\r\n\t\t);\r\n\t}\r\n}\r\n\r\n/**\r\n * A SurrealQL polygon geometry value.\r\n */\r\nexport class GeometryPolygon extends Geometry {\r\n\treadonly polygon: [GeometryLine, ...GeometryLine[]];\r\n\r\n\tconstructor(polygon: [GeometryLine, ...GeometryLine[]] | GeometryPolygon) {\r\n\t\tsuper();\r\n\t\tthis.polygon =\r\n\t\t\tpolygon instanceof GeometryPolygon\r\n\t\t\t\t? polygon.clone().polygon\r\n\t\t\t\t: (polygon.map((l) => {\r\n\t\t\t\t\t\tconst line = l.clone();\r\n\t\t\t\t\t\tline.close();\r\n\t\t\t\t\t\treturn line;\r\n\t\t\t\t\t}) as [GeometryLine, ...GeometryLine[]]);\r\n\t}\r\n\r\n\ttoJSON(): GeoJsonPolygon {\r\n\t\treturn {\r\n\t\t\ttype: \"Polygon\" as const,\r\n\t\t\tcoordinates: this.coordinates,\r\n\t\t};\r\n\t}\r\n\r\n\tget coordinates(): GeoJsonPolygon[\"coordinates\"] {\r\n\t\treturn this.polygon.map(\r\n\t\t\t(g) => g.coordinates,\r\n\t\t) as GeoJsonPolygon[\"coordinates\"];\r\n\t}\r\n\r\n\tis(geometry: Geometry): geometry is GeometryPolygon {\r\n\t\tif (!(geometry instanceof GeometryPolygon)) return false;\r\n\t\tif (this.polygon.length !== geometry.polygon.length) return false;\r\n\t\tfor (let i = 0; i < this.polygon.length; i++) {\r\n\t\t\tif (!this.polygon[i].is(geometry.polygon[i])) return false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tclone(): GeometryPolygon {\r\n\t\treturn new GeometryPolygon(\r\n\t\t\tthis.polygon.map((p) => p.clone()) as [GeometryLine, ...GeometryLine[]],\r\n\t\t);\r\n\t}\r\n}\r\n\r\n/**\r\n * A SurrealQL multi-point geometry value.\r\n */\r\nexport class GeometryMultiPoint extends Geometry {\r\n\treadonly points: [GeometryPoint, ...GeometryPoint[]];\r\n\r\n\tconstructor(\r\n\t\tpoints: [GeometryPoint, ...GeometryPoint[]] | GeometryMultiPoint,\r\n\t) {\r\n\t\tsuper();\r\n\t\tthis.points = points instanceof GeometryMultiPoint ? points.points : points;\r\n\t}\r\n\r\n\ttoJSON(): GeoJsonMultiPoint {\r\n\t\treturn {\r\n\t\t\ttype: \"MultiPoint\" as const,\r\n\t\t\tcoordinates: this.coordinates,\r\n\t\t};\r\n\t}\r\n\r\n\tget coordinates(): GeoJsonMultiPoint[\"coordinates\"] {\r\n\t\treturn this.points.map(\r\n\t\t\t(g) => g.coordinates,\r\n\t\t) as GeoJsonMultiPoint[\"coordinates\"];\r\n\t}\r\n\r\n\tis(geometry: Geometry): geometry is GeometryMultiPoint {\r\n\t\tif (!(geometry instanceof GeometryMultiPoint)) return false;\r\n\t\tif (this.points.length !== geometry.points.length) return false;\r\n\t\tfor (let i = 0; i < this.points.length; i++) {\r\n\t\t\tif (!this.points[i].is(geometry.points[i])) return false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tclone(): GeometryMultiPoint {\r\n\t\treturn new GeometryMultiPoint(\r\n\t\t\tthis.points.map((p) => p.clone()) as [GeometryPoint, ...GeometryPoint[]],\r\n\t\t);\r\n\t}\r\n}\r\n\r\n/**\r\n * A SurrealQL multi-line geometry value.\r\n */\r\nexport class GeometryMultiLine extends Geometry {\r\n\treadonly lines: [GeometryLine, ...GeometryLine[]];\r\n\r\n\tconstructor(lines: [GeometryLine, ...GeometryLine[]] | GeometryMultiLine) {\r\n\t\tsuper();\r\n\t\tthis.lines = lines instanceof GeometryMultiLine ? lines.lines : lines;\r\n\t}\r\n\r\n\ttoJSON(): GeoJsonMultiLineString {\r\n\t\treturn {\r\n\t\t\ttype: \"MultiLineString\" as const,\r\n\t\t\tcoordinates: this.coordinates,\r\n\t\t};\r\n\t}\r\n\r\n\tget coordinates(): GeoJsonMultiLineString[\"coordinates\"] {\r\n\t\treturn this.lines.map(\r\n\t\t\t(g) => g.coordinates,\r\n\t\t) as GeoJsonMultiLineString[\"coordinates\"];\r\n\t}\r\n\r\n\tis(geometry: Geometry): geometry is GeometryMultiLine {\r\n\t\tif (!(geometry instanceof GeometryMultiLine)) return false;\r\n\t\tif (this.lines.length !== geometry.lines.length) return false;\r\n\t\tfor (let i = 0; i < this.lines.length; i++) {\r\n\t\t\tif (!this.lines[i].is(geometry.lines[i])) return false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tclone(): GeometryMultiLine {\r\n\t\treturn new GeometryMultiLine(\r\n\t\t\tthis.lines.map((p) => p.clone()) as [GeometryLine, ...GeometryLine[]],\r\n\t\t);\r\n\t}\r\n}\r\n\r\n/**\r\n * A SurrealQL multi-polygon geometry value.\r\n */\r\nexport class GeometryMultiPolygon extends Geometry {\r\n\treadonly polygons: [GeometryPolygon, ...GeometryPolygon[]];\r\n\r\n\tconstructor(\r\n\t\tpolygons: [GeometryPolygon, ...GeometryPolygon[]] | GeometryMultiPolygon,\r\n\t) {\r\n\t\tsuper();\r\n\t\tthis.polygons =\r\n\t\t\tpolygons instanceof GeometryMultiPolygon ? polygons.polygons : polygons;\r\n\t}\r\n\r\n\ttoJSON(): GeoJsonMultiPolygon {\r\n\t\treturn {\r\n\t\t\ttype: \"MultiPolygon\" as const,\r\n\t\t\tcoordinates: this.coordinates,\r\n\t\t};\r\n\t}\r\n\r\n\tget coordinates(): GeoJsonMultiPolygon[\"coordinates\"] {\r\n\t\treturn this.polygons.map(\r\n\t\t\t(g) => g.coordinates,\r\n\t\t) as GeoJsonMultiPolygon[\"coordinates\"];\r\n\t}\r\n\r\n\tis(geometry: Geometry): geometry is GeometryMultiPolygon {\r\n\t\tif (!(geometry instanceof GeometryMultiPolygon)) return false;\r\n\t\tif (this.polygons.length !== geometry.polygons.length) return false;\r\n\t\tfor (let i = 0; i < this.polygons.length; i++) {\r\n\t\t\tif (!this.polygons[i].is(geometry.polygons[i])) return false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tclone(): GeometryMultiPolygon {\r\n\t\treturn new GeometryMultiPolygon(\r\n\t\t\tthis.polygons.map((p) => p.clone()) as [\r\n\t\t\t\tGeometryPolygon,\r\n\t\t\t\t...GeometryPolygon[],\r\n\t\t\t],\r\n\t\t);\r\n\t}\r\n}\r\n\r\n/**\r\n * A SurrealQL geometry collection value.\r\n */\r\nexport class GeometryCollection extends Geometry {\r\n\treadonly collection: [Geometry, ...Geometry[]];\r\n\r\n\tconstructor(collection: [Geometry, ...Geometry[]] | GeometryCollection) {\r\n\t\tsuper();\r\n\t\tthis.collection =\r\n\t\t\tcollection instanceof GeometryCollection\r\n\t\t\t\t? collection.collection\r\n\t\t\t\t: collection;\r\n\t}\r\n\r\n\ttoJSON(): GeoJsonCollection {\r\n\t\treturn {\r\n\t\t\ttype: \"GeometryCollection\" as const,\r\n\t\t\tgeometries: this.geometries,\r\n\t\t};\r\n\t}\r\n\r\n\tget geometries(): GeoJsonCollection[\"geometries\"] {\r\n\t\treturn this.collection.map((g) =>\r\n\t\t\tg.toJSON(),\r\n\t\t) as GeoJsonCollection[\"geometries\"];\r\n\t}\r\n\r\n\tis(geometry: Geometry): geometry is GeometryCollection {\r\n\t\tif (!(geometry instanceof GeometryCollection)) return false;\r\n\t\tif (this.collection.length !== geometry.collection.length) return false;\r\n\t\tfor (let i = 0; i < this.collection.length; i++) {\r\n\t\t\tif (!this.collection[i].is(geometry.collection[i])) return false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tclone(): GeometryCollection {\r\n\t\treturn new GeometryCollection(\r\n\t\t\tthis.collection.map((p) => p.clone()) as [Geometry, ...Geometry[]],\r\n\t\t);\r\n\t}\r\n}\r\n\r\n// Geo Json Types\r\n\r\ntype GeoJson =\r\n\t| GeoJsonPoint\r\n\t| GeoJsonLineString\r\n\t| GeoJsonPolygon\r\n\t| GeoJsonMultiPoint\r\n\t| GeoJsonMultiLineString\r\n\t| GeoJsonMultiPolygon\r\n\t| GeoJsonCollection;\r\n\r\nexport type GeoJsonPoint = {\r\n\ttype: \"Point\";\r\n\tcoordinates: [number, number];\r\n};\r\n\r\nexport type GeoJsonLineString = {\r\n\ttype: \"LineString\";\r\n\tcoordinates: [\r\n\t\tGeoJsonPoint[\"coordinates\"],\r\n\t\tGeoJsonPoint[\"coordinates\"],\r\n\t\t...GeoJsonPoint[\"coordinates\"][],\r\n\t];\r\n};\r\n\r\nexport type GeoJsonPolygon = {\r\n\ttype: \"Polygon\";\r\n\tcoordinates: [\r\n\t\tGeoJsonLineString[\"coordinates\"],\r\n\t\t...GeoJsonLineString[\"coordinates\"][],\r\n\t];\r\n};\r\n\r\nexport type GeoJsonMultiPoint = {\r\n\ttype: \"MultiPoint\";\r\n\tcoordinates: [GeoJsonPoint[\"coordinates\"], ...GeoJsonPoint[\"coordinates\"][]];\r\n};\r\n\r\nexport type GeoJsonMultiLineString = {\r\n\ttype: \"MultiLineString\";\r\n\tcoordinates: [\r\n\t\tGeoJsonLineString[\"coordinates\"],\r\n\t\t...GeoJsonLineString[\"coordinates\"][],\r\n\t];\r\n};\r\n\r\nexport type GeoJsonMultiPolygon = {\r\n\ttype: \"MultiPolygon\";\r\n\tcoordinates: [\r\n\t\tGeoJsonPolygon[\"coordinates\"],\r\n\t\t...GeoJsonPolygon[\"coordinates\"][],\r\n\t];\r\n};\r\n\r\nexport type GeoJsonCollection = {\r\n\ttype: \"GeometryCollection\";\r\n\tgeometries: GeoJson[];\r\n};\r\n", "import { Value } from \"../data/value\";\r\n\r\n/**\r\n * Recursively compare supported SurrealQL values for equality.\r\n *\r\n * @param x The first value to compare\r\n * @param y The second value to compare\r\n * @returns Whether the two values are recursively equal\r\n */\r\nexport function equals(x: unknown, y: unknown): boolean {\r\n\tif (Object.is(x, y)) return true;\r\n\tif (x instanceof Date && y instanceof Date) {\r\n\t\treturn x.getTime() === y.getTime();\r\n\t}\r\n\tif (x instanceof RegExp && y instanceof RegExp) {\r\n\t\treturn x.toString() === y.toString();\r\n\t}\r\n\tif (x instanceof Value && y instanceof Value) {\r\n\t\treturn x.equals(y);\r\n\t}\r\n\tif (\r\n\t\ttypeof x !== \"object\" ||\r\n\t\tx === null ||\r\n\t\ttypeof y !== \"object\" ||\r\n\t\ty === null\r\n\t) {\r\n\t\treturn false;\r\n\t}\r\n\tconst keysX = Reflect.ownKeys(x as unknown as object) as (keyof typeof x)[];\r\n\tconst keysY = Reflect.ownKeys(y as unknown as object);\r\n\tif (keysX.length !== keysY.length) return false;\r\n\tfor (let i = 0; i < keysX.length; i++) {\r\n\t\tif (!Reflect.has(y as unknown as object, keysX[i])) return false;\r\n\t\tif (!equals(x[keysX[i]], y[keysX[i]])) return false;\r\n\t}\r\n\treturn true;\r\n}\r\n", "const MAX_i64 = 9223372036854775807n;\n/**\n * Escape a given string to be used as a valid SurrealQL ident.\n * @param str - The string to escape\n * @returns Optionally escaped string\n */\nexport function escapeIdent(str) {\n    // String which looks like a number should always be escaped, to prevent it from being parsed as a number\n    if (isOnlyNumbers(str)) {\n        return `\u27E8${str}\u27E9`;\n    }\n    // Empty string should always be escaped\n    if (str === \"\") {\n        return \"\u27E8\u27E9\";\n    }\n    let code;\n    let i;\n    let len;\n    for (i = 0, len = str.length; i < len; i++) {\n        code = str.charCodeAt(i);\n        if (!(code > 47 && code < 58) && // numeric (0-9)\n            !(code > 64 && code < 91) && // upper alpha (A-Z)\n            !(code > 96 && code < 123) && // lower alpha (a-z)\n            !(code === 95) // underscore (_)\n        ) {\n            return `\u27E8${str.replaceAll(\"\u27E9\", \"\\\\\u27E9\")}\u27E9`;\n        }\n    }\n    return str;\n}\n/**\n * Escape a given string to be used as a valid SurrealQL ident.\n * @param str - The string to escape\n * @returns Optionally escaped string\n * @deprecated Use `escapeIdent` instead\n */\nexport function escape_ident(str) {\n    return escapeIdent(str);\n}\n/**\n * Escape a number to be used as a valid SurrealQL ident.\n * @param num - The number to escape\n * @returns Optionally escaped number\n */\nexport function escapeNumber(num) {\n    return num <= MAX_i64 ? num.toString() : `\u27E8${num}\u27E9`;\n}\nfunction isOnlyNumbers(str) {\n    const stripped = str.replace(\"_\", \"\");\n    const parsed = Number.parseInt(stripped);\n    return !Number.isNaN(parsed) && parsed.toString() === stripped;\n}\n", "/**\n * uuidv7: A JavaScript implementation of UUID version 7\n *\n * Copyright 2021-2024 LiosK\n *\n * @license Apache-2.0\n * @packageDocumentation\n */\nconst DIGITS = \"0123456789abcdef\";\n/** Represents a UUID as a 16-byte byte array. */\nexport class UUID {\n    /** @param bytes - The 16-byte byte array representation. */\n    constructor(bytes) {\n        this.bytes = bytes;\n    }\n    /**\n     * Creates an object from the internal representation, a 16-byte byte array\n     * containing the binary UUID representation in the big-endian byte order.\n     *\n     * This method does NOT shallow-copy the argument, and thus the created object\n     * holds the reference to the underlying buffer.\n     *\n     * @throws TypeError if the length of the argument is not 16.\n     */\n    static ofInner(bytes) {\n        if (bytes.length !== 16) {\n            throw new TypeError(\"not 128-bit length\");\n        }\n        else {\n            return new UUID(bytes);\n        }\n    }\n    /**\n     * Builds a byte array from UUIDv7 field values.\n     *\n     * @param unixTsMs - A 48-bit `unix_ts_ms` field value.\n     * @param randA - A 12-bit `rand_a` field value.\n     * @param randBHi - The higher 30 bits of 62-bit `rand_b` field value.\n     * @param randBLo - The lower 32 bits of 62-bit `rand_b` field value.\n     * @throws RangeError if any field value is out of the specified range.\n     */\n    static fromFieldsV7(unixTsMs, randA, randBHi, randBLo) {\n        if (!Number.isInteger(unixTsMs) ||\n            !Number.isInteger(randA) ||\n            !Number.isInteger(randBHi) ||\n            !Number.isInteger(randBLo) ||\n            unixTsMs < 0 ||\n            randA < 0 ||\n            randBHi < 0 ||\n            randBLo < 0 ||\n            unixTsMs > 281474976710655 ||\n            randA > 0xfff ||\n            randBHi > 1073741823 ||\n            randBLo > 4294967295) {\n            throw new RangeError(\"invalid field value\");\n        }\n        const bytes = new Uint8Array(16);\n        bytes[0] = unixTsMs / 2 ** 40;\n        bytes[1] = unixTsMs / 2 ** 32;\n        bytes[2] = unixTsMs / 2 ** 24;\n        bytes[3] = unixTsMs / 2 ** 16;\n        bytes[4] = unixTsMs / 2 ** 8;\n        bytes[5] = unixTsMs;\n        bytes[6] = 0x70 | (randA >>> 8);\n        bytes[7] = randA;\n        bytes[8] = 0x80 | (randBHi >>> 24);\n        bytes[9] = randBHi >>> 16;\n        bytes[10] = randBHi >>> 8;\n        bytes[11] = randBHi;\n        bytes[12] = randBLo >>> 24;\n        bytes[13] = randBLo >>> 16;\n        bytes[14] = randBLo >>> 8;\n        bytes[15] = randBLo;\n        return new UUID(bytes);\n    }\n    /**\n     * Builds a byte array from a string representation.\n     *\n     * This method accepts the following formats:\n     *\n     * - 32-digit hexadecimal format without hyphens: `0189dcd553117d408db09496a2eef37b`\n     * - 8-4-4-4-12 hyphenated format: `0189dcd5-5311-7d40-8db0-9496a2eef37b`\n     * - Hyphenated format with surrounding braces: `{0189dcd5-5311-7d40-8db0-9496a2eef37b}`\n     * - RFC 9562 URN format: `urn:uuid:0189dcd5-5311-7d40-8db0-9496a2eef37b`\n     *\n     * Leading and trailing whitespaces represents an error.\n     *\n     * @throws SyntaxError if the argument could not parse as a valid UUID string.\n     */\n    static parse(uuid) {\n        var _a, _b, _c, _d;\n        let hex = undefined;\n        switch (uuid.length) {\n            case 32:\n                hex = (_a = /^[0-9a-f]{32}$/i.exec(uuid)) === null || _a === void 0 ? void 0 : _a[0];\n                break;\n            case 36:\n                hex =\n                    (_b = /^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n                        .exec(uuid)) === null || _b === void 0 ? void 0 : _b.slice(1, 6).join(\"\");\n                break;\n            case 38:\n                hex =\n                    (_c = /^\\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\\}$/i\n                        .exec(uuid)) === null || _c === void 0 ? void 0 : _c.slice(1, 6).join(\"\");\n                break;\n            case 45:\n                hex =\n                    (_d = /^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n                        .exec(uuid)) === null || _d === void 0 ? void 0 : _d.slice(1, 6).join(\"\");\n                break;\n            default:\n                break;\n        }\n        if (hex) {\n            const inner = new Uint8Array(16);\n            for (let i = 0; i < 16; i += 4) {\n                const n = parseInt(hex.substring(2 * i, 2 * i + 8), 16);\n                inner[i + 0] = n >>> 24;\n                inner[i + 1] = n >>> 16;\n                inner[i + 2] = n >>> 8;\n                inner[i + 3] = n;\n            }\n            return new UUID(inner);\n        }\n        else {\n            throw new SyntaxError(\"could not parse UUID string\");\n        }\n    }\n    /**\n     * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n     * (`0189dcd5-5311-7d40-8db0-9496a2eef37b`).\n     */\n    toString() {\n        let text = \"\";\n        for (let i = 0; i < this.bytes.length; i++) {\n            text += DIGITS.charAt(this.bytes[i] >>> 4);\n            text += DIGITS.charAt(this.bytes[i] & 0xf);\n            if (i === 3 || i === 5 || i === 7 || i === 9) {\n                text += \"-\";\n            }\n        }\n        return text;\n    }\n    /**\n     * @returns The 32-digit hexadecimal representation without hyphens\n     * (`0189dcd553117d408db09496a2eef37b`).\n     */\n    toHex() {\n        let text = \"\";\n        for (let i = 0; i < this.bytes.length; i++) {\n            text += DIGITS.charAt(this.bytes[i] >>> 4);\n            text += DIGITS.charAt(this.bytes[i] & 0xf);\n        }\n        return text;\n    }\n    /** @returns The 8-4-4-4-12 canonical hexadecimal string representation. */\n    toJSON() {\n        return this.toString();\n    }\n    /**\n     * Reports the variant field value of the UUID or, if appropriate, \"NIL\" or\n     * \"MAX\".\n     *\n     * For convenience, this method reports \"NIL\" or \"MAX\" if `this` represents\n     * the Nil or Max UUID, although the Nil and Max UUIDs are technically\n     * subsumed under the variants `0b0` and `0b111`, respectively.\n     */\n    getVariant() {\n        const n = this.bytes[8] >>> 4;\n        if (n < 0) {\n            throw new Error(\"unreachable\");\n        }\n        else if (n <= 0b0111) {\n            return this.bytes.every((e) => e === 0) ? \"NIL\" : \"VAR_0\";\n        }\n        else if (n <= 0b1011) {\n            return \"VAR_10\";\n        }\n        else if (n <= 0b1101) {\n            return \"VAR_110\";\n        }\n        else if (n <= 0b1111) {\n            return this.bytes.every((e) => e === 0xff) ? \"MAX\" : \"VAR_RESERVED\";\n        }\n        else {\n            throw new Error(\"unreachable\");\n        }\n    }\n    /**\n     * Returns the version field value of the UUID or `undefined` if the UUID does\n     * not have the variant field value of `0b10`.\n     */\n    getVersion() {\n        return this.getVariant() === \"VAR_10\" ? this.bytes[6] >>> 4 : undefined;\n    }\n    /** Creates an object from `this`. */\n    clone() {\n        return new UUID(this.bytes.slice(0));\n    }\n    /** Returns true if `this` is equivalent to `other`. */\n    equals(other) {\n        return this.compareTo(other) === 0;\n    }\n    /**\n     * Returns a negative integer, zero, or positive integer if `this` is less\n     * than, equal to, or greater than `other`, respectively.\n     */\n    compareTo(other) {\n        for (let i = 0; i < 16; i++) {\n            const diff = this.bytes[i] - other.bytes[i];\n            if (diff !== 0) {\n                return Math.sign(diff);\n            }\n        }\n        return 0;\n    }\n}\n/**\n * Encapsulates the monotonic counter state.\n *\n * This class provides APIs to utilize a separate counter state from that of the\n * global generator used by {@link uuidv7} and {@link uuidv7obj}. In addition to\n * the default {@link generate} method, this class has {@link generateOrAbort}\n * that is useful to absolutely guarantee the monotonically increasing order of\n * generated UUIDs. See their respective documentation for details.\n */\nexport class V7Generator {\n    /**\n     * Creates a generator object with the default random number generator, or\n     * with the specified one if passed as an argument. The specified random\n     * number generator should be cryptographically strong and securely seeded.\n     */\n    constructor(randomNumberGenerator) {\n        this.timestamp = 0;\n        this.counter = 0;\n        this.random = randomNumberGenerator !== null && randomNumberGenerator !== void 0 ? randomNumberGenerator : getDefaultRandom();\n    }\n    /**\n     * Generates a new UUIDv7 object from the current timestamp, or resets the\n     * generator upon significant timestamp rollback.\n     *\n     * This method returns a monotonically increasing UUID by reusing the previous\n     * timestamp even if the up-to-date timestamp is smaller than the immediately\n     * preceding UUID's. However, when such a clock rollback is considered\n     * significant (i.e., by more than ten seconds), this method resets the\n     * generator and returns a new UUID based on the given timestamp, breaking the\n     * increasing order of UUIDs.\n     *\n     * See {@link generateOrAbort} for the other mode of generation and\n     * {@link generateOrResetCore} for the low-level primitive.\n     */\n    generate() {\n        return this.generateOrResetCore(Date.now(), 10000);\n    }\n    /**\n     * Generates a new UUIDv7 object from the current timestamp, or returns\n     * `undefined` upon significant timestamp rollback.\n     *\n     * This method returns a monotonically increasing UUID by reusing the previous\n     * timestamp even if the up-to-date timestamp is smaller than the immediately\n     * preceding UUID's. However, when such a clock rollback is considered\n     * significant (i.e., by more than ten seconds), this method aborts and\n     * returns `undefined` immediately.\n     *\n     * See {@link generate} for the other mode of generation and\n     * {@link generateOrAbortCore} for the low-level primitive.\n     */\n    generateOrAbort() {\n        return this.generateOrAbortCore(Date.now(), 10000);\n    }\n    /**\n     * Generates a new UUIDv7 object from the `unixTsMs` passed, or resets the\n     * generator upon significant timestamp rollback.\n     *\n     * This method is equivalent to {@link generate} except that it takes a custom\n     * timestamp and clock rollback allowance.\n     *\n     * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n     * considered significant. A suggested value is `10_000` (milliseconds).\n     * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n     */\n    generateOrResetCore(unixTsMs, rollbackAllowance) {\n        let value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n        if (value === undefined) {\n            // reset state and resume\n            this.timestamp = 0;\n            value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n        }\n        return value;\n    }\n    /**\n     * Generates a new UUIDv7 object from the `unixTsMs` passed, or returns\n     * `undefined` upon significant timestamp rollback.\n     *\n     * This method is equivalent to {@link generateOrAbort} except that it takes a\n     * custom timestamp and clock rollback allowance.\n     *\n     * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n     * considered significant. A suggested value is `10_000` (milliseconds).\n     * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n     */\n    generateOrAbortCore(unixTsMs, rollbackAllowance) {\n        const MAX_COUNTER = 4398046511103;\n        if (!Number.isInteger(unixTsMs) ||\n            unixTsMs < 1 ||\n            unixTsMs > 281474976710655) {\n            throw new RangeError(\"`unixTsMs` must be a 48-bit positive integer\");\n        }\n        else if (rollbackAllowance < 0 || rollbackAllowance > 281474976710655) {\n            throw new RangeError(\"`rollbackAllowance` out of reasonable range\");\n        }\n        if (unixTsMs > this.timestamp) {\n            this.timestamp = unixTsMs;\n            this.resetCounter();\n        }\n        else if (unixTsMs + rollbackAllowance >= this.timestamp) {\n            // go on with previous timestamp if new one is not much smaller\n            this.counter++;\n            if (this.counter > MAX_COUNTER) {\n                // increment timestamp at counter overflow\n                this.timestamp++;\n                this.resetCounter();\n            }\n        }\n        else {\n            // abort if clock went backwards to unbearable extent\n            return undefined;\n        }\n        return UUID.fromFieldsV7(this.timestamp, Math.trunc(this.counter / 2 ** 30), this.counter & (2 ** 30 - 1), this.random.nextUint32());\n    }\n    /** Initializes the counter at a 42-bit random integer. */\n    resetCounter() {\n        this.counter =\n            this.random.nextUint32() * 0x400 + (this.random.nextUint32() & 0x3ff);\n    }\n    /**\n     * Generates a new UUIDv4 object utilizing the random number generator inside.\n     *\n     * @internal\n     */\n    generateV4() {\n        const bytes = new Uint8Array(Uint32Array.of(this.random.nextUint32(), this.random.nextUint32(), this.random.nextUint32(), this.random.nextUint32()).buffer);\n        bytes[6] = 0x40 | (bytes[6] >>> 4);\n        bytes[8] = 0x80 | (bytes[8] >>> 2);\n        return UUID.ofInner(bytes);\n    }\n}\n/** Returns the default random number generator available in the environment. */\nconst getDefaultRandom = () => {\n    // detect Web Crypto API\n    if (typeof crypto !== \"undefined\" &&\n        typeof crypto.getRandomValues !== \"undefined\") {\n        return new BufferedCryptoRandom();\n    }\n    else {\n        // fall back on Math.random() unless the flag is set to true\n        if (typeof UUIDV7_DENY_WEAK_RNG !== \"undefined\" && UUIDV7_DENY_WEAK_RNG) {\n            throw new Error(\"no cryptographically strong RNG available\");\n        }\n        return {\n            nextUint32: () => Math.trunc(Math.random() * 65536) * 65536 +\n                Math.trunc(Math.random() * 65536),\n        };\n    }\n};\n/**\n * Wraps `crypto.getRandomValues()` to enable buffering; this uses a small\n * buffer by default to avoid both unbearable throughput decline in some\n * environments and the waste of time and space for unused values.\n */\nclass BufferedCryptoRandom {\n    constructor() {\n        this.buffer = new Uint32Array(8);\n        this.cursor = 0xffff;\n    }\n    nextUint32() {\n        if (this.cursor >= this.buffer.length) {\n            crypto.getRandomValues(this.buffer);\n            this.cursor = 0;\n        }\n        return this.buffer[this.cursor++];\n    }\n}\nlet defaultGenerator;\n/**\n * Generates a UUIDv7 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nexport const uuidv7 = () => uuidv7obj().toString();\n/** Generates a UUIDv7 object. */\nexport const uuidv7obj = () => (defaultGenerator || (defaultGenerator = new V7Generator())).generate();\n/**\n * Generates a UUIDv4 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nexport const uuidv4 = () => uuidv4obj().toString();\n/** Generates a UUIDv4 object. */\nexport const uuidv4obj = () => (defaultGenerator || (defaultGenerator = new V7Generator())).generateV4();\n", "import { UUID, uuidv4obj, uuidv7obj } from \"uuidv7\";\r\nimport { Value } from \"../value\";\r\n\r\n/**\r\n * A SurrealQL UUID value.\r\n */\r\nexport class Uuid extends Value {\r\n\tprivate readonly inner: UUID;\r\n\r\n\tconstructor(uuid: string | ArrayBuffer | Uint8Array | Uuid | UUID) {\r\n\t\tsuper();\r\n\r\n\t\tif (uuid instanceof ArrayBuffer) {\r\n\t\t\tthis.inner = UUID.ofInner(new Uint8Array(uuid));\r\n\t\t} else if (uuid instanceof Uint8Array) {\r\n\t\t\tthis.inner = UUID.ofInner(uuid);\r\n\t\t} else if (uuid instanceof Uuid) {\r\n\t\t\tthis.inner = uuid.inner;\r\n\t\t} else if (uuid instanceof UUID) {\r\n\t\t\tthis.inner = uuid;\r\n\t\t} else {\r\n\t\t\tthis.inner = UUID.parse(uuid);\r\n\t\t}\r\n\t}\r\n\r\n\tequals(other: unknown): boolean {\r\n\t\tif (!(other instanceof Uuid)) return false;\r\n\t\treturn this.inner.equals(other.inner);\r\n\t}\r\n\r\n\ttoString(): string {\r\n\t\treturn this.inner.toString();\r\n\t}\r\n\r\n\ttoJSON(): string {\r\n\t\treturn this.inner.toString();\r\n\t}\r\n\r\n\ttoUint8Array(): Uint8Array {\r\n\t\treturn this.inner.bytes;\r\n\t}\r\n\r\n\ttoBuffer(): ArrayBufferLike {\r\n\t\treturn this.inner.bytes.buffer;\r\n\t}\r\n\r\n\tstatic v4(): Uuid {\r\n\t\treturn new Uuid(uuidv4obj());\r\n\t}\r\n\r\n\tstatic v7(): Uuid {\r\n\t\treturn new Uuid(uuidv7obj());\r\n\t}\r\n}\r\n", "import { SurrealDbError } from \"../../errors\";\r\nimport { equals } from \"../../util/equals\";\r\nimport { escapeIdent, escapeNumber } from \"../../util/escape\";\r\nimport { toSurrealqlString } from \"../../util/to-surrealql-string\";\r\nimport { Value } from \"../value\";\r\nimport { Uuid } from \"./uuid\";\r\n\r\nexport type RecordIdValue =\r\n\t| string\r\n\t| number\r\n\t| Uuid\r\n\t| bigint\r\n\t| unknown[]\r\n\t| Record<string, unknown>;\r\n\r\n/**\r\n * A SurrealQL record ID value.\r\n */\r\nexport class RecordId<Tb extends string = string> extends Value {\r\n\tpublic readonly tb: Tb;\r\n\tpublic readonly id: RecordIdValue;\r\n\r\n\tconstructor(tb: Tb, id: RecordIdValue) {\r\n\t\tsuper();\r\n\r\n\t\tif (typeof tb !== \"string\")\r\n\t\t\tthrow new SurrealDbError(\"TB part is not valid\");\r\n\t\tif (!isValidIdPart(id)) throw new SurrealDbError(\"ID part is not valid\");\r\n\r\n\t\tthis.tb = tb;\r\n\t\tthis.id = id;\r\n\t}\r\n\r\n\tequals(other: unknown): boolean {\r\n\t\tif (!(other instanceof RecordId)) return false;\r\n\t\treturn this.tb === other.tb && equals(this.id, other.id);\r\n\t}\r\n\r\n\ttoJSON(): string {\r\n\t\treturn this.toString();\r\n\t}\r\n\r\n\ttoString(): string {\r\n\t\tconst tb = escapeIdent(this.tb);\r\n\t\tconst id = escapeIdPart(this.id);\r\n\t\treturn `${tb}:${id}`;\r\n\t}\r\n}\r\n\r\n/**\r\n * A SurrealQL string-represented record ID value.\r\n */\r\nexport class StringRecordId extends Value {\r\n\tpublic readonly rid: string;\r\n\r\n\tconstructor(rid: string | StringRecordId | RecordId) {\r\n\t\tsuper();\r\n\r\n\t\t// In some cases the same method may be used with different data sources\r\n\t\t// this can cause this method to be called with an already instanced class object.\r\n\t\tif (rid instanceof StringRecordId) {\r\n\t\t\tthis.rid = rid.rid;\r\n\t\t} else if (rid instanceof RecordId) {\r\n\t\t\tthis.rid = rid.toString();\r\n\t\t} else if (typeof rid === \"string\") {\r\n\t\t\tthis.rid = rid;\r\n\t\t} else {\r\n\t\t\tthrow new SurrealDbError(\"String Record ID must be a string\");\r\n\t\t}\r\n\t}\r\n\r\n\tequals(other: unknown): boolean {\r\n\t\tif (!(other instanceof StringRecordId)) return false;\r\n\t\treturn this.rid === other.rid;\r\n\t}\r\n\r\n\ttoJSON(): string {\r\n\t\treturn this.rid;\r\n\t}\r\n\r\n\ttoString(): string {\r\n\t\treturn this.rid;\r\n\t}\r\n}\r\n\r\nexport function isValidIdPart(v: unknown): v is RecordIdValue {\r\n\tif (v instanceof Uuid) return true;\r\n\r\n\tswitch (typeof v) {\r\n\t\tcase \"string\":\r\n\t\tcase \"number\":\r\n\t\tcase \"bigint\":\r\n\t\t\treturn true;\r\n\t\tcase \"object\":\r\n\t\t\treturn Array.isArray(v) || v !== null;\r\n\t\tdefault:\r\n\t\t\treturn false;\r\n\t}\r\n}\r\n\r\nexport function escapeIdPart(id: RecordIdValue): string {\r\n\treturn id instanceof Uuid\r\n\t\t? `u\"${id}\"`\r\n\t\t: typeof id === \"string\"\r\n\t\t\t? escapeIdent(id)\r\n\t\t\t: typeof id === \"bigint\" || typeof id === \"number\"\r\n\t\t\t\t? escapeNumber(id)\r\n\t\t\t\t: toSurrealqlString(id);\r\n}\r\n", "import { SurrealDbError } from \"../../errors\";\r\nimport { Value } from \"../value\";\r\n\r\n/**\r\n * A SurrealQL table value.\r\n */\r\nexport class Table<Tb extends string = string> extends Value {\r\n\tpublic readonly tb: Tb;\r\n\r\n\tconstructor(tb: Tb) {\r\n\t\tsuper();\r\n\t\tif (typeof tb !== \"string\")\r\n\t\t\tthrow new SurrealDbError(\"Table must be a string\");\r\n\t\tthis.tb = tb;\r\n\t}\r\n\r\n\tequals(other: unknown): boolean {\r\n\t\tif (!(other instanceof Table)) return false;\r\n\t\treturn this.tb === other.tb;\r\n\t}\r\n\r\n\ttoJSON(): string {\r\n\t\treturn this.tb;\r\n\t}\r\n\r\n\ttoString(): string {\r\n\t\treturn this.tb;\r\n\t}\r\n}\r\n", "import {\r\n\tDecimal,\r\n\tDuration,\r\n\tFuture,\r\n\tGeometry,\r\n\tRange,\r\n\tRecordId,\r\n\tStringRecordId,\r\n\tTable,\r\n\tUuid,\r\n} from \"../data\";\r\n\r\n/**\r\n * Recursively print any supported SurrealQL value into a string representation.\r\n * @param input - The input value\r\n * @returns Stringified SurrealQL representation\r\n */\r\nexport function toSurrealqlString(input: unknown): string {\r\n\tif (typeof input === \"string\") return `s${JSON.stringify(input)}`;\r\n\tif (input === null) return \"NULL\";\r\n\tif (input === undefined) return \"NONE\";\r\n\r\n\tif (typeof input === \"object\") {\r\n\t\t// We explicitely use string prefixes to ensure compability with both SurrealDB 1.x and 2.x\r\n\t\tif (input instanceof Date) return `d${JSON.stringify(input.toISOString())}`;\r\n\t\tif (input instanceof Uuid) return `u${JSON.stringify(input.toString())}`;\r\n\t\tif (input instanceof RecordId || input instanceof StringRecordId)\r\n\t\t\treturn `r${JSON.stringify(input.toString())}`;\r\n\r\n\t\tif (input instanceof Geometry) return toSurrealqlString(input.toJSON());\r\n\r\n\t\tif (\r\n\t\t\tinput instanceof Decimal ||\r\n\t\t\tinput instanceof Duration ||\r\n\t\t\tinput instanceof Future ||\r\n\t\t\tinput instanceof Range ||\r\n\t\t\tinput instanceof Table\r\n\t\t) {\r\n\t\t\treturn input.toJSON();\r\n\t\t}\r\n\r\n\t\t// We check by prototype, because we do not want to process derivatives of objects and arrays\r\n\t\tswitch (Object.getPrototypeOf(input)) {\r\n\t\t\tcase Object.prototype: {\r\n\t\t\t\tlet output = \"{ \";\r\n\t\t\t\tconst entries = Object.entries(input as object);\r\n\t\t\t\tfor (const [i, [k, v]] of entries.entries()) {\r\n\t\t\t\t\toutput += `${JSON.stringify(k)}: ${toSurrealqlString(v)}`;\r\n\t\t\t\t\tif (i < entries.length - 1) output += \", \";\r\n\t\t\t\t}\r\n\t\t\t\toutput += \" }\";\r\n\t\t\t\treturn output;\r\n\t\t\t}\r\n\t\t\tcase Map.prototype: {\r\n\t\t\t\tlet output = \"{ \";\r\n\t\t\t\tconst entries = Array.from((input as Map<unknown, unknown>).entries());\r\n\t\t\t\tfor (const [i, [k, v]] of entries.entries()) {\r\n\t\t\t\t\toutput += `${JSON.stringify(k)}: ${toSurrealqlString(v)}`;\r\n\t\t\t\t\tif (i < entries.length - 1) output += \", \";\r\n\t\t\t\t}\r\n\t\t\t\toutput += \" }\";\r\n\t\t\t\treturn output;\r\n\t\t\t}\r\n\t\t\tcase Array.prototype: {\r\n\t\t\t\tconst array = (input as unknown[]).map(toSurrealqlString);\r\n\t\t\t\treturn `[ ${array.join(\", \")} ]`;\r\n\t\t\t}\r\n\t\t\tcase Set.prototype: {\r\n\t\t\t\tconst set = new Set([...(input as [])].map(toSurrealqlString));\r\n\t\t\t\treturn `[ ${[...set].join(\", \")} ]`;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn `${input}`;\r\n}\r\n", "import { Tagged } from \"../../cbor\";\r\nimport { SurrealDbError } from \"../../errors\";\r\nimport { equals } from \"../../util/equals\";\r\nimport { escapeIdent } from \"../../util/escape\";\r\nimport { toSurrealqlString } from \"../../util/to-surrealql-string\";\r\nimport { TAG_BOUND_EXCLUDED, TAG_BOUND_INCLUDED } from \"../cbor\";\r\nimport { Value } from \"../value\";\r\nimport { type RecordIdValue, escapeIdPart, isValidIdPart } from \"./recordid\";\r\n\r\n/**\r\n * A SurrealQL range value.\r\n */\r\nexport class Range<Beg, End> extends Value {\r\n\tconstructor(\r\n\t\treadonly beg: Bound<Beg>,\r\n\t\treadonly end: Bound<End>,\r\n\t) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tequals(other: unknown): boolean {\r\n\t\tif (!(other instanceof Range)) return false;\r\n\t\tif (this.beg?.constructor !== other.beg?.constructor) return false;\r\n\t\tif (this.end?.constructor !== other.end?.constructor) return false;\r\n\t\treturn (\r\n\t\t\tequals(this.beg?.value, other.beg?.value) &&\r\n\t\t\tequals(this.end?.value, other.end?.value)\r\n\t\t);\r\n\t}\r\n\r\n\ttoJSON(): string {\r\n\t\treturn this.toString();\r\n\t}\r\n\r\n\ttoString(): string {\r\n\t\tconst beg = escapeRangeBound(this.beg);\r\n\t\tconst end = escapeRangeBound(this.end);\r\n\t\treturn `${beg}${getRangeJoin(this.beg, this.end)}${end}`;\r\n\t}\r\n}\r\n\r\nexport type Bound<T> = BoundIncluded<T> | BoundExcluded<T> | undefined;\r\nexport class BoundIncluded<T> {\r\n\tconstructor(readonly value: T) {}\r\n}\r\n\r\nexport class BoundExcluded<T> {\r\n\tconstructor(readonly value: T) {}\r\n}\r\n\r\n/**\r\n * A SurrealQL record ID range value.\r\n */\r\nexport class RecordIdRange<Tb extends string = string> extends Value {\r\n\tconstructor(\r\n\t\tpublic readonly tb: Tb,\r\n\t\tpublic readonly beg: Bound<RecordIdValue>,\r\n\t\tpublic readonly end: Bound<RecordIdValue>,\r\n\t) {\r\n\t\tsuper();\r\n\t\tif (typeof tb !== \"string\")\r\n\t\t\tthrow new SurrealDbError(\"TB part is not valid\");\r\n\t\tif (!isValidIdBound(beg)) throw new SurrealDbError(\"Beg part is not valid\");\r\n\t\tif (!isValidIdBound(end)) throw new SurrealDbError(\"End part is not valid\");\r\n\t}\r\n\r\n\tequals(other: unknown): boolean {\r\n\t\tif (!(other instanceof RecordIdRange)) return false;\r\n\t\tif (this.beg?.constructor !== other.beg?.constructor) return false;\r\n\t\tif (this.end?.constructor !== other.end?.constructor) return false;\r\n\t\treturn (\r\n\t\t\tthis.tb === other.tb &&\r\n\t\t\tequals(this.beg?.value, other.beg?.value) &&\r\n\t\t\tequals(this.end?.value, other.end?.value)\r\n\t\t);\r\n\t}\r\n\r\n\ttoJSON(): string {\r\n\t\treturn this.toString();\r\n\t}\r\n\r\n\ttoString(): string {\r\n\t\tconst tb = escapeIdent(this.tb);\r\n\t\tconst beg = escapeIdBound(this.beg);\r\n\t\tconst end = escapeIdBound(this.end);\r\n\t\treturn `${tb}:${beg}${getRangeJoin(this.beg, this.end)}${end}`;\r\n\t}\r\n}\r\n\r\nfunction getRangeJoin(beg: Bound<unknown>, end: Bound<unknown>): string {\r\n\tlet output = \"\";\r\n\tif (beg instanceof BoundExcluded) output += \">\";\r\n\toutput += \"..\";\r\n\tif (end instanceof BoundIncluded) output += \"=\";\r\n\treturn output;\r\n}\r\n\r\nfunction isValidIdBound(bound: Bound<unknown>): bound is Bound<RecordIdValue> {\r\n\treturn bound instanceof BoundIncluded || bound instanceof BoundExcluded\r\n\t\t? isValidIdPart(bound.value)\r\n\t\t: true;\r\n}\r\n\r\nfunction escapeIdBound(bound: Bound<RecordIdValue>): string {\r\n\treturn bound instanceof BoundIncluded || bound instanceof BoundExcluded\r\n\t\t? escapeIdPart(bound.value)\r\n\t\t: \"\";\r\n}\r\n\r\nfunction escapeRangeBound(bound: Bound<unknown>): string {\r\n\tif (bound === undefined) return \"\";\r\n\tconst value = bound.value;\r\n\r\n\tif (bound instanceof Range) return `(${toSurrealqlString(value)})`;\r\n\treturn toSurrealqlString(value);\r\n}\r\n\r\nexport function rangeToCbor([beg, end]: [Bound<unknown>, Bound<unknown>]): [\r\n\tTagged | null,\r\n\tTagged | null,\r\n] {\r\n\tfunction encodeBound(bound: Bound<unknown>): Tagged | null {\r\n\t\tif (bound instanceof BoundIncluded)\r\n\t\t\treturn new Tagged(TAG_BOUND_INCLUDED, bound.value);\r\n\t\tif (bound instanceof BoundExcluded)\r\n\t\t\treturn new Tagged(TAG_BOUND_EXCLUDED, bound.value);\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn [encodeBound(beg), encodeBound(end)];\r\n}\r\n\r\nexport function cborToRange(\r\n\trange: [Tagged | null, Tagged | null],\r\n): [Bound<unknown>, Bound<unknown>] {\r\n\tfunction decodeBound(bound: Tagged | null): Bound<unknown> {\r\n\t\tif (bound === null) return undefined;\r\n\t\tif (bound.tag === TAG_BOUND_INCLUDED) return new BoundIncluded(bound.value);\r\n\t\tif (bound.tag === TAG_BOUND_EXCLUDED) return new BoundExcluded(bound.value);\r\n\t\tthrow new SurrealDbError(\"Invalid bound tag\");\r\n\t}\r\n\r\n\treturn [decodeBound(range[0]), decodeBound(range[1])];\r\n}\r\n", "import { Tagged, decode, encode } from \"../cbor\";\r\nimport {\r\n\tcborCustomDateToDate,\r\n\tdateToCborCustomDate,\r\n} from \"./types/datetime.ts\";\r\nimport { Decimal } from \"./types/decimal.ts\";\r\nimport { Duration } from \"./types/duration.ts\";\r\nimport { Future } from \"./types/future.ts\";\r\nimport {\r\n\tGeometryCollection,\r\n\tGeometryLine,\r\n\tGeometryMultiLine,\r\n\tGeometryMultiPoint,\r\n\tGeometryMultiPolygon,\r\n\tGeometryPoint,\r\n\tGeometryPolygon,\r\n} from \"./types/geometry.ts\";\r\nimport {\r\n\tRange,\r\n\tRecordIdRange,\r\n\tcborToRange,\r\n\trangeToCbor,\r\n} from \"./types/range.ts\";\r\nimport { RecordId, StringRecordId } from \"./types/recordid.ts\";\r\nimport { Table } from \"./types/table.ts\";\r\nimport { Uuid } from \"./types/uuid.ts\";\r\n\r\n// Tags from the spec - https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml\r\nconst TAG_SPEC_DATETIME = 0;\r\nconst TAG_SPEC_UUID = 37;\r\n\r\n// Custom tags\r\nconst TAG_NONE = 6;\r\nconst TAG_TABLE = 7;\r\nconst TAG_RECORDID = 8;\r\nconst TAG_STRING_UUID = 9;\r\nconst TAG_STRING_DECIMAL = 10;\r\n// const TAG_BINARY_DECIMAL = 11;\r\nconst TAG_CUSTOM_DATETIME = 12;\r\nconst TAG_STRING_DURATION = 13;\r\nconst TAG_CUSTOM_DURATION = 14;\r\nconst TAG_FUTURE = 15;\r\n\r\n// Ranges\r\nexport const TAG_RANGE = 49;\r\nexport const TAG_BOUND_INCLUDED = 50;\r\nexport const TAG_BOUND_EXCLUDED = 51;\r\n\r\n// Custom Geometries\r\nconst TAG_GEOMETRY_POINT = 88;\r\nconst TAG_GEOMETRY_LINE = 89;\r\nconst TAG_GEOMETRY_POLYGON = 90;\r\nconst TAG_GEOMETRY_MULTIPOINT = 91;\r\nconst TAG_GEOMETRY_MULTILINE = 92;\r\nconst TAG_GEOMETRY_MULTIPOLYGON = 93;\r\nconst TAG_GEOMETRY_COLLECTION = 94;\r\n\r\nexport const replacer = {\r\n\tencode(v: unknown): unknown {\r\n\t\tif (v instanceof Date) {\r\n\t\t\treturn new Tagged(TAG_CUSTOM_DATETIME, dateToCborCustomDate(v));\r\n\t\t}\r\n\t\tif (v === undefined) return new Tagged(TAG_NONE, null);\r\n\t\tif (v instanceof Uuid) {\r\n\t\t\treturn new Tagged(TAG_SPEC_UUID, v.toBuffer());\r\n\t\t}\r\n\t\tif (v instanceof Decimal) {\r\n\t\t\treturn new Tagged(TAG_STRING_DECIMAL, v.toString());\r\n\t\t}\r\n\t\tif (v instanceof Duration) {\r\n\t\t\treturn new Tagged(TAG_CUSTOM_DURATION, v.toCompact());\r\n\t\t}\r\n\t\tif (v instanceof RecordId) {\r\n\t\t\treturn new Tagged(TAG_RECORDID, [v.tb, v.id]);\r\n\t\t}\r\n\t\tif (v instanceof StringRecordId) {\r\n\t\t\treturn new Tagged(TAG_RECORDID, v.rid);\r\n\t\t}\r\n\t\tif (v instanceof RecordIdRange) {\r\n\t\t\treturn new Tagged(TAG_RECORDID, [\r\n\t\t\t\tv.tb,\r\n\t\t\t\tnew Tagged(TAG_RANGE, rangeToCbor([v.beg, v.end])),\r\n\t\t\t]);\r\n\t\t}\r\n\t\tif (v instanceof Table) return new Tagged(TAG_TABLE, v.tb);\r\n\t\tif (v instanceof Future) return new Tagged(TAG_FUTURE, v.inner);\r\n\t\tif (v instanceof Range)\r\n\t\t\treturn new Tagged(TAG_RANGE, rangeToCbor([v.beg, v.end]));\r\n\t\tif (v instanceof GeometryPoint) {\r\n\t\t\treturn new Tagged(TAG_GEOMETRY_POINT, v.point);\r\n\t\t}\r\n\t\tif (v instanceof GeometryLine) {\r\n\t\t\treturn new Tagged(TAG_GEOMETRY_LINE, v.line);\r\n\t\t}\r\n\t\tif (v instanceof GeometryPolygon) {\r\n\t\t\treturn new Tagged(TAG_GEOMETRY_POLYGON, v.polygon);\r\n\t\t}\r\n\t\tif (v instanceof GeometryMultiPoint) {\r\n\t\t\treturn new Tagged(TAG_GEOMETRY_MULTIPOINT, v.points);\r\n\t\t}\r\n\t\tif (v instanceof GeometryMultiLine) {\r\n\t\t\treturn new Tagged(TAG_GEOMETRY_MULTILINE, v.lines);\r\n\t\t}\r\n\t\tif (v instanceof GeometryMultiPolygon) {\r\n\t\t\treturn new Tagged(TAG_GEOMETRY_MULTIPOLYGON, v.polygons);\r\n\t\t}\r\n\t\tif (v instanceof GeometryCollection) {\r\n\t\t\treturn new Tagged(TAG_GEOMETRY_COLLECTION, v.collection);\r\n\t\t}\r\n\t\treturn v;\r\n\t},\r\n\tdecode(v: unknown): unknown {\r\n\t\tif (!(v instanceof Tagged)) return v;\r\n\r\n\t\tswitch (v.tag) {\r\n\t\t\tcase TAG_SPEC_DATETIME:\r\n\t\t\t\treturn new Date(v.value);\r\n\t\t\tcase TAG_SPEC_UUID:\r\n\t\t\tcase TAG_STRING_UUID:\r\n\t\t\t\treturn new Uuid(v.value);\r\n\t\t\tcase TAG_CUSTOM_DATETIME:\r\n\t\t\t\treturn cborCustomDateToDate(v.value);\r\n\t\t\tcase TAG_NONE:\r\n\t\t\t\treturn undefined;\r\n\t\t\tcase TAG_STRING_DECIMAL:\r\n\t\t\t\treturn new Decimal(v.value);\r\n\t\t\tcase TAG_STRING_DURATION:\r\n\t\t\t\treturn new Duration(v.value);\r\n\t\t\tcase TAG_CUSTOM_DURATION:\r\n\t\t\t\treturn Duration.fromCompact(v.value);\r\n\t\t\tcase TAG_TABLE:\r\n\t\t\t\treturn new Table(v.value);\r\n\t\t\tcase TAG_FUTURE:\r\n\t\t\t\treturn new Future(v.value);\r\n\t\t\tcase TAG_RANGE:\r\n\t\t\t\treturn new Range(...cborToRange(v.value));\r\n\t\t\tcase TAG_RECORDID: {\r\n\t\t\t\tif (v.value[1] instanceof Range) {\r\n\t\t\t\t\treturn new RecordIdRange(v.value[0], v.value[1].beg, v.value[1].end);\r\n\t\t\t\t}\r\n\t\t\t\treturn new RecordId(v.value[0], v.value[1]);\r\n\t\t\t}\r\n\t\t\tcase TAG_GEOMETRY_POINT:\r\n\t\t\t\treturn new GeometryPoint(v.value);\r\n\t\t\tcase TAG_GEOMETRY_LINE:\r\n\t\t\t\treturn new GeometryLine(v.value);\r\n\t\t\tcase TAG_GEOMETRY_POLYGON:\r\n\t\t\t\treturn new GeometryPolygon(v.value);\r\n\t\t\tcase TAG_GEOMETRY_MULTIPOINT:\r\n\t\t\t\treturn new GeometryMultiPoint(v.value);\r\n\t\t\tcase TAG_GEOMETRY_MULTILINE:\r\n\t\t\t\treturn new GeometryMultiLine(v.value);\r\n\t\t\tcase TAG_GEOMETRY_MULTIPOLYGON:\r\n\t\t\t\treturn new GeometryMultiPolygon(v.value);\r\n\t\t\tcase TAG_GEOMETRY_COLLECTION:\r\n\t\t\t\treturn new GeometryCollection(v.value);\r\n\t\t}\r\n\t},\r\n};\r\n\r\nObject.freeze(replacer);\r\n\r\n/**\r\n * Recursively encode any supported SurrealQL value into a binary CBOR representation.\r\n * @param data - The input value\r\n * @returns CBOR binary representation\r\n */\r\nexport function encodeCbor<T>(data: T): ArrayBuffer {\r\n\treturn encode(data, {\r\n\t\treplacer: replacer.encode,\r\n\t});\r\n}\r\n\r\n/**\r\n * Decode a CBOR encoded SurrealQL value into object representation.\r\n * @param data - The encoded SurrealQL value\r\n * @returns The parsed SurrealQL value\r\n */\r\n// biome-ignore lint/suspicious/noExplicitAny: Don't know what it will return\r\nexport function decodeCbor(data: ArrayBufferLike): any {\r\n\treturn decode(data, {\r\n\t\treplacer: replacer.decode,\r\n\t});\r\n}\r\n", "import {\r\n\tEncoded,\r\n\ttype Fill,\r\n\tGap,\r\n\ttype PartiallyEncoded,\r\n\tWriter,\r\n\tencode,\r\n\tpartiallyEncodeObject,\r\n} from \"../cbor\";\r\nimport { replacer } from \"../data/cbor\";\r\n\r\nlet textEncoder: TextEncoder;\r\n\r\nexport type ConvertMethod<T = unknown> = (result: unknown[]) => T;\r\n\r\n/**\r\n * A query and its bindings prepared for execution, which can be passed to the .query() method.\r\n */\r\nexport class PreparedQuery {\r\n\tprivate _query: Uint8Array;\r\n\tprivate _bindings: Record<string, PartiallyEncoded>;\r\n\tprivate length: number;\r\n\r\n\tconstructor(query: string, bindings?: Record<string, unknown>) {\r\n\t\ttextEncoder ??= new TextEncoder();\r\n\t\tthis._query = textEncoder.encode(query);\r\n\t\tthis._bindings = partiallyEncodeObject(bindings ?? {}, {\r\n\t\t\treplacer: replacer.encode,\r\n\t\t});\r\n\t\tthis.length = Object.keys(this._bindings).length;\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves the encoded query string.\r\n\t */\r\n\tget query(): Encoded {\r\n\t\t// Up to 9 bytes for the prefix\r\n\t\tconst w = new Writer(this._query.byteLength + 9);\r\n\t\tw.writeMajor(3, this._query.byteLength);\r\n\t\tw.writeUint8Array(this._query);\r\n\t\treturn new Encoded(w.output(false));\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves the encoded bindings.\r\n\t */\r\n\tget bindings(): Record<string, PartiallyEncoded> {\r\n\t\treturn this._bindings;\r\n\t}\r\n\r\n\t/**\r\n\t * Compile this query and its bindings into a single ArrayBuffer, optionally filling gaps.\r\n\t * @param fills - The gap values to fill\r\n\t */\r\n\tbuild(fills?: Fill[]): ArrayBuffer {\r\n\t\treturn encode([this.query, this.bindings], { fills });\r\n\t}\r\n\r\n\t/**\r\n\t * A template literal tag function for appending additional query segments and bindings to the prepared query.\r\n\t * @param query_raw - The additional query segments to append\r\n\t * @param values - The additional interpolated values to append\r\n\t * @example\r\n\t * const query = surrealql`SELECT * FROM person`;\r\n\t *\r\n\t * if (filter) {\r\n\t *   query.append` WHERE name = ${filter}`;\r\n\t * }\r\n\t */\r\n\tappend(\r\n\t\tquery_raw: string[] | TemplateStringsArray,\r\n\t\t...values: unknown[]\r\n\t): PreparedQuery {\r\n\t\tconst base = this.length;\r\n\t\tthis.length += values.length;\r\n\r\n\t\tlet reused = 0;\r\n\t\tconst gaps = new Map<Gap, number>();\r\n\t\tconst mapped_bindings = values.map((v, i) => {\r\n\t\t\tif (v instanceof Gap) {\r\n\t\t\t\tconst index = gaps.get(v);\r\n\t\t\t\tif (index !== undefined) {\r\n\t\t\t\t\treused++;\r\n\t\t\t\t\treturn [`bind___${index}`, v] as const;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgaps.set(v, i - reused);\r\n\t\t\t}\r\n\r\n\t\t\treturn [`bind___${base + i - reused}`, v] as const;\r\n\t\t});\r\n\r\n\t\tfor (const [k, v] of mapped_bindings) {\r\n\t\t\tthis._bindings[k] = encode(v, {\r\n\t\t\t\treplacer: replacer.encode,\r\n\t\t\t\tpartial: true,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tconst query = query_raw\r\n\t\t\t.flatMap((segment, i) => {\r\n\t\t\t\tconst variable = mapped_bindings[i]?.[0];\r\n\t\t\t\treturn [segment, ...(variable ? [`$${variable}`] : [])];\r\n\t\t\t})\r\n\t\t\t.join(\"\");\r\n\r\n\t\ttextEncoder ??= new TextEncoder();\r\n\t\tconst current = new Uint8Array(this._query);\r\n\t\tconst added = textEncoder.encode(query);\r\n\t\tthis._query = new Uint8Array(current.byteLength + added.byteLength);\r\n\t\tthis._query.set(current);\r\n\t\tthis._query.set(added, current.byteLength);\r\n\t\treturn this;\r\n\t}\r\n}\r\n", "import { Gap } from \"../cbor/gap.ts\";\r\nimport { PreparedQuery } from \"./prepared-query.ts\";\r\n\r\n/**\r\n * A template literal tag function for creating prepared queries from query strings.\r\n * Interpolated values are automatically stored as bindings.\r\n * @param query_raw - The raw query string\r\n * @param values - The interpolated values\r\n * @example const query = surrealql`SELECT * FROM ${id}`;\r\n * @returns A PreparedQuery instance\r\n */\r\nexport function surrealql(\r\n\tquery_raw: string[] | TemplateStringsArray,\r\n\t...values: unknown[]\r\n): PreparedQuery {\r\n\tlet reused = 0;\r\n\tconst gaps = new Map<Gap, number>();\r\n\tconst mapped_bindings = values.map((v, i) => {\r\n\t\tif (v instanceof Gap) {\r\n\t\t\tconst index = gaps.get(v);\r\n\t\t\tif (index !== undefined) {\r\n\t\t\t\treused++;\r\n\t\t\t\treturn [`bind___${index}`, v] as const;\r\n\t\t\t}\r\n\r\n\t\t\tgaps.set(v, i - reused);\r\n\t\t}\r\n\r\n\t\treturn [`bind___${i - reused}`, v] as const;\r\n\t});\r\n\r\n\tconst bindings = mapped_bindings.reduce<Record<`bind___${number}`, unknown>>(\r\n\t\t(prev, [k, v]) => {\r\n\t\t\tprev[k] = v;\r\n\t\t\treturn prev;\r\n\t\t},\r\n\t\t{},\r\n\t);\r\n\r\n\tconst query = query_raw\r\n\t\t.flatMap((segment, i) => {\r\n\t\t\tconst variable = mapped_bindings[i]?.[0];\r\n\t\t\treturn [segment, ...(variable ? [`$${variable}`] : [])];\r\n\t\t})\r\n\t\t.join(\"\");\r\n\r\n\treturn new PreparedQuery(query, bindings);\r\n}\r\n\r\nexport { surrealql as surql };\r\n", "import type { Fill } from \"./cbor\";\r\nimport { type RecordId, Uuid } from \"./data\";\r\nimport { SurrealDbError } from \"./errors\";\r\nimport type { PreparedQuery } from \"./util/prepared-query\";\r\n\r\nexport type ActionResult<T extends Record<string, unknown>> = Prettify<\r\n\tT[\"id\"] extends RecordId ? T : { id: RecordId } & T\r\n>;\r\n\r\nexport type Prettify<T> = {\r\n\t[K in keyof T]: T[K];\r\n} & {}; // deno-lint-ignore ban-types\r\n\r\nexport type QueryParameters =\r\n\t| [query: string, bindings?: Record<string, unknown>]\r\n\t| [prepared: PreparedQuery, gaps?: Fill[]];\r\n\r\n//////////////////////////////////////////////\r\n//////////   AUTHENTICATION TYPES   //////////\r\n//////////////////////////////////////////////\r\n\r\nexport function convertAuth(params: AnyAuth): Record<string, unknown> {\r\n\tlet result: Record<string, unknown> = {};\r\n\tconst convertString = (a: string, b: string, optional?: boolean) => {\r\n\t\tif (a in params) {\r\n\t\t\tresult[b] = `${params[a as keyof AnyAuth]}`;\r\n\t\t\tdelete result[a];\r\n\t\t} else if (optional !== true) {\r\n\t\t\tthrow new SurrealDbError(\r\n\t\t\t\t`Key ${a} is missing from the authentication parameters`,\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tif (\"scope\" in params) {\r\n\t\tresult = { ...params };\r\n\t\tconvertString(\"scope\", \"sc\");\r\n\t\tconvertString(\"namespace\", \"ns\");\r\n\t\tconvertString(\"database\", \"db\");\r\n\t} else if (\"variables\" in params) {\r\n\t\tresult = { ...params.variables };\r\n\t\tconvertString(\"access\", \"ac\");\r\n\t\tconvertString(\"namespace\", \"ns\");\r\n\t\tconvertString(\"database\", \"db\");\r\n\t} else {\r\n\t\tconvertString(\"access\", \"ac\", true);\r\n\t\tconvertString(\"database\", \"db\", true);\r\n\t\tconvertString(\"namespace\", \"ns\", !(\"database\" in params));\r\n\t\tconvertString(\"username\", \"user\");\r\n\t\tconvertString(\"password\", \"pass\");\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nexport type RootAuth = {\r\n\tusername: string;\r\n\tpassword: string;\r\n};\r\n\r\nexport type NamespaceAuth = {\r\n\tnamespace: string;\r\n\tusername: string;\r\n\tpassword: string;\r\n};\r\n\r\nexport type DatabaseAuth = {\r\n\tnamespace: string;\r\n\tdatabase: string;\r\n\tusername: string;\r\n\tpassword: string;\r\n};\r\n\r\nexport type AccessSystemAuth = Prettify<\r\n\t(RootAuth | NamespaceAuth | DatabaseAuth) & {\r\n\t\taccess: string;\r\n\t\tvariables?: never;\r\n\t}\r\n>;\r\n\r\nexport type ScopeAuth = {\r\n\tnamespace?: string;\r\n\tdatabase?: string;\r\n\tscope: string;\r\n\t[K: string]: unknown;\r\n};\r\n\r\nexport type AccessRecordAuth = {\r\n\tnamespace?: string;\r\n\tdatabase?: string;\r\n\taccess: string;\r\n\tvariables: {\r\n\t\tns?: never;\r\n\t\tdb?: never;\r\n\t\tac?: never;\r\n\t\t[K: string]: unknown;\r\n\t};\r\n};\r\n\r\nexport type AnyAuth =\r\n\t| RootAuth\r\n\t| NamespaceAuth\r\n\t| DatabaseAuth\r\n\t| ScopeAuth\r\n\t| AccessSystemAuth\r\n\t| AccessRecordAuth;\r\n\r\nexport type Token = string;\r\n\r\n/////////////////////////////////////\r\n//////////   QUERY TYPES   //////////\r\n/////////////////////////////////////\r\n\r\nexport type QueryResult<T = unknown> = QueryResultOk<T> | QueryResultErr;\r\nexport type QueryResultOk<T> = {\r\n\tstatus: \"OK\";\r\n\ttime: string;\r\n\tresult: T;\r\n};\r\n\r\nexport type QueryResultErr = {\r\n\tstatus: \"ERR\";\r\n\ttime: string;\r\n\tresult: string;\r\n};\r\n\r\nexport type MapQueryResult<T> = {\r\n\t[K in keyof T]: QueryResult<T[K]>;\r\n};\r\n\r\n/////////////////////////////////////\r\n//////////   PATCH TYPES   //////////\r\n/////////////////////////////////////\r\n\r\ntype BasePatch<T = string> = {\r\n\tpath: T;\r\n};\r\n\r\nexport type AddPatch<T = string, U = unknown> = BasePatch<T> & {\r\n\top: \"add\";\r\n\tvalue: U;\r\n};\r\n\r\nexport type RemovePatch<T = string> = BasePatch<T> & {\r\n\top: \"remove\";\r\n};\r\n\r\nexport type ReplacePatch<T = string, U = unknown> = BasePatch<T> & {\r\n\top: \"replace\";\r\n\tvalue: U;\r\n};\r\n\r\nexport type ChangePatch<T = string, U = string> = BasePatch<T> & {\r\n\top: \"change\";\r\n\tvalue: U;\r\n};\r\n\r\nexport type CopyPatch<T = string, U = string> = BasePatch<T> & {\r\n\top: \"copy\";\r\n\tfrom: U;\r\n};\r\n\r\nexport type MovePatch<T = string, U = string> = BasePatch<T> & {\r\n\top: \"move\";\r\n\tfrom: U;\r\n};\r\n\r\nexport type TestPatch<T = string, U = unknown> = BasePatch<T> & {\r\n\top: \"test\";\r\n\tvalue: U;\r\n};\r\n\r\nexport type Patch =\r\n\t| AddPatch\r\n\t| RemovePatch\r\n\t| ReplacePatch\r\n\t| ChangePatch\r\n\t| CopyPatch\r\n\t| MovePatch\r\n\t| TestPatch;\r\n\r\n// RPC\r\n\r\nexport type RpcRequest<\r\n\tMethod extends string = string,\r\n\tParams extends unknown[] | undefined = unknown[],\r\n> = {\r\n\tmethod: Method;\r\n\tparams?: Params;\r\n};\r\n\r\nexport type RpcResponse<Result = unknown> =\r\n\t| RpcResponseOk<Result>\r\n\t| RpcResponseErr;\r\n\r\nexport type RpcResponseOk<Result = unknown> = {\r\n\tresult: Result;\r\n\terror?: never;\r\n};\r\n\r\nexport type RpcResponseErr = {\r\n\tresult?: never;\r\n\terror: {\r\n\t\tcode: number;\r\n\t\tmessage: string;\r\n\t};\r\n};\r\n\r\n// Live\r\n\r\nexport const liveActions = [\"CREATE\", \"UPDATE\", \"DELETE\"] as const;\r\nexport type LiveAction = (typeof liveActions)[number];\r\nexport type LiveResult = {\r\n\tid: Uuid;\r\n\taction: LiveAction;\r\n\tresult: Record<string, unknown>;\r\n};\r\n\r\nexport type LiveHandlerArguments<\r\n\tResult extends Record<string, unknown> | Patch = Record<string, unknown>,\r\n> =\r\n\t| [action: LiveAction, result: Result]\r\n\t| [action: \"CLOSE\", result: \"killed\" | \"disconnected\"];\r\n\r\nexport type LiveHandler<\r\n\tResult extends Record<string, unknown> | Patch = Record<string, unknown>,\r\n> = (...[action, result]: LiveHandlerArguments<Result>) => unknown;\r\n\r\nexport function isLiveResult(v: unknown): v is LiveResult {\r\n\tif (typeof v !== \"object\") return false;\r\n\tif (v === null) return false;\r\n\tif (!(\"id\" in v && \"action\" in v && \"result\" in v)) return false;\r\n\r\n\tif (!(v.id instanceof Uuid)) return false;\r\n\tif (!liveActions.includes(v.action as LiveAction)) return false;\r\n\tif (typeof v.result !== \"object\") return false;\r\n\tif (v.result === null) return false;\r\n\r\n\treturn true;\r\n}\r\n\r\n/////////////////////////////////////\r\n/////////   EXPORT TYPES   //////////\r\n/////////////////////////////////////\r\n\r\nexport type ExportOptions = {\r\n\tusers: boolean;\r\n\taccesses: boolean;\r\n\tparams: boolean;\r\n\tfunctions: boolean;\r\n\tanalyzers: boolean;\r\n\tversions: boolean;\r\n\ttables: boolean | string[];\r\n\trecords: boolean;\r\n};\r\n", "import {\r\n\tDecimal,\r\n\tDuration,\r\n\tFuture,\r\n\tGeometry,\r\n\tRange,\r\n\tRecordId,\r\n\tRecordIdRange,\r\n\tStringRecordId,\r\n\tTable,\r\n\tUuid,\r\n} from \"../data\";\r\n\r\nexport type Jsonify<T> = T extends\r\n\t| Date\r\n\t| Uuid\r\n\t| Decimal\r\n\t| Duration\r\n\t| Future\r\n\t| Range<unknown, unknown>\r\n\t| StringRecordId\r\n\t? string\r\n\t: T extends undefined\r\n\t\t? never\r\n\t\t: T extends Record<string | number | symbol, unknown> | Array<unknown>\r\n\t\t\t? { [K in keyof T]: Jsonify<T[K]> }\r\n\t\t\t: T extends Map<infer K, infer V>\r\n\t\t\t\t? Map<K, Jsonify<V>>\r\n\t\t\t\t: T extends Set<infer V>\r\n\t\t\t\t\t? Set<Jsonify<V>>\r\n\t\t\t\t\t: T extends Geometry\r\n\t\t\t\t\t\t? ReturnType<T[\"toJSON\"]>\r\n\t\t\t\t\t\t: T extends RecordId<infer Tb>\r\n\t\t\t\t\t\t\t? `${Tb}:${string}`\r\n\t\t\t\t\t\t\t: T extends RecordIdRange<infer Tb>\r\n\t\t\t\t\t\t\t\t? `${Tb}:${string}..${string}`\r\n\t\t\t\t\t\t\t\t: T extends Table<infer Tb>\r\n\t\t\t\t\t\t\t\t\t? `${Tb}`\r\n\t\t\t\t\t\t\t\t\t: T;\r\n/**\r\n * Recursively convert any supported SurrealQL value into a serializable JSON representation.\r\n * @param input - The input value\r\n * @returns JSON-safe representation\r\n */\r\nexport function jsonify<T>(input: T): Jsonify<T> {\r\n\tif (typeof input === \"object\") {\r\n\t\tif (input === null) return null as Jsonify<T>;\r\n\r\n\t\t// We only want to process \"SurrealQL values\"\r\n\t\tif (\r\n\t\t\tinput instanceof Date ||\r\n\t\t\tinput instanceof Uuid ||\r\n\t\t\tinput instanceof Decimal ||\r\n\t\t\tinput instanceof Duration ||\r\n\t\t\tinput instanceof Future ||\r\n\t\t\tinput instanceof Range ||\r\n\t\t\tinput instanceof StringRecordId ||\r\n\t\t\tinput instanceof RecordIdRange ||\r\n\t\t\tinput instanceof RecordId ||\r\n\t\t\tinput instanceof Geometry ||\r\n\t\t\tinput instanceof Table\r\n\t\t) {\r\n\t\t\treturn input.toJSON() as Jsonify<T>;\r\n\t\t}\r\n\r\n\t\t// We check by prototype, because we do not want to process derivatives of objects and arrays\r\n\t\tswitch (Object.getPrototypeOf(input)) {\r\n\t\t\tcase Object.prototype: {\r\n\t\t\t\tconst entries = Object.entries(input as object);\r\n\t\t\t\tconst mapped = entries\r\n\t\t\t\t\t.map(([k, v]) => [k, jsonify(v)])\r\n\t\t\t\t\t.filter(([_, v]) => v !== undefined);\r\n\t\t\t\treturn Object.fromEntries(mapped) as Jsonify<T>;\r\n\t\t\t}\r\n\t\t\tcase Map.prototype: {\r\n\t\t\t\tconst entries = Array.from(input as [string, unknown][]);\r\n\t\t\t\tconst mapped = entries\r\n\t\t\t\t\t.map(([k, v]) => [k, jsonify(v)])\r\n\t\t\t\t\t.filter(([_, v]) => v !== undefined);\r\n\t\t\t\treturn new Map(mapped as [string, unknown][]) as Jsonify<T>;\r\n\t\t\t}\r\n\t\t\tcase Array.prototype:\r\n\t\t\t\treturn (input as []).map(jsonify) as Jsonify<T>;\r\n\t\t\tcase Set.prototype:\r\n\t\t\t\treturn new Set([...(input as [])].map(jsonify)) as Jsonify<T>;\r\n\t\t}\r\n\t}\r\n\r\n\treturn input as Jsonify<T>;\r\n}\r\n", "/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nexport { __classPrivateFieldGet, __classPrivateFieldSet };\n", "import { __classPrivateFieldGet, __classPrivateFieldSet } from './external/tslib/tslib.es6.js';\n\n// Copyright 2019-2024 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-License-Identifier: MIT\nvar _Channel_onmessage, _Channel_nextMessageId, _Channel_pendingMessages, _Resource_rid;\n/**\n * Invoke your custom commands.\n *\n * This package is also accessible with `window.__TAURI__.core` when [`app.withGlobalTauri`](https://v2.tauri.app/reference/config/#withglobaltauri) in `tauri.conf.json` is set to `true`.\n * @module\n */\n/**\n * A key to be used to implement a special function\n * on your types that define how your type should be serialized\n * when passing across the IPC.\n * @example\n * Given a type in Rust that looks like this\n * ```rs\n * #[derive(serde::Serialize, serde::Deserialize)\n * enum UserId {\n *   String(String),\n *   Number(u32),\n * }\n * ```\n * `UserId::String(\"id\")` would be serialized into `{ String: \"id\" }`\n * and so we need to pass the same structure back to Rust\n * ```ts\n * import { SERIALIZE_TO_IPC_FN } from \"@tauri-apps/api/core\"\n *\n * class UserIdString {\n *   id\n *   constructor(id) {\n *     this.id = id\n *   }\n *\n *   [SERIALIZE_TO_IPC_FN]() {\n *     return { String: this.id }\n *   }\n * }\n *\n * class UserIdNumber {\n *   id\n *   constructor(id) {\n *     this.id = id\n *   }\n *\n *   [SERIALIZE_TO_IPC_FN]() {\n *     return { Number: this.id }\n *   }\n * }\n *\n *\n * type UserId = UserIdString | UserIdNumber\n * ```\n *\n */\n// if this value changes, make sure to update it in:\n// 1. ipc.js\n// 2. process-ipc-message-fn.js\nconst SERIALIZE_TO_IPC_FN = '__TAURI_TO_IPC_KEY__';\n/**\n * Transforms a callback function to a string identifier that can be passed to the backend.\n * The backend uses the identifier to `eval()` the callback.\n *\n * @return A unique identifier associated with the callback function.\n *\n * @since 1.0.0\n */\nfunction transformCallback(callback, once = false) {\n    return window.__TAURI_INTERNALS__.transformCallback(callback, once);\n}\nclass Channel {\n    constructor() {\n        // @ts-expect-error field used by the IPC serializer\n        this.__TAURI_CHANNEL_MARKER__ = true;\n        _Channel_onmessage.set(this, () => {\n            // no-op\n        }\n        // the id is used as a mechanism to preserve message order\n        );\n        // the id is used as a mechanism to preserve message order\n        _Channel_nextMessageId.set(this, 0);\n        _Channel_pendingMessages.set(this, []);\n        this.id = transformCallback(({ message, id }) => {\n            // Process the message if we're at the right order\n            if (id == __classPrivateFieldGet(this, _Channel_nextMessageId, \"f\")) {\n                __classPrivateFieldGet(this, _Channel_onmessage, \"f\").call(this, message);\n                __classPrivateFieldSet(this, _Channel_nextMessageId, __classPrivateFieldGet(this, _Channel_nextMessageId, \"f\") + 1, \"f\");\n                // process pending messages\n                while (__classPrivateFieldGet(this, _Channel_nextMessageId, \"f\") in __classPrivateFieldGet(this, _Channel_pendingMessages, \"f\")) {\n                    const message = __classPrivateFieldGet(this, _Channel_pendingMessages, \"f\")[__classPrivateFieldGet(this, _Channel_nextMessageId, \"f\")];\n                    __classPrivateFieldGet(this, _Channel_onmessage, \"f\").call(this, message);\n                    // eslint-disable-next-line @typescript-eslint/no-array-delete\n                    delete __classPrivateFieldGet(this, _Channel_pendingMessages, \"f\")[__classPrivateFieldGet(this, _Channel_nextMessageId, \"f\")];\n                    __classPrivateFieldSet(this, _Channel_nextMessageId, __classPrivateFieldGet(this, _Channel_nextMessageId, \"f\") + 1, \"f\");\n                }\n            }\n            // Queue the message if we're not\n            else {\n                // eslint-disable-next-line security/detect-object-injection\n                __classPrivateFieldGet(this, _Channel_pendingMessages, \"f\")[id] = message;\n            }\n        });\n    }\n    set onmessage(handler) {\n        __classPrivateFieldSet(this, _Channel_onmessage, handler, \"f\");\n    }\n    get onmessage() {\n        return __classPrivateFieldGet(this, _Channel_onmessage, \"f\");\n    }\n    [(_Channel_onmessage = new WeakMap(), _Channel_nextMessageId = new WeakMap(), _Channel_pendingMessages = new WeakMap(), SERIALIZE_TO_IPC_FN)]() {\n        return `__CHANNEL__:${this.id}`;\n    }\n    toJSON() {\n        // eslint-disable-next-line security/detect-object-injection\n        return this[SERIALIZE_TO_IPC_FN]();\n    }\n}\nclass PluginListener {\n    constructor(plugin, event, channelId) {\n        this.plugin = plugin;\n        this.event = event;\n        this.channelId = channelId;\n    }\n    async unregister() {\n        return invoke(`plugin:${this.plugin}|remove_listener`, {\n            event: this.event,\n            channelId: this.channelId\n        });\n    }\n}\n/**\n * Adds a listener to a plugin event.\n *\n * @returns The listener object to stop listening to the events.\n *\n * @since 2.0.0\n */\nasync function addPluginListener(plugin, event, cb) {\n    const handler = new Channel();\n    handler.onmessage = cb;\n    return invoke(`plugin:${plugin}|registerListener`, { event, handler }).then(() => new PluginListener(plugin, event, handler.id));\n}\n/**\n * Get permission state for a plugin.\n *\n * This should be used by plugin authors to wrap their actual implementation.\n */\nasync function checkPermissions(plugin) {\n    return invoke(`plugin:${plugin}|check_permissions`);\n}\n/**\n * Request permissions.\n *\n * This should be used by plugin authors to wrap their actual implementation.\n */\nasync function requestPermissions(plugin) {\n    return invoke(`plugin:${plugin}|request_permissions`);\n}\n/**\n * Sends a message to the backend.\n * @example\n * ```typescript\n * import { invoke } from '@tauri-apps/api/core';\n * await invoke('login', { user: 'tauri', password: 'poiwe3h4r5ip3yrhtew9ty' });\n * ```\n *\n * @param cmd The command name.\n * @param args The optional arguments to pass to the command.\n * @param options The request options.\n * @return A promise resolving or rejecting to the backend response.\n *\n * @since 1.0.0\n */\nasync function invoke(cmd, args = {}, options) {\n    return window.__TAURI_INTERNALS__.invoke(cmd, args, options);\n}\n/**\n * Convert a device file path to an URL that can be loaded by the webview.\n * Note that `asset:` and `http://asset.localhost` must be added to [`app.security.csp`](https://v2.tauri.app/reference/config/#csp-1) in `tauri.conf.json`.\n * Example CSP value: `\"csp\": \"default-src 'self' ipc: http://ipc.localhost; img-src 'self' asset: http://asset.localhost\"` to use the asset protocol on image sources.\n *\n * Additionally, `\"enable\" : \"true\"` must be added to [`app.security.assetProtocol`](https://v2.tauri.app/reference/config/#assetprotocolconfig)\n * in `tauri.conf.json` and its access scope must be defined on the `scope` array on the same `assetProtocol` object.\n *\n * @param  filePath The file path.\n * @param  protocol The protocol to use. Defaults to `asset`. You only need to set this when using a custom protocol.\n * @example\n * ```typescript\n * import { appDataDir, join } from '@tauri-apps/api/path';\n * import { convertFileSrc } from '@tauri-apps/api/core';\n * const appDataDirPath = await appDataDir();\n * const filePath = await join(appDataDirPath, 'assets/video.mp4');\n * const assetUrl = convertFileSrc(filePath);\n *\n * const video = document.getElementById('my-video');\n * const source = document.createElement('source');\n * source.type = 'video/mp4';\n * source.src = assetUrl;\n * video.appendChild(source);\n * video.load();\n * ```\n *\n * @return the URL that can be used as source on the webview.\n *\n * @since 1.0.0\n */\nfunction convertFileSrc(filePath, protocol = 'asset') {\n    return window.__TAURI_INTERNALS__.convertFileSrc(filePath, protocol);\n}\n/**\n * A rust-backed resource stored through `tauri::Manager::resources_table` API.\n *\n * The resource lives in the main process and does not exist\n * in the Javascript world, and thus will not be cleaned up automatiacally\n * except on application exit. If you want to clean it up early, call {@linkcode Resource.close}\n *\n * @example\n * ```typescript\n * import { Resource, invoke } from '@tauri-apps/api/core';\n * export class DatabaseHandle extends Resource {\n *   static async open(path: string): Promise<DatabaseHandle> {\n *     const rid: number = await invoke('open_db', { path });\n *     return new DatabaseHandle(rid);\n *   }\n *\n *   async execute(sql: string): Promise<void> {\n *     await invoke('execute_sql', { rid: this.rid, sql });\n *   }\n * }\n * ```\n */\nclass Resource {\n    get rid() {\n        return __classPrivateFieldGet(this, _Resource_rid, \"f\");\n    }\n    constructor(rid) {\n        _Resource_rid.set(this, void 0);\n        __classPrivateFieldSet(this, _Resource_rid, rid, \"f\");\n    }\n    /**\n     * Destroys and cleans up this resource from memory.\n     * **You should not call any method on this object anymore and should drop any reference to it.**\n     */\n    async close() {\n        return invoke('plugin:resources|close', {\n            rid: this.rid\n        });\n    }\n}\n_Resource_rid = new WeakMap();\nfunction isTauri() {\n    return 'isTauri' in window && !!window.isTauri;\n}\n\nexport { Channel, PluginListener, Resource, SERIALIZE_TO_IPC_FN, addPluginListener, checkPermissions, convertFileSrc, invoke, isTauri, requestPermissions, transformCallback };\n", "import { invoke } from '@tauri-apps/api/core';\n\n// Copyright 2019-2023 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-License-Identifier: MIT\n/**\n * Make HTTP requests with the Rust backend.\n *\n * ## Security\n *\n * This API has a scope configuration that forces you to restrict the URLs that can be accessed using glob patterns.\n *\n * For instance, this scope configuration only allows making HTTP requests to all subdomains for `tauri.app` except for `https://private.tauri.app`:\n * ```json\n * {\n *   \"permissions\": [\n *     {\n *       \"identifier\": \"http:default\",\n *       \"allow\": [{ \"url\": \"https://*.tauri.app\" }],\n *       \"deny\": [{ \"url\": \"https://private.tauri.app\" }]\n *     }\n *   ]\n * }\n * ```\n * Trying to execute any API with a URL not configured on the scope results in a promise rejection due to denied access.\n *\n * @module\n */\nconst ERROR_REQUEST_CANCELLED = 'Request canceled';\n/**\n * Fetch a resource from the network. It returns a `Promise` that resolves to the\n * `Response` to that `Request`, whether it is successful or not.\n *\n * @example\n * ```typescript\n * const response = await fetch(\"http://my.json.host/data.json\");\n * console.log(response.status);  // e.g. 200\n * console.log(response.statusText); // e.g. \"OK\"\n * const jsonData = await response.json();\n * ```\n *\n * @since 2.0.0\n */\nasync function fetch(input, init) {\n    // abort early here if needed\n    const signal = init?.signal;\n    if (signal?.aborted) {\n        throw new Error(ERROR_REQUEST_CANCELLED);\n    }\n    const maxRedirections = init?.maxRedirections;\n    const connectTimeout = init?.connectTimeout;\n    const proxy = init?.proxy;\n    // Remove these fields before creating the request\n    if (init) {\n        delete init.maxRedirections;\n        delete init.connectTimeout;\n        delete init.proxy;\n    }\n    const headers = init?.headers\n        ? init.headers instanceof Headers\n            ? init.headers\n            : new Headers(init.headers)\n        : new Headers();\n    const req = new Request(input, init);\n    const buffer = await req.arrayBuffer();\n    const data = buffer.byteLength !== 0 ? Array.from(new Uint8Array(buffer)) : null;\n    // append new headers created by the browser `Request` implementation,\n    // if not already declared by the caller of this function\n    for (const [key, value] of req.headers) {\n        if (!headers.get(key)) {\n            headers.set(key, value);\n        }\n    }\n    const headersArray = headers instanceof Headers\n        ? Array.from(headers.entries())\n        : Array.isArray(headers)\n            ? headers\n            : Object.entries(headers);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const mappedHeaders = headersArray.map(([name, val]) => [\n        name,\n        // we need to ensure we have all header values as strings\n        // eslint-disable-next-line\n        typeof val === 'string' ? val : val.toString()\n    ]);\n    // abort early here if needed\n    if (signal?.aborted) {\n        throw new Error(ERROR_REQUEST_CANCELLED);\n    }\n    const rid = await invoke('plugin:http|fetch', {\n        clientConfig: {\n            method: req.method,\n            url: req.url,\n            headers: mappedHeaders,\n            data,\n            maxRedirections,\n            connectTimeout,\n            proxy\n        }\n    });\n    const abort = () => invoke('plugin:http|fetch_cancel', { rid });\n    // abort early here if needed\n    if (signal?.aborted) {\n        // we don't care about the result of this proimse\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        abort();\n        throw new Error(ERROR_REQUEST_CANCELLED);\n    }\n    signal?.addEventListener('abort', () => void abort());\n    const { status, statusText, url, headers: responseHeaders, rid: responseRid } = await invoke('plugin:http|fetch_send', {\n        rid\n    });\n    const body = await invoke('plugin:http|fetch_read_body', {\n        rid: responseRid\n    });\n    const res = new Response(body instanceof ArrayBuffer && body.byteLength !== 0\n        ? body\n        : body instanceof Array && body.length > 0\n            ? new Uint8Array(body)\n            : null, {\n        status,\n        statusText\n    });\n    // url and headers are read only properties\n    // but seems like we can set them like this\n    //\n    // we define theme like this, because using `Response`\n    // constructor, it removes url and some headers\n    // like `set-cookie` headers\n    Object.defineProperty(res, 'url', { value: url });\n    Object.defineProperty(res, 'headers', {\n        value: new Headers(responseHeaders)\n    });\n    return res;\n}\n\nexport { fetch };\n", "import { fetch as tauriFetch } from \"@tauri-apps/plugin-http\";\r\n\r\nimport { UnsupportedVersion, VersionRetrievalFailure } from \"../errors.ts\";\r\n\r\ntype Version = `${number}.${number}.${number}`;\r\nexport const defaultVersionCheckTimeout = 5000;\r\nexport const supportedSurrealDbVersionMin: Version = \"1.4.2\";\r\nexport const supportedSurrealDbVersionUntil: Version = \"3.0.0\";\r\nexport const supportedSurrealDbVersionRange: string = `>= ${supportedSurrealDbVersionMin} < ${supportedSurrealDbVersionUntil}`;\r\n\r\nexport function versionCheck(\r\n\tversion: string,\r\n\tmin: Version = supportedSurrealDbVersionMin,\r\n\tuntil: Version = supportedSurrealDbVersionUntil,\r\n): true {\r\n\tif (!isVersionSupported(version, min, until)) {\r\n\t\tthrow new UnsupportedVersion(version, `>= ${min} < ${until}`);\r\n\t}\r\n\r\n\treturn true;\r\n}\r\n\r\nexport function isVersionSupported(\r\n\tversion: string,\r\n\tmin: Version = supportedSurrealDbVersionMin,\r\n\tuntil: Version = supportedSurrealDbVersionUntil,\r\n): boolean {\r\n\treturn (\r\n\t\tmin.localeCompare(version, undefined, {\r\n\t\t\tnumeric: true,\r\n\t\t}) <= 0 &&\r\n\t\tuntil.localeCompare(version, undefined, {\r\n\t\t\tnumeric: true,\r\n\t\t}) === 1\r\n\t);\r\n}\r\n\r\n/**\r\n * Query the version of a remote SurrealDB instance\r\n * @param url - The URL of the remote SurrealDB instance\r\n * @param timeout - The timeout in milliseconds for the request\r\n * @returns\r\n */\r\nexport async function retrieveRemoteVersion(\r\n\turl: URL,\r\n\ttimeout?: number,\r\n): Promise<Version> {\r\n\tconst mappedProtocols = {\r\n\t\t\"ws:\": \"http:\",\r\n\t\t\"wss:\": \"https:\",\r\n\t\t\"http:\": \"http:\",\r\n\t\t\"https:\": \"https:\",\r\n\t} as Record<string, string>;\r\n\r\n\tconst protocol = mappedProtocols[url.protocol];\r\n\tif (protocol) {\r\n\t\tconst basepath = url.pathname.slice(0, -4);\r\n\t\t// biome-ignore lint/style/noParameterAssign: need to clone URL instance to prevent altering the original\r\n\t\turl = new URL(url);\r\n\t\turl.pathname = `${basepath}/version`;\r\n\t\turl.protocol = protocol;\r\n\r\n\t\tconst controller = new AbortController();\r\n\t\tconst id = setTimeout(\r\n\t\t\t() => controller.abort(),\r\n\t\t\ttimeout ?? defaultVersionCheckTimeout,\r\n\t\t);\r\n\t\tconst versionPrefix = \"surrealdb-\";\r\n\t\tconst version = await tauriFetch(url, {\r\n\t\t\tsignal: controller.signal,\r\n\t\t})\r\n\t\t\t.then((res) => res.text())\r\n\t\t\t.then((version) => version.slice(versionPrefix.length))\r\n\t\t\t.catch((e) => {\r\n\t\t\t\tthrow new VersionRetrievalFailure(e);\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tclearTimeout(id);\r\n\t\t\t});\r\n\r\n\t\treturn version as Version;\r\n\t}\r\n\r\n\tthrow new VersionRetrievalFailure();\r\n}\r\n", "let id = 0;\r\nexport function getIncrementalID(): string {\r\n\tid = (id + 1) % Number.MAX_SAFE_INTEGER;\r\n\treturn id.toString();\r\n}\r\n", "import { StringRecordId, Uuid } from \"../data\";\r\n\r\n/**\r\n * A template literal tag function for parsing a string type\r\n * @param string - The string to parse\r\n * @param values - The interpolated values\r\n * @returns The parsed string\r\n */\r\nexport function s(\r\n\tstring: string[] | TemplateStringsArray,\r\n\t...values: unknown[]\r\n): string {\r\n\treturn string.reduce(\r\n\t\t(prev, curr, i) => `${prev}${curr}${values[i] ?? \"\"}`,\r\n\t\t\"\",\r\n\t);\r\n}\r\n\r\n/**\r\n * A template literal tag function for parsing a string into a Date\r\n * @param string - The string to parse\r\n * @param values - The interpolated values\r\n * @returns The parsed Date\r\n */\r\nexport function d(\r\n\tstring: string[] | TemplateStringsArray,\r\n\t...values: unknown[]\r\n): Date {\r\n\treturn new Date(s(string, values));\r\n}\r\n\r\n/**\r\n * A template literal tag function for parsing a string into a StringRecordId\r\n * @param string - The string to parse\r\n * @param values - The interpolated values\r\n * @returns The parsed StringRecordId\r\n */\r\nexport function r(\r\n\tstring: string[] | TemplateStringsArray,\r\n\t...values: unknown[]\r\n): StringRecordId {\r\n\treturn new StringRecordId(s(string, values));\r\n}\r\n\r\n/**\r\n * A template literal tag function for parsing a string into a Uuid\r\n * @param string - The string to parse\r\n * @param values - The interpolated values\r\n * @returns The parsed Uuid\r\n */\r\nexport function u(\r\n\tstring: string[] | TemplateStringsArray,\r\n\t...values: unknown[]\r\n): Uuid {\r\n\treturn new Uuid(s(string, values));\r\n}\r\n", "import { type EngineDisconnected, HttpConnectionError } from \"../errors\";\r\nimport type {\r\n\tExportOptions,\r\n\tLiveHandlerArguments,\r\n\tRpcRequest,\r\n\tRpcResponse,\r\n} from \"../types\";\r\nimport type { Emitter } from \"../util/emitter\";\r\n\r\nexport type Engine = new (context: EngineContext) => AbstractEngine;\r\nexport type Engines = Record<string, Engine>;\r\n\r\nexport type EngineEvents = {\r\n\tconnecting: [];\r\n\tconnected: [];\r\n\tdisconnected: [];\r\n\terror: [Error];\r\n\r\n\t[K: `rpc-${string | number}`]: [RpcResponse | EngineDisconnected];\r\n\t[K: `live-${string}`]: LiveHandlerArguments;\r\n};\r\n\r\nexport enum ConnectionStatus {\r\n\tDisconnected = \"disconnected\",\r\n\tConnecting = \"connecting\",\r\n\tConnected = \"connected\",\r\n\tError = \"error\",\r\n}\r\n\r\nexport class EngineContext {\r\n\treadonly emitter: Emitter<EngineEvents>;\r\n\treadonly encodeCbor: (value: unknown) => ArrayBuffer;\r\n\t// biome-ignore lint/suspicious/noExplicitAny: Don't know what it will return\r\n\treadonly decodeCbor: (value: ArrayBufferLike) => any;\r\n\r\n\tconstructor({\r\n\t\temitter,\r\n\t\tencodeCbor,\r\n\t\tdecodeCbor,\r\n\t}: {\r\n\t\temitter: Emitter<EngineEvents>;\r\n\t\tencodeCbor: (value: unknown) => ArrayBuffer;\r\n\t\t// biome-ignore lint/suspicious/noExplicitAny: Don't know what it will return\r\n\t\tdecodeCbor: (value: ArrayBufferLike) => any;\r\n\t}) {\r\n\t\tthis.emitter = emitter;\r\n\t\tthis.encodeCbor = encodeCbor;\r\n\t\tthis.decodeCbor = decodeCbor;\r\n\t}\r\n}\r\n\r\nexport abstract class AbstractEngine {\r\n\treadonly context: EngineContext;\r\n\tready: Promise<void> | undefined;\r\n\tstatus: ConnectionStatus = ConnectionStatus.Disconnected;\r\n\tconnection: {\r\n\t\turl: URL | undefined;\r\n\t\tnamespace: string | undefined;\r\n\t\tdatabase: string | undefined;\r\n\t\ttoken: string | undefined;\r\n\t} = {\r\n\t\turl: undefined,\r\n\t\tnamespace: undefined,\r\n\t\tdatabase: undefined,\r\n\t\ttoken: undefined,\r\n\t};\r\n\r\n\tconstructor(context: EngineContext) {\r\n\t\tthis.context = context;\r\n\t}\r\n\r\n\tget emitter(): EngineContext[\"emitter\"] {\r\n\t\treturn this.context.emitter;\r\n\t}\r\n\r\n\tget encodeCbor(): EngineContext[\"encodeCbor\"] {\r\n\t\treturn this.context.encodeCbor;\r\n\t}\r\n\r\n\tget decodeCbor(): EngineContext[\"decodeCbor\"] {\r\n\t\treturn this.context.decodeCbor;\r\n\t}\r\n\r\n\tabstract connect(url: URL): Promise<void>;\r\n\tabstract disconnect(): Promise<void>;\r\n\tabstract rpc<\r\n\t\tMethod extends string,\r\n\t\tParams extends unknown[] | undefined,\r\n\t\tResult,\r\n\t>(request: RpcRequest<Method, Params>): Promise<RpcResponse<Result>>;\r\n\r\n\tabstract version(url: URL, timeout?: number): Promise<string>;\r\n\tabstract export(options?: Partial<ExportOptions>): Promise<string>;\r\n\r\n\tprotected async req_post(\r\n\t\tbody: unknown,\r\n\t\turl?: URL,\r\n\t\theaders_?: Record<string, string>,\r\n\t): Promise<ArrayBuffer> {\r\n\t\tconst headers: Record<string, string> = {\r\n\t\t\t\"Content-Type\": \"application/cbor\",\r\n\t\t\tAccept: \"application/cbor\",\r\n\t\t\t...headers_,\r\n\t\t};\r\n\r\n\t\tif (this.connection.namespace) {\r\n\t\t\theaders[\"Surreal-NS\"] = this.connection.namespace;\r\n\t\t}\r\n\r\n\t\tif (this.connection.database) {\r\n\t\t\theaders[\"Surreal-DB\"] = this.connection.database;\r\n\t\t}\r\n\r\n\t\tif (this.connection.token) {\r\n\t\t\theaders.Authorization = `Bearer ${this.connection.token}`;\r\n\t\t}\r\n\r\n\t\tconst raw = await fetch(`${url ?? this.connection.url}`, {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\theaders,\r\n\t\t\tbody: this.encodeCbor(body),\r\n\t\t});\r\n\r\n\t\tconst buffer = await raw.arrayBuffer();\r\n\r\n\t\tif (raw.status === 200) {\r\n\t\t\treturn buffer;\r\n\t\t}\r\n\r\n\t\tconst dec = new TextDecoder(\"utf-8\");\r\n\t\tthrow new HttpConnectionError(\r\n\t\t\tdec.decode(buffer),\r\n\t\t\traw.status,\r\n\t\t\traw.statusText,\r\n\t\t\tbuffer,\r\n\t\t);\r\n\t}\r\n}\r\n", "import { NoDatabaseSpecified, NoNamespaceSpecified } from \"../errors.ts\";\r\nimport type { AnyAuth } from \"../types.ts\";\r\n\r\nexport function processAuthVars<T extends AnyAuth>(\r\n\tvars: T,\r\n\tfallback?: {\r\n\t\tnamespace?: string;\r\n\t\tdatabase?: string;\r\n\t},\r\n): AnyAuth {\r\n\tif (\r\n\t\t\"scope\" in vars ||\r\n\t\t(\"access\" in vars && \"variables\" in vars && vars.variables)\r\n\t) {\r\n\t\tif (!vars.namespace) {\r\n\t\t\tif (!fallback?.namespace) throw new NoNamespaceSpecified();\r\n\t\t\tvars.namespace = fallback.namespace;\r\n\t\t}\r\n\r\n\t\tif (!vars.database) {\r\n\t\t\tif (!fallback?.database) throw new NoDatabaseSpecified();\r\n\t\t\tvars.database = fallback.database;\r\n\t\t}\r\n\t}\r\n\r\n\treturn vars;\r\n}\r\n", "import { ConnectionUnavailable, MissingNamespaceDatabase } from \"../errors\";\r\nimport type { ExportOptions, RpcRequest, RpcResponse } from \"../types\";\r\nimport { getIncrementalID } from \"../util/get-incremental-id\";\r\nimport { retrieveRemoteVersion } from \"../util/version-check\";\r\nimport {\r\n\tAbstractEngine,\r\n\tConnectionStatus,\r\n\ttype EngineEvents,\r\n} from \"./abstract\";\r\n\r\nconst ALWAYS_ALLOW = new Set([\r\n\t\"signin\",\r\n\t\"signup\",\r\n\t\"authenticate\",\r\n\t\"invalidate\",\r\n\t\"version\",\r\n\t\"use\",\r\n\t\"let\",\r\n\t\"unset\",\r\n\t\"query\",\r\n]);\r\n\r\nexport class HttpEngine extends AbstractEngine {\r\n\tconnection: {\r\n\t\turl: URL | undefined;\r\n\t\tnamespace: string | undefined;\r\n\t\tdatabase: string | undefined;\r\n\t\ttoken: string | undefined;\r\n\t\tvariables: Record<string, unknown>;\r\n\t} = {\r\n\t\turl: undefined,\r\n\t\tnamespace: undefined,\r\n\t\tdatabase: undefined,\r\n\t\ttoken: undefined,\r\n\t\tvariables: {},\r\n\t};\r\n\r\n\tprivate setStatus<T extends ConnectionStatus>(\r\n\t\tstatus: T,\r\n\t\t...args: EngineEvents[T]\r\n\t) {\r\n\t\tthis.status = status;\r\n\t\tthis.emitter.emit(status, args);\r\n\t}\r\n\r\n\tversion(url: URL, timeout?: number): Promise<string> {\r\n\t\treturn retrieveRemoteVersion(url, timeout);\r\n\t}\r\n\r\n\tconnect(url: URL): Promise<void> {\r\n\t\tthis.setStatus(ConnectionStatus.Connecting);\r\n\t\tthis.connection.url = url;\r\n\t\tthis.setStatus(ConnectionStatus.Connected);\r\n\t\tthis.ready = new Promise<void>((r) => r());\r\n\t\treturn this.ready;\r\n\t}\r\n\r\n\tdisconnect(): Promise<void> {\r\n\t\tthis.connection = {\r\n\t\t\turl: undefined,\r\n\t\t\tnamespace: undefined,\r\n\t\t\tdatabase: undefined,\r\n\t\t\ttoken: undefined,\r\n\t\t\tvariables: {},\r\n\t\t};\r\n\r\n\t\tthis.ready = undefined;\r\n\t\tthis.setStatus(ConnectionStatus.Disconnected);\r\n\t\treturn new Promise<void>((r) => r());\r\n\t}\r\n\r\n\tasync rpc<\r\n\t\tMethod extends string,\r\n\t\tParams extends unknown[] | undefined,\r\n\t\tResult,\r\n\t>(request: RpcRequest<Method, Params>): Promise<RpcResponse<Result>> {\r\n\t\tawait this.ready;\r\n\r\n\t\tif (!this.connection.url) {\r\n\t\t\tthrow new ConnectionUnavailable();\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t(!this.connection.namespace || !this.connection.database) &&\r\n\t\t\t!ALWAYS_ALLOW.has(request.method)\r\n\t\t) {\r\n\t\t\tthrow new MissingNamespaceDatabase();\r\n\t\t}\r\n\r\n\t\tif (request.method === \"use\") {\r\n\t\t\tconst [ns, db] = request.params as [\r\n\t\t\t\tstring | null | undefined,\r\n\t\t\t\tstring | null | undefined,\r\n\t\t\t];\r\n\r\n\t\t\tif (ns === null) this.connection.namespace = undefined;\r\n\t\t\tif (db === null) this.connection.database = undefined;\r\n\t\t\tif (ns) this.connection.namespace = ns;\r\n\t\t\tif (db) this.connection.database = db;\r\n\t\t\treturn {\r\n\t\t\t\tresult: true as Result,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (request.method === \"let\") {\r\n\t\t\tconst [key, value] = request.params as [string, unknown];\r\n\t\t\tthis.connection.variables[key] = value;\r\n\t\t\treturn {\r\n\t\t\t\tresult: true as Result,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (request.method === \"unset\") {\r\n\t\t\tconst [key] = request.params as [string];\r\n\t\t\tdelete this.connection.variables[key];\r\n\t\t\treturn {\r\n\t\t\t\tresult: true as Result,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (request.method === \"query\") {\r\n\t\t\trequest.params = [\r\n\t\t\t\trequest.params?.[0],\r\n\t\t\t\t{\r\n\t\t\t\t\t...this.connection.variables,\r\n\t\t\t\t\t...(request.params?.[1] ?? {}),\r\n\t\t\t\t},\r\n\t\t\t] as Params;\r\n\t\t}\r\n\r\n\t\tconst id = getIncrementalID();\r\n\t\tconst buffer = await this.req_post({ id, ...request });\r\n\t\tconst response: RpcResponse = this.decodeCbor(buffer);\r\n\r\n\t\tif (\"result\" in response) {\r\n\t\t\tswitch (request.method) {\r\n\t\t\t\tcase \"signin\":\r\n\t\t\t\tcase \"signup\": {\r\n\t\t\t\t\tthis.connection.token = response.result as string;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"authenticate\": {\r\n\t\t\t\t\tconst [token] = request.params as [string];\r\n\t\t\t\t\tthis.connection.token = token;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"invalidate\": {\r\n\t\t\t\t\tthis.connection.token = undefined;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.emitter.emit(`rpc-${id}`, [response]);\r\n\t\treturn response as RpcResponse<Result>;\r\n\t}\r\n\r\n\tget connected(): boolean {\r\n\t\treturn !!this.connection.url;\r\n\t}\r\n\r\n\tasync export(options?: Partial<ExportOptions>): Promise<string> {\r\n\t\tif (!this.connection.url) {\r\n\t\t\tthrow new ConnectionUnavailable();\r\n\t\t}\r\n\t\tconst url = new URL(this.connection.url);\r\n\t\tconst basepath = url.pathname.slice(0, -4);\r\n\t\turl.pathname = `${basepath}/export`;\r\n\r\n\t\tconst buffer = await this.req_post(options ?? {}, url, {\r\n\t\t\tAccept: \"plain/text\",\r\n\t\t});\r\n\r\n\t\tconst dec = new TextDecoder(\"utf-8\");\r\n\t\treturn dec.decode(buffer);\r\n\t}\r\n}\r\n", "export function getNativeWebSocket() {\n  if (typeof WebSocket !== \"undefined\") return WebSocket;\n  if (typeof global.WebSocket !== \"undefined\") return global.WebSocket;\n  if (typeof window.WebSocket !== \"undefined\") return window.WebSocket;\n  if (typeof self.WebSocket !== \"undefined\") return self.WebSocket;\n  throw new Error(\"`WebSocket` is not supported in this environment\");\n}\n", "import { getNativeWebSocket } from \"./utils.js\";\n\nexport const WebSocket = getNativeWebSocket();\n\ntype MessageEvent_ = MessageEvent;\nexport type { MessageEvent_ as MessageEvent };\n", "import { WebSocket } from \"isows\";\r\nimport {\r\n\tConnectionUnavailable,\r\n\tEngineDisconnected,\r\n\tResponseError,\r\n\tUnexpectedConnectionError,\r\n\tUnexpectedServerResponse,\r\n} from \"../errors\";\r\nimport {\r\n\ttype ExportOptions,\r\n\ttype RpcRequest,\r\n\ttype RpcResponse,\r\n\tisLiveResult,\r\n} from \"../types\";\r\nimport { getIncrementalID } from \"../util/get-incremental-id\";\r\nimport { retrieveRemoteVersion } from \"../util/version-check\";\r\nimport {\r\n\tAbstractEngine,\r\n\tConnectionStatus,\r\n\ttype EngineContext,\r\n\ttype EngineEvents,\r\n} from \"./abstract\";\r\n\r\nexport class WebsocketEngine extends AbstractEngine {\r\n\tprivate pinger?: Pinger;\r\n\tprivate socket?: WebSocket;\r\n\r\n\tconstructor(context: EngineContext) {\r\n\t\tsuper(context);\r\n\t\tthis.emitter.subscribe(\"disconnected\", () => this.pinger?.stop());\r\n\t}\r\n\r\n\tprivate setStatus<T extends ConnectionStatus>(\r\n\t\tstatus: T,\r\n\t\t...args: EngineEvents[T]\r\n\t) {\r\n\t\tthis.status = status;\r\n\t\tthis.emitter.emit(status, args);\r\n\t}\r\n\r\n\tprivate async requireStatus<T extends ConnectionStatus>(\r\n\t\tstatus: T,\r\n\t): Promise<true> {\r\n\t\tif (this.status !== status) {\r\n\t\t\tawait this.emitter.subscribeOnce(status);\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tversion(url: URL, timeout?: number): Promise<string> {\r\n\t\treturn retrieveRemoteVersion(url, timeout);\r\n\t}\r\n\r\n\tasync connect(url: URL): Promise<void> {\r\n\t\tthis.connection.url = url;\r\n\t\tthis.setStatus(ConnectionStatus.Connecting);\r\n\t\tconst socket = new WebSocket(url.toString(), \"cbor\");\r\n\t\tconst ready = new Promise<void>((resolve, reject) => {\r\n\t\t\tsocket.addEventListener(\"open\", () => {\r\n\t\t\t\tthis.setStatus(ConnectionStatus.Connected);\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\r\n\t\t\tsocket.addEventListener(\"error\", (e) => {\r\n\t\t\t\tconst error = new UnexpectedConnectionError(\r\n\t\t\t\t\t\"detail\" in e\r\n\t\t\t\t\t\t? e.detail\r\n\t\t\t\t\t\t: \"error\" in e\r\n\t\t\t\t\t\t\t? e.error\r\n\t\t\t\t\t\t\t: \"An unexpected error occurred\",\r\n\t\t\t\t);\r\n\t\t\t\tthis.setStatus(ConnectionStatus.Error, error);\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\r\n\t\t\tsocket.addEventListener(\"close\", () => {\r\n\t\t\t\tthis.setStatus(ConnectionStatus.Disconnected);\r\n\t\t\t});\r\n\r\n\t\t\tsocket.addEventListener(\"message\", async ({ data }) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst decoded = this.decodeCbor(\r\n\t\t\t\t\t\tdata instanceof ArrayBuffer\r\n\t\t\t\t\t\t\t? data\r\n\t\t\t\t\t\t\t: data instanceof Blob\r\n\t\t\t\t\t\t\t\t? await data.arrayBuffer()\r\n\t\t\t\t\t\t\t\t: data.buffer.slice(\r\n\t\t\t\t\t\t\t\t\t\tdata.byteOffset,\r\n\t\t\t\t\t\t\t\t\t\tdata.byteOffset + data.byteLength,\r\n\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof decoded === \"object\" &&\r\n\t\t\t\t\t\tdecoded != null &&\r\n\t\t\t\t\t\tObject.getPrototypeOf(decoded) === Object.prototype\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tthis.handleRpcResponse(decoded);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow new UnexpectedServerResponse(decoded);\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (detail) {\r\n\t\t\t\t\tsocket.dispatchEvent(new CustomEvent(\"error\", { detail }));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.ready = ready;\r\n\t\treturn await ready.then(() => {\r\n\t\t\tthis.socket = socket;\r\n\t\t\tthis.pinger?.stop();\r\n\t\t\tthis.pinger = new Pinger(30000);\r\n\t\t\tthis.pinger.start(() => this.rpc({ method: \"ping\" }));\r\n\t\t});\r\n\t}\r\n\r\n\tasync disconnect(): Promise<void> {\r\n\t\tthis.connection = {\r\n\t\t\turl: undefined,\r\n\t\t\tnamespace: undefined,\r\n\t\t\tdatabase: undefined,\r\n\t\t\ttoken: undefined,\r\n\t\t};\r\n\r\n\t\tawait this.ready?.catch(() => {});\r\n\t\tthis.socket?.close();\r\n\t\tthis.ready = undefined;\r\n\t\tthis.socket = undefined;\r\n\r\n\t\tawait Promise.any([\r\n\t\t\tthis.requireStatus(ConnectionStatus.Disconnected),\r\n\t\t\tthis.requireStatus(ConnectionStatus.Error),\r\n\t\t]);\r\n\t}\r\n\r\n\tasync rpc<\r\n\t\tMethod extends string,\r\n\t\tParams extends unknown[] | undefined,\r\n\t\tResult,\r\n\t>(request: RpcRequest<Method, Params>): Promise<RpcResponse<Result>> {\r\n\t\tawait this.ready;\r\n\t\tif (!this.socket) throw new ConnectionUnavailable();\r\n\r\n\t\t// It's not realistic for the message to ever arrive before the listener is registered on the emitter\r\n\t\t// And we don't want to collect the response messages in the emitter\r\n\t\t// So to be sure we simply subscribe before we send the message :)\r\n\r\n\t\tconst id = getIncrementalID();\r\n\t\tconst response = this.emitter.subscribeOnce(`rpc-${id}`);\r\n\t\tthis.socket.send(this.encodeCbor({ id, ...request }));\r\n\r\n\t\tconst [res] = await response;\r\n\t\tif (res instanceof EngineDisconnected) throw res;\r\n\r\n\t\tif (\"result\" in res) {\r\n\t\t\tswitch (request.method) {\r\n\t\t\t\tcase \"use\": {\r\n\t\t\t\t\tconst [ns, db] = request.params as [\r\n\t\t\t\t\t\tstring | null | undefined,\r\n\t\t\t\t\t\tstring | null | undefined,\r\n\t\t\t\t\t];\r\n\r\n\t\t\t\t\tif (ns === null) this.connection.namespace = undefined;\r\n\t\t\t\t\tif (db === null) this.connection.database = undefined;\r\n\t\t\t\t\tif (ns) this.connection.namespace = ns;\r\n\t\t\t\t\tif (db) this.connection.database = db;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"signin\":\r\n\t\t\t\tcase \"signup\": {\r\n\t\t\t\t\tthis.connection.token = res.result as string;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"authenticate\": {\r\n\t\t\t\t\tconst [token] = request.params as [string];\r\n\t\t\t\t\tthis.connection.token = token;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"invalidate\": {\r\n\t\t\t\t\tthis.connection.token = undefined;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn res as RpcResponse<Result>;\r\n\t}\r\n\r\n\t// biome-ignore lint/suspicious/noExplicitAny: Cannot assume type\r\n\thandleRpcResponse({ id, ...res }: any): void {\r\n\t\tif (id) {\r\n\t\t\tthis.emitter.emit(`rpc-${id}`, [res]);\r\n\t\t} else if (res.error) {\r\n\t\t\tthis.setStatus(ConnectionStatus.Error, new ResponseError(res.error));\r\n\t\t} else {\r\n\t\t\tif (isLiveResult(res.result)) {\r\n\t\t\t\tconst { id, action, result } = res.result;\r\n\t\t\t\tthis.emitter.emit(`live-${id}`, [action, result], true);\r\n\t\t\t} else {\r\n\t\t\t\tthis.setStatus(\r\n\t\t\t\t\tConnectionStatus.Error,\r\n\t\t\t\t\tnew UnexpectedServerResponse({ id, ...res }),\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tget connected(): boolean {\r\n\t\treturn !!this.socket;\r\n\t}\r\n\r\n\tasync export(options?: Partial<ExportOptions>): Promise<string> {\r\n\t\tif (!this.connection.url) {\r\n\t\t\tthrow new ConnectionUnavailable();\r\n\t\t}\r\n\t\tconst url = new URL(this.connection.url);\r\n\t\tconst basepath = url.pathname.slice(0, -4);\r\n\t\turl.protocol = url.protocol.replace(\"ws\", \"http\");\r\n\t\turl.pathname = `${basepath}/export`;\r\n\r\n\t\tconst buffer = await this.req_post(options ?? {}, url, {\r\n\t\t\tAccept: \"plain/text\",\r\n\t\t});\r\n\r\n\t\tconst dec = new TextDecoder(\"utf-8\");\r\n\t\treturn dec.decode(buffer);\r\n\t}\r\n}\r\n\r\nexport class Pinger {\r\n\tprivate pinger?: ReturnType<typeof setTimeout>;\r\n\tprivate interval: number;\r\n\r\n\tconstructor(interval = 30000) {\r\n\t\tthis.interval = interval;\r\n\t}\r\n\r\n\tstart(callback: () => void): void {\r\n\t\tthis.pinger = setInterval(callback, this.interval);\r\n\t}\r\n\r\n\tstop(): void {\r\n\t\tclearInterval(this.pinger);\r\n\t}\r\n}\r\n", "import {\r\n\tStringRecordId,\r\n\tTable,\r\n\ttype Uuid,\r\n\tRecordId as _RecordId,\r\n\tdecodeCbor,\r\n\tencodeCbor,\r\n} from \"./data\";\r\nimport {\r\n\ttype AbstractEngine,\r\n\tConnectionStatus,\r\n\tEngineContext,\r\n\ttype EngineEvents,\r\n\ttype Engines,\r\n} from \"./engines/abstract.ts\";\r\nimport { Emitter } from \"./util/emitter.ts\";\r\nimport { PreparedQuery } from \"./util/prepared-query.ts\";\r\nimport { processAuthVars } from \"./util/process-auth-vars.ts\";\r\nimport { versionCheck } from \"./util/version-check.ts\";\r\n\r\nimport {\r\n\ttype AccessRecordAuth,\r\n\ttype ActionResult,\r\n\ttype AnyAuth,\r\n\ttype ExportOptions,\r\n\ttype LiveHandler,\r\n\ttype MapQueryResult,\r\n\ttype Patch,\r\n\ttype Prettify,\r\n\ttype QueryParameters,\r\n\ttype RpcResponse,\r\n\ttype ScopeAuth,\r\n\ttype Token,\r\n\tconvertAuth,\r\n} from \"./types.ts\";\r\n\r\nimport { type Fill, partiallyEncodeObject } from \"./cbor\";\r\nimport { replacer } from \"./data/cbor.ts\";\r\nimport type { RecordIdRange } from \"./data/types/range.ts\";\r\nimport { HttpEngine } from \"./engines/http.ts\";\r\nimport { WebsocketEngine } from \"./engines/ws.ts\";\r\nimport {\r\n\tEngineDisconnected,\r\n\tNoActiveSocket,\r\n\tNoTokenReturned,\r\n\tResponseError,\r\n\tSurrealDbError,\r\n\tUnsupportedEngine,\r\n} from \"./errors.ts\";\r\n\r\ntype R = Prettify<Record<string, unknown>>;\r\ntype RecordId<Tb extends string = string> = _RecordId<Tb> | StringRecordId;\r\n\r\nexport class Surreal {\r\n\tpublic connection: AbstractEngine | undefined;\r\n\tready?: Promise<void>;\r\n\temitter: Emitter<EngineEvents>;\r\n\tprotected engines: Engines = {\r\n\t\tws: WebsocketEngine,\r\n\t\twss: WebsocketEngine,\r\n\t\thttp: HttpEngine,\r\n\t\thttps: HttpEngine,\r\n\t};\r\n\r\n\tconstructor({\r\n\t\tengines,\r\n\t}: {\r\n\t\tengines?: Engines;\r\n\t} = {}) {\r\n\t\tthis.emitter = new Emitter();\r\n\t\tthis.emitter.subscribe(ConnectionStatus.Disconnected, () => this.clean());\r\n\t\tthis.emitter.subscribe(ConnectionStatus.Error, () => this.close());\r\n\r\n\t\tif (engines) {\r\n\t\t\tthis.engines = {\r\n\t\t\t\t...this.engines,\r\n\t\t\t\t...engines,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Establish a socket connection to the database\r\n\t * @param connection - Connection details\r\n\t */\r\n\tasync connect(\r\n\t\turl: string | URL,\r\n\t\topts: {\r\n\t\t\tnamespace?: string;\r\n\t\t\tdatabase?: string;\r\n\t\t\tauth?: AnyAuth | Token;\r\n\t\t\tprepare?: (connection: Surreal) => unknown;\r\n\t\t\tversionCheck?: boolean;\r\n\t\t\tversionCheckTimeout?: number;\r\n\t\t} = {},\r\n\t): Promise<true> {\r\n\t\t// biome-ignore lint/style/noParameterAssign: Need to ensure it's a URL\r\n\t\turl = new URL(url);\r\n\r\n\t\tif (!url.pathname.endsWith(\"/rpc\")) {\r\n\t\t\tif (!url.pathname.endsWith(\"/\")) url.pathname += \"/\";\r\n\t\t\turl.pathname += \"rpc\";\r\n\t\t}\r\n\r\n\t\tconst engineName = url.protocol.slice(0, -1);\r\n\t\tconst engine = this.engines[engineName];\r\n\t\tif (!engine) throw new UnsupportedEngine(engineName);\r\n\r\n\t\t// Process options\r\n\t\tconst { prepare, auth, namespace, database } = opts;\r\n\r\n\t\t// Close any existing connections\r\n\t\tawait this.close();\r\n\r\n\t\t// We need to pass CBOR encoding and decoding functions as an argument to engines,\r\n\t\t// to ensure that everything is using the same instance of classes that these methods depend on.\r\n\t\tconst context = new EngineContext({\r\n\t\t\temitter: this.emitter,\r\n\t\t\tencodeCbor,\r\n\t\t\tdecodeCbor,\r\n\t\t});\r\n\r\n\t\t// The promise does not know if `this.connection` is undefined or not, but it does about `connection`\r\n\t\tconst connection = new engine(context);\r\n\r\n\t\t// If not disabled, run a version check\r\n\t\tif (opts.versionCheck !== false) {\r\n\t\t\tconst version = await connection.version(url, opts.versionCheckTimeout);\r\n\t\t\tversionCheck(version);\r\n\t\t}\r\n\r\n\t\tthis.connection = connection;\r\n\t\tthis.ready = new Promise((resolve, reject) =>\r\n\t\t\tconnection\r\n\t\t\t\t.connect(url as URL)\r\n\t\t\t\t.then(async () => {\r\n\t\t\t\t\tif (namespace || database) {\r\n\t\t\t\t\t\tawait this.use({\r\n\t\t\t\t\t\t\tnamespace,\r\n\t\t\t\t\t\t\tdatabase,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (typeof auth === \"string\") {\r\n\t\t\t\t\t\tawait this.authenticate(auth);\r\n\t\t\t\t\t} else if (auth) {\r\n\t\t\t\t\t\tawait this.signin(auth);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tawait prepare?.(this);\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(reject),\r\n\t\t);\r\n\r\n\t\tawait this.ready;\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Disconnect the socket to the database\r\n\t */\r\n\tasync close(): Promise<true> {\r\n\t\tthis.clean();\r\n\t\tawait this.connection?.disconnect();\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprivate clean() {\r\n\t\t// Scan all pending rpc requests\r\n\t\tconst pending = this.emitter.scanListeners((k) => k.startsWith(\"rpc-\"));\r\n\t\t// Ensure all rpc requests get a connection closed response\r\n\t\tpending.map((k) => this.emitter.emit(k, [new EngineDisconnected()]));\r\n\r\n\t\t// Scan all active live listeners\r\n\t\tconst live = this.emitter.scanListeners((k) => k.startsWith(\"live-\"));\r\n\t\t// Ensure all live listeners get a CLOSE message with disconnected as reason\r\n\t\tlive.map((k) => this.emitter.emit(k, [\"CLOSE\", \"disconnected\"]));\r\n\r\n\t\t// Cleanup subscriptions and yet to be collected emisions\r\n\t\tthis.emitter.reset({\r\n\t\t\tcollectable: true,\r\n\t\t\tlisteners: [...pending, ...live],\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Check if connection is ready\r\n\t */\r\n\tget status(): ConnectionStatus {\r\n\t\treturn this.connection?.status ?? ConnectionStatus.Disconnected;\r\n\t}\r\n\r\n\t/**\r\n\t * Ping SurrealDB instance\r\n\t */\r\n\tasync ping(): Promise<true> {\r\n\t\tconst { error } = await this.rpc(\"ping\");\r\n\t\tif (error) throw new ResponseError(error.message);\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Switch to a specific namespace and database.\r\n\t * @param database - Switches to a specific namespace.\r\n\t * @param db - Switches to a specific database.\r\n\t */\r\n\tasync use({\r\n\t\tnamespace,\r\n\t\tdatabase,\r\n\t}: {\r\n\t\tnamespace?: string | null;\r\n\t\tdatabase?: string | null;\r\n\t}): Promise<true> {\r\n\t\tif (!this.connection) throw new NoActiveSocket();\r\n\r\n\t\tif (namespace === null && database !== null)\r\n\t\t\tthrow new SurrealDbError(\r\n\t\t\t\t\"Cannot unset namespace without unsetting database\",\r\n\t\t\t);\r\n\t\tconst { error } = await this.rpc(\"use\", [namespace, database]);\r\n\t\tif (error) throw new ResponseError(error.message);\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Selects everything from the [$auth](https://surrealdb.com/docs/surrealql/parameters) variable.\r\n\t * ```sql\r\n\t * SELECT * FROM $auth;\r\n\t * ```\r\n\t * Make sure the user actually has the permission to select their own record, otherwise you'll get back an empty result.\r\n\t * @return The record linked to the record ID used for authentication\r\n\t */\r\n\tasync info<T extends R>(): Promise<ActionResult<T> | undefined> {\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc<ActionResult<T> | undefined>(\"info\");\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn res.result ?? undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Signs up to a specific authentication scope.\r\n\t * @param vars - Variables used in a signup query.\r\n\t * @return The authentication token.\r\n\t */\r\n\tasync signup(vars: ScopeAuth | AccessRecordAuth): Promise<Token> {\r\n\t\tif (!this.connection) throw new NoActiveSocket();\r\n\r\n\t\tconst parsed = processAuthVars(vars, this.connection.connection);\r\n\t\tconst converted = convertAuth(parsed);\r\n\t\tconst res = await this.rpc<Token>(\"signup\", [converted]);\r\n\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\tif (!res.result) {\r\n\t\t\tthrow new NoTokenReturned();\r\n\t\t}\r\n\r\n\t\treturn res.result;\r\n\t}\r\n\r\n\t/**\r\n\t * Signs in to a specific authentication scope.\r\n\t * @param vars - Variables used in a signin query.\r\n\t * @return The authentication token.\r\n\t */\r\n\tasync signin(vars: AnyAuth): Promise<Token> {\r\n\t\tif (!this.connection) throw new NoActiveSocket();\r\n\r\n\t\tconst parsed = processAuthVars(vars, this.connection.connection);\r\n\t\tconst converted = convertAuth(parsed);\r\n\t\tconst res = await this.rpc<Token>(\"signin\", [converted]);\r\n\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\tif (!res.result) {\r\n\t\t\tthrow new NoTokenReturned();\r\n\t\t}\r\n\r\n\t\treturn res.result;\r\n\t}\r\n\r\n\t/**\r\n\t * Authenticates the current connection with a JWT token.\r\n\t * @param token - The JWT authentication token.\r\n\t */\r\n\tasync authenticate(token: Token): Promise<true> {\r\n\t\tconst res = await this.rpc<string>(\"authenticate\", [token]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Invalidates the authentication for the current connection.\r\n\t */\r\n\tasync invalidate(): Promise<true> {\r\n\t\tconst res = await this.rpc(\"invalidate\");\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Specify a variable for the current socket connection.\r\n\t * @param key - Specifies the name of the variable.\r\n\t * @param val - Assigns the value to the variable name.\r\n\t */\r\n\tasync let(variable: string, value: unknown): Promise<true> {\r\n\t\tconst res = await this.rpc(\"let\", [variable, value]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Remove a variable from the current socket connection.\r\n\t * @param key - Specifies the name of the variable.\r\n\t */\r\n\tasync unset(variable: string): Promise<true> {\r\n\t\tconst res = await this.rpc(\"unset\", [variable]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start a live select query and invoke the callback with responses\r\n\t * @param table - The table that you want to receive live results for.\r\n\t * @param callback - Callback function that receives updates.\r\n\t * @param diff - If set to true, will return a set of patches instead of complete records\r\n\t * @returns A unique subscription ID\r\n\t */\r\n\tasync live<\r\n\t\tResult extends Record<string, unknown> | Patch = Record<string, unknown>,\r\n\t>(\r\n\t\ttable: RecordIdRange | Table | string,\r\n\t\tcallback?: LiveHandler<Result>,\r\n\t\tdiff?: boolean,\r\n\t): Promise<Uuid> {\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc<Uuid>(\"live\", [table, diff]);\r\n\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\tif (callback) this.subscribeLive<Result>(res.result, callback);\r\n\r\n\t\treturn res.result;\r\n\t}\r\n\r\n\t/**\r\n\t * Subscribe to an existing live select query and invoke the callback with responses\r\n\t * @param queryUuid - The unique ID of an existing live query you want to receive updates for.\r\n\t * @param callback - Callback function that receives updates.\r\n\t */\r\n\tasync subscribeLive<\r\n\t\tResult extends Record<string, unknown> | Patch = Record<string, unknown>,\r\n\t>(queryUuid: Uuid, callback: LiveHandler<Result>): Promise<void> {\r\n\t\tawait this.ready;\r\n\t\tif (!this.connection) throw new NoActiveSocket();\r\n\t\tthis.connection.emitter.subscribe(\r\n\t\t\t`live-${queryUuid}`,\r\n\t\t\tcallback as LiveHandler,\r\n\t\t\ttrue,\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Unsubscribe a callback from a live select query\r\n\t * @param queryUuid - The unique ID of an existing live query you want to ubsubscribe from.\r\n\t * @param callback - The previously subscribed callback function.\r\n\t */\r\n\tasync unSubscribeLive<\r\n\t\tResult extends Record<string, unknown> | Patch = Record<string, unknown>,\r\n\t>(queryUuid: Uuid, callback: LiveHandler<Result>): Promise<void> {\r\n\t\tawait this.ready;\r\n\t\tif (!this.connection) throw new NoActiveSocket();\r\n\t\tthis.connection.emitter.unSubscribe(\r\n\t\t\t`live-${queryUuid}`,\r\n\t\t\tcallback as LiveHandler,\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Kill a live query\r\n\t * @param queryUuid - The query that you want to kill.\r\n\t */\r\n\tasync kill(queryUuid: Uuid | readonly Uuid[]): Promise<void> {\r\n\t\tawait this.ready;\r\n\t\tif (!this.connection) throw new NoActiveSocket();\r\n\t\tif (Array.isArray(queryUuid)) {\r\n\t\t\tawait Promise.all(queryUuid.map((u) => this.rpc(\"kill\", [u])));\r\n\t\t\tconst toBeKilled = queryUuid.map((u) => `live-${u}` as const);\r\n\t\t\ttoBeKilled.map((k) => this.emitter.emit(k, [\"CLOSE\", \"killed\"]));\r\n\t\t\tthis.connection.emitter.reset({\r\n\t\t\t\tcollectable: toBeKilled,\r\n\t\t\t\tlisteners: toBeKilled,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tawait this.rpc(\"kill\", [queryUuid]);\r\n\t\t\tthis.emitter.emit(`live-${queryUuid}`, [\"CLOSE\", \"killed\"]);\r\n\t\t\tthis.connection.emitter.reset({\r\n\t\t\t\tcollectable: `live-${queryUuid}`,\r\n\t\t\t\tlisteners: `live-${queryUuid}`,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Runs a set of SurrealQL statements against the database.\r\n\t * @param query - Specifies the SurrealQL statements.\r\n\t * @param bindings - Assigns variables which can be used in the query.\r\n\t */\r\n\tasync query<T extends unknown[]>(\r\n\t\t...args: QueryParameters\r\n\t): Promise<Prettify<T>> {\r\n\t\tconst raw = await this.queryRaw<T>(...args);\r\n\t\treturn raw.map(({ status, result }) => {\r\n\t\t\tif (status === \"ERR\") throw new ResponseError(result);\r\n\t\t\treturn result;\r\n\t\t}) as T;\r\n\t}\r\n\r\n\t/**\r\n\t * Runs a set of SurrealQL statements against the database.\r\n\t * @param query - Specifies the SurrealQL statements.\r\n\t * @param bindings - Assigns variables which can be used in the query.\r\n\t */\r\n\tasync queryRaw<T extends unknown[]>(\r\n\t\t...[q, b]: QueryParameters\r\n\t): Promise<Prettify<MapQueryResult<T>>> {\r\n\t\tconst params =\r\n\t\t\tq instanceof PreparedQuery\r\n\t\t\t\t? [\r\n\t\t\t\t\t\tq.query,\r\n\t\t\t\t\t\tpartiallyEncodeObject(q.bindings, {\r\n\t\t\t\t\t\t\tfills: b as Fill[],\r\n\t\t\t\t\t\t\treplacer: replacer.encode,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t]\r\n\t\t\t\t: [q, b];\r\n\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc<MapQueryResult<T>>(\"query\", params);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn res.result;\r\n\t}\r\n\r\n\t/**\r\n\t * Runs a set of SurrealQL statements against the database.\r\n\t * @param query - Specifies the SurrealQL statements.\r\n\t * @param bindings - Assigns variables which can be used in the query.\r\n\t * @deprecated Use `queryRaw` instead\r\n\t */\r\n\tasync query_raw<T extends unknown[]>(\r\n\t\t...args: QueryParameters\r\n\t): Promise<Prettify<MapQueryResult<T>>> {\r\n\t\treturn this.queryRaw<T>(...args);\r\n\t}\r\n\r\n\t/**\r\n\t * Selects all records in a table, or a specific record, from the database.\r\n\t * If you intend on sorting, filtering, or performing other operations on the data, it is recommended to use the `query` method instead.\r\n\t * @param thing - The table name or a record ID to select.\r\n\t */\r\n\tasync select<T extends R>(thing: RecordId): Promise<ActionResult<T>>;\r\n\tasync select<T extends R>(\r\n\t\tthing: RecordIdRange | Table | string,\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync select<T extends R>(thing: RecordId | RecordIdRange | Table | string) {\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc<ActionResult<T>>(\"select\", [thing]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn output(thing, res.result);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a record in the database.\r\n\t * @param thing - The table name or the specific record ID to create.\r\n\t * @param data - The document / record data to insert.\r\n\t */\r\n\tasync create<T extends R, U extends R = T>(\r\n\t\tthing: RecordId,\r\n\t\tdata?: U,\r\n\t): Promise<ActionResult<T>>;\r\n\tasync create<T extends R, U extends R = T>(\r\n\t\tthing: Table | string,\r\n\t\tdata?: U,\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync create<T extends R, U extends R = T>(\r\n\t\tthing: RecordId | Table | string,\r\n\t\tdata?: U,\r\n\t) {\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc<ActionResult<T>>(\"create\", [thing, data]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn output(thing, res.result);\r\n\t}\r\n\r\n\t/**\r\n\t * Inserts one or multiple records in the database.\r\n\t * @param table - The table name to insert into.\r\n\t * @param data - The document(s) / record(s) to insert.\r\n\t */\r\n\tasync insert<T extends R, U extends R = T>(\r\n\t\tdata?: U | U[],\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync insert<T extends R, U extends R = T>(\r\n\t\ttable: Table | string,\r\n\t\tdata?: U | U[],\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync insert<T extends R, U extends R = T>(\r\n\t\targ1: Table | string | U | U[],\r\n\t\targ2?: U | U[],\r\n\t) {\r\n\t\tawait this.ready;\r\n\t\tconst [table, data] =\r\n\t\t\ttypeof arg1 === \"string\" || arg1 instanceof Table\r\n\t\t\t\t? [arg1, arg2]\r\n\t\t\t\t: [undefined, arg1];\r\n\t\tconst res = await this.rpc<ActionResult<T>>(\"insert\", [table, data]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn res.result;\r\n\t}\r\n\r\n\t/**\r\n\t * Inserts one or multiple records in the database.\r\n\t * @param thing - The table name or the specific record ID to create.\r\n\t * @param data - The document(s) / record(s) to insert.\r\n\t */\r\n\tasync insertRelation<T extends R, U extends R = T>(\r\n\t\tdata?: U | U[],\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync insertRelation<T extends R, U extends R = T>(\r\n\t\ttable: Table | string,\r\n\t\tdata?: U | U[],\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync insertRelation<T extends R, U extends R = T>(\r\n\t\targ1: Table | string | U | U[],\r\n\t\targ2?: U | U[],\r\n\t) {\r\n\t\tawait this.ready;\r\n\t\tconst [table, data] =\r\n\t\t\ttypeof arg1 === \"string\" || arg1 instanceof Table\r\n\t\t\t\t? [arg1, arg2]\r\n\t\t\t\t: [undefined, arg1];\r\n\t\tconst res = await this.rpc<ActionResult<T>>(\"insert_relation\", [\r\n\t\t\ttable,\r\n\t\t\tdata,\r\n\t\t]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn res.result;\r\n\t}\r\n\r\n\t/**\r\n\t * Inserts one or multiple records in the database.\r\n\t * @param thing - The table name or the specific record ID to create.\r\n\t * @param data - The document(s) / record(s) to insert.\r\n\t * @deprecated Use `insertRelation` instead\r\n\t */\r\n\tasync insert_relation<T extends R, U extends R = T>(\r\n\t\tdata?: U | U[],\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync insert_relation<T extends R, U extends R = T>(\r\n\t\ttable: Table | string,\r\n\t\tdata?: U | U[],\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync insert_relation<T extends R, U extends R = T>(\r\n\t\targ1: Table | string | U | U[],\r\n\t\targ2?: U | U[],\r\n\t) {\r\n\t\treturn arg1 instanceof Table || typeof arg1 === \"string\"\r\n\t\t\t? this.insertRelation(arg1, arg2)\r\n\t\t\t: this.insertRelation(arg1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all records in a table, or a specific record, in the database.\r\n\t *\r\n\t * ***NOTE: This function replaces the current document / record data with the specified data.***\r\n\t * @param thing - The table name or the specific record ID to update.\r\n\t * @param data - The document / record data to insert.\r\n\t */\r\n\tasync update<T extends R, U extends R = T>(\r\n\t\tthing: RecordId,\r\n\t\tdata?: U,\r\n\t): Promise<ActionResult<T>>;\r\n\tasync update<T extends R, U extends R = T>(\r\n\t\tthing: RecordIdRange | Table | string,\r\n\t\tdata?: U,\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync update<T extends R, U extends R = T>(\r\n\t\tthing: RecordId | RecordIdRange | Table | string,\r\n\t\tdata?: U,\r\n\t) {\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc<ActionResult<T>>(\"update\", [thing, data]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn output(thing, res.result);\r\n\t}\r\n\r\n\t/**\r\n\t * Upserts all records in a table, or a specific record, in the database.\r\n\t *\r\n\t * ***NOTE: This function replaces the current document / record data with the specified data.***\r\n\t * @param thing - The table name or the specific record ID to upsert.\r\n\t * @param data - The document / record data to insert.\r\n\t */\r\n\tasync upsert<T extends R, U extends R = T>(\r\n\t\tthing: RecordId,\r\n\t\tdata?: U,\r\n\t): Promise<ActionResult<T>>;\r\n\tasync upsert<T extends R, U extends R = T>(\r\n\t\tthing: RecordIdRange | Table | string,\r\n\t\tdata?: U,\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync upsert<T extends R, U extends R = T>(\r\n\t\tthing: RecordId | RecordIdRange | Table | string,\r\n\t\tdata?: U,\r\n\t) {\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc<ActionResult<T>>(\"upsert\", [thing, data]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn output(thing, res.result);\r\n\t}\r\n\r\n\t/**\r\n\t * Modifies all records in a table, or a specific record, in the database.\r\n\t *\r\n\t * ***NOTE: This function merges the current document / record data with the specified data.***\r\n\t * @param thing - The table name or the specific record ID to change.\r\n\t * @param data - The document / record data to insert.\r\n\t */\r\n\tasync merge<T extends R, U extends R = Partial<T>>(\r\n\t\tthing: RecordId,\r\n\t\tdata?: U,\r\n\t): Promise<ActionResult<T>>;\r\n\tasync merge<T extends R, U extends R = Partial<T>>(\r\n\t\tthing: RecordIdRange | Table | string,\r\n\t\tdata?: U,\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync merge<T extends R, U extends R = Partial<T>>(\r\n\t\tthing: RecordId | RecordIdRange | Table | string,\r\n\t\tdata?: U,\r\n\t) {\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc<ActionResult<T>>(\"merge\", [thing, data]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn output(thing, res.result);\r\n\t}\r\n\r\n\t/**\r\n\t * Applies JSON Patch changes to all records, or a specific record, in the database.\r\n\t *\r\n\t * ***NOTE: This function patches the current document / record data with the specified JSON Patch data.***\r\n\t * @param thing - The table name or the specific record ID to modify.\r\n\t * @param data - The JSON Patch data with which to modify the records.\r\n\t */\r\n\tasync patch<T extends R>(\r\n\t\tthing: RecordId,\r\n\t\tdata?: Patch[],\r\n\t\tdiff?: false,\r\n\t): Promise<ActionResult<T>>;\r\n\tasync patch<T extends R>(\r\n\t\tthing: RecordIdRange | Table | string,\r\n\t\tdata?: Patch[],\r\n\t\tdiff?: false,\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync patch<T extends R>(\r\n\t\tthing: RecordId,\r\n\t\tdata: undefined | Patch[],\r\n\t\tdiff: true,\r\n\t): Promise<Patch[]>;\r\n\tasync patch<T extends R>(\r\n\t\tthing: RecordIdRange | Table | string,\r\n\t\tdata: undefined | Patch[],\r\n\t\tdiff: true,\r\n\t): Promise<Patch[][]>;\r\n\tasync patch(\r\n\t\tthing: RecordId | RecordIdRange | Table | string,\r\n\t\tdata?: Patch[],\r\n\t\tdiff?: boolean,\r\n\t) {\r\n\t\tawait this.ready;\r\n\r\n\t\t// biome-ignore lint/suspicious/noExplicitAny: Cannot assume type here due to function overload\r\n\t\tconst res = await this.rpc<any>(\"patch\", [thing, data, diff]);\r\n\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn diff ? res.result : output(thing, res.result);\r\n\t}\r\n\r\n\t/**\r\n\t * Deletes all records in a table, or a specific record, from the database.\r\n\t * @param thing - The table name or a record ID to select.\r\n\t */\r\n\tasync delete<T extends R>(thing: RecordId): Promise<ActionResult<T>>;\r\n\tasync delete<T extends R>(\r\n\t\tthing: RecordIdRange | Table | string,\r\n\t): Promise<ActionResult<T>[]>;\r\n\tasync delete<T extends R>(thing: RecordId | RecordIdRange | Table | string) {\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc<ActionResult<T>>(\"delete\", [thing]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn output(thing, res.result);\r\n\t}\r\n\r\n\t/**\r\n\t * Obtain the version of the SurrealDB instance\r\n\t * @example `surrealdb-2.1.0`\r\n\t */\r\n\tasync version(): Promise<string> {\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc<string>(\"version\");\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn res.result;\r\n\t}\r\n\r\n\t/**\r\n\t * Run a SurrealQL function\r\n\t * @param name - The full name of the function\r\n\t * @param args - The arguments supplied to the function. You can also supply a version here as a string, in which case the third argument becomes the parameter list.\r\n\t */\r\n\tasync run<T>(name: string, args?: unknown[]): Promise<T>;\r\n\t/**\r\n\t * Run a SurrealQL function\r\n\t * @param name - The full name of the function\r\n\t * @param version - The version of the function. If omitted, the second argument is the parameter list.\r\n\t * @param args - The arguments supplied to the function.\r\n\t */\r\n\tasync run<T>(name: string, version: string, args?: unknown[]): Promise<T>;\r\n\tasync run(name: string, arg2?: string | unknown[], arg3?: unknown[]) {\r\n\t\tawait this.ready;\r\n\t\tconst [version, args] = Array.isArray(arg2)\r\n\t\t\t? [undefined, arg2]\r\n\t\t\t: [arg2, arg3];\r\n\r\n\t\tconst res = await this.rpc(\"run\", [name, version, args]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn res.result;\r\n\t}\r\n\r\n\t/**\r\n\t * Obtain the version of the SurrealDB instance\r\n\t * @param from - The in property on the edge record\r\n\t * @param thing - The id of the edge record\r\n\t * @param to - The out property on the edge record\r\n\t * @param data - Optionally, provide a body for the edge record\r\n\t */\r\n\tasync relate<T extends R, U extends R = T>(\r\n\t\tfrom: string | RecordId | RecordId[],\r\n\t\tthing: RecordId,\r\n\t\tto: string | RecordId | RecordId[],\r\n\t\tdata?: U,\r\n\t): Promise<T>;\r\n\tasync relate<T extends R, U extends R = T>(\r\n\t\tfrom: string | RecordId | RecordId[],\r\n\t\tthing: string,\r\n\t\tto: string | RecordId | RecordId[],\r\n\t\tdata?: U,\r\n\t): Promise<T[]>;\r\n\tasync relate<T extends R, U extends R = T>(\r\n\t\tfrom: string | RecordId | RecordId[],\r\n\t\tthing: string | RecordId,\r\n\t\tto: string | RecordId | RecordId[],\r\n\t\tdata?: U,\r\n\t) {\r\n\t\tawait this.ready;\r\n\t\tconst res = await this.rpc(\"relate\", [from, thing, to, data]);\r\n\t\tif (res.error) throw new ResponseError(res.error.message);\r\n\t\treturn output(thing, res.result);\r\n\t}\r\n\r\n\t/**\r\n\t * Send a raw message to the SurrealDB instance\r\n\t * @param method - Type of message to send.\r\n\t * @param params - Parameters for the message.\r\n\t */\r\n\tpublic rpc<Result>(\r\n\t\tmethod: string,\r\n\t\tparams?: unknown[],\r\n\t): Promise<RpcResponse<Result>> {\r\n\t\tif (!this.connection) throw new NoActiveSocket();\r\n\t\treturn this.connection.rpc<typeof method, typeof params, Result>({\r\n\t\t\tmethod,\r\n\t\t\tparams,\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Export the database and return the result as a string\r\n\t * @param options - Export configuration options\r\n\t */\r\n\tpublic async export(options?: Partial<ExportOptions>): Promise<string> {\r\n\t\tawait this.ready;\r\n\t\tif (!this.connection) throw new NoActiveSocket();\r\n\t\treturn this.connection.export(options);\r\n\t}\r\n}\r\n\r\ntype Output<T, S> = S extends RecordId ? T : T[];\r\nfunction output<T, S>(subject: S, input: T | T[]): Output<T, S> {\r\n\tconst one = subject instanceof _RecordId || subject instanceof StringRecordId;\r\n\tif (one) return (Array.isArray(input) ? input[0] : input) as Output<T, S>;\r\n\treturn (Array.isArray(input) ? input : [input]) as Output<T, S>;\r\n}\r\n"],
  "mappings": "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",
  "names": ["replacer", "replacer", "input", "s", "f", "r", "r", "arr", "decode", "s", "s", "id", "output", "output", "textEncoder", "f", "id", "message", "fetch", "id", "fetch", "version", "ConnectionStatus", "encodeCbor", "decodeCbor", "r", "id", "WebSocket", "WebSocket", "id", "u"]
}
