@dexto/storage 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/LICENSE +44 -0
  2. package/README.md +80 -0
  3. package/dist/blob/factories/index.cjs +31 -0
  4. package/dist/blob/factories/index.d.cts +6 -0
  5. package/dist/blob/factories/index.d.ts +6 -0
  6. package/dist/blob/factories/index.d.ts.map +1 -0
  7. package/dist/blob/factories/index.js +6 -0
  8. package/dist/blob/factories/local.cjs +38 -0
  9. package/dist/blob/factories/local.d.cts +21 -0
  10. package/dist/blob/factories/local.d.ts +17 -0
  11. package/dist/blob/factories/local.d.ts.map +1 -0
  12. package/dist/blob/factories/local.js +14 -0
  13. package/dist/blob/factories/memory.cjs +44 -0
  14. package/dist/blob/factories/memory.d.cts +21 -0
  15. package/dist/blob/factories/memory.d.ts +17 -0
  16. package/dist/blob/factories/memory.d.ts.map +1 -0
  17. package/dist/blob/factories/memory.js +20 -0
  18. package/dist/blob/factory.cjs +16 -0
  19. package/dist/blob/factory.d.cts +36 -0
  20. package/dist/blob/factory.d.ts +35 -0
  21. package/dist/blob/factory.d.ts.map +1 -0
  22. package/dist/blob/factory.js +0 -0
  23. package/dist/blob/index.cjs +45 -0
  24. package/dist/blob/index.d.cts +8 -0
  25. package/dist/blob/index.d.ts +26 -0
  26. package/dist/blob/index.d.ts.map +1 -0
  27. package/dist/blob/index.js +19 -0
  28. package/dist/blob/local-blob-store.cjs +532 -0
  29. package/dist/blob/local-blob-store.d.cts +56 -0
  30. package/dist/blob/local-blob-store.d.ts +54 -0
  31. package/dist/blob/local-blob-store.d.ts.map +1 -0
  32. package/dist/blob/local-blob-store.js +498 -0
  33. package/dist/blob/memory-blob-store.cjs +327 -0
  34. package/dist/blob/memory-blob-store.d.cts +69 -0
  35. package/dist/blob/memory-blob-store.d.ts +67 -0
  36. package/dist/blob/memory-blob-store.d.ts.map +1 -0
  37. package/dist/blob/memory-blob-store.js +303 -0
  38. package/dist/blob/schemas.cjs +52 -0
  39. package/dist/blob/schemas.d.cts +87 -0
  40. package/dist/blob/schemas.d.ts +86 -0
  41. package/dist/blob/schemas.d.ts.map +1 -0
  42. package/dist/blob/schemas.js +25 -0
  43. package/dist/blob/types.cjs +16 -0
  44. package/dist/blob/types.d.cts +1 -0
  45. package/dist/blob/types.d.ts +2 -0
  46. package/dist/blob/types.d.ts.map +1 -0
  47. package/dist/blob/types.js +0 -0
  48. package/dist/cache/factories/index.cjs +31 -0
  49. package/dist/cache/factories/index.d.cts +6 -0
  50. package/dist/cache/factories/index.d.ts +6 -0
  51. package/dist/cache/factories/index.d.ts.map +1 -0
  52. package/dist/cache/factories/index.js +6 -0
  53. package/dist/cache/factories/memory.cjs +39 -0
  54. package/dist/cache/factories/memory.d.cts +21 -0
  55. package/dist/cache/factories/memory.d.ts +17 -0
  56. package/dist/cache/factories/memory.d.ts.map +1 -0
  57. package/dist/cache/factories/memory.js +15 -0
  58. package/dist/cache/factories/redis.cjs +65 -0
  59. package/dist/cache/factories/redis.d.cts +24 -0
  60. package/dist/cache/factories/redis.d.ts +20 -0
  61. package/dist/cache/factories/redis.d.ts.map +1 -0
  62. package/dist/cache/factories/redis.js +31 -0
  63. package/dist/cache/factory.cjs +16 -0
  64. package/dist/cache/factory.d.cts +42 -0
  65. package/dist/cache/factory.d.ts +41 -0
  66. package/dist/cache/factory.d.ts.map +1 -0
  67. package/dist/cache/factory.js +0 -0
  68. package/dist/cache/index.cjs +42 -0
  69. package/dist/cache/index.d.cts +7 -0
  70. package/dist/cache/index.d.ts +25 -0
  71. package/dist/cache/index.d.ts.map +1 -0
  72. package/dist/cache/index.js +17 -0
  73. package/dist/cache/memory-cache-store.cjs +106 -0
  74. package/dist/cache/memory-cache-store.d.cts +27 -0
  75. package/dist/cache/memory-cache-store.d.ts +25 -0
  76. package/dist/cache/memory-cache-store.d.ts.map +1 -0
  77. package/dist/cache/memory-cache-store.js +82 -0
  78. package/dist/cache/redis-store.cjs +176 -0
  79. package/dist/cache/redis-store.d.cts +34 -0
  80. package/dist/cache/redis-store.d.ts +32 -0
  81. package/dist/cache/redis-store.d.ts.map +1 -0
  82. package/dist/cache/redis-store.js +152 -0
  83. package/dist/cache/schemas.cjs +70 -0
  84. package/dist/cache/schemas.d.cts +93 -0
  85. package/dist/cache/schemas.d.ts +91 -0
  86. package/dist/cache/schemas.d.ts.map +1 -0
  87. package/dist/cache/schemas.js +43 -0
  88. package/dist/cache/types.cjs +16 -0
  89. package/dist/cache/types.d.cts +1 -0
  90. package/dist/cache/types.d.ts +2 -0
  91. package/dist/cache/types.d.ts.map +1 -0
  92. package/dist/cache/types.js +0 -0
  93. package/dist/database/factories/index.cjs +34 -0
  94. package/dist/database/factories/index.d.cts +7 -0
  95. package/dist/database/factories/index.d.ts +7 -0
  96. package/dist/database/factories/index.d.ts.map +1 -0
  97. package/dist/database/factories/index.js +8 -0
  98. package/dist/database/factories/memory.cjs +39 -0
  99. package/dist/database/factories/memory.d.cts +20 -0
  100. package/dist/database/factories/memory.d.ts +16 -0
  101. package/dist/database/factories/memory.d.ts.map +1 -0
  102. package/dist/database/factories/memory.js +15 -0
  103. package/dist/database/factories/postgres.cjs +61 -0
  104. package/dist/database/factories/postgres.d.cts +23 -0
  105. package/dist/database/factories/postgres.d.ts +19 -0
  106. package/dist/database/factories/postgres.d.ts.map +1 -0
  107. package/dist/database/factories/postgres.js +27 -0
  108. package/dist/database/factories/sqlite.cjs +65 -0
  109. package/dist/database/factories/sqlite.d.cts +24 -0
  110. package/dist/database/factories/sqlite.d.ts +20 -0
  111. package/dist/database/factories/sqlite.d.ts.map +1 -0
  112. package/dist/database/factories/sqlite.js +31 -0
  113. package/dist/database/factory.cjs +16 -0
  114. package/dist/database/factory.d.cts +42 -0
  115. package/dist/database/factory.d.ts +41 -0
  116. package/dist/database/factory.d.ts.map +1 -0
  117. package/dist/database/factory.js +0 -0
  118. package/dist/database/index.cjs +46 -0
  119. package/dist/database/index.d.cts +8 -0
  120. package/dist/database/index.d.ts +26 -0
  121. package/dist/database/index.d.ts.map +1 -0
  122. package/dist/database/index.js +24 -0
  123. package/dist/database/memory-database-store.cjs +121 -0
  124. package/dist/database/memory-database-store.d.cts +30 -0
  125. package/dist/database/memory-database-store.d.ts +28 -0
  126. package/dist/database/memory-database-store.d.ts.map +1 -0
  127. package/dist/database/memory-database-store.js +97 -0
  128. package/dist/database/postgres-store.cjs +342 -0
  129. package/dist/database/postgres-store.d.cts +57 -0
  130. package/dist/database/postgres-store.d.ts +55 -0
  131. package/dist/database/postgres-store.d.ts.map +1 -0
  132. package/dist/database/postgres-store.js +318 -0
  133. package/dist/database/schemas.cjs +82 -0
  134. package/dist/database/schemas.d.cts +127 -0
  135. package/dist/database/schemas.d.ts +125 -0
  136. package/dist/database/schemas.d.ts.map +1 -0
  137. package/dist/database/schemas.js +54 -0
  138. package/dist/database/sqlite-store.cjs +270 -0
  139. package/dist/database/sqlite-store.d.cts +35 -0
  140. package/dist/database/sqlite-store.d.ts +33 -0
  141. package/dist/database/sqlite-store.d.ts.map +1 -0
  142. package/dist/database/sqlite-store.js +236 -0
  143. package/dist/database/types.cjs +16 -0
  144. package/dist/database/types.d.cts +1 -0
  145. package/dist/database/types.d.ts +2 -0
  146. package/dist/database/types.d.ts.map +1 -0
  147. package/dist/database/types.js +0 -0
  148. package/dist/index.cjs +82 -0
  149. package/dist/index.d.cts +24 -0
  150. package/dist/index.d.ts +25 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +50 -0
  153. package/dist/schemas.cjs +67 -0
  154. package/dist/schemas.d.cts +72 -0
  155. package/dist/schemas.d.ts +70 -0
  156. package/dist/schemas.d.ts.map +1 -0
  157. package/dist/schemas.js +46 -0
  158. package/package.json +55 -0
@@ -0,0 +1,42 @@
1
+ import { Logger, Database } from '@dexto/core';
2
+ import { z } from 'zod';
3
+
4
+ /**
5
+ * Factory interface for creating database instances.
6
+ *
7
+ * Factories are plain exports (no global registries). Images decide which factories are
8
+ * available by including them in `image.storage.database`.
9
+ */
10
+ interface DatabaseFactory<TConfig = unknown> {
11
+ /**
12
+ * Zod schema for validating factory-specific configuration.
13
+ * The schema must output the `TConfig` type.
14
+ */
15
+ configSchema: z.ZodType<TConfig, z.ZodTypeDef, unknown>;
16
+ /**
17
+ * Factory function to create a Database instance.
18
+ *
19
+ * Database factories may return a Promise to support lazy loading of optional
20
+ * dependencies (e.g., `better-sqlite3`, `pg`).
21
+ *
22
+ * @param config - Validated configuration specific to this backend
23
+ * @param logger - Logger instance for the database
24
+ * @returns A Database implementation (or Promise for async backends)
25
+ */
26
+ create(config: TConfig, logger: Logger): Database | Promise<Database>;
27
+ /**
28
+ * Optional metadata for documentation, UIs, and discovery.
29
+ */
30
+ metadata?: {
31
+ /** Human-readable name (e.g., "SQLite", "PostgreSQL") */
32
+ displayName: string;
33
+ /** Brief description of this storage backend */
34
+ description: string;
35
+ /** Whether this backend requires network connectivity */
36
+ requiresNetwork?: boolean;
37
+ /** Whether this backend supports list operations (append/getRange) */
38
+ supportsListOperations?: boolean;
39
+ };
40
+ }
41
+
42
+ export type { DatabaseFactory };
@@ -0,0 +1,41 @@
1
+ import type { Database } from './types.js';
2
+ import type { Logger } from '@dexto/core';
3
+ import type { z } from 'zod';
4
+ /**
5
+ * Factory interface for creating database instances.
6
+ *
7
+ * Factories are plain exports (no global registries). Images decide which factories are
8
+ * available by including them in `image.storage.database`.
9
+ */
10
+ export interface DatabaseFactory<TConfig = unknown> {
11
+ /**
12
+ * Zod schema for validating factory-specific configuration.
13
+ * The schema must output the `TConfig` type.
14
+ */
15
+ configSchema: z.ZodType<TConfig, z.ZodTypeDef, unknown>;
16
+ /**
17
+ * Factory function to create a Database instance.
18
+ *
19
+ * Database factories may return a Promise to support lazy loading of optional
20
+ * dependencies (e.g., `better-sqlite3`, `pg`).
21
+ *
22
+ * @param config - Validated configuration specific to this backend
23
+ * @param logger - Logger instance for the database
24
+ * @returns A Database implementation (or Promise for async backends)
25
+ */
26
+ create(config: TConfig, logger: Logger): Database | Promise<Database>;
27
+ /**
28
+ * Optional metadata for documentation, UIs, and discovery.
29
+ */
30
+ metadata?: {
31
+ /** Human-readable name (e.g., "SQLite", "PostgreSQL") */
32
+ displayName: string;
33
+ /** Brief description of this storage backend */
34
+ description: string;
35
+ /** Whether this backend requires network connectivity */
36
+ requiresNetwork?: boolean;
37
+ /** Whether this backend supports list operations (append/getRange) */
38
+ supportsListOperations?: boolean;
39
+ };
40
+ }
41
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/database/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,WAAW,eAAe,CAAC,OAAO,GAAG,OAAO;IAC9C;;;OAGG;IACH,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAExD;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtE;;OAEG;IACH,QAAQ,CAAC,EAAE;QACP,yDAAyD;QACzD,WAAW,EAAE,MAAM,CAAC;QACpB,gDAAgD;QAChD,WAAW,EAAE,MAAM,CAAC;QACpB,yDAAyD;QACzD,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,sEAAsE;QACtE,sBAAsB,CAAC,EAAE,OAAO,CAAC;KACpC,CAAC;CACL"}
File without changes
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var database_exports = {};
20
+ __export(database_exports, {
21
+ DATABASE_TYPES: () => import_schemas.DATABASE_TYPES,
22
+ DatabaseConfigSchema: () => import_schemas.DatabaseConfigSchema,
23
+ InMemoryDatabaseSchema: () => import_schemas.InMemoryDatabaseSchema,
24
+ MemoryDatabaseStore: () => import_memory_database_store.MemoryDatabaseStore,
25
+ PostgresDatabaseSchema: () => import_schemas.PostgresDatabaseSchema,
26
+ SqliteDatabaseSchema: () => import_schemas.SqliteDatabaseSchema,
27
+ inMemoryDatabaseFactory: () => import_factories.inMemoryDatabaseFactory,
28
+ postgresDatabaseFactory: () => import_factories.postgresDatabaseFactory,
29
+ sqliteDatabaseFactory: () => import_factories.sqliteDatabaseFactory
30
+ });
31
+ module.exports = __toCommonJS(database_exports);
32
+ var import_factories = require("./factories/index.js");
33
+ var import_schemas = require("./schemas.js");
34
+ var import_memory_database_store = require("./memory-database-store.js");
35
+ // Annotate the CommonJS export names for ESM import in node:
36
+ 0 && (module.exports = {
37
+ DATABASE_TYPES,
38
+ DatabaseConfigSchema,
39
+ InMemoryDatabaseSchema,
40
+ MemoryDatabaseStore,
41
+ PostgresDatabaseSchema,
42
+ SqliteDatabaseSchema,
43
+ inMemoryDatabaseFactory,
44
+ postgresDatabaseFactory,
45
+ sqliteDatabaseFactory
46
+ });
@@ -0,0 +1,8 @@
1
+ export { DatabaseFactory } from './factory.cjs';
2
+ export { Database } from '@dexto/core';
3
+ export { inMemoryDatabaseFactory } from './factories/memory.cjs';
4
+ export { sqliteDatabaseFactory } from './factories/sqlite.cjs';
5
+ export { postgresDatabaseFactory } from './factories/postgres.cjs';
6
+ export { DATABASE_TYPES, DatabaseConfig, DatabaseConfigSchema, DatabaseType, InMemoryDatabaseConfig, InMemoryDatabaseSchema, PostgresDatabaseConfig, PostgresDatabaseSchema, SqliteDatabaseConfig, SqliteDatabaseSchema } from './schemas.cjs';
7
+ export { MemoryDatabaseStore } from './memory-database-store.cjs';
8
+ import 'zod';
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Database Module
3
+ *
4
+ * This module provides a flexible database system with support for
5
+ * multiple backends through a factory pattern.
6
+ *
7
+ * ## Built-in Factories
8
+ * - `in-memory`: Store data in RAM (for testing/development)
9
+ * - `sqlite`: Store data in a local SQLite file
10
+ * - `postgres`: Store data in PostgreSQL server
11
+ *
12
+ * ## Custom Factories
13
+ * Product layers (CLI/server/platform) decide which factories are available by including them
14
+ * in images (`DextoImage.storage.database`).
15
+ *
16
+ * ## Usage
17
+ * Database backends are typically constructed by the product-layer resolver (`@dexto/agent-config`)
18
+ * via image-provided factory maps. For direct usage, call a factory's `create()` after validating
19
+ * config with its `configSchema`.
20
+ */
21
+ export type { DatabaseFactory } from './factory.js';
22
+ export type { Database } from './types.js';
23
+ export { inMemoryDatabaseFactory, sqliteDatabaseFactory, postgresDatabaseFactory, } from './factories/index.js';
24
+ export { DATABASE_TYPES, DatabaseConfigSchema, InMemoryDatabaseSchema, SqliteDatabaseSchema, PostgresDatabaseSchema, type DatabaseType, type DatabaseConfig, type InMemoryDatabaseConfig, type SqliteDatabaseConfig, type PostgresDatabaseConfig, } from './schemas.js';
25
+ export { MemoryDatabaseStore } from './memory-database-store.js';
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpD,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EACH,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,GAC1B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACH,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC9B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import {
2
+ inMemoryDatabaseFactory,
3
+ sqliteDatabaseFactory,
4
+ postgresDatabaseFactory
5
+ } from "./factories/index.js";
6
+ import {
7
+ DATABASE_TYPES,
8
+ DatabaseConfigSchema,
9
+ InMemoryDatabaseSchema,
10
+ SqliteDatabaseSchema,
11
+ PostgresDatabaseSchema
12
+ } from "./schemas.js";
13
+ import { MemoryDatabaseStore } from "./memory-database-store.js";
14
+ export {
15
+ DATABASE_TYPES,
16
+ DatabaseConfigSchema,
17
+ InMemoryDatabaseSchema,
18
+ MemoryDatabaseStore,
19
+ PostgresDatabaseSchema,
20
+ SqliteDatabaseSchema,
21
+ inMemoryDatabaseFactory,
22
+ postgresDatabaseFactory,
23
+ sqliteDatabaseFactory
24
+ };
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var memory_database_store_exports = {};
20
+ __export(memory_database_store_exports, {
21
+ MemoryDatabaseStore: () => MemoryDatabaseStore
22
+ });
23
+ module.exports = __toCommonJS(memory_database_store_exports);
24
+ var import_core = require("@dexto/core");
25
+ class MemoryDatabaseStore {
26
+ data = /* @__PURE__ */ new Map();
27
+ lists = /* @__PURE__ */ new Map();
28
+ connected = false;
29
+ async connect() {
30
+ if (this.connected) return;
31
+ this.connected = true;
32
+ }
33
+ async disconnect() {
34
+ this.connected = false;
35
+ this.data.clear();
36
+ this.lists.clear();
37
+ }
38
+ isConnected() {
39
+ return this.connected;
40
+ }
41
+ getStoreType() {
42
+ return "in-memory";
43
+ }
44
+ async get(key) {
45
+ this.checkConnection();
46
+ try {
47
+ return this.data.get(key);
48
+ } catch (error) {
49
+ throw import_core.StorageError.readFailed(
50
+ "get",
51
+ error instanceof Error ? error.message : String(error),
52
+ { key }
53
+ );
54
+ }
55
+ }
56
+ async set(key, value) {
57
+ this.checkConnection();
58
+ try {
59
+ this.data.set(key, value);
60
+ } catch (error) {
61
+ throw import_core.StorageError.writeFailed(
62
+ "set",
63
+ error instanceof Error ? error.message : String(error),
64
+ { key }
65
+ );
66
+ }
67
+ }
68
+ async delete(key) {
69
+ this.checkConnection();
70
+ this.data.delete(key);
71
+ this.lists.delete(key);
72
+ }
73
+ async list(prefix) {
74
+ this.checkConnection();
75
+ const keys = [];
76
+ for (const key of Array.from(this.data.keys())) {
77
+ if (key.startsWith(prefix)) {
78
+ keys.push(key);
79
+ }
80
+ }
81
+ for (const key of Array.from(this.lists.keys())) {
82
+ if (key.startsWith(prefix)) {
83
+ keys.push(key);
84
+ }
85
+ }
86
+ return Array.from(new Set(keys)).sort();
87
+ }
88
+ async append(key, item) {
89
+ this.checkConnection();
90
+ if (!this.lists.has(key)) {
91
+ this.lists.set(key, []);
92
+ }
93
+ this.lists.get(key).push(item);
94
+ }
95
+ async getRange(key, start, count) {
96
+ this.checkConnection();
97
+ const list = this.lists.get(key) || [];
98
+ return list.slice(start, start + count);
99
+ }
100
+ // Helper methods
101
+ checkConnection() {
102
+ if (!this.connected) {
103
+ throw import_core.StorageError.notConnected("MemoryDatabaseStore");
104
+ }
105
+ }
106
+ // Development helpers
107
+ async clear() {
108
+ this.data.clear();
109
+ this.lists.clear();
110
+ }
111
+ async dump() {
112
+ return {
113
+ data: Object.fromEntries(this.data.entries()),
114
+ lists: Object.fromEntries(this.lists.entries())
115
+ };
116
+ }
117
+ }
118
+ // Annotate the CommonJS export names for ESM import in node:
119
+ 0 && (module.exports = {
120
+ MemoryDatabaseStore
121
+ });
@@ -0,0 +1,30 @@
1
+ import { Database } from '@dexto/core';
2
+
3
+ /**
4
+ * In-memory database store for development and testing.
5
+ * Supports list operations for message history and enumeration for settings.
6
+ * Data is lost when the process restarts.
7
+ */
8
+ declare class MemoryDatabaseStore implements Database {
9
+ private data;
10
+ private lists;
11
+ private connected;
12
+ connect(): Promise<void>;
13
+ disconnect(): Promise<void>;
14
+ isConnected(): boolean;
15
+ getStoreType(): string;
16
+ get<T>(key: string): Promise<T | undefined>;
17
+ set<T>(key: string, value: T): Promise<void>;
18
+ delete(key: string): Promise<void>;
19
+ list(prefix: string): Promise<string[]>;
20
+ append<T>(key: string, item: T): Promise<void>;
21
+ getRange<T>(key: string, start: number, count: number): Promise<T[]>;
22
+ private checkConnection;
23
+ clear(): Promise<void>;
24
+ dump(): Promise<{
25
+ data: Record<string, unknown>;
26
+ lists: Record<string, unknown[]>;
27
+ }>;
28
+ }
29
+
30
+ export { MemoryDatabaseStore };
@@ -0,0 +1,28 @@
1
+ import type { Database } from './types.js';
2
+ /**
3
+ * In-memory database store for development and testing.
4
+ * Supports list operations for message history and enumeration for settings.
5
+ * Data is lost when the process restarts.
6
+ */
7
+ export declare class MemoryDatabaseStore implements Database {
8
+ private data;
9
+ private lists;
10
+ private connected;
11
+ connect(): Promise<void>;
12
+ disconnect(): Promise<void>;
13
+ isConnected(): boolean;
14
+ getStoreType(): string;
15
+ get<T>(key: string): Promise<T | undefined>;
16
+ set<T>(key: string, value: T): Promise<void>;
17
+ delete(key: string): Promise<void>;
18
+ list(prefix: string): Promise<string[]>;
19
+ append<T>(key: string, item: T): Promise<void>;
20
+ getRange<T>(key: string, start: number, count: number): Promise<T[]>;
21
+ private checkConnection;
22
+ clear(): Promise<void>;
23
+ dump(): Promise<{
24
+ data: Record<string, unknown>;
25
+ lists: Record<string, unknown[]>;
26
+ }>;
27
+ }
28
+ //# sourceMappingURL=memory-database-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-database-store.d.ts","sourceRoot":"","sources":["../../src/database/memory-database-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,QAAQ;IAChD,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,SAAS,CAAS;IAEpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC,WAAW,IAAI,OAAO;IAItB,YAAY,IAAI,MAAM;IAIhB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAa3C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBvC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAO1E,OAAO,CAAC,eAAe;IAOjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,IAAI,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;KAAE,CAAC;CAM7F"}
@@ -0,0 +1,97 @@
1
+ import { StorageError } from "@dexto/core";
2
+ class MemoryDatabaseStore {
3
+ data = /* @__PURE__ */ new Map();
4
+ lists = /* @__PURE__ */ new Map();
5
+ connected = false;
6
+ async connect() {
7
+ if (this.connected) return;
8
+ this.connected = true;
9
+ }
10
+ async disconnect() {
11
+ this.connected = false;
12
+ this.data.clear();
13
+ this.lists.clear();
14
+ }
15
+ isConnected() {
16
+ return this.connected;
17
+ }
18
+ getStoreType() {
19
+ return "in-memory";
20
+ }
21
+ async get(key) {
22
+ this.checkConnection();
23
+ try {
24
+ return this.data.get(key);
25
+ } catch (error) {
26
+ throw StorageError.readFailed(
27
+ "get",
28
+ error instanceof Error ? error.message : String(error),
29
+ { key }
30
+ );
31
+ }
32
+ }
33
+ async set(key, value) {
34
+ this.checkConnection();
35
+ try {
36
+ this.data.set(key, value);
37
+ } catch (error) {
38
+ throw StorageError.writeFailed(
39
+ "set",
40
+ error instanceof Error ? error.message : String(error),
41
+ { key }
42
+ );
43
+ }
44
+ }
45
+ async delete(key) {
46
+ this.checkConnection();
47
+ this.data.delete(key);
48
+ this.lists.delete(key);
49
+ }
50
+ async list(prefix) {
51
+ this.checkConnection();
52
+ const keys = [];
53
+ for (const key of Array.from(this.data.keys())) {
54
+ if (key.startsWith(prefix)) {
55
+ keys.push(key);
56
+ }
57
+ }
58
+ for (const key of Array.from(this.lists.keys())) {
59
+ if (key.startsWith(prefix)) {
60
+ keys.push(key);
61
+ }
62
+ }
63
+ return Array.from(new Set(keys)).sort();
64
+ }
65
+ async append(key, item) {
66
+ this.checkConnection();
67
+ if (!this.lists.has(key)) {
68
+ this.lists.set(key, []);
69
+ }
70
+ this.lists.get(key).push(item);
71
+ }
72
+ async getRange(key, start, count) {
73
+ this.checkConnection();
74
+ const list = this.lists.get(key) || [];
75
+ return list.slice(start, start + count);
76
+ }
77
+ // Helper methods
78
+ checkConnection() {
79
+ if (!this.connected) {
80
+ throw StorageError.notConnected("MemoryDatabaseStore");
81
+ }
82
+ }
83
+ // Development helpers
84
+ async clear() {
85
+ this.data.clear();
86
+ this.lists.clear();
87
+ }
88
+ async dump() {
89
+ return {
90
+ data: Object.fromEntries(this.data.entries()),
91
+ lists: Object.fromEntries(this.lists.entries())
92
+ };
93
+ }
94
+ }
95
+ export {
96
+ MemoryDatabaseStore
97
+ };