@duraxis/storage-memory 0.0.0-stage → 0.1.1

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ # @duraxis/storage-memory changelog
2
+
3
+ ## 0.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - f0b0c5a: test automatic submit
8
+
9
+ This file is maintained by Changesets. Future releases will add versioned
10
+ entries automatically.
package/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2026 João Paulo Dias
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ PERFORMANCE OF THIS SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,34 @@
1
- # Temporary Holding Version
1
+ # @duraxis/storage-memory
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Implementação volátil de `StorageDriver`. É adequada para testes, exemplos e desenvolvimento
4
+ local, mas todo o conteúdo desaparece quando a instância é descartada.
5
+
6
+ ## Instalação
7
+
8
+ ```bash
9
+ pnpm add @duraxis/storage-memory
10
+ npm install @duraxis/storage-memory
11
+ yarn add @duraxis/storage-memory
12
+ ```
13
+
14
+ `@duraxis/storage` é instalado como dependência.
15
+
16
+ ```ts
17
+ import { MemoryStorageDriver } from "@duraxis/storage-memory";
18
+
19
+ const storage = new MemoryStorageDriver();
20
+ await storage.put("example", new TextEncoder().encode("value"), {
21
+ condition: { type: "if-absent" },
22
+ });
23
+ const object = await storage.get("example");
24
+ console.log(object?.version);
25
+ ```
26
+
27
+ A API pública é `MemoryStorageDriver`, que implementa leitura, escrita e remoção
28
+ condicionais, listagem e métricas. Ela pode ser passada diretamente a `DuraxisDatabase` ou
29
+ `DuraxisModule.forRoot`.
30
+
31
+ Não há persistência entre processos nem coordenação distribuída. Requer Node.js 22.12+ e é
32
+ distribuído em ESM, CommonJS e TypeScript.
33
+
34
+ Release automation verification.
package/dist/index.cjs ADDED
@@ -0,0 +1,98 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let _duraxis_storage = require("@duraxis/storage");
3
+ // src/memory-storage.driver.ts
4
+ var MemoryStorageDriver = class {
5
+ entries = /* @__PURE__ */ new Map();
6
+ versionCounter = 0n;
7
+ metrics = {
8
+ reads: 0,
9
+ writes: 0,
10
+ deletes: 0,
11
+ lists: 0,
12
+ bytesRead: 0,
13
+ bytesWritten: 0,
14
+ synchronizationWaitMs: 0
15
+ };
16
+ async get(key) {
17
+ (0, _duraxis_storage.assertStorageKey)(key);
18
+ this.metrics.reads++;
19
+ const entry = this.entries.get(key);
20
+ if (entry) this.metrics.bytesRead += entry.data.byteLength;
21
+ return !entry ? null : {
22
+ data: new Uint8Array(entry.data),
23
+ version: entry.version
24
+ };
25
+ }
26
+ async put(key, data, options) {
27
+ (0, _duraxis_storage.assertStorageKey)(key);
28
+ if (!(data instanceof Uint8Array)) throw new TypeError("Storage data must be a Uint8Array");
29
+ this.metrics.writes++;
30
+ this.metrics.bytesWritten += data.byteLength;
31
+ const current = this.entries.get(key);
32
+ switch (options.condition.type) {
33
+ case "if-absent":
34
+ if (current) return {
35
+ success: false,
36
+ reason: "conflict"
37
+ };
38
+ break;
39
+ case "if-version": if (!current || current.version != options.condition.version) return {
40
+ success: false,
41
+ reason: "conflict"
42
+ };
43
+ }
44
+ const version = this.nextVersion();
45
+ this.entries.set(key, {
46
+ data: new Uint8Array(data),
47
+ version,
48
+ createdAt: Date.now()
49
+ });
50
+ return {
51
+ success: true,
52
+ version
53
+ };
54
+ }
55
+ async delete(key, options) {
56
+ (0, _duraxis_storage.assertStorageKey)(key);
57
+ this.metrics.deletes++;
58
+ const current = this.entries.get(key);
59
+ switch (options.condition.type) {
60
+ case "if-absent": return current ? {
61
+ success: false,
62
+ reason: "conflict"
63
+ } : { success: true };
64
+ case "if-version":
65
+ if (!current || current.version != options.condition.version) return {
66
+ success: false,
67
+ reason: "conflict"
68
+ };
69
+ this.entries.delete(key);
70
+ return { success: true };
71
+ }
72
+ }
73
+ async list(prefix) {
74
+ if (typeof prefix != "string" || prefix.includes("\0")) throw new TypeError("Invalid storage prefix");
75
+ this.metrics.lists++;
76
+ const results = [];
77
+ for (const [key, entry] of this.entries) {
78
+ if (!key.startsWith(prefix)) continue;
79
+ results.push({
80
+ key,
81
+ version: entry.version,
82
+ createdAt: entry.createdAt
83
+ });
84
+ }
85
+ results.sort((a, b) => a.key.localeCompare(b.key));
86
+ return results;
87
+ }
88
+ getMetrics() {
89
+ return { ...this.metrics };
90
+ }
91
+ nextVersion() {
92
+ this.versionCounter += 1n;
93
+ return this.versionCounter.toString();
94
+ }
95
+ };
96
+ exports.MemoryStorageDriver = MemoryStorageDriver;
97
+
98
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../src/memory-storage.driver.ts"],"sourcesContent":["import {\n assertStorageKey,\n type StorageDriver,\n type StorageObject,\n type StorageObjectInfo,\n type WriteOptions,\n type WriteResult,\n type DeleteOptions,\n type DeleteResult,\n type StorageDriverMetrics,\n} from \"@duraxis/storage\";\n\ninterface MemoryEntry {\n readonly data: Uint8Array;\n readonly version: string;\n readonly createdAt: number;\n}\n\nexport class MemoryStorageDriver implements StorageDriver {\n private readonly entries = new Map<string, MemoryEntry>();\n private versionCounter = 0n;\n\n private readonly metrics: StorageDriverMetrics = {\n reads: 0,\n writes: 0,\n deletes: 0,\n lists: 0,\n bytesRead: 0,\n bytesWritten: 0,\n synchronizationWaitMs: 0,\n };\n\n public async get(key: string): Promise<StorageObject | null> {\n assertStorageKey(key);\n\n (this.metrics as { reads: number }).reads++;\n\n const entry = this.entries.get(key);\n\n if (entry) (this.metrics as { bytesRead: number }).bytesRead += entry.data.byteLength;\n\n return !entry\n ? null\n : {\n data: new Uint8Array(entry.data),\n version: entry.version,\n };\n }\n\n public async put(key: string, data: Uint8Array, options: WriteOptions): Promise<WriteResult> {\n assertStorageKey(key);\n\n if (!(data instanceof Uint8Array)) throw new TypeError(\"Storage data must be a Uint8Array\");\n\n (this.metrics as { writes: number; bytesWritten: number }).writes++;\n (this.metrics as { bytesWritten: number }).bytesWritten += data.byteLength;\n\n const current = this.entries.get(key);\n\n switch (options.condition.type) {\n case \"if-absent\": {\n if (current)\n return {\n success: false,\n reason: \"conflict\",\n };\n\n break;\n }\n\n case \"if-version\": {\n if (!current || current.version != options.condition.version)\n return {\n success: false,\n reason: \"conflict\",\n };\n\n break;\n }\n }\n\n const version = this.nextVersion();\n\n this.entries.set(key, {\n data: new Uint8Array(data),\n version,\n createdAt: Date.now(),\n });\n\n return {\n success: true,\n version,\n };\n }\n\n public async delete(key: string, options: DeleteOptions): Promise<DeleteResult> {\n assertStorageKey(key);\n\n (this.metrics as { deletes: number }).deletes++;\n\n const current = this.entries.get(key);\n\n switch (options.condition.type) {\n case \"if-absent\":\n return current\n ? {\n success: false,\n reason: \"conflict\",\n }\n : { success: true };\n\n case \"if-version\": {\n if (!current || current.version != options.condition.version)\n return {\n success: false,\n reason: \"conflict\",\n };\n\n this.entries.delete(key);\n\n return { success: true };\n }\n }\n }\n\n public async list(prefix: string): Promise<readonly StorageObjectInfo[]> {\n if (typeof prefix != \"string\" || prefix.includes(\"\\0\"))\n throw new TypeError(\"Invalid storage prefix\");\n\n (this.metrics as { lists: number }).lists++;\n\n const results: StorageObjectInfo[] = [];\n\n for (const [key, entry] of this.entries) {\n if (!key.startsWith(prefix)) continue;\n\n results.push({\n key,\n version: entry.version,\n createdAt: entry.createdAt,\n });\n }\n\n results.sort((a, b) => a.key.localeCompare(b.key));\n\n return results;\n }\n\n public getMetrics(): Readonly<StorageDriverMetrics> {\n return { ...this.metrics };\n }\n\n private nextVersion(): string {\n this.versionCounter += 1n;\n return this.versionCounter.toString();\n }\n}\n"],"mappings":";;;AAkBA,IAAa,sBAAb,MAA0D;CACxD,0BAA2B,IAAI,IAAyB;CACxD,iBAAyB;CAEzB,UAAiD;EAC/C,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO;EACP,WAAW;EACX,cAAc;EACd,uBAAuB;CACzB;CAEA,MAAa,IAAI,KAA4C;EAC3D,CAAA,GAAA,iBAAA,iBAAA,CAAiB,GAAG;EAEpB,KAAM,QAA8B;EAEpC,MAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG;EAElC,IAAI,OAAO,KAAM,QAAkC,aAAa,MAAM,KAAK;EAE3E,OAAO,CAAC,QACJ,OACA;GACE,MAAM,IAAI,WAAW,MAAM,IAAI;GAC/B,SAAS,MAAM;EACjB;CACN;CAEA,MAAa,IAAI,KAAa,MAAkB,SAA6C;EAC3F,CAAA,GAAA,iBAAA,iBAAA,CAAiB,GAAG;EAEpB,IAAI,EAAE,gBAAgB,aAAa,MAAM,IAAI,UAAU,mCAAmC;EAE1F,KAAM,QAAqD;EAC3D,KAAM,QAAqC,gBAAgB,KAAK;EAEhE,MAAM,UAAU,KAAK,QAAQ,IAAI,GAAG;EAEpC,QAAQ,QAAQ,UAAU,MAA1B;GACE,KAAK;IACH,IAAI,SACF,OAAO;KACL,SAAS;KACT,QAAQ;IACV;IAEF;GAGF,KAAK,cACH,IAAI,CAAC,WAAW,QAAQ,WAAW,QAAQ,UAAU,SACnD,OAAO;IACL,SAAS;IACT,QAAQ;GACV;EAIN;EAEA,MAAM,UAAU,KAAK,YAAY;EAEjC,KAAK,QAAQ,IAAI,KAAK;GACpB,MAAM,IAAI,WAAW,IAAI;GACzB;GACA,WAAW,KAAK,IAAI;EACtB,CAAC;EAED,OAAO;GACL,SAAS;GACT;EACF;CACF;CAEA,MAAa,OAAO,KAAa,SAA+C;EAC9E,CAAA,GAAA,iBAAA,iBAAA,CAAiB,GAAG;EAEpB,KAAM,QAAgC;EAEtC,MAAM,UAAU,KAAK,QAAQ,IAAI,GAAG;EAEpC,QAAQ,QAAQ,UAAU,MAA1B;GACE,KAAK,aACH,OAAO,UACH;IACE,SAAS;IACT,QAAQ;GACV,IACA,EAAE,SAAS,KAAK;GAEtB,KAAK;IACH,IAAI,CAAC,WAAW,QAAQ,WAAW,QAAQ,UAAU,SACnD,OAAO;KACL,SAAS;KACT,QAAQ;IACV;IAEF,KAAK,QAAQ,OAAO,GAAG;IAEvB,OAAO,EAAE,SAAS,KAAK;EAE3B;CACF;CAEA,MAAa,KAAK,QAAuD;EACvE,IAAI,OAAO,UAAU,YAAY,OAAO,SAAS,IAAI,GACnD,MAAM,IAAI,UAAU,wBAAwB;EAE9C,KAAM,QAA8B;EAEpC,MAAM,UAA+B,CAAC;EAEtC,KAAK,MAAM,CAAC,KAAK,UAAU,KAAK,SAAS;GACvC,IAAI,CAAC,IAAI,WAAW,MAAM,GAAG;GAE7B,QAAQ,KAAK;IACX;IACA,SAAS,MAAM;IACf,WAAW,MAAM;GACnB,CAAC;EACH;EAEA,QAAQ,MAAM,GAAG,MAAM,EAAE,IAAI,cAAc,EAAE,GAAG,CAAC;EAEjD,OAAO;CACT;CAEA,aAAoD;EAClD,OAAO,EAAE,GAAG,KAAK,QAAQ;CAC3B;CAEA,cAA8B;EAC5B,KAAK,kBAAkB;EACvB,OAAO,KAAK,eAAe,SAAS;CACtC;AACF"}
@@ -0,0 +1 @@
1
+ export { MemoryStorageDriver } from "./memory-storage.driver.js";
package/dist/index.js ADDED
@@ -0,0 +1,97 @@
1
+ import { assertStorageKey } from "@duraxis/storage";
2
+ // src/memory-storage.driver.ts
3
+ var MemoryStorageDriver = class {
4
+ entries = /* @__PURE__ */ new Map();
5
+ versionCounter = 0n;
6
+ metrics = {
7
+ reads: 0,
8
+ writes: 0,
9
+ deletes: 0,
10
+ lists: 0,
11
+ bytesRead: 0,
12
+ bytesWritten: 0,
13
+ synchronizationWaitMs: 0
14
+ };
15
+ async get(key) {
16
+ assertStorageKey(key);
17
+ this.metrics.reads++;
18
+ const entry = this.entries.get(key);
19
+ if (entry) this.metrics.bytesRead += entry.data.byteLength;
20
+ return !entry ? null : {
21
+ data: new Uint8Array(entry.data),
22
+ version: entry.version
23
+ };
24
+ }
25
+ async put(key, data, options) {
26
+ assertStorageKey(key);
27
+ if (!(data instanceof Uint8Array)) throw new TypeError("Storage data must be a Uint8Array");
28
+ this.metrics.writes++;
29
+ this.metrics.bytesWritten += data.byteLength;
30
+ const current = this.entries.get(key);
31
+ switch (options.condition.type) {
32
+ case "if-absent":
33
+ if (current) return {
34
+ success: false,
35
+ reason: "conflict"
36
+ };
37
+ break;
38
+ case "if-version": if (!current || current.version != options.condition.version) return {
39
+ success: false,
40
+ reason: "conflict"
41
+ };
42
+ }
43
+ const version = this.nextVersion();
44
+ this.entries.set(key, {
45
+ data: new Uint8Array(data),
46
+ version,
47
+ createdAt: Date.now()
48
+ });
49
+ return {
50
+ success: true,
51
+ version
52
+ };
53
+ }
54
+ async delete(key, options) {
55
+ assertStorageKey(key);
56
+ this.metrics.deletes++;
57
+ const current = this.entries.get(key);
58
+ switch (options.condition.type) {
59
+ case "if-absent": return current ? {
60
+ success: false,
61
+ reason: "conflict"
62
+ } : { success: true };
63
+ case "if-version":
64
+ if (!current || current.version != options.condition.version) return {
65
+ success: false,
66
+ reason: "conflict"
67
+ };
68
+ this.entries.delete(key);
69
+ return { success: true };
70
+ }
71
+ }
72
+ async list(prefix) {
73
+ if (typeof prefix != "string" || prefix.includes("\0")) throw new TypeError("Invalid storage prefix");
74
+ this.metrics.lists++;
75
+ const results = [];
76
+ for (const [key, entry] of this.entries) {
77
+ if (!key.startsWith(prefix)) continue;
78
+ results.push({
79
+ key,
80
+ version: entry.version,
81
+ createdAt: entry.createdAt
82
+ });
83
+ }
84
+ results.sort((a, b) => a.key.localeCompare(b.key));
85
+ return results;
86
+ }
87
+ getMetrics() {
88
+ return { ...this.metrics };
89
+ }
90
+ nextVersion() {
91
+ this.versionCounter += 1n;
92
+ return this.versionCounter.toString();
93
+ }
94
+ };
95
+ export { MemoryStorageDriver };
96
+
97
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/memory-storage.driver.ts"],"sourcesContent":["import {\n assertStorageKey,\n type StorageDriver,\n type StorageObject,\n type StorageObjectInfo,\n type WriteOptions,\n type WriteResult,\n type DeleteOptions,\n type DeleteResult,\n type StorageDriverMetrics,\n} from \"@duraxis/storage\";\n\ninterface MemoryEntry {\n readonly data: Uint8Array;\n readonly version: string;\n readonly createdAt: number;\n}\n\nexport class MemoryStorageDriver implements StorageDriver {\n private readonly entries = new Map<string, MemoryEntry>();\n private versionCounter = 0n;\n\n private readonly metrics: StorageDriverMetrics = {\n reads: 0,\n writes: 0,\n deletes: 0,\n lists: 0,\n bytesRead: 0,\n bytesWritten: 0,\n synchronizationWaitMs: 0,\n };\n\n public async get(key: string): Promise<StorageObject | null> {\n assertStorageKey(key);\n\n (this.metrics as { reads: number }).reads++;\n\n const entry = this.entries.get(key);\n\n if (entry) (this.metrics as { bytesRead: number }).bytesRead += entry.data.byteLength;\n\n return !entry\n ? null\n : {\n data: new Uint8Array(entry.data),\n version: entry.version,\n };\n }\n\n public async put(key: string, data: Uint8Array, options: WriteOptions): Promise<WriteResult> {\n assertStorageKey(key);\n\n if (!(data instanceof Uint8Array)) throw new TypeError(\"Storage data must be a Uint8Array\");\n\n (this.metrics as { writes: number; bytesWritten: number }).writes++;\n (this.metrics as { bytesWritten: number }).bytesWritten += data.byteLength;\n\n const current = this.entries.get(key);\n\n switch (options.condition.type) {\n case \"if-absent\": {\n if (current)\n return {\n success: false,\n reason: \"conflict\",\n };\n\n break;\n }\n\n case \"if-version\": {\n if (!current || current.version != options.condition.version)\n return {\n success: false,\n reason: \"conflict\",\n };\n\n break;\n }\n }\n\n const version = this.nextVersion();\n\n this.entries.set(key, {\n data: new Uint8Array(data),\n version,\n createdAt: Date.now(),\n });\n\n return {\n success: true,\n version,\n };\n }\n\n public async delete(key: string, options: DeleteOptions): Promise<DeleteResult> {\n assertStorageKey(key);\n\n (this.metrics as { deletes: number }).deletes++;\n\n const current = this.entries.get(key);\n\n switch (options.condition.type) {\n case \"if-absent\":\n return current\n ? {\n success: false,\n reason: \"conflict\",\n }\n : { success: true };\n\n case \"if-version\": {\n if (!current || current.version != options.condition.version)\n return {\n success: false,\n reason: \"conflict\",\n };\n\n this.entries.delete(key);\n\n return { success: true };\n }\n }\n }\n\n public async list(prefix: string): Promise<readonly StorageObjectInfo[]> {\n if (typeof prefix != \"string\" || prefix.includes(\"\\0\"))\n throw new TypeError(\"Invalid storage prefix\");\n\n (this.metrics as { lists: number }).lists++;\n\n const results: StorageObjectInfo[] = [];\n\n for (const [key, entry] of this.entries) {\n if (!key.startsWith(prefix)) continue;\n\n results.push({\n key,\n version: entry.version,\n createdAt: entry.createdAt,\n });\n }\n\n results.sort((a, b) => a.key.localeCompare(b.key));\n\n return results;\n }\n\n public getMetrics(): Readonly<StorageDriverMetrics> {\n return { ...this.metrics };\n }\n\n private nextVersion(): string {\n this.versionCounter += 1n;\n return this.versionCounter.toString();\n }\n}\n"],"mappings":";;AAkBA,IAAa,sBAAb,MAA0D;CACxD,0BAA2B,IAAI,IAAyB;CACxD,iBAAyB;CAEzB,UAAiD;EAC/C,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO;EACP,WAAW;EACX,cAAc;EACd,uBAAuB;CACzB;CAEA,MAAa,IAAI,KAA4C;EAC3D,iBAAiB,GAAG;EAEpB,KAAM,QAA8B;EAEpC,MAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG;EAElC,IAAI,OAAO,KAAM,QAAkC,aAAa,MAAM,KAAK;EAE3E,OAAO,CAAC,QACJ,OACA;GACE,MAAM,IAAI,WAAW,MAAM,IAAI;GAC/B,SAAS,MAAM;EACjB;CACN;CAEA,MAAa,IAAI,KAAa,MAAkB,SAA6C;EAC3F,iBAAiB,GAAG;EAEpB,IAAI,EAAE,gBAAgB,aAAa,MAAM,IAAI,UAAU,mCAAmC;EAE1F,KAAM,QAAqD;EAC3D,KAAM,QAAqC,gBAAgB,KAAK;EAEhE,MAAM,UAAU,KAAK,QAAQ,IAAI,GAAG;EAEpC,QAAQ,QAAQ,UAAU,MAA1B;GACE,KAAK;IACH,IAAI,SACF,OAAO;KACL,SAAS;KACT,QAAQ;IACV;IAEF;GAGF,KAAK,cACH,IAAI,CAAC,WAAW,QAAQ,WAAW,QAAQ,UAAU,SACnD,OAAO;IACL,SAAS;IACT,QAAQ;GACV;EAIN;EAEA,MAAM,UAAU,KAAK,YAAY;EAEjC,KAAK,QAAQ,IAAI,KAAK;GACpB,MAAM,IAAI,WAAW,IAAI;GACzB;GACA,WAAW,KAAK,IAAI;EACtB,CAAC;EAED,OAAO;GACL,SAAS;GACT;EACF;CACF;CAEA,MAAa,OAAO,KAAa,SAA+C;EAC9E,iBAAiB,GAAG;EAEpB,KAAM,QAAgC;EAEtC,MAAM,UAAU,KAAK,QAAQ,IAAI,GAAG;EAEpC,QAAQ,QAAQ,UAAU,MAA1B;GACE,KAAK,aACH,OAAO,UACH;IACE,SAAS;IACT,QAAQ;GACV,IACA,EAAE,SAAS,KAAK;GAEtB,KAAK;IACH,IAAI,CAAC,WAAW,QAAQ,WAAW,QAAQ,UAAU,SACnD,OAAO;KACL,SAAS;KACT,QAAQ;IACV;IAEF,KAAK,QAAQ,OAAO,GAAG;IAEvB,OAAO,EAAE,SAAS,KAAK;EAE3B;CACF;CAEA,MAAa,KAAK,QAAuD;EACvE,IAAI,OAAO,UAAU,YAAY,OAAO,SAAS,IAAI,GACnD,MAAM,IAAI,UAAU,wBAAwB;EAE9C,KAAM,QAA8B;EAEpC,MAAM,UAA+B,CAAC;EAEtC,KAAK,MAAM,CAAC,KAAK,UAAU,KAAK,SAAS;GACvC,IAAI,CAAC,IAAI,WAAW,MAAM,GAAG;GAE7B,QAAQ,KAAK;IACX;IACA,SAAS,MAAM;IACf,WAAW,MAAM;GACnB,CAAC;EACH;EAEA,QAAQ,MAAM,GAAG,MAAM,EAAE,IAAI,cAAc,EAAE,GAAG,CAAC;EAEjD,OAAO;CACT;CAEA,aAAoD;EAClD,OAAO,EAAE,GAAG,KAAK,QAAQ;CAC3B;CAEA,cAA8B;EAC5B,KAAK,kBAAkB;EACvB,OAAO,KAAK,eAAe,SAAS;CACtC;AACF"}
@@ -0,0 +1,12 @@
1
+ import { type StorageDriver, type StorageObject, type StorageObjectInfo, type WriteOptions, type WriteResult, type DeleteOptions, type DeleteResult, type StorageDriverMetrics } from "@duraxis/storage";
2
+ export declare class MemoryStorageDriver implements StorageDriver {
3
+ private readonly entries;
4
+ private versionCounter;
5
+ private readonly metrics;
6
+ get(key: string): Promise<StorageObject | null>;
7
+ put(key: string, data: Uint8Array, options: WriteOptions): Promise<WriteResult>;
8
+ delete(key: string, options: DeleteOptions): Promise<DeleteResult>;
9
+ list(prefix: string): Promise<readonly StorageObjectInfo[]>;
10
+ getMetrics(): Readonly<StorageDriverMetrics>;
11
+ private nextVersion;
12
+ }
package/package.json CHANGED
@@ -1,6 +1,61 @@
1
1
  {
2
2
  "name": "@duraxis/storage-memory",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.1",
4
+ "description": "In-memory StorageDriver implementation for Duraxis development and tests.",
5
+ "license": "ISC",
6
+ "author": "João Paulo Dias <joaopdias.dev@gmail.com>",
7
+ "keywords": [
8
+ "duraxis",
9
+ "database",
10
+ "storage",
11
+ "memory",
12
+ "typescript"
13
+ ],
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/Joaopdiasventura/Duraxis.git",
17
+ "directory": "packages/storage-memory"
18
+ },
19
+ "homepage": "https://github.com/Joaopdiasventura/Duraxis/tree/main/packages/storage-memory#readme",
20
+ "bugs": {
21
+ "url": "https://github.com/Joaopdiasventura/Duraxis/issues"
22
+ },
23
+ "engines": {
24
+ "node": ">=22.12.0"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public",
28
+ "registry": "https://registry.npmjs.org/"
29
+ },
30
+ "type": "module",
31
+ "main": "./dist/index.cjs",
32
+ "module": "./dist/index.js",
33
+ "types": "./dist/index.d.ts",
34
+ "exports": {
35
+ ".": {
36
+ "types": "./dist/index.d.ts",
37
+ "import": "./dist/index.js",
38
+ "require": "./dist/index.cjs"
39
+ }
40
+ },
41
+ "files": [
42
+ "dist",
43
+ "README.md",
44
+ "LICENSE",
45
+ "CHANGELOG.md"
46
+ ],
47
+ "sideEffects": false,
48
+ "dependencies": {
49
+ "@duraxis/storage": "0.1.0"
50
+ },
51
+ "devDependencies": {
52
+ "@duraxis/storage-testkit": "0.1.0"
53
+ },
54
+ "scripts": {
55
+ "build": "vite build && tsc -p tsconfig.build.json",
56
+ "dev": "vite build --watch",
57
+ "typecheck": "tsc --noEmit",
58
+ "test": "vitest run",
59
+ "test:watch": "vitest"
60
+ }
6
61
  }