@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.
@@ -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;IAEY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAerB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAaxD,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAQhE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC;IAwBpF,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC;CAY5F"}
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"}
@@ -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.7",
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.7",
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.2",
35
- "@vitest/browser": "^4.1.5",
36
- "@vitest/browser-playwright": "^4.1.5",
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.59.1",
39
- "vite": "^8.0.10",
40
- "vitest": "^4.1.5"
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();