{"version":3,"file":"index.mjs","sources":["../../../@hive/memory-storage/dist/index.mjs"],"sourcesContent":["import { 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 { 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, byteStreamToBinary } from \"@hive/streams\";\n\n//#region src/index.ts\nvar MemoryStorage = class MemoryStorage extends Storage {\n\tstatic name = \"memory-storage\";\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\t* @default null\n\t*/\n\tevents = null;\n\t/**\n\t* Logger instance to use for logging.\n\t*\n\t* @default null\n\t*/\n\tlogger = null;\n\t/**\n\t* Map containing all existing Resources, their metadata and for Databases,\n\t* also their `Connection` instance.\n\t*/\n\tresources = new Map();\n\tstart(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 MemoryStorage. Please provide it when initializing the Hive instance.\");\n\t\tif (!opts.events) throw new Error(\"An EventEmitter instance is required by the MemoryStorage. 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\tthis.logger?.info(\"initialized storage instance\", {\n\t\t\tmodule: MemoryStorage.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 Promise.resolve(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(Array.from(this.resources.values()).map((resource) => resource.connection?.close() ?? Promise.resolve()));\n\t\tthis.logger?.info(\"closed storage instance\", {\n\t\t\tmodule: MemoryStorage.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 (checkParent && selector.parent && !this.resources.has(selector.parent.key)) throw new ResourceNotFoundError(selector.parent);\n\t\tif (this.resources.has(selector.key)) throw new ResourceExistsError(selector);\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 ?? null;\n\t\t\t\tconst binary = contents instanceof Uint8Array ? contents : contents instanceof ByteStream ? await byteStreamToBinary(contents) : contents instanceof Selector ? await this.getContents(contents, {\n\t\t\t\t\ttrace,\n\t\t\t\t\temit: false\n\t\t\t\t}).then((res) => res.contents).then(byteStreamToBinary) : SQLITE_FIXTURE;\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\tsize: binary.length,\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\tconst resource = selector instanceof Database ? selector : new Database({\n\t\t\t\t\ttype: selector.type,\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.resources.set(selector.key, {\n\t\t\t\t\tresource,\n\t\t\t\t\tmetadata,\n\t\t\t\t\tconnection: await this.driver.open(binary, { trace })\n\t\t\t\t});\n\t\t\t\tthis.logger?.info(\"created resource\", {\n\t\t\t\t\tmodule: MemoryStorage.name,\n\t\t\t\t\tresource: selector.key,\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: selector\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\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\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.resources.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: MemoryStorage.name,\n\t\t\t\t\tresource: selector.key,\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: selector\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 results = [];\n\t\tconst parent = opts?.parent;\n\t\tif (parent && !await this.has(parent, { trace })) throw new ResourceNotFoundError(parent);\n\t\tfor (const { resource, metadata } of this.resources.values()) {\n\t\t\tif ((parent?.key ?? null) !== (resource.parent?.key ?? null)) continue;\n\t\t\tresults.push(metadata);\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 = this.resources.has(selector.key);\n\t\tthis.logger?.info(\"checked resource\", {\n\t\t\tmodule: MemoryStorage.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\tconst found = this.resources.get(selector.key);\n\t\tif (!found) throw new ResourceNotFoundError(selector);\n\t\tthis.logger?.info(\"retrieved resource\", {\n\t\t\tmodule: MemoryStorage.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\treturn {\n\t\t\tresource: found.resource,\n\t\t\tmetadata: found.metadata\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\tconst found = this.resources.get(selector.key);\n\t\tif (!found) throw new ResourceNotFoundError(selector);\n\t\tthis.logger?.info(\"retrieved resource metadata\", {\n\t\t\tmodule: MemoryStorage.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 found.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\tconst found = this.resources.get(selector.key);\n\t\tif (!found) throw new ResourceNotFoundError(selector);\n\t\tconst res = await found.connection.getContents();\n\t\tthis.logger?.info(\"retrieved resource contents\", {\n\t\t\tmodule: MemoryStorage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace,\n\t\t\tdur: formatDuration(operation.duration),\n\t\t\tsize: res?.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: res,\n\t\t\tmetadata: found.metadata\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\tconst found = this.resources.get(selector.key);\n\t\tif (!found) throw new ResourceNotFoundError(selector);\n\t\tconst binary = contents instanceof Uint8Array ? contents : contents instanceof ByteStream ? await byteStreamToBinary(contents) : await this.getContents(contents, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t}).then((res) => res.contents).then(byteStreamToBinary);\n\t\tconst connection = await this.driver.open(binary, { trace });\n\t\tawait found.connection.close();\n\t\tfound.connection = connection;\n\t\tfound.metadata.modifiedAt = new Date();\n\t\tfound.metadata.size = binary.length;\n\t\tthis.logger?.info(\"updated resource contents\", {\n\t\t\tmodule: MemoryStorage.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\tconst found = this.resources.get(selector.key);\n\t\tif (!found) throw new ResourceNotFoundError(selector);\n\t\tconst result = await found.connection.query(transaction, { trace });\n\t\tif (transaction.statements.some(isWrite)) found.metadata.modifiedAt = new Date();\n\t\tthis.logger?.info(\"applied transaction\", {\n\t\t\tmodule: MemoryStorage.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 result;\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\tthis.logger?.info(\"freed resource\", {\n\t\t\tmodule: MemoryStorage.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\tconst found = this.resources.get(selector.key);\n\t\tif (!found) throw new ResourceNotFoundError(selector);\n\t\tconst children = Array.from(this.resources.values()).filter(({ metadata }) => (metadata.parent ?? null) === selector.key).map(({ metadata }) => new Selector(metadata.key));\n\t\tawait Promise.all(children.map((child) => this.delete(child, {\n\t\t\ttrace,\n\t\t\temit: false\n\t\t})));\n\t\tif (found.connection) await found.connection.close();\n\t\tthis.resources.delete(selector.key);\n\t\tthis.logger?.info(\"deleted resource\", {\n\t\t\tmodule: MemoryStorage.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 { MemoryStorage };"],"names":["MemoryStorage"],"mappings":"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"}