@matter/general 0.15.3 → 0.16.0-alpha.0-20250807-37b08c9bb

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 (37) hide show
  1. package/dist/cjs/storage/Storage.d.ts +20 -39
  2. package/dist/cjs/storage/Storage.d.ts.map +1 -1
  3. package/dist/cjs/storage/Storage.js +17 -7
  4. package/dist/cjs/storage/Storage.js.map +1 -1
  5. package/dist/cjs/storage/StorageBackendMemory.d.ts +5 -3
  6. package/dist/cjs/storage/StorageBackendMemory.d.ts.map +1 -1
  7. package/dist/cjs/storage/StorageBackendMemory.js +34 -1
  8. package/dist/cjs/storage/StorageBackendMemory.js.map +1 -1
  9. package/dist/cjs/storage/StorageContext.d.ts +20 -17
  10. package/dist/cjs/storage/StorageContext.d.ts.map +1 -1
  11. package/dist/cjs/storage/StorageContext.js +9 -12
  12. package/dist/cjs/storage/StorageContext.js.map +1 -1
  13. package/dist/cjs/storage/StorageManager.d.ts +3 -3
  14. package/dist/cjs/storage/StorageManager.d.ts.map +1 -1
  15. package/dist/cjs/storage/StorageManager.js.map +1 -1
  16. package/dist/cjs/storage/StorageService.d.ts +1 -1
  17. package/dist/esm/storage/Storage.d.ts +20 -39
  18. package/dist/esm/storage/Storage.d.ts.map +1 -1
  19. package/dist/esm/storage/Storage.js +17 -7
  20. package/dist/esm/storage/Storage.js.map +1 -1
  21. package/dist/esm/storage/StorageBackendMemory.d.ts +5 -3
  22. package/dist/esm/storage/StorageBackendMemory.d.ts.map +1 -1
  23. package/dist/esm/storage/StorageBackendMemory.js +35 -2
  24. package/dist/esm/storage/StorageBackendMemory.js.map +1 -1
  25. package/dist/esm/storage/StorageContext.d.ts +20 -17
  26. package/dist/esm/storage/StorageContext.d.ts.map +1 -1
  27. package/dist/esm/storage/StorageContext.js +9 -12
  28. package/dist/esm/storage/StorageContext.js.map +1 -1
  29. package/dist/esm/storage/StorageManager.d.ts +3 -3
  30. package/dist/esm/storage/StorageManager.d.ts.map +1 -1
  31. package/dist/esm/storage/StorageManager.js.map +1 -1
  32. package/dist/esm/storage/StorageService.d.ts +1 -1
  33. package/package.json +2 -2
  34. package/src/storage/Storage.ts +32 -46
  35. package/src/storage/StorageBackendMemory.ts +39 -3
  36. package/src/storage/StorageContext.ts +32 -36
  37. package/src/storage/StorageManager.ts +3 -3
@@ -11,34 +11,11 @@ export declare class StorageError extends MatterError {
11
11
  /**
12
12
  * Matter.js uses this key/value API to manage persistent state.
13
13
  */
14
- export interface Storage {
15
- readonly initialized: boolean;
16
- initialize(): MaybePromise<void>;
17
- close(): MaybePromise<void>;
18
- get(contexts: string[], key: string): MaybePromise<SupportedStorageTypes | undefined>;
19
- set(contexts: string[], values: Record<string, SupportedStorageTypes>): MaybePromise<void>;
20
- set(contexts: string[], key: string, value: SupportedStorageTypes): MaybePromise<void>;
21
- delete(contexts: string[], key: string): MaybePromise<void>;
22
- keys(contexts: string[]): MaybePromise<string[]>;
23
- values(contexts: string[]): MaybePromise<Record<string, SupportedStorageTypes>>;
24
- contexts(contexts: string[]): MaybePromise<string[]>;
25
- clearAll(contexts: string[]): MaybePromise<void>;
26
- }
27
- /**
28
- * Extended interface for storage that supports snapshotting.
29
- */
30
- export interface CloneableStorage {
31
- clone(): MaybePromise<Storage>;
32
- }
33
- export declare namespace CloneableStorage {
34
- function is<T extends {}>(storage: T): storage is T & CloneableStorage;
35
- function assert<T extends {}>(storage: T): asserts storage is T & CloneableStorage;
36
- }
37
- export declare abstract class MaybeAsyncStorage implements Storage {
38
- abstract initialized: boolean;
14
+ export declare abstract class Storage {
15
+ abstract readonly initialized: boolean;
39
16
  abstract initialize(): MaybePromise<void>;
40
17
  abstract close(): MaybePromise<void>;
41
- abstract get<T extends SupportedStorageTypes>(contexts: string[], key: string): MaybePromise<T | undefined>;
18
+ abstract get(contexts: string[], key: string): MaybePromise<SupportedStorageTypes | undefined>;
42
19
  abstract set(contexts: string[], values: Record<string, SupportedStorageTypes>): MaybePromise<void>;
43
20
  abstract set(contexts: string[], key: string, value: SupportedStorageTypes): MaybePromise<void>;
44
21
  abstract delete(contexts: string[], key: string): MaybePromise<void>;
@@ -46,19 +23,23 @@ export declare abstract class MaybeAsyncStorage implements Storage {
46
23
  abstract values(contexts: string[]): MaybePromise<Record<string, SupportedStorageTypes>>;
47
24
  abstract contexts(contexts: string[]): MaybePromise<string[]>;
48
25
  abstract clearAll(contexts: string[]): MaybePromise<void>;
26
+ /**
27
+ * Checks if a key exists in the storage for the given contexts.
28
+ * Important Note: This default implementation just reads the value for the key and checks if it is undefined.
29
+ * Please implement this method in your storage implementation if you want to optimize it.
30
+ */
31
+ has(contexts: string[], key: string): MaybePromise<boolean>;
32
+ abstract openBlob(contexts: string[], key: string): MaybePromise<Blob>;
33
+ abstract writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<Uint8Array>): MaybePromise<void>;
49
34
  }
50
- export declare abstract class SyncStorage implements Storage {
51
- abstract initialized: boolean;
52
- abstract initialize(): MaybePromise<void>;
53
- abstract close(): MaybePromise<void>;
54
- abstract get<T extends SupportedStorageTypes>(contexts: string[], key: string): T | undefined;
55
- abstract set(contexts: string[], values: Record<string, SupportedStorageTypes>): void;
56
- abstract set(contexts: string[], key: string, value: SupportedStorageTypes): void;
57
- abstract delete(contexts: string[], key: string): void;
58
- abstract keys(contexts: string[]): string[];
59
- abstract values(contexts: string[]): Record<string, SupportedStorageTypes>;
60
- abstract contexts(contexts: string[]): string[];
61
- abstract clearAll(contexts: string[]): void;
35
+ /**
36
+ * Extended interface for storage that supports snapshotting.
37
+ */
38
+ export interface CloneableStorage {
39
+ clone(): MaybePromise<Storage>;
40
+ }
41
+ export declare namespace CloneableStorage {
42
+ function is<T extends {}>(storage: T): storage is T & CloneableStorage;
43
+ function assert<T extends {}>(storage: T): asserts storage is T & CloneableStorage;
62
44
  }
63
- export type StorageOperationResult<S extends Storage, T = void> = S extends SyncStorage ? T : Promise<T>;
64
45
  //# sourceMappingURL=Storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../../src/storage/Storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../../src/storage/Storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAuB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,qBAAa,YAAa,SAAQ,WAAW;CAAG;AAEhD;;GAEG;AACH,8BAAsB,OAAO;IACzB,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAC9F,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC;IACnG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC;IAC/F,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;IACpE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IACzD,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACxF,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAC7D,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC;IAEzD;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC;IAQ3D,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;IACtE,QAAQ,CAAC,mBAAmB,CACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GACnC,YAAY,CAAC,IAAI,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;CAClC;AAED,yBAAiB,gBAAgB,CAAC;IAC9B,SAAgB,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,gBAAgB,CAE5E;IAED,SAAgB,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,gBAAgB,CAIxF;CACJ"}
@@ -19,12 +19,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var Storage_exports = {};
20
20
  __export(Storage_exports, {
21
21
  CloneableStorage: () => CloneableStorage,
22
- MaybeAsyncStorage: () => MaybeAsyncStorage,
23
- StorageError: () => StorageError,
24
- SyncStorage: () => SyncStorage
22
+ Storage: () => Storage,
23
+ StorageError: () => StorageError
25
24
  });
26
25
  module.exports = __toCommonJS(Storage_exports);
27
26
  var import_MatterError = require("../MatterError.js");
27
+ var import_Promises = require("../util/Promises.js");
28
28
  /**
29
29
  * @license
30
30
  * Copyright 2022-2025 Matter.js Authors
@@ -32,6 +32,20 @@ var import_MatterError = require("../MatterError.js");
32
32
  */
33
33
  class StorageError extends import_MatterError.MatterError {
34
34
  }
35
+ class Storage {
36
+ /**
37
+ * Checks if a key exists in the storage for the given contexts.
38
+ * Important Note: This default implementation just reads the value for the key and checks if it is undefined.
39
+ * Please implement this method in your storage implementation if you want to optimize it.
40
+ */
41
+ has(contexts, key) {
42
+ const value = this.get(contexts, key);
43
+ if (import_Promises.MaybePromise.is(value)) {
44
+ return import_Promises.MaybePromise.then(value, (v) => v !== void 0);
45
+ }
46
+ return value !== void 0;
47
+ }
48
+ }
35
49
  var CloneableStorage;
36
50
  ((CloneableStorage2) => {
37
51
  function is(storage) {
@@ -45,8 +59,4 @@ var CloneableStorage;
45
59
  }
46
60
  CloneableStorage2.assert = assert;
47
61
  })(CloneableStorage || (CloneableStorage = {}));
48
- class MaybeAsyncStorage {
49
- }
50
- class SyncStorage {
51
- }
52
62
  //# sourceMappingURL=Storage.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/storage/Storage.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,yBAAiD;AALjD;AAAA;AAAA;AAAA;AAAA;AASO,MAAM,qBAAqB,+BAAY;AAAC;AA0BxC,IAAU;AAAA,CAAV,CAAUA,sBAAV;AACI,WAAS,GAAiB,SAA6C;AAC1E,WAAO,WAAW,WAAW,OAAO,QAAQ,UAAU;AAAA,EAC1D;AAFO,EAAAA,kBAAS;AAIT,WAAS,OAAqB,SAAqD;AACtF,QAAI,CAAC,GAAG,OAAO,GAAG;AACd,YAAM,IAAI,uCAAoB,yDAAyD;AAAA,IAC3F;AAAA,EACJ;AAJO,EAAAA,kBAAS;AAAA,GALH;AAeV,MAAe,kBAAqC;AAY3D;AAGO,MAAe,YAA+B;AAYrD;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,yBAAiD;AACjD,sBAA6B;AAN7B;AAAA;AAAA;AAAA;AAAA;AASO,MAAM,qBAAqB,+BAAY;AAAC;AAKxC,MAAe,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkB1B,IAAI,UAAoB,KAAoC;AACxD,UAAM,QAAQ,KAAK,IAAI,UAAU,GAAG;AACpC,QAAI,6BAAa,GAAG,KAAK,GAAG;AACxB,aAAO,6BAAa,KAAK,OAAO,OAAK,MAAM,MAAS;AAAA,IACxD;AACA,WAAO,UAAU;AAAA,EACrB;AAQJ;AASO,IAAU;AAAA,CAAV,CAAUA,sBAAV;AACI,WAAS,GAAiB,SAA6C;AAC1E,WAAO,WAAW,WAAW,OAAO,QAAQ,UAAU;AAAA,EAC1D;AAFO,EAAAA,kBAAS;AAIT,WAAS,OAAqB,SAAqD;AACtF,QAAI,CAAC,GAAG,OAAO,GAAG;AACd,YAAM,IAAI,uCAAoB,yDAAyD;AAAA,IAC3F;AAAA,EACJ;AAJO,EAAAA,kBAAS;AAAA,GALH;",
5
5
  "names": ["CloneableStorage"]
6
6
  }
@@ -3,9 +3,9 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { CloneableStorage, SyncStorage } from "./Storage.js";
6
+ import { CloneableStorage, Storage } from "./Storage.js";
7
7
  import { SupportedStorageTypes } from "./StringifyTools.js";
8
- export declare class StorageBackendMemory extends SyncStorage implements CloneableStorage {
8
+ export declare class StorageBackendMemory extends Storage implements CloneableStorage {
9
9
  #private;
10
10
  protected store: any;
11
11
  protected isInitialized: boolean;
@@ -18,7 +18,9 @@ export declare class StorageBackendMemory extends SyncStorage implements Cloneab
18
18
  close(): Promise<void>;
19
19
  clear(): void;
20
20
  get data(): any;
21
- get<T extends SupportedStorageTypes>(contexts: string[], key: string): T | undefined;
21
+ get(contexts: string[], key: string): SupportedStorageTypes | undefined;
22
+ openBlob(contexts: string[], key: string): Blob;
23
+ writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<Uint8Array>): Promise<void>;
22
24
  set(contexts: string[], keyOrValues: string | Record<string, SupportedStorageTypes>, value?: SupportedStorageTypes): void;
23
25
  delete(contexts: string[], key: string): void;
24
26
  keys(contexts: string[]): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"StorageBackendMemory.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageBackendMemory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAgB,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,qBAAa,oBAAqB,SAAQ,WAAY,YAAW,gBAAgB;;IAGjE,SAAS,CAAC,KAAK,EAAE,GAAG;IAFhC,SAAS,CAAC,aAAa,UAAS;gBAEV,KAAK,GAAE,GAAQ;IAIrC,IAAI,WAAW,YAEd;WAEY,MAAM,CAAC,KAAK,GAAE,GAAQ;IAMnC,OAAO,CAAC,gBAAgB;IAOxB,UAAU;IAMV,KAAK;IAMC,KAAK;IAKX,KAAK;IAIL,IAAI,IAAI,QAEP;IAED,GAAG,CAAC,CAAC,SAAS,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAepF,GAAG,CACC,QAAQ,EAAE,MAAM,EAAE,EAClB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC3D,KAAK,CAAC,EAAE,qBAAqB;IAYjC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM;IAMtC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;IAMvB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;IASzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;IAkB3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;CAqB9B"}
1
+ {"version":3,"file":"StorageBackendMemory.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageBackendMemory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAgB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,qBAAa,oBAAqB,SAAQ,OAAQ,YAAW,gBAAgB;;IAG7D,SAAS,CAAC,KAAK,EAAE,GAAG;IAFhC,SAAS,CAAC,aAAa,UAAS;gBAEV,KAAK,GAAE,GAAQ;IAIrC,IAAI,WAAW,YAEd;WAEY,MAAM,CAAC,KAAK,GAAE,GAAQ;IAMnC,OAAO,CAAC,gBAAgB;IAOxB,UAAU;IAMV,KAAK;IAMC,KAAK;IAKX,KAAK;IAIL,IAAI,IAAI,QAEP;IAED,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAMvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAWzC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC7G,GAAG,CACC,QAAQ,EAAE,MAAM,EAAE,EAClB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC3D,KAAK,CAAC,EAAE,qBAAqB;IAYjC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM;IAMtC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;IAMvB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;IASzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;IAkB3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;CAqB9B"}
@@ -28,7 +28,7 @@ var import_Storage = require("./Storage.js");
28
28
  * Copyright 2022-2025 Matter.js Authors
29
29
  * SPDX-License-Identifier: Apache-2.0
30
30
  */
31
- class StorageBackendMemory extends import_Storage.SyncStorage {
31
+ class StorageBackendMemory extends import_Storage.Storage {
32
32
  constructor(store = {}) {
33
33
  super();
34
34
  this.store = store;
@@ -71,6 +71,39 @@ class StorageBackendMemory extends import_Storage.SyncStorage {
71
71
  if (!contexts.length || !key.length) throw new import_Storage.StorageError("Context and key must not be empty.");
72
72
  return this.store[this.createContextKey(contexts)]?.[key];
73
73
  }
74
+ openBlob(contexts, key) {
75
+ const value = this.get(contexts, key);
76
+ if (value === void 0) {
77
+ return new Blob([]);
78
+ }
79
+ if (!(value instanceof Uint8Array)) {
80
+ throw new import_Storage.StorageError("Value must be an Uint8Array to read as blob stream.");
81
+ }
82
+ return new Blob([value]);
83
+ }
84
+ async writeBlobFromStream(contexts, key, stream) {
85
+ this.#assertInitialized();
86
+ const reader = stream.getReader();
87
+ const chunks = [];
88
+ try {
89
+ let length = 0;
90
+ while (true) {
91
+ const { done, value } = await reader.read();
92
+ if (done) break;
93
+ chunks.push(value);
94
+ length += value.length;
95
+ }
96
+ const combined = new Uint8Array(length);
97
+ let offset = 0;
98
+ for (const chunk of chunks) {
99
+ combined.set(chunk, offset);
100
+ offset += chunk.length;
101
+ }
102
+ this.#setKey(contexts, key, combined);
103
+ } catch (error) {
104
+ throw new import_Storage.StorageError(`Error reading stream: ${error.message}`);
105
+ }
106
+ }
74
107
  #setKey(contexts, key, value) {
75
108
  if (!contexts.length || !key.length) throw new import_Storage.StorageError("Context and key must not be empty.");
76
109
  const contextKey = this.createContextKey(contexts);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/storage/StorageBackendMemory.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["value"]
6
6
  }
@@ -3,27 +3,30 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Storage, StorageOperationResult } from "./Storage.js";
6
+ import { MaybePromise } from "../util/Promises.js";
7
+ import { Storage } from "./Storage.js";
7
8
  import { SupportedStorageTypes } from "./StringifyTools.js";
8
- export interface StorageContextFactory<S extends Storage = any> {
9
- createContext(context: string): StorageContext<S>;
9
+ export interface StorageContextFactory {
10
+ createContext(context: string): StorageContext;
10
11
  }
11
- export declare class StorageContext<S extends Storage = any> implements StorageContextFactory<S> {
12
- private readonly storage;
12
+ export declare class StorageContext implements StorageContextFactory {
13
+ protected readonly storage: Storage;
13
14
  readonly thisContexts: string[];
14
- constructor(storage: S, thisContexts: string[]);
15
- get<T extends SupportedStorageTypes>(key: string, defaultValue?: T): StorageOperationResult<S, T>;
16
- has(key: string): StorageOperationResult<S, boolean>;
17
- set(key: string, value: SupportedStorageTypes): StorageOperationResult<S>;
18
- set(values: Record<string, SupportedStorageTypes>): StorageOperationResult<S>;
19
- delete(key: string): StorageOperationResult<S>;
20
- createContext(context: string): StorageContext<S>;
21
- keys(): StorageOperationResult<S, string[]>;
22
- values(): StorageOperationResult<S, Record<string, SupportedStorageTypes>>;
23
- contexts(): StorageOperationResult<S, string[]>;
15
+ constructor(storage: Storage, thisContexts: string[]);
16
+ get<T extends SupportedStorageTypes>(key: string, defaultValue?: T): MaybePromise<T>;
17
+ has(key: string): MaybePromise<boolean>;
18
+ set(key: string, value: SupportedStorageTypes): MaybePromise<void>;
19
+ set(values: Record<string, SupportedStorageTypes>): MaybePromise<void>;
20
+ delete(key: string): MaybePromise<void>;
21
+ createContext(context: string): StorageContext;
22
+ keys(): MaybePromise<string[]>;
23
+ values(): MaybePromise<Record<string, SupportedStorageTypes>>;
24
+ contexts(): MaybePromise<string[]>;
24
25
  /** Clears all keys in this context */
25
- clear(): StorageOperationResult<S>;
26
+ clear(): PromiseLike<void> | undefined;
26
27
  /** Clears all keys in this context and all created sub-contexts. */
27
- clearAll(): StorageOperationResult<S>;
28
+ clearAll(): MaybePromise<void>;
29
+ openBlob(key: string): MaybePromise<Blob>;
30
+ writeBlobFromStream(key: string, stream: ReadableStream<Uint8Array>): MaybePromise<void>;
28
31
  }
29
32
  //# sourceMappingURL=StorageContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageContext.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageContext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAgB,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,OAAO,GAAG,GAAG;IAC1D,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CACrD;AAED,qBAAa,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,GAAG,CAAE,YAAW,qBAAqB,CAAC,CAAC,CAAC;IAEhF,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE;gBADd,OAAO,EAAE,CAAC,EAClB,YAAY,EAAE,MAAM,EAAE;IAGnC,GAAG,CAAC,CAAC,SAAS,qBAAqB,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC;IAwBjG,GAAG,CAAC,GAAG,EAAE,MAAM;IAWf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC;IAQ7E,MAAM,CAAC,GAAG,EAAE,MAAM,GACwC,sBAAsB,CAAC,CAAC,CAAC;IAGnF,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAMjD,IAAI,IAC+C,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAGtF,MAAM,IAC+C,sBAAsB,CACnE,CAAC,EACD,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CACxC;IAGL,QAAQ,IAC+C,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAG1F,sCAAsC;IACtC,KAAK;IAyBL,oEAAoE;IACpE,QAAQ,IAC+C,sBAAsB,CAAC,CAAC,CAAC;CAEnF"}
1
+ {"version":3,"file":"StorageContext.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageContext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAgB,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IAClC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;CAClD;AAED,qBAAa,cAAe,YAAW,qBAAqB;IAEpD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE;gBADZ,OAAO,EAAE,OAAO,EAC1B,YAAY,EAAE,MAAM,EAAE;IAGnC,GAAG,CAAC,CAAC,SAAS,qBAAqB,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAwBpF,GAAG,CAAC,GAAG,EAAE,MAAM;IAIf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC;IAClE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC;IAQtE,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;IAM9C,IAAI;IAIJ,MAAM;IAIN,QAAQ;IAIR,sCAAsC;IACtC,KAAK;IAuBL,oEAAoE;IACpE,QAAQ;IAIR,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC;CAGtE"}
@@ -58,14 +58,7 @@ class StorageContext {
58
58
  return defaultValue;
59
59
  }
60
60
  has(key) {
61
- const value = this.storage.get(this.thisContexts, key);
62
- if (value !== void 0) {
63
- if (import_Promises.MaybePromise.is(value)) {
64
- return value.then((v) => v !== void 0);
65
- }
66
- return true;
67
- }
68
- return false;
61
+ return this.storage.has(this.thisContexts, key);
69
62
  }
70
63
  set(keyOrValues, value) {
71
64
  if (typeof keyOrValues === "string") {
@@ -110,10 +103,8 @@ class StorageContext {
110
103
  }
111
104
  });
112
105
  if (promises.length > 0) {
113
- return import_MatterError.MatterAggregateError.allSettled(promises, "Error while clearing storage").then(
114
- () => {
115
- }
116
- );
106
+ return import_MatterError.MatterAggregateError.allSettled(promises, "Error while clearing storage").then(() => {
107
+ });
117
108
  }
118
109
  return void 0;
119
110
  }
@@ -121,5 +112,11 @@ class StorageContext {
121
112
  clearAll() {
122
113
  return this.storage.clearAll(this.thisContexts);
123
114
  }
115
+ openBlob(key) {
116
+ return this.storage.openBlob(this.thisContexts, key);
117
+ }
118
+ writeBlobFromStream(key, stream) {
119
+ return this.storage.writeBlobFromStream(this.thisContexts, key, stream);
120
+ }
124
121
  }
125
122
  //# sourceMappingURL=StorageContext.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/storage/StorageContext.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["keys"]
6
6
  }
@@ -6,12 +6,12 @@
6
6
  import { MaybePromise } from "../util/Promises.js";
7
7
  import { Storage } from "./Storage.js";
8
8
  import { StorageContext, StorageContextFactory } from "./StorageContext.js";
9
- export declare class StorageManager<S extends Storage = any> implements StorageContextFactory<S> {
9
+ export declare class StorageManager implements StorageContextFactory {
10
10
  private storage;
11
11
  private initialized;
12
- constructor(storage: S);
12
+ constructor(storage: Storage);
13
13
  initialize(): MaybePromise<void>;
14
14
  close(): MaybePromise<void>;
15
- createContext(context: string): StorageContext<S>;
15
+ createContext(context: string): StorageContext;
16
16
  }
17
17
  //# sourceMappingURL=StorageManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageManager.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAgB,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,qBAAa,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,GAAG,CAAE,YAAW,qBAAqB,CAAC,CAAC,CAAC;IAGxE,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,WAAW,CAAS;gBAER,OAAO,EAAE,CAAC;IAE9B,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC;IAYhC,KAAK;IAKL,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;CAMpD"}
1
+ {"version":3,"file":"StorageManager.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAgB,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,qBAAa,cAAe,YAAW,qBAAqB;IAG5C,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,WAAW,CAAS;gBAER,OAAO,EAAE,OAAO;IAEpC,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC;IAYhC,KAAK;IAKL,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;CAMjD"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/storage/StorageManager.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,sBAA6B;AAC7B,qBAAsC;AACtC,4BAAsD;AARtD;AAAA;AAAA;AAAA;AAAA;AAUO,MAAM,eAA4E;AAAA,EAGrF,YAAoB,SAAY;AAAZ;AAAA,EAAa;AAAA,EAFzB,cAAc;AAAA,EAItB,aAAiC;AAC7B,QAAI,CAAC,KAAK,QAAQ,aAAa;AAC3B,YAAM,OAAO,KAAK,QAAQ,WAAW;AACrC,UAAI,6BAAa,GAAG,IAAI,GAAG;AACvB,eAAO,KAAK,KAAK,MAAM;AACnB,eAAK,cAAc;AAAA,QACvB,CAAC;AAAA,MACL;AAAA,IACJ;AACA,SAAK,cAAc;AAAA,EACvB;AAAA,EAEA,QAAQ;AACJ,SAAK,cAAc;AACnB,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AAAA,EAEA,cAAc,SAAoC;AAC9C,QAAI,CAAC,KAAK,YAAa,OAAM,IAAI,4BAAa,4CAA4C;AAC1F,QAAI,CAAC,QAAQ,OAAQ,OAAM,IAAI,4BAAa,sCAAsC;AAClF,QAAI,QAAQ,SAAS,GAAG,EAAG,OAAM,IAAI,4BAAa,gCAAgC;AAClF,WAAO,IAAI,qCAAe,KAAK,SAAS,CAAC,OAAO,CAAC;AAAA,EACrD;AACJ;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,sBAA6B;AAC7B,qBAAsC;AACtC,4BAAsD;AARtD;AAAA;AAAA;AAAA;AAAA;AAUO,MAAM,eAAgD;AAAA,EAGzD,YAAoB,SAAkB;AAAlB;AAAA,EAAmB;AAAA,EAF/B,cAAc;AAAA,EAItB,aAAiC;AAC7B,QAAI,CAAC,KAAK,QAAQ,aAAa;AAC3B,YAAM,OAAO,KAAK,QAAQ,WAAW;AACrC,UAAI,6BAAa,GAAG,IAAI,GAAG;AACvB,eAAO,KAAK,KAAK,MAAM;AACnB,eAAK,cAAc;AAAA,QACvB,CAAC;AAAA,MACL;AAAA,IACJ;AACA,SAAK,cAAc;AAAA,EACvB;AAAA,EAEA,QAAQ;AACJ,SAAK,cAAc;AACnB,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AAAA,EAEA,cAAc,SAAiC;AAC3C,QAAI,CAAC,KAAK,YAAa,OAAM,IAAI,4BAAa,4CAA4C;AAC1F,QAAI,CAAC,QAAQ,OAAQ,OAAM,IAAI,4BAAa,sCAAsC;AAClF,QAAI,QAAQ,SAAS,GAAG,EAAG,OAAM,IAAI,4BAAa,gCAAgC;AAClF,WAAO,IAAI,qCAAe,KAAK,SAAS,CAAC,OAAO,CAAC;AAAA,EACrD;AACJ;",
5
5
  "names": []
6
6
  }
@@ -20,7 +20,7 @@ export declare class StorageService {
20
20
  *
21
21
  * @param namespace a unique namespace identifier such as a root node ID
22
22
  */
23
- open(namespace: string): Promise<StorageManager<Storage>>;
23
+ open(namespace: string): Promise<StorageManager>;
24
24
  /**
25
25
  * Install a factory for opening storage. Without such a factory storage is unavailable.
26
26
  */
@@ -11,34 +11,11 @@ export declare class StorageError extends MatterError {
11
11
  /**
12
12
  * Matter.js uses this key/value API to manage persistent state.
13
13
  */
14
- export interface Storage {
15
- readonly initialized: boolean;
16
- initialize(): MaybePromise<void>;
17
- close(): MaybePromise<void>;
18
- get(contexts: string[], key: string): MaybePromise<SupportedStorageTypes | undefined>;
19
- set(contexts: string[], values: Record<string, SupportedStorageTypes>): MaybePromise<void>;
20
- set(contexts: string[], key: string, value: SupportedStorageTypes): MaybePromise<void>;
21
- delete(contexts: string[], key: string): MaybePromise<void>;
22
- keys(contexts: string[]): MaybePromise<string[]>;
23
- values(contexts: string[]): MaybePromise<Record<string, SupportedStorageTypes>>;
24
- contexts(contexts: string[]): MaybePromise<string[]>;
25
- clearAll(contexts: string[]): MaybePromise<void>;
26
- }
27
- /**
28
- * Extended interface for storage that supports snapshotting.
29
- */
30
- export interface CloneableStorage {
31
- clone(): MaybePromise<Storage>;
32
- }
33
- export declare namespace CloneableStorage {
34
- function is<T extends {}>(storage: T): storage is T & CloneableStorage;
35
- function assert<T extends {}>(storage: T): asserts storage is T & CloneableStorage;
36
- }
37
- export declare abstract class MaybeAsyncStorage implements Storage {
38
- abstract initialized: boolean;
14
+ export declare abstract class Storage {
15
+ abstract readonly initialized: boolean;
39
16
  abstract initialize(): MaybePromise<void>;
40
17
  abstract close(): MaybePromise<void>;
41
- abstract get<T extends SupportedStorageTypes>(contexts: string[], key: string): MaybePromise<T | undefined>;
18
+ abstract get(contexts: string[], key: string): MaybePromise<SupportedStorageTypes | undefined>;
42
19
  abstract set(contexts: string[], values: Record<string, SupportedStorageTypes>): MaybePromise<void>;
43
20
  abstract set(contexts: string[], key: string, value: SupportedStorageTypes): MaybePromise<void>;
44
21
  abstract delete(contexts: string[], key: string): MaybePromise<void>;
@@ -46,19 +23,23 @@ export declare abstract class MaybeAsyncStorage implements Storage {
46
23
  abstract values(contexts: string[]): MaybePromise<Record<string, SupportedStorageTypes>>;
47
24
  abstract contexts(contexts: string[]): MaybePromise<string[]>;
48
25
  abstract clearAll(contexts: string[]): MaybePromise<void>;
26
+ /**
27
+ * Checks if a key exists in the storage for the given contexts.
28
+ * Important Note: This default implementation just reads the value for the key and checks if it is undefined.
29
+ * Please implement this method in your storage implementation if you want to optimize it.
30
+ */
31
+ has(contexts: string[], key: string): MaybePromise<boolean>;
32
+ abstract openBlob(contexts: string[], key: string): MaybePromise<Blob>;
33
+ abstract writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<Uint8Array>): MaybePromise<void>;
49
34
  }
50
- export declare abstract class SyncStorage implements Storage {
51
- abstract initialized: boolean;
52
- abstract initialize(): MaybePromise<void>;
53
- abstract close(): MaybePromise<void>;
54
- abstract get<T extends SupportedStorageTypes>(contexts: string[], key: string): T | undefined;
55
- abstract set(contexts: string[], values: Record<string, SupportedStorageTypes>): void;
56
- abstract set(contexts: string[], key: string, value: SupportedStorageTypes): void;
57
- abstract delete(contexts: string[], key: string): void;
58
- abstract keys(contexts: string[]): string[];
59
- abstract values(contexts: string[]): Record<string, SupportedStorageTypes>;
60
- abstract contexts(contexts: string[]): string[];
61
- abstract clearAll(contexts: string[]): void;
35
+ /**
36
+ * Extended interface for storage that supports snapshotting.
37
+ */
38
+ export interface CloneableStorage {
39
+ clone(): MaybePromise<Storage>;
40
+ }
41
+ export declare namespace CloneableStorage {
42
+ function is<T extends {}>(storage: T): storage is T & CloneableStorage;
43
+ function assert<T extends {}>(storage: T): asserts storage is T & CloneableStorage;
62
44
  }
63
- export type StorageOperationResult<S extends Storage, T = void> = S extends SyncStorage ? T : Promise<T>;
64
45
  //# sourceMappingURL=Storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../../src/storage/Storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAuB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,qBAAa,YAAa,SAAQ,WAAW;CAAG;AAEhD;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IACtF,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3F,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACvF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAChF,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;CAClC;AAED,yBAAiB,gBAAgB,CAAC;IAC9B,SAAgB,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,gBAAgB,CAE5E;IAED,SAAgB,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,gBAAgB,CAIxF;CACJ;AAKD,8BAAsB,iBAAkB,YAAW,OAAO;IACtD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,SAAS,CAAC;IAC3G,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC;IACnG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC;IAC/F,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;IACpE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IACzD,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACxF,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAC7D,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC;CAC5D;AAGD,8BAAsB,WAAY,YAAW,OAAO;IAChD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAC7F,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,IAAI;IACrF,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IACjF,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IACtD,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAC3C,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAC1E,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAC/C,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;CAC9C;AAED,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../../src/storage/Storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAuB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,qBAAa,YAAa,SAAQ,WAAW;CAAG;AAEhD;;GAEG;AACH,8BAAsB,OAAO;IACzB,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAC9F,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC;IACnG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC;IAC/F,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;IACpE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IACzD,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACxF,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAC7D,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC;IAEzD;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC;IAQ3D,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;IACtE,QAAQ,CAAC,mBAAmB,CACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GACnC,YAAY,CAAC,IAAI,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;CAClC;AAED,yBAAiB,gBAAgB,CAAC;IAC9B,SAAgB,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,gBAAgB,CAE5E;IAED,SAAgB,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,gBAAgB,CAIxF;CACJ"}
@@ -4,8 +4,23 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { ImplementationError, MatterError } from "../MatterError.js";
7
+ import { MaybePromise } from "../util/Promises.js";
7
8
  class StorageError extends MatterError {
8
9
  }
10
+ class Storage {
11
+ /**
12
+ * Checks if a key exists in the storage for the given contexts.
13
+ * Important Note: This default implementation just reads the value for the key and checks if it is undefined.
14
+ * Please implement this method in your storage implementation if you want to optimize it.
15
+ */
16
+ has(contexts, key) {
17
+ const value = this.get(contexts, key);
18
+ if (MaybePromise.is(value)) {
19
+ return MaybePromise.then(value, (v) => v !== void 0);
20
+ }
21
+ return value !== void 0;
22
+ }
23
+ }
9
24
  var CloneableStorage;
10
25
  ((CloneableStorage2) => {
11
26
  function is(storage) {
@@ -19,14 +34,9 @@ var CloneableStorage;
19
34
  }
20
35
  CloneableStorage2.assert = assert;
21
36
  })(CloneableStorage || (CloneableStorage = {}));
22
- class MaybeAsyncStorage {
23
- }
24
- class SyncStorage {
25
- }
26
37
  export {
27
38
  CloneableStorage,
28
- MaybeAsyncStorage,
29
- StorageError,
30
- SyncStorage
39
+ Storage,
40
+ StorageError
31
41
  };
32
42
  //# sourceMappingURL=Storage.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/storage/Storage.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,qBAAqB,mBAAmB;AAI1C,MAAM,qBAAqB,YAAY;AAAC;AA0BxC,IAAU;AAAA,CAAV,CAAUA,sBAAV;AACI,WAAS,GAAiB,SAA6C;AAC1E,WAAO,WAAW,WAAW,OAAO,QAAQ,UAAU;AAAA,EAC1D;AAFO,EAAAA,kBAAS;AAIT,WAAS,OAAqB,SAAqD;AACtF,QAAI,CAAC,GAAG,OAAO,GAAG;AACd,YAAM,IAAI,oBAAoB,yDAAyD;AAAA,IAC3F;AAAA,EACJ;AAJO,EAAAA,kBAAS;AAAA,GALH;AAeV,MAAe,kBAAqC;AAY3D;AAGO,MAAe,YAA+B;AAYrD;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,qBAAqB,mBAAmB;AACjD,SAAS,oBAAoB;AAGtB,MAAM,qBAAqB,YAAY;AAAC;AAKxC,MAAe,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkB1B,IAAI,UAAoB,KAAoC;AACxD,UAAM,QAAQ,KAAK,IAAI,UAAU,GAAG;AACpC,QAAI,aAAa,GAAG,KAAK,GAAG;AACxB,aAAO,aAAa,KAAK,OAAO,OAAK,MAAM,MAAS;AAAA,IACxD;AACA,WAAO,UAAU;AAAA,EACrB;AAQJ;AASO,IAAU;AAAA,CAAV,CAAUA,sBAAV;AACI,WAAS,GAAiB,SAA6C;AAC1E,WAAO,WAAW,WAAW,OAAO,QAAQ,UAAU;AAAA,EAC1D;AAFO,EAAAA,kBAAS;AAIT,WAAS,OAAqB,SAAqD;AACtF,QAAI,CAAC,GAAG,OAAO,GAAG;AACd,YAAM,IAAI,oBAAoB,yDAAyD;AAAA,IAC3F;AAAA,EACJ;AAJO,EAAAA,kBAAS;AAAA,GALH;",
5
5
  "names": ["CloneableStorage"]
6
6
  }
@@ -3,9 +3,9 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { CloneableStorage, SyncStorage } from "./Storage.js";
6
+ import { CloneableStorage, Storage } from "./Storage.js";
7
7
  import { SupportedStorageTypes } from "./StringifyTools.js";
8
- export declare class StorageBackendMemory extends SyncStorage implements CloneableStorage {
8
+ export declare class StorageBackendMemory extends Storage implements CloneableStorage {
9
9
  #private;
10
10
  protected store: any;
11
11
  protected isInitialized: boolean;
@@ -18,7 +18,9 @@ export declare class StorageBackendMemory extends SyncStorage implements Cloneab
18
18
  close(): Promise<void>;
19
19
  clear(): void;
20
20
  get data(): any;
21
- get<T extends SupportedStorageTypes>(contexts: string[], key: string): T | undefined;
21
+ get(contexts: string[], key: string): SupportedStorageTypes | undefined;
22
+ openBlob(contexts: string[], key: string): Blob;
23
+ writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<Uint8Array>): Promise<void>;
22
24
  set(contexts: string[], keyOrValues: string | Record<string, SupportedStorageTypes>, value?: SupportedStorageTypes): void;
23
25
  delete(contexts: string[], key: string): void;
24
26
  keys(contexts: string[]): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"StorageBackendMemory.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageBackendMemory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAgB,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,qBAAa,oBAAqB,SAAQ,WAAY,YAAW,gBAAgB;;IAGjE,SAAS,CAAC,KAAK,EAAE,GAAG;IAFhC,SAAS,CAAC,aAAa,UAAS;gBAEV,KAAK,GAAE,GAAQ;IAIrC,IAAI,WAAW,YAEd;WAEY,MAAM,CAAC,KAAK,GAAE,GAAQ;IAMnC,OAAO,CAAC,gBAAgB;IAOxB,UAAU;IAMV,KAAK;IAMC,KAAK;IAKX,KAAK;IAIL,IAAI,IAAI,QAEP;IAED,GAAG,CAAC,CAAC,SAAS,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAepF,GAAG,CACC,QAAQ,EAAE,MAAM,EAAE,EAClB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC3D,KAAK,CAAC,EAAE,qBAAqB;IAYjC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM;IAMtC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;IAMvB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;IASzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;IAkB3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;CAqB9B"}
1
+ {"version":3,"file":"StorageBackendMemory.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageBackendMemory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAgB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,qBAAa,oBAAqB,SAAQ,OAAQ,YAAW,gBAAgB;;IAG7D,SAAS,CAAC,KAAK,EAAE,GAAG;IAFhC,SAAS,CAAC,aAAa,UAAS;gBAEV,KAAK,GAAE,GAAQ;IAIrC,IAAI,WAAW,YAEd;WAEY,MAAM,CAAC,KAAK,GAAE,GAAQ;IAMnC,OAAO,CAAC,gBAAgB;IAOxB,UAAU;IAMV,KAAK;IAMC,KAAK;IAKX,KAAK;IAIL,IAAI,IAAI,QAEP;IAED,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAMvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAWzC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC7G,GAAG,CACC,QAAQ,EAAE,MAAM,EAAE,EAClB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC3D,KAAK,CAAC,EAAE,qBAAqB;IAYjC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM;IAMtC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;IAMvB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;IASzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;IAkB3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;CAqB9B"}
@@ -4,8 +4,8 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { deepCopy } from "#util/DeepCopy.js";
7
- import { StorageError, SyncStorage } from "./Storage.js";
8
- class StorageBackendMemory extends SyncStorage {
7
+ import { Storage, StorageError } from "./Storage.js";
8
+ class StorageBackendMemory extends Storage {
9
9
  constructor(store = {}) {
10
10
  super();
11
11
  this.store = store;
@@ -48,6 +48,39 @@ class StorageBackendMemory extends SyncStorage {
48
48
  if (!contexts.length || !key.length) throw new StorageError("Context and key must not be empty.");
49
49
  return this.store[this.createContextKey(contexts)]?.[key];
50
50
  }
51
+ openBlob(contexts, key) {
52
+ const value = this.get(contexts, key);
53
+ if (value === void 0) {
54
+ return new Blob([]);
55
+ }
56
+ if (!(value instanceof Uint8Array)) {
57
+ throw new StorageError("Value must be an Uint8Array to read as blob stream.");
58
+ }
59
+ return new Blob([value]);
60
+ }
61
+ async writeBlobFromStream(contexts, key, stream) {
62
+ this.#assertInitialized();
63
+ const reader = stream.getReader();
64
+ const chunks = [];
65
+ try {
66
+ let length = 0;
67
+ while (true) {
68
+ const { done, value } = await reader.read();
69
+ if (done) break;
70
+ chunks.push(value);
71
+ length += value.length;
72
+ }
73
+ const combined = new Uint8Array(length);
74
+ let offset = 0;
75
+ for (const chunk of chunks) {
76
+ combined.set(chunk, offset);
77
+ offset += chunk.length;
78
+ }
79
+ this.#setKey(contexts, key, combined);
80
+ } catch (error) {
81
+ throw new StorageError(`Error reading stream: ${error.message}`);
82
+ }
83
+ }
51
84
  #setKey(contexts, key, value) {
52
85
  if (!contexts.length || !key.length) throw new StorageError("Context and key must not be empty.");
53
86
  const contextKey = this.createContextKey(contexts);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/storage/StorageBackendMemory.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["value"]
6
6
  }
@@ -3,27 +3,30 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Storage, StorageOperationResult } from "./Storage.js";
6
+ import { MaybePromise } from "../util/Promises.js";
7
+ import { Storage } from "./Storage.js";
7
8
  import { SupportedStorageTypes } from "./StringifyTools.js";
8
- export interface StorageContextFactory<S extends Storage = any> {
9
- createContext(context: string): StorageContext<S>;
9
+ export interface StorageContextFactory {
10
+ createContext(context: string): StorageContext;
10
11
  }
11
- export declare class StorageContext<S extends Storage = any> implements StorageContextFactory<S> {
12
- private readonly storage;
12
+ export declare class StorageContext implements StorageContextFactory {
13
+ protected readonly storage: Storage;
13
14
  readonly thisContexts: string[];
14
- constructor(storage: S, thisContexts: string[]);
15
- get<T extends SupportedStorageTypes>(key: string, defaultValue?: T): StorageOperationResult<S, T>;
16
- has(key: string): StorageOperationResult<S, boolean>;
17
- set(key: string, value: SupportedStorageTypes): StorageOperationResult<S>;
18
- set(values: Record<string, SupportedStorageTypes>): StorageOperationResult<S>;
19
- delete(key: string): StorageOperationResult<S>;
20
- createContext(context: string): StorageContext<S>;
21
- keys(): StorageOperationResult<S, string[]>;
22
- values(): StorageOperationResult<S, Record<string, SupportedStorageTypes>>;
23
- contexts(): StorageOperationResult<S, string[]>;
15
+ constructor(storage: Storage, thisContexts: string[]);
16
+ get<T extends SupportedStorageTypes>(key: string, defaultValue?: T): MaybePromise<T>;
17
+ has(key: string): MaybePromise<boolean>;
18
+ set(key: string, value: SupportedStorageTypes): MaybePromise<void>;
19
+ set(values: Record<string, SupportedStorageTypes>): MaybePromise<void>;
20
+ delete(key: string): MaybePromise<void>;
21
+ createContext(context: string): StorageContext;
22
+ keys(): MaybePromise<string[]>;
23
+ values(): MaybePromise<Record<string, SupportedStorageTypes>>;
24
+ contexts(): MaybePromise<string[]>;
24
25
  /** Clears all keys in this context */
25
- clear(): StorageOperationResult<S>;
26
+ clear(): PromiseLike<void> | undefined;
26
27
  /** Clears all keys in this context and all created sub-contexts. */
27
- clearAll(): StorageOperationResult<S>;
28
+ clearAll(): MaybePromise<void>;
29
+ openBlob(key: string): MaybePromise<Blob>;
30
+ writeBlobFromStream(key: string, stream: ReadableStream<Uint8Array>): MaybePromise<void>;
28
31
  }
29
32
  //# sourceMappingURL=StorageContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageContext.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageContext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAgB,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,OAAO,GAAG,GAAG;IAC1D,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CACrD;AAED,qBAAa,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,GAAG,CAAE,YAAW,qBAAqB,CAAC,CAAC,CAAC;IAEhF,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE;gBADd,OAAO,EAAE,CAAC,EAClB,YAAY,EAAE,MAAM,EAAE;IAGnC,GAAG,CAAC,CAAC,SAAS,qBAAqB,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC;IAwBjG,GAAG,CAAC,GAAG,EAAE,MAAM;IAWf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC;IAQ7E,MAAM,CAAC,GAAG,EAAE,MAAM,GACwC,sBAAsB,CAAC,CAAC,CAAC;IAGnF,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAMjD,IAAI,IAC+C,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAGtF,MAAM,IAC+C,sBAAsB,CACnE,CAAC,EACD,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CACxC;IAGL,QAAQ,IAC+C,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAG1F,sCAAsC;IACtC,KAAK;IAyBL,oEAAoE;IACpE,QAAQ,IAC+C,sBAAsB,CAAC,CAAC,CAAC;CAEnF"}
1
+ {"version":3,"file":"StorageContext.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageContext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAgB,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IAClC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;CAClD;AAED,qBAAa,cAAe,YAAW,qBAAqB;IAEpD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE;gBADZ,OAAO,EAAE,OAAO,EAC1B,YAAY,EAAE,MAAM,EAAE;IAGnC,GAAG,CAAC,CAAC,SAAS,qBAAqB,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAwBpF,GAAG,CAAC,GAAG,EAAE,MAAM;IAIf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC;IAClE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC;IAQtE,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;IAM9C,IAAI;IAIJ,MAAM;IAIN,QAAQ;IAIR,sCAAsC;IACtC,KAAK;IAuBL,oEAAoE;IACpE,QAAQ;IAIR,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC;CAGtE"}
@@ -35,14 +35,7 @@ class StorageContext {
35
35
  return defaultValue;
36
36
  }
37
37
  has(key) {
38
- const value = this.storage.get(this.thisContexts, key);
39
- if (value !== void 0) {
40
- if (MaybePromise.is(value)) {
41
- return value.then((v) => v !== void 0);
42
- }
43
- return true;
44
- }
45
- return false;
38
+ return this.storage.has(this.thisContexts, key);
46
39
  }
47
40
  set(keyOrValues, value) {
48
41
  if (typeof keyOrValues === "string") {
@@ -87,10 +80,8 @@ class StorageContext {
87
80
  }
88
81
  });
89
82
  if (promises.length > 0) {
90
- return MatterAggregateError.allSettled(promises, "Error while clearing storage").then(
91
- () => {
92
- }
93
- );
83
+ return MatterAggregateError.allSettled(promises, "Error while clearing storage").then(() => {
84
+ });
94
85
  }
95
86
  return void 0;
96
87
  }
@@ -98,6 +89,12 @@ class StorageContext {
98
89
  clearAll() {
99
90
  return this.storage.clearAll(this.thisContexts);
100
91
  }
92
+ openBlob(key) {
93
+ return this.storage.openBlob(this.thisContexts, key);
94
+ }
95
+ writeBlobFromStream(key, stream) {
96
+ return this.storage.writeBlobFromStream(this.thisContexts, key, stream);
97
+ }
101
98
  }
102
99
  export {
103
100
  StorageContext
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/storage/StorageContext.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["keys"]
6
6
  }
@@ -6,12 +6,12 @@
6
6
  import { MaybePromise } from "../util/Promises.js";
7
7
  import { Storage } from "./Storage.js";
8
8
  import { StorageContext, StorageContextFactory } from "./StorageContext.js";
9
- export declare class StorageManager<S extends Storage = any> implements StorageContextFactory<S> {
9
+ export declare class StorageManager implements StorageContextFactory {
10
10
  private storage;
11
11
  private initialized;
12
- constructor(storage: S);
12
+ constructor(storage: Storage);
13
13
  initialize(): MaybePromise<void>;
14
14
  close(): MaybePromise<void>;
15
- createContext(context: string): StorageContext<S>;
15
+ createContext(context: string): StorageContext;
16
16
  }
17
17
  //# sourceMappingURL=StorageManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageManager.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAgB,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,qBAAa,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,GAAG,CAAE,YAAW,qBAAqB,CAAC,CAAC,CAAC;IAGxE,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,WAAW,CAAS;gBAER,OAAO,EAAE,CAAC;IAE9B,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC;IAYhC,KAAK;IAKL,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;CAMpD"}
1
+ {"version":3,"file":"StorageManager.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAgB,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,qBAAa,cAAe,YAAW,qBAAqB;IAG5C,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,WAAW,CAAS;gBAER,OAAO,EAAE,OAAO;IAEpC,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC;IAYhC,KAAK;IAKL,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;CAMjD"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/storage/StorageManager.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,oBAAoB;AAC7B,SAAkB,oBAAoB;AACtC,SAAS,sBAA6C;AAE/C,MAAM,eAA4E;AAAA,EAGrF,YAAoB,SAAY;AAAZ;AAAA,EAAa;AAAA,EAFzB,cAAc;AAAA,EAItB,aAAiC;AAC7B,QAAI,CAAC,KAAK,QAAQ,aAAa;AAC3B,YAAM,OAAO,KAAK,QAAQ,WAAW;AACrC,UAAI,aAAa,GAAG,IAAI,GAAG;AACvB,eAAO,KAAK,KAAK,MAAM;AACnB,eAAK,cAAc;AAAA,QACvB,CAAC;AAAA,MACL;AAAA,IACJ;AACA,SAAK,cAAc;AAAA,EACvB;AAAA,EAEA,QAAQ;AACJ,SAAK,cAAc;AACnB,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AAAA,EAEA,cAAc,SAAoC;AAC9C,QAAI,CAAC,KAAK,YAAa,OAAM,IAAI,aAAa,4CAA4C;AAC1F,QAAI,CAAC,QAAQ,OAAQ,OAAM,IAAI,aAAa,sCAAsC;AAClF,QAAI,QAAQ,SAAS,GAAG,EAAG,OAAM,IAAI,aAAa,gCAAgC;AAClF,WAAO,IAAI,eAAe,KAAK,SAAS,CAAC,OAAO,CAAC;AAAA,EACrD;AACJ;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,oBAAoB;AAC7B,SAAkB,oBAAoB;AACtC,SAAS,sBAA6C;AAE/C,MAAM,eAAgD;AAAA,EAGzD,YAAoB,SAAkB;AAAlB;AAAA,EAAmB;AAAA,EAF/B,cAAc;AAAA,EAItB,aAAiC;AAC7B,QAAI,CAAC,KAAK,QAAQ,aAAa;AAC3B,YAAM,OAAO,KAAK,QAAQ,WAAW;AACrC,UAAI,aAAa,GAAG,IAAI,GAAG;AACvB,eAAO,KAAK,KAAK,MAAM;AACnB,eAAK,cAAc;AAAA,QACvB,CAAC;AAAA,MACL;AAAA,IACJ;AACA,SAAK,cAAc;AAAA,EACvB;AAAA,EAEA,QAAQ;AACJ,SAAK,cAAc;AACnB,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AAAA,EAEA,cAAc,SAAiC;AAC3C,QAAI,CAAC,KAAK,YAAa,OAAM,IAAI,aAAa,4CAA4C;AAC1F,QAAI,CAAC,QAAQ,OAAQ,OAAM,IAAI,aAAa,sCAAsC;AAClF,QAAI,QAAQ,SAAS,GAAG,EAAG,OAAM,IAAI,aAAa,gCAAgC;AAClF,WAAO,IAAI,eAAe,KAAK,SAAS,CAAC,OAAO,CAAC;AAAA,EACrD;AACJ;",
5
5
  "names": []
6
6
  }
@@ -20,7 +20,7 @@ export declare class StorageService {
20
20
  *
21
21
  * @param namespace a unique namespace identifier such as a root node ID
22
22
  */
23
- open(namespace: string): Promise<StorageManager<Storage>>;
23
+ open(namespace: string): Promise<StorageManager>;
24
24
  /**
25
25
  * Install a factory for opening storage. Without such a factory storage is unavailable.
26
26
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/general",
3
- "version": "0.15.3",
3
+ "version": "0.16.0-alpha.0-20250807-37b08c9bb",
4
4
  "description": "Non-Matter support for Matter.js",
5
5
  "keywords": [
6
6
  "iot",
@@ -36,7 +36,7 @@
36
36
  "@noble/curves": "^1.9.5"
37
37
  },
38
38
  "devDependencies": {
39
- "@matter/testing": "0.15.3"
39
+ "@matter/testing": "0.16.0-alpha.0-20250807-37b08c9bb"
40
40
  },
41
41
  "files": [
42
42
  "dist/**/*",
@@ -12,18 +12,38 @@ export class StorageError extends MatterError {}
12
12
  /**
13
13
  * Matter.js uses this key/value API to manage persistent state.
14
14
  */
15
- export interface Storage {
16
- readonly initialized: boolean;
17
- initialize(): MaybePromise<void>;
18
- close(): MaybePromise<void>;
19
- get(contexts: string[], key: string): MaybePromise<SupportedStorageTypes | undefined>;
20
- set(contexts: string[], values: Record<string, SupportedStorageTypes>): MaybePromise<void>;
21
- set(contexts: string[], key: string, value: SupportedStorageTypes): MaybePromise<void>;
22
- delete(contexts: string[], key: string): MaybePromise<void>;
23
- keys(contexts: string[]): MaybePromise<string[]>;
24
- values(contexts: string[]): MaybePromise<Record<string, SupportedStorageTypes>>;
25
- contexts(contexts: string[]): MaybePromise<string[]>;
26
- clearAll(contexts: string[]): MaybePromise<void>;
15
+ export abstract class Storage {
16
+ abstract readonly initialized: boolean;
17
+ abstract initialize(): MaybePromise<void>;
18
+ abstract close(): MaybePromise<void>;
19
+ abstract get(contexts: string[], key: string): MaybePromise<SupportedStorageTypes | undefined>;
20
+ abstract set(contexts: string[], values: Record<string, SupportedStorageTypes>): MaybePromise<void>;
21
+ abstract set(contexts: string[], key: string, value: SupportedStorageTypes): MaybePromise<void>;
22
+ abstract delete(contexts: string[], key: string): MaybePromise<void>;
23
+ abstract keys(contexts: string[]): MaybePromise<string[]>;
24
+ abstract values(contexts: string[]): MaybePromise<Record<string, SupportedStorageTypes>>;
25
+ abstract contexts(contexts: string[]): MaybePromise<string[]>;
26
+ abstract clearAll(contexts: string[]): MaybePromise<void>;
27
+
28
+ /**
29
+ * Checks if a key exists in the storage for the given contexts.
30
+ * Important Note: This default implementation just reads the value for the key and checks if it is undefined.
31
+ * Please implement this method in your storage implementation if you want to optimize it.
32
+ */
33
+ has(contexts: string[], key: string): MaybePromise<boolean> {
34
+ const value = this.get(contexts, key);
35
+ if (MaybePromise.is(value)) {
36
+ return MaybePromise.then(value, v => v !== undefined);
37
+ }
38
+ return value !== undefined;
39
+ }
40
+
41
+ abstract openBlob(contexts: string[], key: string): MaybePromise<Blob>;
42
+ abstract writeBlobFromStream(
43
+ contexts: string[],
44
+ key: string,
45
+ stream: ReadableStream<Uint8Array>,
46
+ ): MaybePromise<void>;
27
47
  }
28
48
 
29
49
  /**
@@ -44,37 +64,3 @@ export namespace CloneableStorage {
44
64
  }
45
65
  }
46
66
  }
47
-
48
- // This extra class is needed because of https://github.com/microsoft/TypeScript/issues/57905 in order
49
- // to have the generics typing support on the "get" method and can be removed when the TS issue is fixed
50
- // or we remove the legacy API.
51
- export abstract class MaybeAsyncStorage implements Storage {
52
- abstract initialized: boolean;
53
- abstract initialize(): MaybePromise<void>;
54
- abstract close(): MaybePromise<void>;
55
- abstract get<T extends SupportedStorageTypes>(contexts: string[], key: string): MaybePromise<T | undefined>;
56
- abstract set(contexts: string[], values: Record<string, SupportedStorageTypes>): MaybePromise<void>;
57
- abstract set(contexts: string[], key: string, value: SupportedStorageTypes): MaybePromise<void>;
58
- abstract delete(contexts: string[], key: string): MaybePromise<void>;
59
- abstract keys(contexts: string[]): MaybePromise<string[]>;
60
- abstract values(contexts: string[]): MaybePromise<Record<string, SupportedStorageTypes>>;
61
- abstract contexts(contexts: string[]): MaybePromise<string[]>;
62
- abstract clearAll(contexts: string[]): MaybePromise<void>;
63
- }
64
-
65
- // This can be removed once we remove the legacy API
66
- export abstract class SyncStorage implements Storage {
67
- abstract initialized: boolean;
68
- abstract initialize(): MaybePromise<void>;
69
- abstract close(): MaybePromise<void>;
70
- abstract get<T extends SupportedStorageTypes>(contexts: string[], key: string): T | undefined;
71
- abstract set(contexts: string[], values: Record<string, SupportedStorageTypes>): void;
72
- abstract set(contexts: string[], key: string, value: SupportedStorageTypes): void;
73
- abstract delete(contexts: string[], key: string): void;
74
- abstract keys(contexts: string[]): string[];
75
- abstract values(contexts: string[]): Record<string, SupportedStorageTypes>;
76
- abstract contexts(contexts: string[]): string[];
77
- abstract clearAll(contexts: string[]): void;
78
- }
79
-
80
- export type StorageOperationResult<S extends Storage, T = void> = S extends SyncStorage ? T : Promise<T>;
@@ -5,10 +5,10 @@
5
5
  */
6
6
 
7
7
  import { deepCopy } from "#util/DeepCopy.js";
8
- import { CloneableStorage, StorageError, SyncStorage } from "./Storage.js";
8
+ import { CloneableStorage, Storage, StorageError } from "./Storage.js";
9
9
  import { SupportedStorageTypes } from "./StringifyTools.js";
10
10
 
11
- export class StorageBackendMemory extends SyncStorage implements CloneableStorage {
11
+ export class StorageBackendMemory extends Storage implements CloneableStorage {
12
12
  protected isInitialized = false;
13
13
 
14
14
  constructor(protected store: any = {}) {
@@ -57,12 +57,48 @@ export class StorageBackendMemory extends SyncStorage implements CloneableStorag
57
57
  return this.store;
58
58
  }
59
59
 
60
- get<T extends SupportedStorageTypes>(contexts: string[], key: string): T | undefined {
60
+ get(contexts: string[], key: string): SupportedStorageTypes | undefined {
61
61
  this.#assertInitialized();
62
62
  if (!contexts.length || !key.length) throw new StorageError("Context and key must not be empty.");
63
63
  return this.store[this.createContextKey(contexts)]?.[key];
64
64
  }
65
65
 
66
+ openBlob(contexts: string[], key: string): Blob {
67
+ const value = this.get(contexts, key);
68
+ if (value === undefined) {
69
+ return new Blob([]);
70
+ }
71
+ if (!(value instanceof Uint8Array)) {
72
+ throw new StorageError("Value must be an Uint8Array to read as blob stream.");
73
+ }
74
+ return new Blob([value]);
75
+ }
76
+
77
+ async writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<Uint8Array>): Promise<void> {
78
+ this.#assertInitialized();
79
+ const reader = stream.getReader();
80
+ const chunks: Uint8Array[] = [];
81
+
82
+ try {
83
+ let length = 0;
84
+ while (true) {
85
+ const { done, value } = await reader.read();
86
+ if (done) break;
87
+ chunks.push(value);
88
+ length += value.length;
89
+ }
90
+ const combined = new Uint8Array(length);
91
+ let offset = 0;
92
+ for (const chunk of chunks) {
93
+ combined.set(chunk, offset);
94
+ offset += chunk.length;
95
+ }
96
+ this.#setKey(contexts, key, combined);
97
+ } catch (error: any) {
98
+ throw new StorageError(`Error reading stream: ${error.message}`);
99
+ }
100
+ }
101
+
66
102
  #setKey(contexts: string[], key: string, value: SupportedStorageTypes) {
67
103
  if (!contexts.length || !key.length) throw new StorageError("Context and key must not be empty.");
68
104
  const contextKey = this.createContextKey(contexts);
@@ -6,20 +6,20 @@
6
6
 
7
7
  import { MatterAggregateError } from "#MatterError.js";
8
8
  import { MaybePromise } from "../util/Promises.js";
9
- import { Storage, StorageError, StorageOperationResult } from "./Storage.js";
9
+ import { Storage, StorageError } from "./Storage.js";
10
10
  import { SupportedStorageTypes } from "./StringifyTools.js";
11
11
 
12
- export interface StorageContextFactory<S extends Storage = any> {
13
- createContext(context: string): StorageContext<S>;
12
+ export interface StorageContextFactory {
13
+ createContext(context: string): StorageContext;
14
14
  }
15
15
 
16
- export class StorageContext<S extends Storage = any> implements StorageContextFactory<S> {
16
+ export class StorageContext implements StorageContextFactory {
17
17
  constructor(
18
- private readonly storage: S,
18
+ protected readonly storage: Storage,
19
19
  readonly thisContexts: string[],
20
20
  ) {}
21
21
 
22
- get<T extends SupportedStorageTypes>(key: string, defaultValue?: T): StorageOperationResult<S, T> {
22
+ get<T extends SupportedStorageTypes>(key: string, defaultValue?: T): MaybePromise<T> {
23
23
  const value = this.storage.get(this.thisContexts, key);
24
24
  if (value !== undefined) {
25
25
  if (MaybePromise.is(value)) {
@@ -30,62 +30,52 @@ export class StorageContext<S extends Storage = any> implements StorageContextFa
30
30
  `No value found for key ${key} in context ${this.thisContexts} and no default value specified!`,
31
31
  );
32
32
  }
33
- return defaultValue;
34
- }) as StorageOperationResult<S, T>;
33
+ return defaultValue as T;
34
+ }) as MaybePromise<T>;
35
35
  }
36
- return value as StorageOperationResult<S, T>;
36
+ return value as T;
37
37
  }
38
38
  if (defaultValue === undefined) {
39
39
  throw new StorageError(
40
40
  `No value found for key ${key} in context ${this.thisContexts} and no default value specified!`,
41
41
  );
42
42
  }
43
- return defaultValue as StorageOperationResult<S, T>;
43
+ return defaultValue;
44
44
  }
45
45
 
46
46
  has(key: string) {
47
- const value = this.storage.get(this.thisContexts, key);
48
- if (value !== undefined) {
49
- if (MaybePromise.is(value)) {
50
- return value.then(v => v !== undefined) as StorageOperationResult<S, boolean>;
51
- }
52
- return true as StorageOperationResult<S, boolean>;
53
- }
54
- return false as StorageOperationResult<S, boolean>;
47
+ return this.storage.has(this.thisContexts, key);
55
48
  }
56
49
 
57
- set(key: string, value: SupportedStorageTypes): StorageOperationResult<S>;
58
- set(values: Record<string, SupportedStorageTypes>): StorageOperationResult<S>;
50
+ set(key: string, value: SupportedStorageTypes): MaybePromise<void>;
51
+ set(values: Record<string, SupportedStorageTypes>): MaybePromise<void>;
59
52
  set(keyOrValues: string | Record<string, SupportedStorageTypes>, value?: SupportedStorageTypes) {
60
53
  if (typeof keyOrValues === "string") {
61
- return this.storage.set(this.thisContexts, keyOrValues, value) as StorageOperationResult<S>;
54
+ return this.storage.set(this.thisContexts, keyOrValues, value);
62
55
  }
63
- return this.storage.set(this.thisContexts, keyOrValues) as StorageOperationResult<S>;
56
+ return this.storage.set(this.thisContexts, keyOrValues);
64
57
  }
65
58
 
66
59
  delete(key: string) {
67
- return this.storage.delete(this.thisContexts, key) as StorageOperationResult<S>;
60
+ return this.storage.delete(this.thisContexts, key);
68
61
  }
69
62
 
70
- createContext(context: string): StorageContext<S> {
63
+ createContext(context: string): StorageContext {
71
64
  if (context.length === 0) throw new StorageError("Context must not be an empty string");
72
65
  if (context.includes(".")) throw new StorageError("Context must not contain dots!");
73
66
  return new StorageContext(this.storage, [...this.thisContexts, context]);
74
67
  }
75
68
 
76
69
  keys() {
77
- return this.storage.keys(this.thisContexts) as StorageOperationResult<S, string[]>;
70
+ return this.storage.keys(this.thisContexts);
78
71
  }
79
72
 
80
73
  values() {
81
- return this.storage.values(this.thisContexts) as StorageOperationResult<
82
- S,
83
- Record<string, SupportedStorageTypes>
84
- >;
74
+ return this.storage.values(this.thisContexts);
85
75
  }
86
76
 
87
77
  contexts() {
88
- return this.storage.contexts(this.thisContexts) as StorageOperationResult<S, string[]>;
78
+ return this.storage.contexts(this.thisContexts);
89
79
  }
90
80
 
91
81
  /** Clears all keys in this context */
@@ -97,7 +87,7 @@ export class StorageContext<S extends Storage = any> implements StorageContextFa
97
87
  keys.map(key => this.delete(key)),
98
88
  "Error while clearing storage",
99
89
  ).then(() => {});
100
- }) as StorageOperationResult<S>;
90
+ });
101
91
  }
102
92
  const promises = new Array<PromiseLike<void>>();
103
93
  keys.forEach(key => {
@@ -107,15 +97,21 @@ export class StorageContext<S extends Storage = any> implements StorageContextFa
107
97
  }
108
98
  });
109
99
  if (promises.length > 0) {
110
- return MatterAggregateError.allSettled(promises, "Error while clearing storage").then(
111
- () => {},
112
- ) as StorageOperationResult<S>;
100
+ return MatterAggregateError.allSettled(promises, "Error while clearing storage").then(() => {});
113
101
  }
114
- return undefined as StorageOperationResult<S>;
102
+ return undefined;
115
103
  }
116
104
 
117
105
  /** Clears all keys in this context and all created sub-contexts. */
118
106
  clearAll() {
119
- return this.storage.clearAll(this.thisContexts) as StorageOperationResult<S>;
107
+ return this.storage.clearAll(this.thisContexts);
108
+ }
109
+
110
+ openBlob(key: string) {
111
+ return this.storage.openBlob(this.thisContexts, key);
112
+ }
113
+
114
+ writeBlobFromStream(key: string, stream: ReadableStream<Uint8Array>) {
115
+ return this.storage.writeBlobFromStream(this.thisContexts, key, stream);
120
116
  }
121
117
  }
@@ -8,10 +8,10 @@ import { MaybePromise } from "../util/Promises.js";
8
8
  import { Storage, StorageError } from "./Storage.js";
9
9
  import { StorageContext, StorageContextFactory } from "./StorageContext.js";
10
10
 
11
- export class StorageManager<S extends Storage = any> implements StorageContextFactory<S> {
11
+ export class StorageManager implements StorageContextFactory {
12
12
  private initialized = false;
13
13
 
14
- constructor(private storage: S) {}
14
+ constructor(private storage: Storage) {}
15
15
 
16
16
  initialize(): MaybePromise<void> {
17
17
  if (!this.storage.initialized) {
@@ -30,7 +30,7 @@ export class StorageManager<S extends Storage = any> implements StorageContextFa
30
30
  return this.storage.close();
31
31
  }
32
32
 
33
- createContext(context: string): StorageContext<S> {
33
+ createContext(context: string): StorageContext {
34
34
  if (!this.initialized) throw new StorageError("The storage needs to be initialized first!");
35
35
  if (!context.length) throw new StorageError("Context must not be an empty string!");
36
36
  if (context.includes(".")) throw new StorageError("Context must not contain dots!");