@ngxsp/adapter-storage-indexeddb 0.0.1-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +14 -0
- package/index.js +76 -0
- package/index.js.map +1 -0
- package/package.json +16 -0
package/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { StoragePort } from '@ngxsp/core';
|
|
2
|
+
|
|
3
|
+
type IndexedDbOptions = {
|
|
4
|
+
dbName?: string;
|
|
5
|
+
storeName?: string;
|
|
6
|
+
};
|
|
7
|
+
declare function createIndexedDbStorageAdapter(prefix: string, options?: IndexedDbOptions): StoragePort;
|
|
8
|
+
declare function createIndexedDbBinaryStorageAdapter(prefix: string, options?: IndexedDbOptions): {
|
|
9
|
+
get(k: string): Promise<Uint8Array | null>;
|
|
10
|
+
set(k: string, value: Uint8Array): Promise<void>;
|
|
11
|
+
remove(k: string): Promise<void>;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export { type IndexedDbOptions, createIndexedDbBinaryStorageAdapter, createIndexedDbStorageAdapter };
|
package/index.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
function openDb(dbName, storeName) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
const req = indexedDB.open(dbName, 1);
|
|
5
|
+
req.onupgradeneeded = () => {
|
|
6
|
+
const db = req.result;
|
|
7
|
+
if (!db.objectStoreNames.contains(storeName)) {
|
|
8
|
+
db.createObjectStore(storeName);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
req.onsuccess = () => resolve(req.result);
|
|
12
|
+
req.onerror = () => reject(req.error);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function withStore(db, storeName, mode, fn) {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
const tx = db.transaction(storeName, mode);
|
|
18
|
+
const store = tx.objectStore(storeName);
|
|
19
|
+
const req = fn(store);
|
|
20
|
+
req.onsuccess = () => resolve(req.result);
|
|
21
|
+
req.onerror = () => reject(req.error);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function createIndexedDbStorageAdapter(prefix, options = {}) {
|
|
25
|
+
const dbName = options.dbName ?? "ngxsp";
|
|
26
|
+
const storeName = options.storeName ?? "kv";
|
|
27
|
+
const key = (k) => `${prefix}${k}`;
|
|
28
|
+
let dbP = null;
|
|
29
|
+
const db = () => dbP ??= openDb(dbName, storeName);
|
|
30
|
+
return {
|
|
31
|
+
async get(k) {
|
|
32
|
+
const d = await db();
|
|
33
|
+
const v = await withStore(d, storeName, "readonly", (s) => s.get(key(k)));
|
|
34
|
+
return typeof v === "string" ? v : v ?? null;
|
|
35
|
+
},
|
|
36
|
+
async set(k, value) {
|
|
37
|
+
const d = await db();
|
|
38
|
+
await withStore(d, storeName, "readwrite", (s) => s.put(value, key(k)));
|
|
39
|
+
},
|
|
40
|
+
async remove(k) {
|
|
41
|
+
const d = await db();
|
|
42
|
+
await withStore(d, storeName, "readwrite", (s) => s.delete(key(k)));
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function createIndexedDbBinaryStorageAdapter(prefix, options = {}) {
|
|
47
|
+
const dbName = options.dbName ?? "ngxsp";
|
|
48
|
+
const storeName = options.storeName ?? "bin";
|
|
49
|
+
const key = (k) => `${prefix}${k}`;
|
|
50
|
+
let dbP = null;
|
|
51
|
+
const db = () => dbP ??= openDb(dbName, storeName);
|
|
52
|
+
return {
|
|
53
|
+
async get(k) {
|
|
54
|
+
const d = await db();
|
|
55
|
+
const v = await withStore(d, storeName, "readonly", (s) => s.get(key(k)));
|
|
56
|
+
if (!v) return null;
|
|
57
|
+
if (v instanceof Uint8Array) return v;
|
|
58
|
+
if (v instanceof ArrayBuffer) return new Uint8Array(v);
|
|
59
|
+
if (v instanceof Blob) return new Uint8Array(await v.arrayBuffer());
|
|
60
|
+
return null;
|
|
61
|
+
},
|
|
62
|
+
async set(k, value) {
|
|
63
|
+
const d = await db();
|
|
64
|
+
await withStore(d, storeName, "readwrite", (s) => s.put(value, key(k)));
|
|
65
|
+
},
|
|
66
|
+
async remove(k) {
|
|
67
|
+
const d = await db();
|
|
68
|
+
await withStore(d, storeName, "readwrite", (s) => s.delete(key(k)));
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export {
|
|
73
|
+
createIndexedDbBinaryStorageAdapter,
|
|
74
|
+
createIndexedDbStorageAdapter
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { StoragePort } from '@ngxsp/core';\n\nexport type IndexedDbOptions = {\n dbName?: string;\n storeName?: string;\n};\n\nfunction openDb(dbName: string, storeName: string): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const req = indexedDB.open(dbName, 1);\n req.onupgradeneeded = () => {\n const db = req.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\n\nfunction withStore<T>(\n db: IDBDatabase,\n storeName: string,\n mode: IDBTransactionMode,\n fn: (store: IDBObjectStore) => IDBRequest<T>\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const tx = db.transaction(storeName, mode);\n const store = tx.objectStore(storeName);\n const req = fn(store);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\n\nexport function createIndexedDbStorageAdapter(prefix: string, options: IndexedDbOptions = {}): StoragePort {\n const dbName = options.dbName ?? 'ngxsp';\n const storeName = options.storeName ?? 'kv';\n\n const key = (k: string) => `${prefix}${k}`;\n let dbP: Promise<IDBDatabase> | null = null;\n const db = () => (dbP ??= openDb(dbName, storeName));\n\n return {\n async get(k: string): Promise<string | null> {\n const d = await db();\n const v = await withStore<any>(d, storeName, 'readonly', s => s.get(key(k)));\n return typeof v === 'string' ? v : (v ?? null);\n },\n async set(k: string, value: string): Promise<void> {\n const d = await db();\n await withStore(d, storeName, 'readwrite', s => s.put(value, key(k)));\n },\n async remove(k: string): Promise<void> {\n const d = await db();\n await withStore(d, storeName, 'readwrite', s => s.delete(key(k)));\n }\n };\n}\n\nexport function createIndexedDbBinaryStorageAdapter(prefix: string, options: IndexedDbOptions = {}) {\n const dbName = options.dbName ?? 'ngxsp';\n const storeName = options.storeName ?? 'bin';\n\n const key = (k: string) => `${prefix}${k}`;\n let dbP: Promise<IDBDatabase> | null = null;\n const db = () => (dbP ??= openDb(dbName, storeName));\n\n return {\n async get(k: string): Promise<Uint8Array | null> {\n const d = await db();\n const v = await withStore<any>(d, storeName, 'readonly', s => s.get(key(k)));\n if (!v) return null;\n if (v instanceof Uint8Array) return v;\n if (v instanceof ArrayBuffer) return new Uint8Array(v);\n if (v instanceof Blob) return new Uint8Array(await v.arrayBuffer());\n return null;\n },\n async set(k: string, value: Uint8Array): Promise<void> {\n const d = await db();\n await withStore(d, storeName, 'readwrite', s => s.put(value, key(k)));\n },\n async remove(k: string): Promise<void> {\n const d = await db();\n await withStore(d, storeName, 'readwrite', s => s.delete(key(k)));\n }\n };\n}\n"],"mappings":";AAOA,SAAS,OAAO,QAAgB,WAAyC;AACvE,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,MAAM,UAAU,KAAK,QAAQ,CAAC;AACpC,QAAI,kBAAkB,MAAM;AAC1B,YAAM,KAAK,IAAI;AACf,UAAI,CAAC,GAAG,iBAAiB,SAAS,SAAS,GAAG;AAC5C,WAAG,kBAAkB,SAAS;AAAA,MAChC;AAAA,IACF;AACA,QAAI,YAAY,MAAM,QAAQ,IAAI,MAAM;AACxC,QAAI,UAAU,MAAM,OAAO,IAAI,KAAK;AAAA,EACtC,CAAC;AACH;AAEA,SAAS,UACP,IACA,WACA,MACA,IACY;AACZ,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,KAAK,GAAG,YAAY,WAAW,IAAI;AACzC,UAAM,QAAQ,GAAG,YAAY,SAAS;AACtC,UAAM,MAAM,GAAG,KAAK;AACpB,QAAI,YAAY,MAAM,QAAQ,IAAI,MAAM;AACxC,QAAI,UAAU,MAAM,OAAO,IAAI,KAAK;AAAA,EACtC,CAAC;AACH;AAEO,SAAS,8BAA8B,QAAgB,UAA4B,CAAC,GAAgB;AACzG,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,YAAY,QAAQ,aAAa;AAEvC,QAAM,MAAM,CAAC,MAAc,GAAG,MAAM,GAAG,CAAC;AACxC,MAAI,MAAmC;AACvC,QAAM,KAAK,MAAO,QAAQ,OAAO,QAAQ,SAAS;AAElD,SAAO;AAAA,IACL,MAAM,IAAI,GAAmC;AAC3C,YAAM,IAAI,MAAM,GAAG;AACnB,YAAM,IAAI,MAAM,UAAe,GAAG,WAAW,YAAY,OAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;AAC3E,aAAO,OAAO,MAAM,WAAW,IAAK,KAAK;AAAA,IAC3C;AAAA,IACA,MAAM,IAAI,GAAW,OAA8B;AACjD,YAAM,IAAI,MAAM,GAAG;AACnB,YAAM,UAAU,GAAG,WAAW,aAAa,OAAK,EAAE,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC;AAAA,IACtE;AAAA,IACA,MAAM,OAAO,GAA0B;AACrC,YAAM,IAAI,MAAM,GAAG;AACnB,YAAM,UAAU,GAAG,WAAW,aAAa,OAAK,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;AAAA,IAClE;AAAA,EACF;AACF;AAEO,SAAS,oCAAoC,QAAgB,UAA4B,CAAC,GAAG;AAClG,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,YAAY,QAAQ,aAAa;AAEvC,QAAM,MAAM,CAAC,MAAc,GAAG,MAAM,GAAG,CAAC;AACxC,MAAI,MAAmC;AACvC,QAAM,KAAK,MAAO,QAAQ,OAAO,QAAQ,SAAS;AAElD,SAAO;AAAA,IACL,MAAM,IAAI,GAAuC;AAC/C,YAAM,IAAI,MAAM,GAAG;AACnB,YAAM,IAAI,MAAM,UAAe,GAAG,WAAW,YAAY,OAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;AAC3E,UAAI,CAAC,EAAG,QAAO;AACf,UAAI,aAAa,WAAY,QAAO;AACpC,UAAI,aAAa,YAAa,QAAO,IAAI,WAAW,CAAC;AACrD,UAAI,aAAa,KAAM,QAAO,IAAI,WAAW,MAAM,EAAE,YAAY,CAAC;AAClE,aAAO;AAAA,IACT;AAAA,IACA,MAAM,IAAI,GAAW,OAAkC;AACrD,YAAM,IAAI,MAAM,GAAG;AACnB,YAAM,UAAU,GAAG,WAAW,aAAa,OAAK,EAAE,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC;AAAA,IACtE;AAAA,IACA,MAAM,OAAO,GAA0B;AACrC,YAAM,IAAI,MAAM,GAAG;AACnB,YAAM,UAAU,GAAG,WAAW,aAAa,OAAK,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;AAAA,IAClE;AAAA,EACF;AACF;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ngxsp/adapter-storage-indexeddb",
|
|
3
|
+
"version": "0.0.1-next.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@ngxsp/core": "0.0.1-next.0"
|
|
15
|
+
}
|
|
16
|
+
}
|