@unikvs/indexeddb 0.0.7 → 0.0.9
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/src/indexeddb.d.ts +58 -2
- package/dist/src/indexeddb.d.ts.map +1 -1
- package/dist/src/indexeddb.js +55 -4
- package/package.json +8 -8
- package/src/indexeddb.ts +59 -4
package/dist/src/indexeddb.d.ts
CHANGED
|
@@ -17,23 +17,79 @@ export default class Indexeddb implements IStorage {
|
|
|
17
17
|
* 使用するオブジェクトストア名です。
|
|
18
18
|
*/
|
|
19
19
|
private readonly storeName;
|
|
20
|
+
/**
|
|
21
|
+
* ストレージの名前です。デバッグメッセージなどに使用されます。
|
|
22
|
+
*/
|
|
20
23
|
readonly name: string;
|
|
21
24
|
/**
|
|
22
25
|
* Indexeddb インスタンスを初期化します。
|
|
23
26
|
*
|
|
24
|
-
* @param dbName
|
|
25
|
-
* @param storeName
|
|
27
|
+
* @param dbName データベース名です。デフォルトは `"unikvs_db"` です。
|
|
28
|
+
* @param storeName データを保存するオブジェクトストア名です。デフォルトは `"kvs_store"` です。
|
|
26
29
|
*/
|
|
27
30
|
constructor(dbName?: string, storeName?: string);
|
|
31
|
+
/** ストレージが現在利用可能な状態であるかを示します。 */
|
|
28
32
|
get isOpen(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* ストレージをオープンし、IndexedDB データベースへの接続を確立します。
|
|
35
|
+
*
|
|
36
|
+
* 既にオープンされている場合は何も行いません。
|
|
37
|
+
*/
|
|
29
38
|
open(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* ストレージを安全にクローズします。
|
|
41
|
+
*
|
|
42
|
+
* データベース接続を閉じ、内部状態を初期化します。
|
|
43
|
+
*/
|
|
30
44
|
close(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* 指定されたデータを、対応するキーでストレージに保存します。
|
|
47
|
+
*
|
|
48
|
+
* @param args.key 保存先のキーです。
|
|
49
|
+
* @param args.data 保存するデータです。
|
|
50
|
+
*/
|
|
31
51
|
write(args: Pick<IStorage.WriteArgs<any>, "key" | "data">): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* 指定されたキーに対応するデータをストレージから取得します。
|
|
54
|
+
*
|
|
55
|
+
* @param args.key 取得元のキーです。
|
|
56
|
+
* @returns キーに対応するデータです。存在しない場合は DOMException (NotFoundError) を投げます。
|
|
57
|
+
*/
|
|
32
58
|
read(args: Pick<IStorage.ReadArgs, "key">): Promise<any>;
|
|
59
|
+
/**
|
|
60
|
+
* 指定されたキーに対応するデータがストレージ内に存在するかを確認します。
|
|
61
|
+
*
|
|
62
|
+
* @param args.key 確認するキーです。
|
|
63
|
+
* @returns キーに対応するデータが存在する場合は true、それ以外は false です。
|
|
64
|
+
*/
|
|
33
65
|
exists(args: Pick<IStorage.ExistsArgs, "key">): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* 指定されたキーに対応するデータをストレージから削除します。
|
|
68
|
+
*
|
|
69
|
+
* @param args.key 削除するキーです。
|
|
70
|
+
*/
|
|
34
71
|
delete(args: Pick<IStorage.DeleteArgs, "key">): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* ストレージ内のすべてのデータを完全に消去します。
|
|
74
|
+
*/
|
|
35
75
|
clear(): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* 指定されたキーに対応する書き込み可能なストリームを取得します。
|
|
78
|
+
*
|
|
79
|
+
* IndexedDB にはネイティブなストリームがないため、書き込まれたチャンクをメモリー上に保持し、ストリームがクローズされたときにまとめて保存します。
|
|
80
|
+
*
|
|
81
|
+
* @param args.key 書き込み先のキーです。
|
|
82
|
+
* @returns 書き込み可能なストリームです。
|
|
83
|
+
*/
|
|
36
84
|
getWritable(args: Pick<IStorage.GetWritableArgs, "key">): WritableStream<Uint8Array>;
|
|
85
|
+
/**
|
|
86
|
+
* 指定されたキーに対応する読み取り可能なストリームを取得します。
|
|
87
|
+
*
|
|
88
|
+
* IndexedDB にはネイティブなストリームがないため、データ全体をメモリーにロードしてから単一チャンクとしてストリームで送出します。
|
|
89
|
+
*
|
|
90
|
+
* @param args.key 読み取り元のキーです。
|
|
91
|
+
* @returns 読み取り可能なストリームです。
|
|
92
|
+
*/
|
|
37
93
|
getReadable(args: Pick<IStorage.GetReadableArgs, "key">): ReadableStream<Uint8Array>;
|
|
38
94
|
}
|
|
39
95
|
//# sourceMappingURL=indexeddb.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../src/indexeddb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,SAAU,YAAW,QAAQ;IAChD;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAsB;IAEhC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;gBACgB,MAAM,GAAE,MAAoB,EAAE,SAAS,GAAE,MAAoB;IAOhF,IAAW,MAAM,IAAI,OAAO,CAE3B;
|
|
1
|
+
{"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../src/indexeddb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,SAAU,YAAW,QAAQ;IAChD;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAsB;IAEhC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;gBACgB,MAAM,GAAE,MAAoB,EAAE,SAAS,GAAE,MAAoB;IAOhF,gCAAgC;IAChC,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;;;OAIG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAelC;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC;;;;;OAKG;IACU,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtF;;;;;OAKG;IACU,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAarE;;;;;OAKG;IACU,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ7E;;;;OAIG;IACU,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1E;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;;;;;OAOG;IACI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC;IAuB3F;;;;;;;OAOG;IACI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC;CAW5F"}
|
package/dist/src/indexeddb.js
CHANGED
|
@@ -6,8 +6,8 @@ export default class Indexeddb {
|
|
|
6
6
|
/**
|
|
7
7
|
* Indexeddb インスタンスを初期化します。
|
|
8
8
|
*
|
|
9
|
-
* @param dbName
|
|
10
|
-
* @param storeName
|
|
9
|
+
* @param dbName データベース名です。デフォルトは `"unikvs_db"` です。
|
|
10
|
+
* @param storeName データを保存するオブジェクトストア名です。デフォルトは `"kvs_store"` です。
|
|
11
11
|
*/
|
|
12
12
|
constructor(dbName = "unikvs_db", storeName = "kvs_store") {
|
|
13
13
|
this.name = "Indexeddb";
|
|
@@ -15,9 +15,15 @@ export default class Indexeddb {
|
|
|
15
15
|
this.dbName = dbName;
|
|
16
16
|
this.storeName = storeName;
|
|
17
17
|
}
|
|
18
|
+
/** ストレージが現在利用可能な状態であるかを示します。 */
|
|
18
19
|
get isOpen() {
|
|
19
20
|
return this.db !== null;
|
|
20
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* ストレージをオープンし、IndexedDB データベースへの接続を確立します。
|
|
24
|
+
*
|
|
25
|
+
* 既にオープンされている場合は何も行いません。
|
|
26
|
+
*/
|
|
21
27
|
async open() {
|
|
22
28
|
if (this.db) {
|
|
23
29
|
return;
|
|
@@ -31,14 +37,31 @@ export default class Indexeddb {
|
|
|
31
37
|
},
|
|
32
38
|
});
|
|
33
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* ストレージを安全にクローズします。
|
|
42
|
+
*
|
|
43
|
+
* データベース接続を閉じ、内部状態を初期化します。
|
|
44
|
+
*/
|
|
34
45
|
async close() {
|
|
35
46
|
this.db.close();
|
|
36
47
|
this.db = null;
|
|
37
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* 指定されたデータを、対応するキーでストレージに保存します。
|
|
51
|
+
*
|
|
52
|
+
* @param args.key 保存先のキーです。
|
|
53
|
+
* @param args.data 保存するデータです。
|
|
54
|
+
*/
|
|
38
55
|
async write(args) {
|
|
39
56
|
const { key, data } = args;
|
|
40
57
|
await this.db.put(this.storeName, data, key);
|
|
41
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* 指定されたキーに対応するデータをストレージから取得します。
|
|
61
|
+
*
|
|
62
|
+
* @param args.key 取得元のキーです。
|
|
63
|
+
* @returns キーに対応するデータです。存在しない場合は DOMException (NotFoundError) を投げます。
|
|
64
|
+
*/
|
|
42
65
|
async read(args) {
|
|
43
66
|
const { key } = args;
|
|
44
67
|
// Opfs の挙動に合わせて、存在しない場合は DOMException (NotFoundError) を投げます
|
|
@@ -47,23 +70,44 @@ export default class Indexeddb {
|
|
|
47
70
|
}
|
|
48
71
|
return await this.db.get(this.storeName, key);
|
|
49
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* 指定されたキーに対応するデータがストレージ内に存在するかを確認します。
|
|
75
|
+
*
|
|
76
|
+
* @param args.key 確認するキーです。
|
|
77
|
+
* @returns キーに対応するデータが存在する場合は true、それ以外は false です。
|
|
78
|
+
*/
|
|
50
79
|
async exists(args) {
|
|
51
80
|
const { key } = args;
|
|
52
81
|
// count() はキーが存在すれば 1 を、存在しなければ 0 を返します
|
|
53
82
|
const count = await this.db.count(this.storeName, key);
|
|
54
83
|
return count > 0;
|
|
55
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* 指定されたキーに対応するデータをストレージから削除します。
|
|
87
|
+
*
|
|
88
|
+
* @param args.key 削除するキーです。
|
|
89
|
+
*/
|
|
56
90
|
async delete(args) {
|
|
57
91
|
const { key } = args;
|
|
58
92
|
await this.db.delete(this.storeName, key);
|
|
59
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* ストレージ内のすべてのデータを完全に消去します。
|
|
96
|
+
*/
|
|
60
97
|
async clear() {
|
|
61
98
|
await this.db.clear(this.storeName);
|
|
62
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* 指定されたキーに対応する書き込み可能なストリームを取得します。
|
|
102
|
+
*
|
|
103
|
+
* IndexedDB にはネイティブなストリームがないため、書き込まれたチャンクをメモリー上に保持し、ストリームがクローズされたときにまとめて保存します。
|
|
104
|
+
*
|
|
105
|
+
* @param args.key 書き込み先のキーです。
|
|
106
|
+
* @returns 書き込み可能なストリームです。
|
|
107
|
+
*/
|
|
63
108
|
getWritable(args) {
|
|
64
109
|
const { key } = args;
|
|
65
110
|
const chunks = [];
|
|
66
|
-
// IndexedDB にはネイティブなファイルストリームがないため、書き込まれたチャンクをメモリに保持し、クローズ時にまとめて put します。
|
|
67
111
|
return new WritableStream({
|
|
68
112
|
write: (chunk) => {
|
|
69
113
|
chunks.push(chunk);
|
|
@@ -80,11 +124,18 @@ export default class Indexeddb {
|
|
|
80
124
|
},
|
|
81
125
|
});
|
|
82
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* 指定されたキーに対応する読み取り可能なストリームを取得します。
|
|
129
|
+
*
|
|
130
|
+
* IndexedDB にはネイティブなストリームがないため、データ全体をメモリーにロードしてから単一チャンクとしてストリームで送出します。
|
|
131
|
+
*
|
|
132
|
+
* @param args.key 読み取り元のキーです。
|
|
133
|
+
* @returns 読み取り可能なストリームです。
|
|
134
|
+
*/
|
|
83
135
|
getReadable(args) {
|
|
84
136
|
const { key } = args;
|
|
85
137
|
return new ReadableStream({
|
|
86
138
|
pull: async (controller) => {
|
|
87
|
-
// データ全体をメモリにロードしてから ReadableStream に流し込みます。
|
|
88
139
|
const data = await this.read({ key });
|
|
89
140
|
controller.enqueue(data);
|
|
90
141
|
controller.close();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unikvs/indexeddb",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9",
|
|
4
4
|
"description": "",
|
|
5
5
|
"homepage": "https://github.com/tai-kun/unikvs",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,19 +25,19 @@
|
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@unikvs/core": "0.0.
|
|
28
|
+
"@unikvs/core": "0.0.9",
|
|
29
29
|
"idb": "^8.0.3"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@tsconfig/node24": "^24.0.4",
|
|
33
33
|
"@tsconfig/strictest": "^2.0.8",
|
|
34
|
-
"@types/node": "^24.12.
|
|
35
|
-
"@vitest/browser": "^4.1.
|
|
36
|
-
"@vitest/browser-playwright": "^4.1.
|
|
34
|
+
"@types/node": "^24.12.4",
|
|
35
|
+
"@vitest/browser": "^4.1.6",
|
|
36
|
+
"@vitest/browser-playwright": "^4.1.6",
|
|
37
37
|
"npm-check-updates": "^20.0.2",
|
|
38
|
-
"playwright": "^1.
|
|
39
|
-
"vite": "^8.0.
|
|
40
|
-
"vitest": "^4.1.
|
|
38
|
+
"playwright": "^1.60.0",
|
|
39
|
+
"vite": "^8.0.12",
|
|
40
|
+
"vitest": "^4.1.6"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"@logtape/logtape": "^2.0.0"
|
package/src/indexeddb.ts
CHANGED
|
@@ -22,13 +22,16 @@ export default class Indexeddb implements IStorage {
|
|
|
22
22
|
*/
|
|
23
23
|
private readonly storeName: string;
|
|
24
24
|
|
|
25
|
+
/**
|
|
26
|
+
* ストレージの名前です。デバッグメッセージなどに使用されます。
|
|
27
|
+
*/
|
|
25
28
|
public readonly name: string;
|
|
26
29
|
|
|
27
30
|
/**
|
|
28
31
|
* Indexeddb インスタンスを初期化します。
|
|
29
32
|
*
|
|
30
|
-
* @param dbName
|
|
31
|
-
* @param storeName
|
|
33
|
+
* @param dbName データベース名です。デフォルトは `"unikvs_db"` です。
|
|
34
|
+
* @param storeName データを保存するオブジェクトストア名です。デフォルトは `"kvs_store"` です。
|
|
32
35
|
*/
|
|
33
36
|
public constructor(dbName: string = "unikvs_db", storeName: string = "kvs_store") {
|
|
34
37
|
this.name = "Indexeddb";
|
|
@@ -37,10 +40,16 @@ export default class Indexeddb implements IStorage {
|
|
|
37
40
|
this.storeName = storeName;
|
|
38
41
|
}
|
|
39
42
|
|
|
43
|
+
/** ストレージが現在利用可能な状態であるかを示します。 */
|
|
40
44
|
public get isOpen(): boolean {
|
|
41
45
|
return this.db !== null;
|
|
42
46
|
}
|
|
43
47
|
|
|
48
|
+
/**
|
|
49
|
+
* ストレージをオープンし、IndexedDB データベースへの接続を確立します。
|
|
50
|
+
*
|
|
51
|
+
* 既にオープンされている場合は何も行いません。
|
|
52
|
+
*/
|
|
44
53
|
public async open(): Promise<void> {
|
|
45
54
|
if (this.db) {
|
|
46
55
|
return;
|
|
@@ -56,16 +65,33 @@ export default class Indexeddb implements IStorage {
|
|
|
56
65
|
});
|
|
57
66
|
}
|
|
58
67
|
|
|
68
|
+
/**
|
|
69
|
+
* ストレージを安全にクローズします。
|
|
70
|
+
*
|
|
71
|
+
* データベース接続を閉じ、内部状態を初期化します。
|
|
72
|
+
*/
|
|
59
73
|
public async close(): Promise<void> {
|
|
60
74
|
this.db!.close();
|
|
61
75
|
this.db = null;
|
|
62
76
|
}
|
|
63
77
|
|
|
78
|
+
/**
|
|
79
|
+
* 指定されたデータを、対応するキーでストレージに保存します。
|
|
80
|
+
*
|
|
81
|
+
* @param args.key 保存先のキーです。
|
|
82
|
+
* @param args.data 保存するデータです。
|
|
83
|
+
*/
|
|
64
84
|
public async write(args: Pick<IStorage.WriteArgs<any>, "key" | "data">): Promise<void> {
|
|
65
85
|
const { key, data } = args;
|
|
66
86
|
await this.db!.put(this.storeName, data, key);
|
|
67
87
|
}
|
|
68
88
|
|
|
89
|
+
/**
|
|
90
|
+
* 指定されたキーに対応するデータをストレージから取得します。
|
|
91
|
+
*
|
|
92
|
+
* @param args.key 取得元のキーです。
|
|
93
|
+
* @returns キーに対応するデータです。存在しない場合は DOMException (NotFoundError) を投げます。
|
|
94
|
+
*/
|
|
69
95
|
public async read(args: Pick<IStorage.ReadArgs, "key">): Promise<any> {
|
|
70
96
|
const { key } = args;
|
|
71
97
|
// Opfs の挙動に合わせて、存在しない場合は DOMException (NotFoundError) を投げます
|
|
@@ -79,6 +105,12 @@ export default class Indexeddb implements IStorage {
|
|
|
79
105
|
return await this.db!.get(this.storeName, key);
|
|
80
106
|
}
|
|
81
107
|
|
|
108
|
+
/**
|
|
109
|
+
* 指定されたキーに対応するデータがストレージ内に存在するかを確認します。
|
|
110
|
+
*
|
|
111
|
+
* @param args.key 確認するキーです。
|
|
112
|
+
* @returns キーに対応するデータが存在する場合は true、それ以外は false です。
|
|
113
|
+
*/
|
|
82
114
|
public async exists(args: Pick<IStorage.ExistsArgs, "key">): Promise<boolean> {
|
|
83
115
|
const { key } = args;
|
|
84
116
|
|
|
@@ -87,20 +119,36 @@ export default class Indexeddb implements IStorage {
|
|
|
87
119
|
return count > 0;
|
|
88
120
|
}
|
|
89
121
|
|
|
122
|
+
/**
|
|
123
|
+
* 指定されたキーに対応するデータをストレージから削除します。
|
|
124
|
+
*
|
|
125
|
+
* @param args.key 削除するキーです。
|
|
126
|
+
*/
|
|
90
127
|
public async delete(args: Pick<IStorage.DeleteArgs, "key">): Promise<void> {
|
|
91
128
|
const { key } = args;
|
|
129
|
+
|
|
92
130
|
await this.db!.delete(this.storeName, key);
|
|
93
131
|
}
|
|
94
132
|
|
|
133
|
+
/**
|
|
134
|
+
* ストレージ内のすべてのデータを完全に消去します。
|
|
135
|
+
*/
|
|
95
136
|
public async clear(): Promise<void> {
|
|
96
137
|
await this.db!.clear(this.storeName);
|
|
97
138
|
}
|
|
98
139
|
|
|
140
|
+
/**
|
|
141
|
+
* 指定されたキーに対応する書き込み可能なストリームを取得します。
|
|
142
|
+
*
|
|
143
|
+
* IndexedDB にはネイティブなストリームがないため、書き込まれたチャンクをメモリー上に保持し、ストリームがクローズされたときにまとめて保存します。
|
|
144
|
+
*
|
|
145
|
+
* @param args.key 書き込み先のキーです。
|
|
146
|
+
* @returns 書き込み可能なストリームです。
|
|
147
|
+
*/
|
|
99
148
|
public getWritable(args: Pick<IStorage.GetWritableArgs, "key">): WritableStream<Uint8Array> {
|
|
100
149
|
const { key } = args;
|
|
101
150
|
const chunks: Uint8Array[] = [];
|
|
102
151
|
|
|
103
|
-
// IndexedDB にはネイティブなファイルストリームがないため、書き込まれたチャンクをメモリに保持し、クローズ時にまとめて put します。
|
|
104
152
|
return new WritableStream({
|
|
105
153
|
write: (chunk) => {
|
|
106
154
|
chunks.push(chunk);
|
|
@@ -120,12 +168,19 @@ export default class Indexeddb implements IStorage {
|
|
|
120
168
|
});
|
|
121
169
|
}
|
|
122
170
|
|
|
171
|
+
/**
|
|
172
|
+
* 指定されたキーに対応する読み取り可能なストリームを取得します。
|
|
173
|
+
*
|
|
174
|
+
* IndexedDB にはネイティブなストリームがないため、データ全体をメモリーにロードしてから単一チャンクとしてストリームで送出します。
|
|
175
|
+
*
|
|
176
|
+
* @param args.key 読み取り元のキーです。
|
|
177
|
+
* @returns 読み取り可能なストリームです。
|
|
178
|
+
*/
|
|
123
179
|
public getReadable(args: Pick<IStorage.GetReadableArgs, "key">): ReadableStream<Uint8Array> {
|
|
124
180
|
const { key } = args;
|
|
125
181
|
|
|
126
182
|
return new ReadableStream({
|
|
127
183
|
pull: async (controller) => {
|
|
128
|
-
// データ全体をメモリにロードしてから ReadableStream に流し込みます。
|
|
129
184
|
const data = await this.read({ key });
|
|
130
185
|
controller.enqueue(data);
|
|
131
186
|
controller.close();
|