@dxos/random-access-storage 0.4.9 → 0.4.10-main.05b9ab6
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/dist/lib/browser/index.mjs +302 -66
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +5 -5
- package/dist/lib/node/index.cjs.map +2 -2
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/browser/idb-storage.d.ts +8 -4
- package/dist/types/src/browser/idb-storage.d.ts.map +1 -1
- package/dist/types/src/browser/storage.d.ts.map +1 -1
- package/dist/types/src/common/abstract-storage.d.ts +1 -1
- package/dist/types/src/common/abstract-storage.d.ts.map +1 -1
- package/dist/types/src/common/storage.d.ts +9 -0
- package/dist/types/src/common/storage.d.ts.map +1 -1
- package/dist/types/src/testing/storage.blueprint-test.d.ts +1 -1
- package/dist/types/src/testing/storage.blueprint-test.d.ts.map +1 -1
- package/package.json +16 -11
- package/src/browser/idb-storage.ts +26 -4
- package/src/browser/storage.browser.test.ts +1 -1
- package/src/browser/storage.ts +4 -18
- package/src/common/abstract-storage.ts +2 -1
- package/src/common/storage.ts +9 -0
- package/src/testing/storage.blueprint-test.ts +70 -37
- package/dist/types/src/browser/browser-storage.d.ts +0 -13
- package/dist/types/src/browser/browser-storage.d.ts.map +0 -1
- package/dist/types/src/browser/firefox-storage.d.ts +0 -11
- package/dist/types/src/browser/firefox-storage.d.ts.map +0 -1
- package/src/browser/browser-storage.ts +0 -45
- package/src/browser/firefox-storage.ts +0 -23
package/dist/lib/node/meta.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/common/random-access-storage/src/common/utils.ts":{"bytes":1295,"imports":[{"path":"node:path","kind":"import-statement","external":true}],"format":"esm"},"packages/common/random-access-storage/src/common/directory.ts":{"bytes":6503,"imports":[{"path":"packages/common/random-access-storage/src/common/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"packages/common/random-access-storage/src/common/file.ts":{"bytes":6374,"imports":[{"path":"pify","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/common/random-access-storage/src/common/abstract-storage.ts":{"bytes":
|
|
1
|
+
{"inputs":{"packages/common/random-access-storage/src/common/utils.ts":{"bytes":1295,"imports":[{"path":"node:path","kind":"import-statement","external":true}],"format":"esm"},"packages/common/random-access-storage/src/common/directory.ts":{"bytes":6503,"imports":[{"path":"packages/common/random-access-storage/src/common/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"packages/common/random-access-storage/src/common/file.ts":{"bytes":6374,"imports":[{"path":"pify","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/common/random-access-storage/src/common/abstract-storage.ts":{"bytes":14984,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/common/random-access-storage/src/common/directory.ts","kind":"import-statement","original":"./directory"},{"path":"packages/common/random-access-storage/src/common/file.ts","kind":"import-statement","original":"./file"},{"path":"packages/common/random-access-storage/src/common/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"packages/common/random-access-storage/src/common/storage.ts":{"bytes":1963,"imports":[],"format":"esm"},"packages/common/random-access-storage/src/common/memory-storage.ts":{"bytes":5312,"imports":[{"path":"random-access-memory","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/random-access-storage/src/common/abstract-storage.ts","kind":"import-statement","original":"./abstract-storage"},{"path":"packages/common/random-access-storage/src/common/storage.ts","kind":"import-statement","original":"./storage"}],"format":"esm"},"packages/common/random-access-storage/src/common/index.ts":{"bytes":947,"imports":[{"path":"packages/common/random-access-storage/src/common/abstract-storage.ts","kind":"import-statement","original":"./abstract-storage"},{"path":"packages/common/random-access-storage/src/common/directory.ts","kind":"import-statement","original":"./directory"},{"path":"packages/common/random-access-storage/src/common/file.ts","kind":"import-statement","original":"./file"},{"path":"packages/common/random-access-storage/src/common/memory-storage.ts","kind":"import-statement","original":"./memory-storage"},{"path":"packages/common/random-access-storage/src/common/storage.ts","kind":"import-statement","original":"./storage"},{"path":"packages/common/random-access-storage/src/common/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"packages/common/random-access-storage/src/node/node-storage.ts":{"bytes":8395,"imports":[{"path":"del","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"random-access-file","kind":"import-statement","external":true},{"path":"packages/common/random-access-storage/src/common/index.ts","kind":"import-statement","original":"../common"}],"format":"esm"},"packages/common/random-access-storage/src/node/storage.ts":{"bytes":2441,"imports":[{"path":"packages/common/random-access-storage/src/node/node-storage.ts","kind":"import-statement","original":"./node-storage"},{"path":"packages/common/random-access-storage/src/common/index.ts","kind":"import-statement","original":"../common"}],"format":"esm"},"packages/common/random-access-storage/src/node/index.ts":{"bytes":568,"imports":[{"path":"packages/common/random-access-storage/src/common/index.ts","kind":"import-statement","original":"../common"},{"path":"packages/common/random-access-storage/src/node/storage.ts","kind":"import-statement","original":"./storage"}],"format":"esm"},"packages/common/random-access-storage/src/index.ts":{"bytes":469,"imports":[{"path":"packages/common/random-access-storage/src/node/index.ts","kind":"import-statement","original":"./node"}],"format":"esm"}},"outputs":{"packages/common/random-access-storage/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":23756},"packages/common/random-access-storage/dist/lib/node/index.cjs":{"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"pify","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"random-access-memory","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"del","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"random-access-file","kind":"import-statement","external":true}],"exports":["AbstractStorage","Directory","MemoryStorage","StorageType","createStorage","getFullPath","stringDiff","wrapFile"],"entryPoint":"packages/common/random-access-storage/src/index.ts","inputs":{"packages/common/random-access-storage/src/common/abstract-storage.ts":{"bytesInOutput":3497},"packages/common/random-access-storage/src/common/utils.ts":{"bytesInOutput":170},"packages/common/random-access-storage/src/common/directory.ts":{"bytesInOutput":1103},"packages/common/random-access-storage/src/common/file.ts":{"bytesInOutput":1149},"packages/common/random-access-storage/src/common/index.ts":{"bytesInOutput":0},"packages/common/random-access-storage/src/common/memory-storage.ts":{"bytesInOutput":900},"packages/common/random-access-storage/src/common/storage.ts":{"bytesInOutput":288},"packages/common/random-access-storage/src/node/index.ts":{"bytesInOutput":0},"packages/common/random-access-storage/src/node/node-storage.ts":{"bytesInOutput":1743},"packages/common/random-access-storage/src/node/storage.ts":{"bytesInOutput":369},"packages/common/random-access-storage/src/index.ts":{"bytesInOutput":0}},"bytes":10056}}}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { type RandomAccessStorage } from 'random-access-storage';
|
|
2
|
-
import {
|
|
3
|
-
import { StorageType } from '../common';
|
|
2
|
+
import { AbstractStorage, StorageType } from '../common';
|
|
4
3
|
/**
|
|
5
4
|
* Storage interface implementation for index DB.
|
|
6
5
|
* https://github.com/random-access-storage/random-access-idb
|
|
7
6
|
*/
|
|
8
|
-
export declare class IDbStorage extends
|
|
7
|
+
export declare class IDbStorage extends AbstractStorage {
|
|
9
8
|
type: StorageType;
|
|
10
9
|
private _db;
|
|
11
10
|
private readonly _store;
|
|
12
11
|
private _initialized;
|
|
13
|
-
protected
|
|
12
|
+
protected readonly _fileStorage: (filename: string, opts?: {}) => RandomAccessStorage;
|
|
13
|
+
constructor(path: string);
|
|
14
|
+
protected _createFileStorage(path: string): (filename: string, opts?: {}) => RandomAccessStorage;
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
reset(): Promise<void>;
|
|
17
|
+
protected _destroy(): Promise<void>;
|
|
14
18
|
protected _createFile(path: string, filename: string): RandomAccessStorage;
|
|
15
19
|
_loadFiles(path: string): Promise<void>;
|
|
16
20
|
protected _getFiles(path: string): Promise<Map<string, import("../common").File>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idb-storage.d.ts","sourceRoot":"","sources":["../../../../src/browser/idb-storage.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"idb-storage.d.ts","sourceRoot":"","sources":["../../../../src/browser/idb-storage.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIjE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAyB,MAAM,WAAW,CAAC;AAGhF;;;GAGG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7B,IAAI,EAAE,WAAW,CAAmB;IACpD,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,YAAY,CAAS;IAC7B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,mBAAmB,CAAC;gBAE1E,IAAI,EAAE,MAAM;IAKxB,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,mBAAmB;IAYjF,KAAK;IAKL,KAAK;cAQK,QAAQ;cAId,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IAyB7E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAiCpB,SAAS,CAAC,IAAI,EAAE,MAAM;CAQhD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/browser/storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/browser/storage.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4C,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE9F,eAAO,MAAM,aAAa,EAAE,kBAwB3B,CAAC"}
|
|
@@ -35,7 +35,7 @@ export declare abstract class AbstractStorage implements Storage {
|
|
|
35
35
|
protected abstract _createFile(path: string, filename: string, opts?: any): RandomAccessStorage;
|
|
36
36
|
private _getFileIfExists;
|
|
37
37
|
protected _getFiles(path: string): Promise<Map<string, File>>;
|
|
38
|
-
|
|
38
|
+
protected _closeFilesInPath(path: string): Promise<void>;
|
|
39
39
|
close(): Promise<void>;
|
|
40
40
|
protected _remove(path: string): Promise<void>;
|
|
41
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-storage.d.ts","sourceRoot":"","sources":["../../../../src/common/abstract-storage.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAKjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,IAAI,EAAY,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3D;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"abstract-storage.d.ts","sourceRoot":"","sources":["../../../../src/common/abstract-storage.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAKjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,IAAI,EAAY,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3D;;;;GAIG;AAEH,8BAAsB,eAAgB,YAAW,OAAO;aAM1B,IAAI,EAAE,MAAM;IALxC,SAAS,CAAC,QAAQ,CAAC,MAAM,oBAA2B;IAEpD,kBAAyB,IAAI,EAAE,WAAW,CAAC;gBAGf,IAAI,EAAE,MAAM;IAExC,CAAC,OAAO,CAAC,MAAM,CAAC;IAIhB,MAAM;;;;IAIN,IAAW,IAAI,WAEd;IAGM,eAAe,CAAC,GAAG,SAAK,GAAG,SAAS;IAW3C;;OAEG;IACG,KAAK;cAYK,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWtD,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAsB3E,SAAS,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS;IAI/C;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,SAAS;IAI/E,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,mBAAmB;IAE/F,OAAO,CAAC,gBAAgB;cASR,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;cAOnD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,KAAK;cAKK,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUrD"}
|
|
@@ -2,9 +2,18 @@ import { type Directory } from './directory';
|
|
|
2
2
|
export declare enum StorageType {
|
|
3
3
|
RAM = "ram",
|
|
4
4
|
IDB = "idb",
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated
|
|
7
|
+
*/
|
|
5
8
|
CHROME = "chrome",
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated
|
|
11
|
+
*/
|
|
6
12
|
FIREFOX = "firefox",
|
|
7
13
|
NODE = "node",
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated
|
|
16
|
+
*/
|
|
8
17
|
WEBFS = "webfs"
|
|
9
18
|
}
|
|
10
19
|
export type DiskInfo = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/common/storage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,oBAAY,WAAW;IACrB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAGlC,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;IAC9C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/common/storage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,oBAAY,WAAW;IACrB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX;;OAEG;IACH,MAAM,WAAW;IACjB;;OAEG;IACH,OAAO,YAAY;IACnB,IAAI,SAAS;IACb;;OAEG;IACH,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAGlC,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;IAC9C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type Storage, StorageType } from '../common';
|
|
2
2
|
export declare const randomText: () => string;
|
|
3
|
-
export declare const storageTests: (testGroupName: StorageType, createStorage: () => Storage) => void;
|
|
3
|
+
export declare const storageTests: (testGroupName: StorageType, createStorage: (name: string) => Storage) => void;
|
|
4
4
|
//# sourceMappingURL=storage.blueprint-test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.blueprint-test.d.ts","sourceRoot":"","sources":["../../../../src/testing/storage.blueprint-test.ts"],"names":[],"mappings":"AASA,OAAO,EAAa,KAAK,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEjE,eAAO,MAAM,UAAU,cAAkB,CAAC;AAE1C,eAAO,MAAM,YAAY,kBAAmB,WAAW,
|
|
1
|
+
{"version":3,"file":"storage.blueprint-test.d.ts","sourceRoot":"","sources":["../../../../src/testing/storage.blueprint-test.ts"],"names":[],"mappings":"AASA,OAAO,EAAa,KAAK,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEjE,eAAO,MAAM,UAAU,cAAkB,CAAC;AAE1C,eAAO,MAAM,YAAY,kBAAmB,WAAW,wBAAwB,MAAM,KAAK,OAAO,SAydhG,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/random-access-storage",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.10-main.05b9ab6",
|
|
4
4
|
"description": "Multiple random storage types.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -17,25 +17,30 @@
|
|
|
17
17
|
"src"
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
|
+
"buffer-alloc": "^1.1.0",
|
|
21
|
+
"buffer-from": "^0.1.1",
|
|
20
22
|
"del": "^5.1.0",
|
|
23
|
+
"inherits": "^2.0.3",
|
|
24
|
+
"next-tick": "^1.0.0",
|
|
25
|
+
"once": "^1.4.0",
|
|
21
26
|
"pify": "~5.0.0",
|
|
22
27
|
"random-access-file": "^2.2.1",
|
|
23
|
-
"random-access-idb": "^1.2.2",
|
|
24
28
|
"random-access-memory": "^4.1.0",
|
|
25
|
-
"random-access-storage": "^3.0
|
|
29
|
+
"random-access-storage": "^1.3.0",
|
|
26
30
|
"random-access-web": "^2.0.3",
|
|
27
|
-
"@dxos/async": "0.4.
|
|
28
|
-
"@dxos/
|
|
29
|
-
"@dxos/
|
|
30
|
-
"@dxos/
|
|
31
|
-
"@dxos/
|
|
32
|
-
"@dxos/
|
|
33
|
-
"@dxos/tracing": "0.4.
|
|
34
|
-
"@dxos/util": "0.4.
|
|
31
|
+
"@dxos/async": "0.4.10-main.05b9ab6",
|
|
32
|
+
"@dxos/debug": "0.4.10-main.05b9ab6",
|
|
33
|
+
"@dxos/invariant": "0.4.10-main.05b9ab6",
|
|
34
|
+
"@dxos/context": "0.4.10-main.05b9ab6",
|
|
35
|
+
"@dxos/node-std": "0.4.10-main.05b9ab6",
|
|
36
|
+
"@dxos/log": "0.4.10-main.05b9ab6",
|
|
37
|
+
"@dxos/tracing": "0.4.10-main.05b9ab6",
|
|
38
|
+
"@dxos/util": "0.4.10-main.05b9ab6"
|
|
35
39
|
},
|
|
36
40
|
"devDependencies": {
|
|
37
41
|
"@types/pify": "^3.0.2",
|
|
38
42
|
"@types/randombytes": "^2.0.0",
|
|
43
|
+
"random-access-idb": "^1.2.2",
|
|
39
44
|
"randombytes": "^2.1.0"
|
|
40
45
|
},
|
|
41
46
|
"publishConfig": {
|
|
@@ -7,21 +7,26 @@ import { type RandomAccessStorage } from 'random-access-storage';
|
|
|
7
7
|
|
|
8
8
|
import { invariant } from '@dxos/invariant';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
import { StorageType, getFullPath, wrapFile } from '../common';
|
|
10
|
+
import { AbstractStorage, StorageType, getFullPath, wrapFile } from '../common';
|
|
12
11
|
|
|
13
12
|
const DELIM = '\0';
|
|
14
13
|
/**
|
|
15
14
|
* Storage interface implementation for index DB.
|
|
16
15
|
* https://github.com/random-access-storage/random-access-idb
|
|
17
16
|
*/
|
|
18
|
-
export class IDbStorage extends
|
|
17
|
+
export class IDbStorage extends AbstractStorage {
|
|
19
18
|
public override type: StorageType = StorageType.IDB;
|
|
20
19
|
private _db!: Promise<IDBDatabase>;
|
|
21
20
|
private readonly _store = 'data';
|
|
22
21
|
private _initialized = false;
|
|
22
|
+
protected readonly _fileStorage: (filename: string, opts?: {}) => RandomAccessStorage;
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
constructor(path: string) {
|
|
25
|
+
super(path);
|
|
26
|
+
this._fileStorage = this._createFileStorage(path);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
protected _createFileStorage(path: string): (filename: string, opts?: {}) => RandomAccessStorage {
|
|
25
30
|
// Note: We use patched version of random-access-idb here that exposes the getdb method.
|
|
26
31
|
const database = idb(path);
|
|
27
32
|
let res: (db: IDBDatabase) => void;
|
|
@@ -33,6 +38,23 @@ export class IDbStorage extends BrowserStorage {
|
|
|
33
38
|
return database.create;
|
|
34
39
|
}
|
|
35
40
|
|
|
41
|
+
override async close() {
|
|
42
|
+
await this._closeFilesInPath('');
|
|
43
|
+
// TODO(dmaretskyi): Set a flag to make the current instance unusable.
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
override async reset() {
|
|
47
|
+
// We don't delete the database, just erase the data.
|
|
48
|
+
// Deleting that database causes IDB errors which I have no idea how to fix.
|
|
49
|
+
await this._closeFilesInPath('');
|
|
50
|
+
await this._remove('');
|
|
51
|
+
// TODO(dmaretskyi): Set a flag to make the current instance unusable.
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
protected override async _destroy() {
|
|
55
|
+
throw new Error('Unreachable');
|
|
56
|
+
}
|
|
57
|
+
|
|
36
58
|
protected override _createFile(path: string, filename: string): RandomAccessStorage {
|
|
37
59
|
const file = this._fileStorage(getFullPath(path, filename));
|
|
38
60
|
file.destroy = (cb: (err: Error | null) => void) => {
|
|
@@ -12,7 +12,7 @@ const ROOT_DIRECTORY = 'testing';
|
|
|
12
12
|
|
|
13
13
|
describe('Tests for different storage types in different browsers', () => {
|
|
14
14
|
for (const dataStore of [StorageType.RAM, StorageType.IDB, StorageType.WEBFS] as StorageType[]) {
|
|
15
|
-
storageTests(dataStore, () => createStorage({ type: dataStore, root: ROOT_DIRECTORY }));
|
|
15
|
+
storageTests(dataStore, (name: string) => createStorage({ type: dataStore, root: `${ROOT_DIRECTORY}-${name}` }));
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
test.skip(`Used ${StorageType.WEBFS} by default`, async () => {
|
package/src/browser/storage.ts
CHANGED
|
@@ -2,24 +2,13 @@
|
|
|
2
2
|
// Copyright 2021 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { FirefoxStorage } from './firefox-storage';
|
|
6
5
|
import { IDbStorage } from './idb-storage';
|
|
7
6
|
import { WebFS } from './web-fs';
|
|
8
|
-
import { MemoryStorage, type Storage, type StorageConstructor
|
|
7
|
+
import { MemoryStorage, StorageType, type Storage, type StorageConstructor } from '../common';
|
|
9
8
|
|
|
10
9
|
export const createStorage: StorageConstructor = ({ type, root = '' } = {}): Storage => {
|
|
11
10
|
if (type === undefined) {
|
|
12
|
-
|
|
13
|
-
navigator &&
|
|
14
|
-
navigator.storage &&
|
|
15
|
-
typeof navigator.storage.getDirectory === 'function' &&
|
|
16
|
-
FileSystemFileHandle &&
|
|
17
|
-
typeof (FileSystemFileHandle.prototype as any).createWritable === 'function'
|
|
18
|
-
) {
|
|
19
|
-
return new WebFS(root);
|
|
20
|
-
} else {
|
|
21
|
-
return new IDbStorage(root);
|
|
22
|
-
}
|
|
11
|
+
return new IDbStorage(root);
|
|
23
12
|
}
|
|
24
13
|
|
|
25
14
|
switch (type) {
|
|
@@ -28,12 +17,9 @@ export const createStorage: StorageConstructor = ({ type, root = '' } = {}): Sto
|
|
|
28
17
|
}
|
|
29
18
|
|
|
30
19
|
case StorageType.IDB:
|
|
31
|
-
case StorageType.CHROME:
|
|
32
|
-
return new IDbStorage(root);
|
|
33
|
-
}
|
|
34
|
-
|
|
20
|
+
case StorageType.CHROME:
|
|
35
21
|
case StorageType.FIREFOX: {
|
|
36
|
-
return new
|
|
22
|
+
return new IDbStorage(root);
|
|
37
23
|
}
|
|
38
24
|
|
|
39
25
|
case StorageType.WEBFS: {
|
|
@@ -19,6 +19,7 @@ import { getFullPath } from './utils';
|
|
|
19
19
|
* https://github.com/random-access-storage
|
|
20
20
|
* https://github.com/random-access-storage/random-access-storage
|
|
21
21
|
*/
|
|
22
|
+
// TODO(dmaretskyi): Remove this class.
|
|
22
23
|
export abstract class AbstractStorage implements Storage {
|
|
23
24
|
protected readonly _files = new Map<string, File>();
|
|
24
25
|
|
|
@@ -128,7 +129,7 @@ export abstract class AbstractStorage implements Storage {
|
|
|
128
129
|
);
|
|
129
130
|
}
|
|
130
131
|
|
|
131
|
-
|
|
132
|
+
protected async _closeFilesInPath(path: string): Promise<void> {
|
|
132
133
|
await Promise.all(
|
|
133
134
|
Array.from((await this._getFiles(path)).values()).map((file) => file.close().catch((err: any) => log.catch(err))),
|
|
134
135
|
);
|
package/src/common/storage.ts
CHANGED
|
@@ -8,9 +8,18 @@ import { type Directory } from './directory';
|
|
|
8
8
|
export enum StorageType {
|
|
9
9
|
RAM = 'ram',
|
|
10
10
|
IDB = 'idb',
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated
|
|
13
|
+
*/
|
|
11
14
|
CHROME = 'chrome',
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated
|
|
17
|
+
*/
|
|
12
18
|
FIREFOX = 'firefox',
|
|
13
19
|
NODE = 'node',
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated
|
|
22
|
+
*/
|
|
14
23
|
WEBFS = 'webfs',
|
|
15
24
|
}
|
|
16
25
|
|