{"version":3,"file":"index.mjs","sources":["../../../@hive/disk-storage/dist/index.mjs"],"sourcesContent":["import { createWriteStream } from \"node:fs\";\nimport { access, constants, copyFile, mkdir, readFile, readdir, rename, rm, stat, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { Database } from \"@hive/sdk/database\";\nimport { ResourceExistsError, ResourceNotFoundError } from \"@hive/sdk/errors\";\nimport { ResourceGetContentsEvent, ResourceGetMetadataEvent, ResourceSetContentsEvent, ResourceTransactionEvent, StorageCreateEvent, StorageDeleteEvent, StorageFreeEvent, StorageGetEvent, StorageHasEvent, StorageListEvent, StorageStartEvent, StorageStopEvent } from \"@hive/sdk/events\";\nimport { formatBytes, formatDuration } from \"@hive/sdk/format\";\nimport { Namespace } from \"@hive/sdk/namespace\";\nimport { Operation } from \"@hive/sdk/operation\";\nimport { Selector } from \"@hive/sdk/selector\";\nimport { SQLITE_FIXTURE } from \"@hive/sdk/sqlite\";\nimport { Storage } from \"@hive/sdk/storage\";\nimport { isWrite } from \"@hive/sdk/transaction\";\nimport { ByteStream, binaryToByteStream, trackProgress } from \"@hive/streams\";\n\n//#region src/index.ts\nconst exists = (path) => access(path, constants.F_OK).then(() => true).catch(() => false);\nvar DiskStorage = class DiskStorage extends Storage {\n\tstatic name = \"disk-storage\";\n\t/**\n\t* Absolute path to the directory in which to persist state.\n\t*/\n\tdir;\n\t/**\n\t* Runtime-specific implementation of SQLite.\n\t*/\n\tdriver = null;\n\t/**\n\t* EventEmitter instance to use for emitting events.\n\t*/\n\tevents = null;\n\t/**\n\t* Logger instance to use for logging.\n\t*/\n\tlogger = null;\n\t/**\n\t* Map containing all pending operations per Resource.\n\t*/\n\tpending = new Map();\n\t/**\n\t* Map keeping references to open Resources, their `Connection` (or `null` for\n\t* Namespaces) and their Metadata.\n\t*/\n\tcache = new Map();\n\tconstructor(config) {\n\t\tsuper();\n\t\tthis.dir = resolve(config.dir);\n\t}\n\tasync start(opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageStartEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tif (!opts.driver) throw new Error(\"A Driver instance is required by the DiskStorage. Please provide it when initializing the Hive instance.\");\n\t\tif (!opts.events) throw new Error(\"An EventEmitter instance is required by the DiskStorage. Please provide it when initializing the Hive instance.\");\n\t\tthis.driver = opts.driver;\n\t\tthis.events = opts.events;\n\t\tthis.logger = opts.logger ?? null;\n\t\tawait exists(this.dir).then((exists$1) => {\n\t\t\tconst operation$1 = new Operation({ trace });\n\t\t\tif (!exists$1) return mkdir(this.dir, { recursive: true }).then(() => {\n\t\t\t\tthis.logger?.info(\"prepared directory\", {\n\t\t\t\t\tmodule: DiskStorage.name,\n\t\t\t\t\ttrace,\n\t\t\t\t\tdur: formatDuration(operation$1.duration),\n\t\t\t\t\tpath: this.dir\n\t\t\t\t});\n\t\t\t});\n\t\t}).catch((err) => {\n\t\t\tconst error = new Error(`Unable to access or prepare configured directory \\`${this.dir}\\`: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\tthrow error;\n\t\t});\n\t\tthis.logger?.info(\"initialized storage instance\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\tif (emit) this.events?.emit(StorageStartEvent.type, new StorageStartEvent({ trace }));\n\t\treturn this;\n\t}\n\tasync stop(opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageStopEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tawait Promise.all(this.pending.values());\n\t\tfor (const { resource } of this.cache.values()) await this.free(resource, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t});\n\t\tthis.logger?.info(\"closed storage instance\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\tif (emit) this.events?.emit(StorageStopEvent.type, new StorageStopEvent({ trace }));\n\t\treturn this;\n\t}\n\tasync create(selector, opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst checkParent = opts?.checkParent ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageCreateEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tif (selector.parent && !await this.has(selector.parent, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t}) && checkParent) throw new ResourceNotFoundError(selector.parent);\n\t\tif (await this.has(selector, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t})) throw new ResourceExistsError(selector);\n\t\tconst dir = resolve(this.dir, selector.path);\n\t\tawait mkdir(dir, { recursive: true });\n\t\tswitch (selector.type) {\n\t\t\tcase \"database\":\n\t\t\tcase \"snapshot\":\n\t\t\tcase \"branch\": {\n\t\t\t\tconst contents = opts?.contents ?? SQLITE_FIXTURE;\n\t\t\t\tswitch (true) {\n\t\t\t\t\tcase contents instanceof ByteStream: {\n\t\t\t\t\t\tconst metadata = {\n\t\t\t\t\t\t\tkey: selector.key,\n\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\tparent: selector.parent?.key ?? null,\n\t\t\t\t\t\t\tsize: contents.length,\n\t\t\t\t\t\t\tindexedAt: new Date(),\n\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\tmodifiedAt: null\n\t\t\t\t\t\t};\n\t\t\t\t\t\tawait Promise.all([await writeFile(resolve(dir, \"db.sqlite\"), new Uint8Array()).then(() => {\n\t\t\t\t\t\t\tconst writer = createWriteStream(resolve(dir, \"db.sqlite\"));\n\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(contents.stream), writer);\n\t\t\t\t\t\t}), await writeFile(resolve(dir, \"metadata.json\"), JSON.stringify(metadata))]);\n\t\t\t\t\t\tconst resource = selector instanceof Database ? selector : new Database({\n\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t});\n\t\t\t\t\t\tresource.storage = this;\n\t\t\t\t\t\tthis.cache.set(selector.key, {\n\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\tconnection: await this.driver.open(resolve(dir, \"db.sqlite\"), { trace })\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.logger?.info(\"created resource\", {\n\t\t\t\t\t\t\tmodule: DiskStorage.name,\n\t\t\t\t\t\t\ttrace,\n\t\t\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (emit) this.events?.emit(StorageCreateEvent.type, new StorageCreateEvent({\n\t\t\t\t\t\t\ttrace,\n\t\t\t\t\t\t\tresource\n\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\tmetadata\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tcase contents instanceof Uint8Array: {\n\t\t\t\t\t\tconst metadata = {\n\t\t\t\t\t\t\tkey: selector.key,\n\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\tparent: selector.parent?.key ?? null,\n\t\t\t\t\t\t\tsize: contents.length,\n\t\t\t\t\t\t\tindexedAt: new Date(),\n\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\tmodifiedAt: null\n\t\t\t\t\t\t};\n\t\t\t\t\t\tawait Promise.all([await writeFile(resolve(dir, \"db.sqlite\"), contents), await writeFile(resolve(dir, \"metadata.json\"), JSON.stringify(metadata))]);\n\t\t\t\t\t\tconst resource = selector instanceof Database ? selector : new Database({\n\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t});\n\t\t\t\t\t\tresource.storage = this;\n\t\t\t\t\t\tthis.cache.set(selector.key, {\n\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\tconnection: await this.driver.open(resolve(dir, \"db.sqlite\"), { trace })\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.logger?.info(\"created resource\", {\n\t\t\t\t\t\t\tmodule: DiskStorage.name,\n\t\t\t\t\t\t\ttrace,\n\t\t\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (emit) this.events?.emit(StorageCreateEvent.type, new StorageCreateEvent({\n\t\t\t\t\t\t\ttrace,\n\t\t\t\t\t\t\tresource\n\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\tmetadata\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tcase contents instanceof Selector: {\n\t\t\t\t\t\tconst source = await this.getContents(contents, {\n\t\t\t\t\t\t\ttrace,\n\t\t\t\t\t\t\temit: false\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst metadata = {\n\t\t\t\t\t\t\tkey: selector.key,\n\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\tparent: selector.parent?.key ?? null,\n\t\t\t\t\t\t\tsize: source.contents.length,\n\t\t\t\t\t\t\tindexedAt: new Date(),\n\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\tmodifiedAt: null\n\t\t\t\t\t\t};\n\t\t\t\t\t\tawait Promise.all([await writeFile(resolve(dir, \"db.sqlite\"), new Uint8Array()).then(() => {\n\t\t\t\t\t\t\tconst writer = createWriteStream(resolve(dir, \"db.sqlite\"));\n\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(source.contents.stream), writer);\n\t\t\t\t\t\t}), await writeFile(resolve(dir, \"metadata.json\"), JSON.stringify(metadata))]);\n\t\t\t\t\t\tconst resource = selector instanceof Database ? selector : new Database({\n\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t});\n\t\t\t\t\t\tresource.storage = this;\n\t\t\t\t\t\tthis.cache.set(selector.key, {\n\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\tconnection: await this.driver.open(resolve(dir, \"db.sqlite\"), { trace })\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.logger?.info(\"created resource\", {\n\t\t\t\t\t\t\tmodule: DiskStorage.name,\n\t\t\t\t\t\t\ttrace,\n\t\t\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (emit) this.events?.emit(StorageCreateEvent.type, new StorageCreateEvent({\n\t\t\t\t\t\t\ttrace,\n\t\t\t\t\t\t\tresource\n\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\tmetadata\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tdefault: throw new Error(\"Contents must be provided either as `ByteStream`, `Uint8Array`, or `Selector`\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase \"namespace\": {\n\t\t\t\tconst metadata = {\n\t\t\t\t\tkey: selector.key,\n\t\t\t\t\ttype: selector.type,\n\t\t\t\t\tparent: selector.parent?.key ?? null,\n\t\t\t\t\tindexedAt: new Date(),\n\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\tmodifiedAt: null\n\t\t\t\t};\n\t\t\t\tawait writeFile(resolve(dir, \"metadata.json\"), JSON.stringify(metadata));\n\t\t\t\tconst resource = selector instanceof Namespace ? selector : new Namespace({\n\t\t\t\t\tid: selector.id,\n\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\tstorage: this\n\t\t\t\t});\n\t\t\t\tresource.storage = this;\n\t\t\t\tthis.cache.set(selector.key, {\n\t\t\t\t\tresource,\n\t\t\t\t\tmetadata,\n\t\t\t\t\tconnection: null\n\t\t\t\t});\n\t\t\t\tthis.logger?.info(\"created resource\", {\n\t\t\t\t\tmodule: DiskStorage.name,\n\t\t\t\t\ttrace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tif (emit) this.events?.emit(StorageCreateEvent.type, new StorageCreateEvent({\n\t\t\t\t\ttrace,\n\t\t\t\t\tresource\n\t\t\t\t}));\n\t\t\t\treturn {\n\t\t\t\t\tresource,\n\t\t\t\t\tmetadata\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\tasync list(opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageListEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tconst parent = opts?.parent;\n\t\tif (parent && !await this.has(parent, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t})) throw new ResourceNotFoundError(parent);\n\t\tconst results = [];\n\t\tconst scan = async (dir$1) => readdir(dir$1, { withFileTypes: true }).then((contents) => contents.filter((c) => c.isDirectory()).map((dir$2) => dir$2.name));\n\t\tconst dir = parent ? resolve(this.dir, parent.path) : this.dir;\n\t\tif (!await exists(dir)) {\n\t\t\tif (parent) throw new ResourceNotFoundError(parent);\n\t\t\tthrow new Error(`Root directory \\`${dir}\\` does not exist`);\n\t\t}\n\t\tfor (const { segment, type } of !parent || parent.type === \"namespace\" ? [{\n\t\t\tsegment: \"namespaces\",\n\t\t\ttype: \"namespace\"\n\t\t}, {\n\t\t\tsegment: \"databases\",\n\t\t\ttype: \"database\"\n\t\t}] : [{\n\t\t\tsegment: \"snapshots\",\n\t\t\ttype: \"snapshot\"\n\t\t}, {\n\t\t\tsegment: \"branches\",\n\t\t\ttype: \"branch\"\n\t\t}]) {\n\t\t\tconst dir$1 = parent ? `${parent.path}/${segment}/` : `${segment}/`;\n\t\t\tif (!await exists(resolve(this.dir, dir$1))) continue;\n\t\t\tconst resources = await scan(resolve(this.dir, dir$1));\n\t\t\tfor (const id of resources) {\n\t\t\t\tconst selector = new Selector({\n\t\t\t\t\ttype,\n\t\t\t\t\tid,\n\t\t\t\t\tparent\n\t\t\t\t});\n\t\t\t\tif (await this.has(selector, {\n\t\t\t\t\ttrace,\n\t\t\t\t\temit: false\n\t\t\t\t})) {\n\t\t\t\t\tconst cached = this.cache.get(selector.key);\n\t\t\t\t\tif (cached) results.push(cached.metadata);\n\t\t\t\t\telse results.push(await this.getMetadata(selector, {\n\t\t\t\t\t\ttrace,\n\t\t\t\t\t\temit: false\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.logger?.info(\"listed resources\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration),\n\t\t\tparent: parent?.key ?? null,\n\t\t\tresults: results.length.toString()\n\t\t});\n\t\tif (emit) this.events?.emit(StorageListEvent.type, new StorageListEvent({\n\t\t\ttrace,\n\t\t\tparent: parent ?? null,\n\t\t\tresults: results.length\n\t\t}));\n\t\treturn results;\n\t}\n\tasync has(selector, opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageHasEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tconst res = selector.type === \"namespace\" ? this.cache.has(selector.key) || await exists(resolve(this.dir, selector.path, \"metadata.json\")) : this.cache.has(selector.key) || await exists(resolve(this.dir, selector.path, \"db.sqlite\"));\n\t\tthis.logger?.info(\"checked resource\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\tif (emit) this.events?.emit(StorageHasEvent.type, new StorageHasEvent({\n\t\t\ttrace,\n\t\t\tresource: selector\n\t\t}));\n\t\treturn res;\n\t}\n\tasync get(selector, opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageGetEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tif (!await this.has(selector, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t})) throw new ResourceNotFoundError(selector);\n\t\tconst cached = this.cache.get(selector.key);\n\t\tif (cached) {\n\t\t\tthis.logger?.info(\"retrieved resource\", {\n\t\t\t\tmodule: DiskStorage.name,\n\t\t\t\tresource: selector.key,\n\t\t\t\ttrace,\n\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t});\n\t\t\tif (emit) this.events?.emit(StorageGetEvent.type, new StorageGetEvent({\n\t\t\t\ttrace,\n\t\t\t\tresource: selector\n\t\t\t}));\n\t\t\treturn {\n\t\t\t\tresource: cached.resource,\n\t\t\t\tmetadata: cached.metadata\n\t\t\t};\n\t\t}\n\t\tconst resource = selector instanceof Namespace ? selector : selector.type === \"namespace\" ? new Namespace({\n\t\t\tid: selector.id,\n\t\t\tparent: selector.parent,\n\t\t\tstorage: this\n\t\t}) : selector instanceof Database ? selector : new Database({\n\t\t\ttype: selector.type,\n\t\t\tid: selector.id,\n\t\t\tparent: selector.parent,\n\t\t\tstorage: this\n\t\t});\n\t\tresource.storage = this;\n\t\tthis.logger?.info(\"retrieved resource\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\tif (emit) this.events?.emit(StorageGetEvent.type, new StorageGetEvent({\n\t\t\ttrace,\n\t\t\tresource: selector\n\t\t}));\n\t\tconst metadata = await this.getMetadata(selector, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t});\n\t\tif (selector.type === \"namespace\") this.cache.set(selector.key, {\n\t\t\tresource,\n\t\t\tmetadata,\n\t\t\tconnection: null\n\t\t});\n\t\telse this.cache.set(selector.key, {\n\t\t\tresource,\n\t\t\tmetadata,\n\t\t\tconnection: await this.driver.open(resolve(this.dir, selector.path, \"db.sqlite\"), { trace })\n\t\t});\n\t\treturn {\n\t\t\tresource,\n\t\t\tmetadata\n\t\t};\n\t}\n\tasync getMetadata(selector, opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: ResourceGetMetadataEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tif (!await this.has(selector, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t})) throw new ResourceNotFoundError(selector);\n\t\tconst cached = this.cache.get(selector.key);\n\t\tconst metadata = cached ? cached.metadata : await readFile(resolve(this.dir, selector.path, \"metadata.json\"), \"utf-8\").then((metadata$1) => JSON.parse(metadata$1)).then((metadata$1) => ({\n\t\t\t...metadata$1,\n\t\t\tindexedAt: new Date(metadata$1.indexedAt),\n\t\t\tcreatedAt: metadata$1.createdAt ? new Date(metadata$1.createdAt) : null,\n\t\t\tmodifiedAt: metadata$1.modifiedAt ? new Date(metadata$1.modifiedAt) : null\n\t\t}));\n\t\tthis.logger?.info(\"retrieved resource metadata\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\tif (emit) this.events?.emit(ResourceGetMetadataEvent.type, new ResourceGetMetadataEvent({\n\t\t\ttrace,\n\t\t\tresource: selector\n\t\t}));\n\t\treturn metadata;\n\t}\n\tasync getContents(selector, opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: ResourceGetContentsEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tif (!await this.has(selector, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t})) throw new ResourceNotFoundError(selector);\n\t\tconst contents = await this.cache.get(selector.key)?.connection?.getContents() ?? await readFile(resolve(this.dir, selector.path, \"db.sqlite\")).then((contents$1) => binaryToByteStream(new Uint8Array(contents$1)));\n\t\tconst metadata = await this.getMetadata(selector, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t});\n\t\tthis.logger?.info(\"retrieved resource contents\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration),\n\t\t\tsize: contents.length.toString()\n\t\t});\n\t\tif (emit) this.events?.emit(ResourceGetContentsEvent.type, new ResourceGetContentsEvent({\n\t\t\ttrace,\n\t\t\tresource: selector\n\t\t}));\n\t\treturn {\n\t\t\tcontents,\n\t\t\tmetadata\n\t\t};\n\t}\n\tasync setContents(selector, contents, opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: ResourceSetContentsEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tif (!await this.has(selector, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t})) throw new ResourceNotFoundError(selector);\n\t\tconst tmp = crypto.randomUUID();\n\t\tconst tmpFile = resolve(this.dir, selector.path, `${tmp}.tmp`);\n\t\tawait Promise.all(this.pending.get(selector.key) ?? []);\n\t\tconst cached = this.cache.get(selector.key);\n\t\tif (cached?.connection) {\n\t\t\tawait cached.connection.close();\n\t\t\tcached.connection = null;\n\t\t}\n\t\tconst dir = resolve(this.dir, selector.path);\n\t\tconst path = resolve(dir, \"db.sqlite\");\n\t\tswitch (true) {\n\t\t\tcase contents instanceof ByteStream: {\n\t\t\t\tawait writeFile(tmpFile, new Uint8Array());\n\t\t\t\tconst writer = createWriteStream(tmpFile);\n\t\t\t\tconst stream = trackProgress(contents, { progress: ({ processed, total, percent, duration, eta }) => {\n\t\t\t\t\tthis.logger?.debug(`writing to disk (${formatBytes(processed)}/${formatBytes(total)}, ${percent.toFixed(2)}%${eta ? `, ${formatDuration(eta)} remaining` : \"\"})`, {\n\t\t\t\t\t\tmodule: DiskStorage.name,\n\t\t\t\t\t\tresource: selector.key,\n\t\t\t\t\t\ttrace,\n\t\t\t\t\t\tdur: formatDuration(duration),\n\t\t\t\t\t\tprocessed: processed.toString(),\n\t\t\t\t\t\ttotal: total.toString(),\n\t\t\t\t\t\tpercent: percent.toFixed(2)\n\t\t\t\t\t});\n\t\t\t\t} });\n\t\t\t\tawait pipeline(Readable.fromWeb(stream.stream), writer);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase contents instanceof Uint8Array: {\n\t\t\t\tawait writeFile(tmpFile, contents);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase contents instanceof Selector: {\n\t\t\t\tconst sourcePath = resolve(this.dir, contents.path, \"db.sqlite\");\n\t\t\t\tif (!await exists(sourcePath)) throw new ResourceNotFoundError(contents);\n\t\t\t\tawait copyFile(sourcePath, tmpFile);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: throw new Error(\"Contents must be provided either as `ByteStream`, `Uint8Array`, or `Selector`\");\n\t\t}\n\t\tawait Promise.all([\n\t\t\trm(path),\n\t\t\trm(`${path}-wal`).catch(() => {}),\n\t\t\trm(`${path}-shm`).catch(() => {})\n\t\t]);\n\t\tawait rename(tmpFile, path);\n\t\tif (cached) {\n\t\t\tconst size = await stat(resolve(dir, \"db.sqlite\")).then(({ size: size$1 }) => size$1);\n\t\t\tcached.metadata.size = size;\n\t\t\tcached.metadata.modifiedAt = new Date();\n\t\t\tcached.connection = await this.driver.open(resolve(dir, \"db.sqlite\"), { trace });\n\t\t\tawait writeFile(resolve(dir, \"metadata.json\"), JSON.stringify(cached.metadata));\n\t\t}\n\t\tthis.logger?.info(\"updated resource contents\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\tif (emit) this.events?.emit(ResourceSetContentsEvent.type, new ResourceSetContentsEvent({\n\t\t\ttrace,\n\t\t\tresource: selector\n\t\t}));\n\t}\n\tasync query(selector, transaction, opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: ResourceTransactionEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tif (!await this.has(selector, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t})) throw new ResourceNotFoundError(selector);\n\t\tlet cached = this.cache.get(selector.key);\n\t\tif (!cached) {\n\t\t\tawait this.get(selector, {\n\t\t\t\ttrace,\n\t\t\t\temit: false\n\t\t\t});\n\t\t\tcached = this.cache.get(selector.key);\n\t\t}\n\t\tconst connection = cached.connection;\n\t\tconst res = await connection.query(transaction, { trace });\n\t\tif (transaction.statements.some(isWrite)) {\n\t\t\tcached.metadata.modifiedAt = new Date();\n\t\t\tawait writeFile(resolve(this.dir, selector.path, \"metadata.json\"), JSON.stringify(cached.metadata));\n\t\t}\n\t\tthis.logger?.info(\"applied transaction\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\tif (emit) this.events?.emit(ResourceTransactionEvent.type, new ResourceTransactionEvent({\n\t\t\ttrace,\n\t\t\tresource: selector,\n\t\t\ttransaction\n\t\t}));\n\t\treturn res;\n\t}\n\tasync free(selector, opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageFreeEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tawait Promise.all(this.pending.get(selector.key) ?? []);\n\t\tconst cached = this.cache.get(selector.key);\n\t\tif (cached?.connection) await cached.connection.close();\n\t\tthis.cache.delete(selector.key);\n\t\tthis.logger?.info(\"freed resource\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\tif (emit) this.events?.emit(StorageFreeEvent.type, new StorageFreeEvent({\n\t\t\ttrace,\n\t\t\tresource: selector\n\t\t}));\n\t}\n\tasync delete(selector, opts) {\n\t\tconst trace = opts?.trace ?? crypto.randomUUID();\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageDeleteEvent.type,\n\t\t\ttrace\n\t\t});\n\t\tif (!await this.has(selector, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t})) throw new ResourceNotFoundError(selector);\n\t\tawait Promise.all(this.pending.get(selector.key) ?? []);\n\t\tawait this.free(selector, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t});\n\t\tconst dir = resolve(this.dir, selector.path);\n\t\tif (selector.type === \"namespace\") await rm(resolve(dir, \"metadata.json\"));\n\t\telse await Promise.all([\n\t\t\trm(resolve(dir, \"metadata.json\")),\n\t\t\trm(resolve(dir, \"db.sqlite\")),\n\t\t\trm(resolve(dir, \"db.sqlite-wal\")).catch(() => {}),\n\t\t\trm(resolve(dir, \"db.sqlite-shm\")).catch(() => {})\n\t\t]);\n\t\tthis.logger?.info(\"deleted resource\", {\n\t\t\tmodule: DiskStorage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\tif (emit) this.events?.emit(StorageDeleteEvent.type, new StorageDeleteEvent({\n\t\t\ttrace,\n\t\t\tresource: selector\n\t\t}));\n\t}\n};\n\n//#endregion\nexport { DiskStorage };"],"names":["DiskStorage"],"mappings":"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"}