@unikvs/memory 0.0.10 → 0.0.12
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/README.md +3 -0
- package/dist/src/errors.d.ts +12 -21
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +4 -8
- package/dist/src/memory.d.ts +25 -41
- package/dist/src/memory.d.ts.map +1 -1
- package/dist/src/memory.js +16 -44
- package/package.json +10 -9
- package/src/errors.ts +12 -21
- package/src/memory.ts +32 -45
package/README.md
ADDED
package/dist/src/errors.d.ts
CHANGED
|
@@ -1,62 +1,53 @@
|
|
|
1
1
|
import { ErrorBase, type ErrorOptions } from "@unikvs/core";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
4
4
|
*/
|
|
5
5
|
export type KeyNotFoundErrorMeta = {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
8
8
|
*/
|
|
9
9
|
readonly key: string;
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* エラーの追加情報 (`cause`) も含みます。
|
|
12
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
15
13
|
*/
|
|
16
14
|
export type KeyNotFoundErrorArgs = ErrorOptions & KeyNotFoundErrorMeta;
|
|
17
15
|
/**
|
|
18
|
-
*
|
|
16
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
19
17
|
*/
|
|
20
18
|
export declare class KeyNotFoundError extends ErrorBase<KeyNotFoundErrorMeta> {
|
|
21
19
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* @param args エラーメタデータとエラーの追加情報です。
|
|
20
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
25
21
|
*/
|
|
26
22
|
constructor(args: KeyNotFoundErrorArgs);
|
|
27
23
|
}
|
|
28
24
|
/**
|
|
29
|
-
*
|
|
25
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
30
26
|
*/
|
|
31
27
|
export type InvalidChunkTypeErrorMeta = {
|
|
32
28
|
/**
|
|
33
|
-
*
|
|
29
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
34
30
|
*/
|
|
35
31
|
readonly key: string;
|
|
36
32
|
/**
|
|
37
|
-
*
|
|
33
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
38
34
|
*/
|
|
39
35
|
readonly chunk: unknown;
|
|
40
36
|
/**
|
|
41
|
-
*
|
|
37
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
42
38
|
*/
|
|
43
39
|
readonly chunkType: string;
|
|
44
40
|
};
|
|
45
41
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* `chunkType` はコンストラクター内部で自動的に設定されるため、引数からは除外されています。
|
|
49
|
-
* また、エラーの追加情報 (`cause`) も含みます。
|
|
42
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
50
43
|
*/
|
|
51
44
|
export type InvalidChunkTypeErrorArgs = ErrorOptions & Omit<InvalidChunkTypeErrorMeta, "chunkType">;
|
|
52
45
|
/**
|
|
53
|
-
*
|
|
46
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
54
47
|
*/
|
|
55
48
|
export declare class InvalidChunkTypeError extends ErrorBase<InvalidChunkTypeErrorMeta> {
|
|
56
49
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* @param args エラーメタデータとエラーの追加情報です。
|
|
50
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
60
51
|
*/
|
|
61
52
|
constructor(args: InvalidChunkTypeErrorArgs);
|
|
62
53
|
}
|
package/dist/src/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAmB,MAAM,cAAc,CAAC;AAG7E;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAmB,MAAM,cAAc,CAAC;AAG7E;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,oBAAoB,CAAC;AAEvE;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,SAAS,CAAC,oBAAoB,CAAC;IAKnE;;OAEG;IACH,YAAmB,IAAI,EAAE,oBAAoB,EAI5C;CACF;AAID;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,YAAY,GAAG,IAAI,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;AAEpG;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,SAAS,CAAC,yBAAyB,CAAC;IAK7E;;OAEG;IACH,YAAmB,IAAI,EAAE,yBAAyB,EASjD;CACF"}
|
package/dist/src/errors.js
CHANGED
|
@@ -2,13 +2,11 @@ var _a, _b;
|
|
|
2
2
|
import { ErrorBase, setErrorMessage } from "@unikvs/core";
|
|
3
3
|
import getTypeName from "type-name";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
6
6
|
*/
|
|
7
7
|
export class KeyNotFoundError extends ErrorBase {
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* @param args エラーメタデータとエラーの追加情報です。
|
|
9
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
12
10
|
*/
|
|
13
11
|
constructor(args) {
|
|
14
12
|
const { key, ...options } = args;
|
|
@@ -22,13 +20,11 @@ _a = KeyNotFoundError;
|
|
|
22
20
|
})();
|
|
23
21
|
setErrorMessage(KeyNotFoundError, ({ key }) => `キー ${key} が見つかりません`, "ja");
|
|
24
22
|
/**
|
|
25
|
-
*
|
|
23
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
26
24
|
*/
|
|
27
25
|
export class InvalidChunkTypeError extends ErrorBase {
|
|
28
26
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* @param args エラーメタデータとエラーの追加情報です。
|
|
27
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
32
28
|
*/
|
|
33
29
|
constructor(args) {
|
|
34
30
|
const { key, chunk, ...options } = args;
|
package/dist/src/memory.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import type { IStorage } from "@unikvs/core";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
4
|
+
*/
|
|
5
|
+
export type MemoryOptions = {
|
|
6
|
+
/**
|
|
7
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
8
|
+
*/
|
|
9
|
+
readonly clone?: (<T>(value: T) => T) | undefined;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
7
13
|
*/
|
|
8
14
|
export default class Memory implements IStorage {
|
|
9
15
|
/**
|
|
@@ -11,69 +17,47 @@ export default class Memory implements IStorage {
|
|
|
11
17
|
*/
|
|
12
18
|
private readonly map;
|
|
13
19
|
/**
|
|
14
|
-
*
|
|
20
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
15
21
|
*/
|
|
16
22
|
readonly name: string;
|
|
17
23
|
/**
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
* データの複製に使用する関数です。
|
|
25
|
+
*/
|
|
26
|
+
private readonly clone;
|
|
27
|
+
/**
|
|
28
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
21
29
|
*/
|
|
22
|
-
constructor();
|
|
30
|
+
constructor(options?: MemoryOptions);
|
|
23
31
|
/**
|
|
24
|
-
*
|
|
32
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
25
33
|
*/
|
|
26
34
|
get isOpen(): boolean;
|
|
27
35
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* @param args.key 保存先のキーです。
|
|
31
|
-
* @param args.data 保存するデータです。
|
|
36
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
32
37
|
*/
|
|
33
38
|
write(args: Pick<IStorage.WriteArgs<any>, "key" | "data">): void;
|
|
34
39
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* @param args.key 取得元のキーです。
|
|
38
|
-
* @returns キーに対応するデータです。
|
|
39
|
-
* @throws キーがストレージ内に存在しない場合に {@link KeyNotFoundError} を投げます。
|
|
40
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
40
41
|
*/
|
|
41
42
|
read(args: Pick<IStorage.ReadArgs, "key">): any;
|
|
42
43
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* @param args.key 確認するキーです。
|
|
46
|
-
* @returns キーに対応するデータが存在する場合は true、それ以外は false です。
|
|
44
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
47
45
|
*/
|
|
48
46
|
exists(args: Pick<IStorage.ExistsArgs, "key">): boolean;
|
|
49
47
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* @param args.key 削除するキーです。
|
|
53
|
-
* @throws キーがストレージ内に存在しない場合に {@link KeyNotFoundError} を投げます。
|
|
48
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
54
49
|
*/
|
|
55
50
|
delete(args: Pick<IStorage.DeleteArgs, "key">): void;
|
|
56
51
|
/**
|
|
57
|
-
*
|
|
52
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
58
53
|
*/
|
|
59
54
|
clear(): void;
|
|
60
55
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* メモリーストレージにはネイティブなストリームがないため、書き込まれたチャンクをメモリー上に保持し、ストリームがクローズされたときに結合して保存します。
|
|
64
|
-
*
|
|
65
|
-
* @param args.key 書き込み先のキーです。
|
|
66
|
-
* @returns 書き込み可能なストリームです。
|
|
56
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#data)
|
|
67
57
|
*/
|
|
68
58
|
getWritable(args: Pick<IStorage.GetWritableArgs, "key">): WritableStream<Uint8Array<ArrayBuffer>>;
|
|
69
59
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* メモリーストレージにはネイティブなストリームがないため、既存の値を単一チャンクとしてストリームで送出します。
|
|
73
|
-
*
|
|
74
|
-
* @param args.key 読み取り元のキーです。
|
|
75
|
-
* @returns 読み取り可能なストリームです。
|
|
76
|
-
* @throws キーがストレージ内に存在しない場合に {@link KeyNotFoundError} を投げます。
|
|
60
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#data)
|
|
77
61
|
*/
|
|
78
62
|
getReadable(args: Pick<IStorage.GetReadableArgs, "key">): ReadableStream<Uint8Array<ArrayBuffer>>;
|
|
79
63
|
}
|
package/dist/src/memory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC;CACnD,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,YAAW,QAAQ;IAC7C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmB;IAEvC;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAE3C;;OAEG;IACH,YAAmB,OAAO,GAAE,aAAkB,EAI7C;IAED;;OAEG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;OAEG;IACI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAGtE;IAED;;OAEG;IACI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,GAAG,CASrD;IAED;;OAEG;IACI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO,CAK7D;IAED;;OAEG;IACI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,IAAI,CAO1D;IAED;;OAEG;IACI,KAAK,IAAI,IAAI,CAEnB;IAED;;OAEG;IACI,WAAW,CAChB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,GAC1C,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CA2BzC;IAED;;OAEG;IACI,WAAW,CAChB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,GAC1C,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAoBzC;CACF"}
|
package/dist/src/memory.js
CHANGED
|
@@ -1,42 +1,31 @@
|
|
|
1
1
|
import { KeyNotFoundError, InvalidChunkTypeError } from "./errors.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* アプリケーションの実行中のみデータを保持し、プロセス終了時に破棄されます。
|
|
6
|
-
* 全ての操作が同期で完了するため、非同期処理のオーバーヘッドがありません。
|
|
3
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
7
4
|
*/
|
|
8
5
|
export default class Memory {
|
|
9
6
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* 内部のマップを初期化し、常にオープン状態として動作します。
|
|
7
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
13
8
|
*/
|
|
14
|
-
constructor() {
|
|
9
|
+
constructor(options = {}) {
|
|
15
10
|
this.name = "Memory";
|
|
16
11
|
this.map = new Map();
|
|
12
|
+
this.clone = options.clone ?? ((v) => structuredClone(v));
|
|
17
13
|
}
|
|
18
14
|
/**
|
|
19
|
-
*
|
|
15
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
20
16
|
*/
|
|
21
17
|
get isOpen() {
|
|
22
18
|
return true;
|
|
23
19
|
}
|
|
24
20
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* @param args.key 保存先のキーです。
|
|
28
|
-
* @param args.data 保存するデータです。
|
|
21
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
29
22
|
*/
|
|
30
23
|
write(args) {
|
|
31
24
|
const { key, data } = args;
|
|
32
|
-
this.map.set(key, data);
|
|
25
|
+
this.map.set(key, this.clone(data));
|
|
33
26
|
}
|
|
34
27
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* @param args.key 取得元のキーです。
|
|
38
|
-
* @returns キーに対応するデータです。
|
|
39
|
-
* @throws キーがストレージ内に存在しない場合に {@link KeyNotFoundError} を投げます。
|
|
28
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
40
29
|
*/
|
|
41
30
|
read(args) {
|
|
42
31
|
const { key } = args;
|
|
@@ -44,13 +33,10 @@ export default class Memory {
|
|
|
44
33
|
throw new KeyNotFoundError({ key });
|
|
45
34
|
}
|
|
46
35
|
const value = this.map.get(key);
|
|
47
|
-
return value;
|
|
36
|
+
return this.clone(value);
|
|
48
37
|
}
|
|
49
38
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* @param args.key 確認するキーです。
|
|
53
|
-
* @returns キーに対応するデータが存在する場合は true、それ以外は false です。
|
|
39
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
54
40
|
*/
|
|
55
41
|
exists(args) {
|
|
56
42
|
const { key } = args;
|
|
@@ -58,10 +44,7 @@ export default class Memory {
|
|
|
58
44
|
return exists;
|
|
59
45
|
}
|
|
60
46
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* @param args.key 削除するキーです。
|
|
64
|
-
* @throws キーがストレージ内に存在しない場合に {@link KeyNotFoundError} を投げます。
|
|
47
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
65
48
|
*/
|
|
66
49
|
delete(args) {
|
|
67
50
|
const { key } = args;
|
|
@@ -71,18 +54,13 @@ export default class Memory {
|
|
|
71
54
|
this.map.delete(key);
|
|
72
55
|
}
|
|
73
56
|
/**
|
|
74
|
-
*
|
|
57
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
75
58
|
*/
|
|
76
59
|
clear() {
|
|
77
60
|
this.map.clear();
|
|
78
61
|
}
|
|
79
62
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* メモリーストレージにはネイティブなストリームがないため、書き込まれたチャンクをメモリー上に保持し、ストリームがクローズされたときに結合して保存します。
|
|
83
|
-
*
|
|
84
|
-
* @param args.key 書き込み先のキーです。
|
|
85
|
-
* @returns 書き込み可能なストリームです。
|
|
63
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#data)
|
|
86
64
|
*/
|
|
87
65
|
getWritable(args) {
|
|
88
66
|
const { key } = args;
|
|
@@ -93,7 +71,7 @@ export default class Memory {
|
|
|
93
71
|
if (!(chunk instanceof Uint8Array)) {
|
|
94
72
|
throw new InvalidChunkTypeError({ key, chunk });
|
|
95
73
|
}
|
|
96
|
-
chunks.push(chunk);
|
|
74
|
+
chunks.push(this.clone(chunk));
|
|
97
75
|
},
|
|
98
76
|
close: () => {
|
|
99
77
|
const totalLength = chunks.reduce((sum, c) => sum + c.byteLength, 0);
|
|
@@ -109,13 +87,7 @@ export default class Memory {
|
|
|
109
87
|
return stream;
|
|
110
88
|
}
|
|
111
89
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
* メモリーストレージにはネイティブなストリームがないため、既存の値を単一チャンクとしてストリームで送出します。
|
|
115
|
-
*
|
|
116
|
-
* @param args.key 読み取り元のキーです。
|
|
117
|
-
* @returns 読み取り可能なストリームです。
|
|
118
|
-
* @throws キーがストレージ内に存在しない場合に {@link KeyNotFoundError} を投げます。
|
|
90
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#data)
|
|
119
91
|
*/
|
|
120
92
|
getReadable(args) {
|
|
121
93
|
const { key } = args;
|
|
@@ -129,7 +101,7 @@ export default class Memory {
|
|
|
129
101
|
if (!(value instanceof Uint8Array)) {
|
|
130
102
|
throw new InvalidChunkTypeError({ key, chunk: value });
|
|
131
103
|
}
|
|
132
|
-
controller.enqueue(value);
|
|
104
|
+
controller.enqueue(this.clone(value));
|
|
133
105
|
controller.close();
|
|
134
106
|
},
|
|
135
107
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unikvs/memory",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "",
|
|
3
|
+
"version": "0.0.12",
|
|
4
|
+
"description": "Storage plugin that stores arbitrary data in memory.",
|
|
5
5
|
"homepage": "https://github.com/tai-kun/unikvs",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "tai-kun",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"dist",
|
|
13
13
|
"src",
|
|
14
14
|
"package.json",
|
|
15
|
+
"README.md",
|
|
15
16
|
"LICENSE"
|
|
16
17
|
],
|
|
17
18
|
"type": "module",
|
|
@@ -25,20 +26,20 @@
|
|
|
25
26
|
}
|
|
26
27
|
},
|
|
27
28
|
"dependencies": {
|
|
28
|
-
"@unikvs/core": "0.0.
|
|
29
|
+
"@unikvs/core": "0.0.12",
|
|
29
30
|
"type-name": "2.0.2"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
33
|
"@tsconfig/node24": "24.0.5",
|
|
33
34
|
"@tsconfig/strictest": "2.0.8",
|
|
34
|
-
"@types/node": "24.13.
|
|
35
|
+
"@types/node": "24.13.6",
|
|
35
36
|
"@types/type-name": "1.0.32",
|
|
36
|
-
"@vitest/browser": "4.1.
|
|
37
|
-
"@vitest/browser-playwright": "4.1.
|
|
37
|
+
"@vitest/browser": "4.1.11",
|
|
38
|
+
"@vitest/browser-playwright": "4.1.11",
|
|
38
39
|
"npm-check-updates": "20.0.2",
|
|
39
|
-
"playwright": "1.
|
|
40
|
-
"vite": "8.
|
|
41
|
-
"vitest": "4.1.
|
|
40
|
+
"playwright": "1.63.0",
|
|
41
|
+
"vite": "8.3.0",
|
|
42
|
+
"vitest": "4.1.11"
|
|
42
43
|
},
|
|
43
44
|
"peerDependencies": {
|
|
44
45
|
"@logtape/logtape": "2.0.0"
|
package/src/errors.ts
CHANGED
|
@@ -2,24 +2,22 @@ import { ErrorBase, type ErrorOptions, setErrorMessage } from "@unikvs/core";
|
|
|
2
2
|
import getTypeName from "type-name";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
6
6
|
*/
|
|
7
7
|
export type KeyNotFoundErrorMeta = {
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
10
10
|
*/
|
|
11
11
|
readonly key: string;
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* エラーの追加情報 (`cause`) も含みます。
|
|
15
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
18
16
|
*/
|
|
19
17
|
export type KeyNotFoundErrorArgs = ErrorOptions & KeyNotFoundErrorMeta;
|
|
20
18
|
|
|
21
19
|
/**
|
|
22
|
-
*
|
|
20
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
23
21
|
*/
|
|
24
22
|
export class KeyNotFoundError extends ErrorBase<KeyNotFoundErrorMeta> {
|
|
25
23
|
static {
|
|
@@ -27,9 +25,7 @@ export class KeyNotFoundError extends ErrorBase<KeyNotFoundErrorMeta> {
|
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* @param args エラーメタデータとエラーの追加情報です。
|
|
28
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
33
29
|
*/
|
|
34
30
|
public constructor(args: KeyNotFoundErrorArgs) {
|
|
35
31
|
const { key, ...options } = args;
|
|
@@ -41,35 +37,32 @@ export class KeyNotFoundError extends ErrorBase<KeyNotFoundErrorMeta> {
|
|
|
41
37
|
setErrorMessage(KeyNotFoundError, ({ key }) => `キー ${key} が見つかりません`, "ja");
|
|
42
38
|
|
|
43
39
|
/**
|
|
44
|
-
*
|
|
40
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
45
41
|
*/
|
|
46
42
|
export type InvalidChunkTypeErrorMeta = {
|
|
47
43
|
/**
|
|
48
|
-
*
|
|
44
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
49
45
|
*/
|
|
50
46
|
readonly key: string;
|
|
51
47
|
|
|
52
48
|
/**
|
|
53
|
-
*
|
|
49
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
54
50
|
*/
|
|
55
51
|
readonly chunk: unknown;
|
|
56
52
|
|
|
57
53
|
/**
|
|
58
|
-
*
|
|
54
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
59
55
|
*/
|
|
60
56
|
readonly chunkType: string;
|
|
61
57
|
};
|
|
62
58
|
|
|
63
59
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* `chunkType` はコンストラクター内部で自動的に設定されるため、引数からは除外されています。
|
|
67
|
-
* また、エラーの追加情報 (`cause`) も含みます。
|
|
60
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
68
61
|
*/
|
|
69
62
|
export type InvalidChunkTypeErrorArgs = ErrorOptions & Omit<InvalidChunkTypeErrorMeta, "chunkType">;
|
|
70
63
|
|
|
71
64
|
/**
|
|
72
|
-
*
|
|
65
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
73
66
|
*/
|
|
74
67
|
export class InvalidChunkTypeError extends ErrorBase<InvalidChunkTypeErrorMeta> {
|
|
75
68
|
static {
|
|
@@ -77,9 +70,7 @@ export class InvalidChunkTypeError extends ErrorBase<InvalidChunkTypeErrorMeta>
|
|
|
77
70
|
}
|
|
78
71
|
|
|
79
72
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* @param args エラーメタデータとエラーの追加情報です。
|
|
73
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#errors)
|
|
83
74
|
*/
|
|
84
75
|
public constructor(args: InvalidChunkTypeErrorArgs) {
|
|
85
76
|
const { key, chunk, ...options } = args;
|
package/src/memory.ts
CHANGED
|
@@ -3,10 +3,17 @@ import type { IStorage } from "@unikvs/core";
|
|
|
3
3
|
import { KeyNotFoundError, InvalidChunkTypeError } from "./errors.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
7
|
+
*/
|
|
8
|
+
export type MemoryOptions = {
|
|
9
|
+
/**
|
|
10
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
11
|
+
*/
|
|
12
|
+
readonly clone?: (<T>(value: T) => T) | undefined;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
10
17
|
*/
|
|
11
18
|
export default class Memory implements IStorage {
|
|
12
19
|
/**
|
|
@@ -15,44 +22,41 @@ export default class Memory implements IStorage {
|
|
|
15
22
|
private readonly map: Map<string, any>;
|
|
16
23
|
|
|
17
24
|
/**
|
|
18
|
-
*
|
|
25
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
19
26
|
*/
|
|
20
27
|
public readonly name: string;
|
|
21
28
|
|
|
22
29
|
/**
|
|
23
|
-
*
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
* データの複製に使用する関数です。
|
|
31
|
+
*/
|
|
32
|
+
private readonly clone: <T>(value: T) => T;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
26
36
|
*/
|
|
27
|
-
public constructor() {
|
|
37
|
+
public constructor(options: MemoryOptions = {}) {
|
|
28
38
|
this.name = "Memory";
|
|
29
39
|
this.map = new Map();
|
|
40
|
+
this.clone = options.clone ?? ((v) => structuredClone(v));
|
|
30
41
|
}
|
|
31
42
|
|
|
32
43
|
/**
|
|
33
|
-
*
|
|
44
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
34
45
|
*/
|
|
35
46
|
public get isOpen(): boolean {
|
|
36
47
|
return true;
|
|
37
48
|
}
|
|
38
49
|
|
|
39
50
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* @param args.key 保存先のキーです。
|
|
43
|
-
* @param args.data 保存するデータです。
|
|
51
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
44
52
|
*/
|
|
45
53
|
public write(args: Pick<IStorage.WriteArgs<any>, "key" | "data">): void {
|
|
46
54
|
const { key, data } = args;
|
|
47
|
-
this.map.set(key, data);
|
|
55
|
+
this.map.set(key, this.clone(data));
|
|
48
56
|
}
|
|
49
57
|
|
|
50
58
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* @param args.key 取得元のキーです。
|
|
54
|
-
* @returns キーに対応するデータです。
|
|
55
|
-
* @throws キーがストレージ内に存在しない場合に {@link KeyNotFoundError} を投げます。
|
|
59
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
56
60
|
*/
|
|
57
61
|
public read(args: Pick<IStorage.ReadArgs, "key">): any {
|
|
58
62
|
const { key } = args;
|
|
@@ -62,14 +66,11 @@ export default class Memory implements IStorage {
|
|
|
62
66
|
|
|
63
67
|
const value = this.map.get(key);
|
|
64
68
|
|
|
65
|
-
return value;
|
|
69
|
+
return this.clone(value);
|
|
66
70
|
}
|
|
67
71
|
|
|
68
72
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* @param args.key 確認するキーです。
|
|
72
|
-
* @returns キーに対応するデータが存在する場合は true、それ以外は false です。
|
|
73
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
73
74
|
*/
|
|
74
75
|
public exists(args: Pick<IStorage.ExistsArgs, "key">): boolean {
|
|
75
76
|
const { key } = args;
|
|
@@ -79,10 +80,7 @@ export default class Memory implements IStorage {
|
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* @param args.key 削除するキーです。
|
|
85
|
-
* @throws キーがストレージ内に存在しない場合に {@link KeyNotFoundError} を投げます。
|
|
83
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
86
84
|
*/
|
|
87
85
|
public delete(args: Pick<IStorage.DeleteArgs, "key">): void {
|
|
88
86
|
const { key } = args;
|
|
@@ -94,19 +92,14 @@ export default class Memory implements IStorage {
|
|
|
94
92
|
}
|
|
95
93
|
|
|
96
94
|
/**
|
|
97
|
-
*
|
|
95
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#usage)
|
|
98
96
|
*/
|
|
99
97
|
public clear(): void {
|
|
100
98
|
this.map.clear();
|
|
101
99
|
}
|
|
102
100
|
|
|
103
101
|
/**
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* メモリーストレージにはネイティブなストリームがないため、書き込まれたチャンクをメモリー上に保持し、ストリームがクローズされたときに結合して保存します。
|
|
107
|
-
*
|
|
108
|
-
* @param args.key 書き込み先のキーです。
|
|
109
|
-
* @returns 書き込み可能なストリームです。
|
|
102
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#data)
|
|
110
103
|
*/
|
|
111
104
|
public getWritable(
|
|
112
105
|
args: Pick<IStorage.GetWritableArgs, "key">,
|
|
@@ -120,7 +113,7 @@ export default class Memory implements IStorage {
|
|
|
120
113
|
throw new InvalidChunkTypeError({ key, chunk });
|
|
121
114
|
}
|
|
122
115
|
|
|
123
|
-
chunks.push(chunk);
|
|
116
|
+
chunks.push(this.clone(chunk));
|
|
124
117
|
},
|
|
125
118
|
close: () => {
|
|
126
119
|
const totalLength = chunks.reduce((sum, c) => sum + c.byteLength, 0);
|
|
@@ -140,13 +133,7 @@ export default class Memory implements IStorage {
|
|
|
140
133
|
}
|
|
141
134
|
|
|
142
135
|
/**
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
* メモリーストレージにはネイティブなストリームがないため、既存の値を単一チャンクとしてストリームで送出します。
|
|
146
|
-
*
|
|
147
|
-
* @param args.key 読み取り元のキーです。
|
|
148
|
-
* @returns 読み取り可能なストリームです。
|
|
149
|
-
* @throws キーがストレージ内に存在しない場合に {@link KeyNotFoundError} を投げます。
|
|
136
|
+
* [API Reference](https://tai-kun.github.io/unikvs/packages/memory#data)
|
|
150
137
|
*/
|
|
151
138
|
public getReadable(
|
|
152
139
|
args: Pick<IStorage.GetReadableArgs, "key">,
|
|
@@ -164,7 +151,7 @@ export default class Memory implements IStorage {
|
|
|
164
151
|
throw new InvalidChunkTypeError({ key, chunk: value });
|
|
165
152
|
}
|
|
166
153
|
|
|
167
|
-
controller.enqueue(value as Uint8Array<ArrayBuffer>);
|
|
154
|
+
controller.enqueue(this.clone(value) as Uint8Array<ArrayBuffer>);
|
|
168
155
|
controller.close();
|
|
169
156
|
},
|
|
170
157
|
});
|