@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 +52 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/memory.ts +54 -2
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
|
|
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 *
|
|
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.
|
|
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.
|
|
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 });
|