@unikvs/memory 0.0.13 → 0.0.14

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/index.d.ts CHANGED
@@ -46,18 +46,70 @@ type MemoryOptions = {
46
46
  */
47
47
  declare class Memory implements IStorage {
48
48
  #private;
49
+ /**
50
+ * ストレージ名です。常に `Memory` を返します。
51
+ */
49
52
  readonly name: string;
50
53
  /**
51
54
  * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
52
55
  */
53
56
  constructor(options?: MemoryOptions);
57
+ /**
58
+ * ストレージが利用可能かどうかを返します。Memory は常に利用可能です。
59
+ *
60
+ * @returns 常に true を返します。
61
+ */
54
62
  get isOpen(): boolean;
63
+ /**
64
+ * 指定したキーに値を保存します。保存前に値を複製します。
65
+ *
66
+ * @param c 書き込み対象のキーを持つコンテキストです。
67
+ * @param data 保存する値です。
68
+ */
55
69
  write(c: IStorage.WriteContext, data: any): void;
70
+ /**
71
+ * 指定したキーの値を読み出します。保存値を複製して返します。
72
+ *
73
+ * @param c 読み出すキーを持つコンテキストです。
74
+ *
75
+ * @returns 複製した保存値です。
76
+ */
56
77
  read(c: IStorage.ReadContext): any;
78
+ /**
79
+ * 指定したキーが存在するかどうかを返します。
80
+ *
81
+ * @param c 確認するキーを持つコンテキストです。
82
+ *
83
+ * @returns キーが存在すれば true を返します。
84
+ */
57
85
  exists(c: IStorage.ExistsContext): boolean;
86
+ /**
87
+ * 指定したキーを削除します。
88
+ *
89
+ * @param c 削除するキーを持つコンテキストです。
90
+ */
58
91
  delete(c: IStorage.DeleteContext): void;
92
+ /**
93
+ * すべてのキーを削除します。
94
+ *
95
+ * @param _c 使用しないクリア用コンテキストです。
96
+ */
59
97
  clear(_c: IStorage.ClearContext): void;
98
+ /**
99
+ * Uint8Array を書き込むためのストリームを作成します。close 時にチャンクを結合して保存します。
100
+ *
101
+ * @param c 書き込み対象のキーを持つコンテキストです。
102
+ *
103
+ * @returns Uint8Array を受け付ける書き込みストリームです。
104
+ */
60
105
  getWritable(c: IStorage.GetWritableContext): WritableStream<Uint8Array<ArrayBuffer>>;
106
+ /**
107
+ * 保存済みの値を単一チャンクとして送出するストリームを作成します。
108
+ *
109
+ * @param c 読み出すキーを持つコンテキストです。
110
+ *
111
+ * @returns Uint8Array を送出する読み取りストリームです。
112
+ */
61
113
  getReadable(c: IStorage.GetReadableContext): ReadableStream<Uint8Array<ArrayBuffer>>;
62
114
  }
63
115
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/errors.ts","../src/memory.ts"],"mappings":";;;;;KASY;;;;WAID;;;;WAKA;;;;WAKA;;;;;KAMC,4BAA4B,eAAe,KAAK;;;;qBAK/C,8BAA8B,UAAU;;;;EAQnD,YAAmB,MAAM;;;;;;;KCnCf;;;;WAID,UAAU,GAAG,OAAO,MAAM;;;;;cAMhB,kBAAkB;;WAMrB;;;;EAUhB,YAAmB,UAAS;MAQjB;EAIX,MAAa,GAAG,SAAS,cAAc;EAIvC,KAAY,GAAG,SAAS;EAUxB,OAAc,GAAG,SAAS;EAM1B,OAAc,GAAG,SAAS;EAQ1B,MAAa,IAAI,SAAS;EAI1B,YAAmB,GAAG,SAAS,qBAAqB,eAAe,WAAW;EAgC9E,YAAmB,GAAG,SAAS,qBAAqB,eAAe,WAAW"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/errors.ts","../src/memory.ts"],"mappings":";;;;;KASY;;;;WAID;;;;WAKA;;;;WAKA;;;;;KAMC,4BAA4B,eAAe,KAAK;;;;qBAK/C,8BAA8B,UAAU;;;;EAQnD,YAAmB,MAAM;;;;;;;KCnCf;;;;WAID,UAAU,GAAG,OAAO,MAAM;;;;;cAMhB,kBAAkB;;;;;WAIrB;;;;EAehB,YAAmB,UAAS;;;;;;MAajB;;;;;;;EAUX,MAAa,GAAG,SAAS,cAAc;;;;;;;;EAWvC,KAAY,GAAG,SAAS;;;;;;;;EAiBxB,OAAc,GAAG,SAAS;;;;;;EAW1B,OAAc,GAAG,SAAS;;;;;;EAa1B,MAAa,IAAI,SAAS;;;;;;;;EAW1B,YAAmB,GAAG,SAAS,qBAAqB,eAAe,WAAW;;;;;;;;EAuC9E,YAAmB,GAAG,SAAS,qBAAqB,eAAe,WAAW"}
package/dist/index.js CHANGED
@@ -67,27 +67,69 @@ var Memory = class {
67
67
  _classPrivateFieldSet2(_map, this, /* @__PURE__ */ new Map());
68
68
  _classPrivateFieldSet2(_clone, this, clone);
69
69
  }
70
+ /**
71
+ * ストレージが利用可能かどうかを返します。Memory は常に利用可能です。
72
+ *
73
+ * @returns 常に true を返します。
74
+ */
70
75
  get isOpen() {
71
76
  return true;
72
77
  }
78
+ /**
79
+ * 指定したキーに値を保存します。保存前に値を複製します。
80
+ *
81
+ * @param c 書き込み対象のキーを持つコンテキストです。
82
+ * @param data 保存する値です。
83
+ */
73
84
  write(c, data) {
74
85
  _classPrivateFieldGet2(_map, this).set(c.key, _classPrivateFieldGet2(_clone, this).call(this, data));
75
86
  }
87
+ /**
88
+ * 指定したキーの値を読み出します。保存値を複製して返します。
89
+ *
90
+ * @param c 読み出すキーを持つコンテキストです。
91
+ *
92
+ * @returns 複製した保存値です。
93
+ */
76
94
  read(c) {
77
95
  if (!_classPrivateFieldGet2(_map, this).has(c.key)) throw new KeyNotFoundError$1({ key: c.key });
78
96
  const value = _classPrivateFieldGet2(_map, this).get(c.key);
79
97
  return _classPrivateFieldGet2(_clone, this).call(this, value);
80
98
  }
99
+ /**
100
+ * 指定したキーが存在するかどうかを返します。
101
+ *
102
+ * @param c 確認するキーを持つコンテキストです。
103
+ *
104
+ * @returns キーが存在すれば true を返します。
105
+ */
81
106
  exists(c) {
82
107
  return _classPrivateFieldGet2(_map, this).has(c.key);
83
108
  }
109
+ /**
110
+ * 指定したキーを削除します。
111
+ *
112
+ * @param c 削除するキーを持つコンテキストです。
113
+ */
84
114
  delete(c) {
85
115
  if (!_classPrivateFieldGet2(_map, this).has(c.key)) throw new KeyNotFoundError$1({ key: c.key });
86
116
  _classPrivateFieldGet2(_map, this).delete(c.key);
87
117
  }
118
+ /**
119
+ * すべてのキーを削除します。
120
+ *
121
+ * @param _c 使用しないクリア用コンテキストです。
122
+ */
88
123
  clear(_c) {
89
124
  _classPrivateFieldGet2(_map, this).clear();
90
125
  }
126
+ /**
127
+ * Uint8Array を書き込むためのストリームを作成します。close 時にチャンクを結合して保存します。
128
+ *
129
+ * @param c 書き込み対象のキーを持つコンテキストです。
130
+ *
131
+ * @returns Uint8Array を受け付ける書き込みストリームです。
132
+ */
91
133
  getWritable(c) {
92
134
  const chunks = [];
93
135
  return new WritableStream({
@@ -110,6 +152,13 @@ var Memory = class {
110
152
  }
111
153
  });
112
154
  }
155
+ /**
156
+ * 保存済みの値を単一チャンクとして送出するストリームを作成します。
157
+ *
158
+ * @param c 読み出すキーを持つコンテキストです。
159
+ *
160
+ * @returns Uint8Array を送出する読み取りストリームです。
161
+ */
113
162
  getReadable(c) {
114
163
  if (!_classPrivateFieldGet2(_map, this).has(c.key)) throw new KeyNotFoundError$1({ key: c.key });
115
164
  const value = _classPrivateFieldGet2(_map, this).get(c.key);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["KeyNotFoundError"],"sources":["../src/errors.ts","../src/memory.ts"],"sourcesContent":["import { type ErrorOptions, ErrorBase, setErrorMessage } from \"@unikvs/core\";\nimport getTypeName from \"type-name\";\n\nexport type { KeyNotFoundErrorArgs, KeyNotFoundErrorMeta } from \"@unikvs/core\";\nexport { KeyNotFoundError } from \"@unikvs/core\";\n\n/**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-error)\n */\nexport type InvalidChunkTypeErrorMeta = {\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-key)\n */\n readonly key: string;\n\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-chunk)\n */\n readonly chunk: unknown;\n\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-chunk-type)\n */\n readonly chunkType: string;\n};\n\n/**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-error)\n */\nexport type InvalidChunkTypeErrorArgs = ErrorOptions & Omit<InvalidChunkTypeErrorMeta, \"chunkType\">;\n\n/**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-error)\n */\nexport class InvalidChunkTypeError extends ErrorBase<InvalidChunkTypeErrorMeta> {\n static {\n this.prototype.name = \"MemoryInvalidChunkTypeError\";\n }\n\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-error)\n */\n public constructor(args: InvalidChunkTypeErrorArgs) {\n const { key, chunk, ...options } = args;\n const meta: InvalidChunkTypeErrorMeta = {\n key,\n chunk,\n chunkType: getTypeName(chunk),\n };\n super(\n meta,\n ({ key: messageKey, chunkType }) =>\n `Expected chunk for key ${JSON.stringify(messageKey)} is Uint8Array<ArrayBuffer>, but got ${chunkType}`,\n options,\n );\n }\n}\n\nsetErrorMessage(\n InvalidChunkTypeError,\n ({ key: messageKey, chunkType }) =>\n `キー ${JSON.stringify(messageKey)} のチャンク型に Uint8Array<ArrayBuffer> を期待しましたが、${chunkType} を得ました`,\n \"ja\",\n);\n","import { type IStorage, KeyNotFoundError } from \"@unikvs/core\";\n\nimport { InvalidChunkTypeError } from \"./errors.js\";\n\n/**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)\n */\nexport type MemoryOptions = {\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#clone)\n */\n readonly clone?: (<T>(value: T) => T) | undefined;\n};\n\n/**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)\n */\nexport default class Memory implements IStorage {\n /**\n * キーと値のペアを保持する内部マップです。\n */\n readonly #map: Map<string, any>;\n\n public readonly name: string;\n\n /**\n * データの複製に使用する関数です。\n */\n readonly #clone: <T>(value: T) => T;\n\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)\n */\n public constructor(options: MemoryOptions = {}) {\n const { clone = <T>(value: T): T => structuredClone(value) } = options;\n\n this.name = \"Memory\";\n this.#map = new Map();\n this.#clone = clone;\n }\n\n public get isOpen(): boolean {\n return true;\n }\n\n public write(c: IStorage.WriteContext, data: any): void {\n this.#map.set(c.key, this.#clone(data));\n }\n\n public read(c: IStorage.ReadContext): any {\n if (!this.#map.has(c.key)) {\n throw new KeyNotFoundError({ key: c.key });\n }\n\n const value = this.#map.get(c.key);\n\n return this.#clone(value);\n }\n\n public exists(c: IStorage.ExistsContext): boolean {\n const exists = this.#map.has(c.key);\n\n return exists;\n }\n\n public delete(c: IStorage.DeleteContext): void {\n if (!this.#map.has(c.key)) {\n throw new KeyNotFoundError({ key: c.key });\n }\n\n this.#map.delete(c.key);\n }\n\n public clear(_c: IStorage.ClearContext): void {\n this.#map.clear();\n }\n\n public getWritable(c: IStorage.GetWritableContext): WritableStream<Uint8Array<ArrayBuffer>> {\n // メモリーストレージにはネイティブなストリームがないため、書き込まれたチャンクを配列に保持し、クローズ時に結合して保存します。\n const chunks: Uint8Array[] = [];\n const stream = new WritableStream<Uint8Array<ArrayBuffer>>({\n close: (): void => {\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);\n const merged = new Uint8Array(totalLength);\n\n let offset = 0;\n\n for (const chunk of chunks) {\n merged.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n this.#map.set(c.key, merged);\n },\n write: (chunk): void => {\n if (!(chunk instanceof Uint8Array)) {\n throw new InvalidChunkTypeError({\n key: c.key,\n chunk,\n });\n }\n\n chunks.push(this.#clone(chunk));\n },\n });\n\n return stream;\n }\n\n public getReadable(c: IStorage.GetReadableContext): ReadableStream<Uint8Array<ArrayBuffer>> {\n if (!this.#map.has(c.key)) {\n throw new KeyNotFoundError({ key: c.key });\n }\n\n // メモリーストレージにはネイティブなストリームがないため、既存の値を単一チャンクとしてストリームで送出します。\n const value = this.#map.get(c.key);\n const stream = new ReadableStream<Uint8Array<ArrayBuffer>>({\n pull: (controller): void => {\n if (!(value instanceof Uint8Array)) {\n throw new InvalidChunkTypeError({\n key: c.key,\n chunk: value,\n });\n }\n\n controller.enqueue(this.#clone(value) as Uint8Array<ArrayBuffer>);\n controller.close();\n },\n });\n\n return stream;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["KeyNotFoundError"],"sources":["../src/errors.ts","../src/memory.ts"],"sourcesContent":["import { type ErrorOptions, ErrorBase, setErrorMessage } from \"@unikvs/core\";\nimport getTypeName from \"type-name\";\n\nexport type { KeyNotFoundErrorArgs, KeyNotFoundErrorMeta } from \"@unikvs/core\";\nexport { KeyNotFoundError } from \"@unikvs/core\";\n\n/**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-error)\n */\nexport type InvalidChunkTypeErrorMeta = {\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-key)\n */\n readonly key: string;\n\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-chunk)\n */\n readonly chunk: unknown;\n\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-chunk-type)\n */\n readonly chunkType: string;\n};\n\n/**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-error)\n */\nexport type InvalidChunkTypeErrorArgs = ErrorOptions & Omit<InvalidChunkTypeErrorMeta, \"chunkType\">;\n\n/**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-error)\n */\nexport class InvalidChunkTypeError extends ErrorBase<InvalidChunkTypeErrorMeta> {\n static {\n this.prototype.name = \"MemoryInvalidChunkTypeError\";\n }\n\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#invalid-chunk-type-error)\n */\n public constructor(args: InvalidChunkTypeErrorArgs) {\n const { key, chunk, ...options } = args;\n const meta: InvalidChunkTypeErrorMeta = {\n key,\n chunk,\n chunkType: getTypeName(chunk),\n };\n super(\n meta,\n ({ key: messageKey, chunkType }) =>\n `Expected chunk for key ${JSON.stringify(messageKey)} is Uint8Array<ArrayBuffer>, but got ${chunkType}`,\n options,\n );\n }\n}\n\nsetErrorMessage(\n InvalidChunkTypeError,\n ({ key: messageKey, chunkType }) =>\n `キー ${JSON.stringify(messageKey)} のチャンク型に Uint8Array<ArrayBuffer> を期待しましたが、${chunkType} を得ました`,\n \"ja\",\n);\n","import { type IStorage, KeyNotFoundError } from \"@unikvs/core\";\n\nimport { InvalidChunkTypeError } from \"./errors.js\";\n\n/**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)\n */\nexport type MemoryOptions = {\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#clone)\n */\n readonly clone?: (<T>(value: T) => T) | undefined;\n};\n\n/**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)\n */\nexport default class Memory implements IStorage {\n /**\n * ストレージ名です。常に `Memory` を返します。\n */\n public readonly name: string;\n\n /**\n * キーと値のペアを保持する内部マップです。\n */\n readonly #map: Map<string, any>;\n\n /**\n * データの複製に使用する関数です。\n */\n readonly #clone: <T>(value: T) => T;\n\n /**\n * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)\n */\n public constructor(options: MemoryOptions = {}) {\n const { clone = <T>(value: T): T => structuredClone(value) } = options;\n\n this.name = \"Memory\";\n this.#map = new Map();\n this.#clone = clone;\n }\n\n /**\n * ストレージが利用可能かどうかを返します。Memory は常に利用可能です。\n *\n * @returns 常に true を返します。\n */\n public get isOpen(): boolean {\n return true;\n }\n\n /**\n * 指定したキーに値を保存します。保存前に値を複製します。\n *\n * @param c 書き込み対象のキーを持つコンテキストです。\n * @param data 保存する値です。\n */\n public write(c: IStorage.WriteContext, data: any): void {\n this.#map.set(c.key, this.#clone(data));\n }\n\n /**\n * 指定したキーの値を読み出します。保存値を複製して返します。\n *\n * @param c 読み出すキーを持つコンテキストです。\n *\n * @returns 複製した保存値です。\n */\n public read(c: IStorage.ReadContext): any {\n if (!this.#map.has(c.key)) {\n throw new KeyNotFoundError({ key: c.key });\n }\n\n const value = this.#map.get(c.key);\n\n return this.#clone(value);\n }\n\n /**\n * 指定したキーが存在するかどうかを返します。\n *\n * @param c 確認するキーを持つコンテキストです。\n *\n * @returns キーが存在すれば true を返します。\n */\n public exists(c: IStorage.ExistsContext): boolean {\n const exists = this.#map.has(c.key);\n\n return exists;\n }\n\n /**\n * 指定したキーを削除します。\n *\n * @param c 削除するキーを持つコンテキストです。\n */\n public delete(c: IStorage.DeleteContext): void {\n if (!this.#map.has(c.key)) {\n throw new KeyNotFoundError({ key: c.key });\n }\n\n this.#map.delete(c.key);\n }\n\n /**\n * すべてのキーを削除します。\n *\n * @param _c 使用しないクリア用コンテキストです。\n */\n public clear(_c: IStorage.ClearContext): void {\n this.#map.clear();\n }\n\n /**\n * Uint8Array を書き込むためのストリームを作成します。close 時にチャンクを結合して保存します。\n *\n * @param c 書き込み対象のキーを持つコンテキストです。\n *\n * @returns Uint8Array を受け付ける書き込みストリームです。\n */\n public getWritable(c: IStorage.GetWritableContext): WritableStream<Uint8Array<ArrayBuffer>> {\n // メモリーストレージにはネイティブなストリームがないため、書き込まれたチャンクを配列に保持し、クローズ時に結合して保存します。\n const chunks: Uint8Array[] = [];\n const stream = new WritableStream<Uint8Array<ArrayBuffer>>({\n close: (): void => {\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);\n const merged = new Uint8Array(totalLength);\n\n let offset = 0;\n\n for (const chunk of chunks) {\n merged.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n this.#map.set(c.key, merged);\n },\n write: (chunk): void => {\n if (!(chunk instanceof Uint8Array)) {\n throw new InvalidChunkTypeError({\n key: c.key,\n chunk,\n });\n }\n\n chunks.push(this.#clone(chunk));\n },\n });\n\n return stream;\n }\n\n /**\n * 保存済みの値を単一チャンクとして送出するストリームを作成します。\n *\n * @param c 読み出すキーを持つコンテキストです。\n *\n * @returns Uint8Array を送出する読み取りストリームです。\n */\n public getReadable(c: IStorage.GetReadableContext): ReadableStream<Uint8Array<ArrayBuffer>> {\n if (!this.#map.has(c.key)) {\n throw new KeyNotFoundError({ key: c.key });\n }\n\n // メモリーストレージにはネイティブなストリームがないため、既存の値を単一チャンクとしてストリームで送出します。\n const value = this.#map.get(c.key);\n const stream = new ReadableStream<Uint8Array<ArrayBuffer>>({\n pull: (controller): void => {\n if (!(value instanceof Uint8Array)) {\n throw new InvalidChunkTypeError({\n key: c.key,\n chunk: value,\n });\n }\n\n controller.enqueue(this.#clone(value) as Uint8Array<ArrayBuffer>);\n controller.close();\n },\n });\n\n return stream;\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unikvs/memory",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "description": "Storage plugin that stores arbitrary data in memory.",
5
5
  "homepage": "https://tai-kun.github.io/unikvs/",
6
6
  "license": "MIT",
@@ -24,7 +24,7 @@
24
24
  }
25
25
  },
26
26
  "dependencies": {
27
- "@unikvs/core": "0.0.13",
27
+ "@unikvs/core": "0.0.14",
28
28
  "type-name": "^2.0.2"
29
29
  },
30
30
  "devDependencies": {
package/src/memory.ts CHANGED
@@ -16,13 +16,16 @@ export type MemoryOptions = {
16
16
  * [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
17
17
  */
18
18
  export default class Memory implements IStorage {
19
+ /**
20
+ * ストレージ名です。常に `Memory` を返します。
21
+ */
22
+ public readonly name: string;
23
+
19
24
  /**
20
25
  * キーと値のペアを保持する内部マップです。
21
26
  */
22
27
  readonly #map: Map<string, any>;
23
28
 
24
- public readonly name: string;
25
-
26
29
  /**
27
30
  * データの複製に使用する関数です。
28
31
  */
@@ -39,14 +42,32 @@ export default class Memory implements IStorage {
39
42
  this.#clone = clone;
40
43
  }
41
44
 
45
+ /**
46
+ * ストレージが利用可能かどうかを返します。Memory は常に利用可能です。
47
+ *
48
+ * @returns 常に true を返します。
49
+ */
42
50
  public get isOpen(): boolean {
43
51
  return true;
44
52
  }
45
53
 
54
+ /**
55
+ * 指定したキーに値を保存します。保存前に値を複製します。
56
+ *
57
+ * @param c 書き込み対象のキーを持つコンテキストです。
58
+ * @param data 保存する値です。
59
+ */
46
60
  public write(c: IStorage.WriteContext, data: any): void {
47
61
  this.#map.set(c.key, this.#clone(data));
48
62
  }
49
63
 
64
+ /**
65
+ * 指定したキーの値を読み出します。保存値を複製して返します。
66
+ *
67
+ * @param c 読み出すキーを持つコンテキストです。
68
+ *
69
+ * @returns 複製した保存値です。
70
+ */
50
71
  public read(c: IStorage.ReadContext): any {
51
72
  if (!this.#map.has(c.key)) {
52
73
  throw new KeyNotFoundError({ key: c.key });
@@ -57,12 +78,24 @@ export default class Memory implements IStorage {
57
78
  return this.#clone(value);
58
79
  }
59
80
 
81
+ /**
82
+ * 指定したキーが存在するかどうかを返します。
83
+ *
84
+ * @param c 確認するキーを持つコンテキストです。
85
+ *
86
+ * @returns キーが存在すれば true を返します。
87
+ */
60
88
  public exists(c: IStorage.ExistsContext): boolean {
61
89
  const exists = this.#map.has(c.key);
62
90
 
63
91
  return exists;
64
92
  }
65
93
 
94
+ /**
95
+ * 指定したキーを削除します。
96
+ *
97
+ * @param c 削除するキーを持つコンテキストです。
98
+ */
66
99
  public delete(c: IStorage.DeleteContext): void {
67
100
  if (!this.#map.has(c.key)) {
68
101
  throw new KeyNotFoundError({ key: c.key });
@@ -71,10 +104,22 @@ export default class Memory implements IStorage {
71
104
  this.#map.delete(c.key);
72
105
  }
73
106
 
107
+ /**
108
+ * すべてのキーを削除します。
109
+ *
110
+ * @param _c 使用しないクリア用コンテキストです。
111
+ */
74
112
  public clear(_c: IStorage.ClearContext): void {
75
113
  this.#map.clear();
76
114
  }
77
115
 
116
+ /**
117
+ * Uint8Array を書き込むためのストリームを作成します。close 時にチャンクを結合して保存します。
118
+ *
119
+ * @param c 書き込み対象のキーを持つコンテキストです。
120
+ *
121
+ * @returns Uint8Array を受け付ける書き込みストリームです。
122
+ */
78
123
  public getWritable(c: IStorage.GetWritableContext): WritableStream<Uint8Array<ArrayBuffer>> {
79
124
  // メモリーストレージにはネイティブなストリームがないため、書き込まれたチャンクを配列に保持し、クローズ時に結合して保存します。
80
125
  const chunks: Uint8Array[] = [];
@@ -107,6 +152,13 @@ export default class Memory implements IStorage {
107
152
  return stream;
108
153
  }
109
154
 
155
+ /**
156
+ * 保存済みの値を単一チャンクとして送出するストリームを作成します。
157
+ *
158
+ * @param c 読み出すキーを持つコンテキストです。
159
+ *
160
+ * @returns Uint8Array を送出する読み取りストリームです。
161
+ */
110
162
  public getReadable(c: IStorage.GetReadableContext): ReadableStream<Uint8Array<ArrayBuffer>> {
111
163
  if (!this.#map.has(c.key)) {
112
164
  throw new KeyNotFoundError({ key: c.key });