unikvs 0.0.10 → 0.0.13
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/index.d.ts +1553 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4032 -0
- package/dist/index.js.map +1 -0
- package/package.json +35 -34
- package/src/_contexts.ts +1089 -0
- package/src/_logger.ts +5 -3
- package/src/_middleware.ts +207 -0
- package/src/_pipeline-graph.helpers.ts +183 -0
- package/src/_pipeline-graph.ts +1307 -0
- package/src/_pipeline-graph.types.ts +303 -0
- package/src/_pipeline-leaf-resolver.ts +70 -0
- package/src/_plugin-lifecycle.ts +201 -0
- package/src/_storage.ts +173 -96
- package/src/_streams.schemas.ts +21 -0
- package/src/_streams.ts +73 -0
- package/src/_to-value-stream.ts +22 -11
- package/src/_types.ts +237 -0
- package/src/_unikvs-branch.ts +94 -0
- package/src/_unikvs.schemas.ts +451 -0
- package/src/_valibot.ts +17 -3
- package/src/_value-schemas.ts +192 -0
- package/src/_value-validation.ts +57 -0
- package/src/errors.ts +446 -252
- package/src/index.ts +46 -26
- package/src/types.ts +13 -0
- package/src/unikvs-branch.ts +445 -0
- package/src/unikvs-builder.ts +706 -0
- package/src/unikvs.ts +1456 -971
- package/src/unikvs.types.ts +194 -0
- package/src/value-schemas.ts +98 -0
- package/dist/src/_logger.d.ts +0 -3
- package/dist/src/_logger.d.ts.map +0 -1
- package/dist/src/_logger.js +0 -3
- package/dist/src/_merge-context.d.ts +0 -13
- package/dist/src/_merge-context.d.ts.map +0 -1
- package/dist/src/_merge-context.js +0 -12
- package/dist/src/_storage.d.ts +0 -18
- package/dist/src/_storage.d.ts.map +0 -1
- package/dist/src/_storage.js +0 -94
- package/dist/src/_to-value-stream.d.ts +0 -12
- package/dist/src/_to-value-stream.d.ts.map +0 -1
- package/dist/src/_to-value-stream.js +0 -102
- package/dist/src/_transformer.d.ts +0 -13
- package/dist/src/_transformer.d.ts.map +0 -1
- package/dist/src/_transformer.js +0 -60
- package/dist/src/_valibot.d.ts +0 -15
- package/dist/src/_valibot.d.ts.map +0 -1
- package/dist/src/_valibot.js +0 -23
- package/dist/src/context.types.d.ts +0 -17
- package/dist/src/context.types.d.ts.map +0 -1
- package/dist/src/context.types.js +0 -1
- package/dist/src/errors.d.ts +0 -340
- package/dist/src/errors.d.ts.map +0 -1
- package/dist/src/errors.js +0 -250
- package/dist/src/index.d.ts +0 -10
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -3
- package/dist/src/unikvs-config.d.ts +0 -255
- package/dist/src/unikvs-config.d.ts.map +0 -1
- package/dist/src/unikvs-config.js +0 -105
- package/dist/src/unikvs.d.ts +0 -354
- package/dist/src/unikvs.d.ts.map +0 -1
- package/dist/src/unikvs.js +0 -867
- package/dist/src/utils.types.d.ts +0 -7
- package/dist/src/utils.types.d.ts.map +0 -1
- package/dist/src/utils.types.js +0 -1
- package/dist/src/value-stream.types.d.ts +0 -16
- package/dist/src/value-stream.types.d.ts.map +0 -1
- package/dist/src/value-stream.types.js +0 -1
- package/src/_merge-context.ts +0 -19
- package/src/_transformer.ts +0 -89
- package/src/context.types.ts +0 -19
- package/src/unikvs-config.ts +0 -426
- package/src/utils.types.ts +0 -6
- package/src/value-stream.types.ts +0 -19
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.types.d.ts","sourceRoot":"","sources":["../../src/utils.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
|
package/dist/src/utils.types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 値を非同期に流すための読み取り専用ストリームを定義するインターフェースです。
|
|
3
|
-
*
|
|
4
|
-
* `ReadableStream` を拡張しており、標準的なストリーム操作に加えて非同期イテレーターによる反復処理をサポートします。
|
|
5
|
-
*
|
|
6
|
-
* @template T ストリームを流れるデータの型です。
|
|
7
|
-
*/
|
|
8
|
-
export interface ValueStream<T = any> extends Omit<ReadableStream, keyof AsyncDisposable | keyof AsyncIterable<unknown>>, AsyncDisposable, AsyncIterable<T, void, unknown> {
|
|
9
|
-
/**
|
|
10
|
-
* ストリームを閉じ、関連するリソースを解放します。
|
|
11
|
-
*
|
|
12
|
-
* @returns リソースの解放が完了したときに解決される Promise です。
|
|
13
|
-
*/
|
|
14
|
-
dispose: (this: void) => Promise<void>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=value-stream.types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"value-stream.types.d.ts","sourceRoot":"","sources":["../../src/value-stream.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG,CAClC,SACE,IAAI,CAAC,cAAc,EAAE,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,EAC1E,eAAe,EACf,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/src/_merge-context.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Context } from "@unikvs/core";
|
|
2
|
-
|
|
3
|
-
import type { ContextSource } from "./context.types.js";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* 2 つの Context オブジェクトを結合します。
|
|
7
|
-
*
|
|
8
|
-
* 基本となる Context に対して、追加または上書きするコンテキスト情報を結合し、新しい Context オブジェクトを生成して返します。追加するコンテキスト情報が配列(キーと値のペアの配列)である場合は、オブジェクトに変換した上で結合処理を行います。
|
|
9
|
-
*
|
|
10
|
-
* @param a ベースとなる読み取り専用の Context オブジェクトです。
|
|
11
|
-
* @param b 結合する読み取り専用の Context、または ContextSource、あるいは undefined です。
|
|
12
|
-
* @returns 結合された新しい Context オブジェクトです。
|
|
13
|
-
*/
|
|
14
|
-
export default function mergeContext(
|
|
15
|
-
a: Readonly<Context>,
|
|
16
|
-
b: Readonly<Context> | ContextSource | undefined,
|
|
17
|
-
): Context {
|
|
18
|
-
return { ...a, ...(Array.isArray(b) ? Object.fromEntries(b) : b) };
|
|
19
|
-
}
|
package/src/_transformer.ts
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import type { Context, IDecodable, ITransformer, IEncodable } from "@unikvs/core";
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
DecodableStreamNotSupportedError,
|
|
5
|
-
EncodableStreamNotSupportedError,
|
|
6
|
-
TransformerIsNotOpenError,
|
|
7
|
-
} from "./errors.js";
|
|
8
|
-
|
|
9
|
-
export default class UniKvsTransformer {
|
|
10
|
-
private readonly tf: ITransformer;
|
|
11
|
-
|
|
12
|
-
private managed: boolean;
|
|
13
|
-
|
|
14
|
-
public constructor(tf: ITransformer) {
|
|
15
|
-
this.tf = tf;
|
|
16
|
-
this.managed = false;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
public async open(context: Context, signal: AbortSignal): Promise<void> {
|
|
20
|
-
if (typeof this.tf.open !== "function") {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (!this.tf.isOpen) {
|
|
25
|
-
this.managed = true;
|
|
26
|
-
await this.tf.open({ signal, context });
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public async close(context: Context, signal: AbortSignal): Promise<void> {
|
|
31
|
-
if (typeof this.tf.close !== "function") {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (this.tf.isOpen && this.managed) {
|
|
36
|
-
await this.tf.close({ signal, context });
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
public async encode(context: Context, signal: AbortSignal, data: any): Promise<unknown> {
|
|
41
|
-
if (!this.tf.isOpen) {
|
|
42
|
-
throw new TransformerIsNotOpenError({ name: this.tf.name });
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const output = await this.tf.encode({ data, signal, context });
|
|
46
|
-
|
|
47
|
-
return output;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
public async decode(context: Context, signal: AbortSignal, data: any): Promise<unknown> {
|
|
51
|
-
if (!this.tf.isOpen) {
|
|
52
|
-
throw new TransformerIsNotOpenError({ name: this.tf.name });
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const output = await this.tf.decode({ data, signal, context });
|
|
56
|
-
|
|
57
|
-
return output;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
public async getEncodable(context: Context, signal: AbortSignal): Promise<IEncodable> {
|
|
61
|
-
if (!this.tf.isOpen) {
|
|
62
|
-
throw new TransformerIsNotOpenError({ name: this.tf.name });
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (typeof this.tf.getEncodable !== "function") {
|
|
66
|
-
throw new EncodableStreamNotSupportedError({ name: this.tf.name });
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const output = await this.tf.getEncodable({ signal, context });
|
|
70
|
-
const parsed = output; // TODO(tai-kun): 要検証
|
|
71
|
-
|
|
72
|
-
return parsed;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
public async getDecodable(context: Context, signal: AbortSignal): Promise<IDecodable> {
|
|
76
|
-
if (!this.tf.isOpen) {
|
|
77
|
-
throw new TransformerIsNotOpenError({ name: this.tf.name });
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (typeof this.tf.getDecodable !== "function") {
|
|
81
|
-
throw new DecodableStreamNotSupportedError({ name: this.tf.name });
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const output = await this.tf.getDecodable({ signal, context });
|
|
85
|
-
const parsed = output; // TODO(tai-kun): 要検証
|
|
86
|
-
|
|
87
|
-
return parsed;
|
|
88
|
-
}
|
|
89
|
-
}
|
package/src/context.types.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Context } from "@unikvs/core";
|
|
2
|
-
|
|
3
|
-
import type { ValueOf } from "./utils.types.js";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* コンテキストの単一のエントリーを表す、読み取り専用のキーと値のペア(タプル)です。
|
|
7
|
-
*
|
|
8
|
-
* インデックス 0 はキー、1 は値を保持します。
|
|
9
|
-
*/
|
|
10
|
-
export type ContextKeyValuePair = readonly [key: keyof Context, value: ValueOf<Context>];
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* コンテキストの初期化や更新に使用できる、データソースの型定義です。
|
|
14
|
-
*
|
|
15
|
-
* 以下のいずれかの形式を受け入れます:
|
|
16
|
-
* 1. 読み取り専用のコンテキストオブジェクト
|
|
17
|
-
* 2. キーと値のペアを列挙した反復可能なオブジェクト
|
|
18
|
-
*/
|
|
19
|
-
export type ContextSource = Readonly<Context> | readonly ContextKeyValuePair[];
|
package/src/unikvs-config.ts
DELETED
|
@@ -1,426 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
Context,
|
|
3
|
-
IReadableStreamStorage,
|
|
4
|
-
IStorage,
|
|
5
|
-
IWritableStreamStorage,
|
|
6
|
-
IDecodableStreamTransformer,
|
|
7
|
-
IEncodableStreamTransformer,
|
|
8
|
-
ITransformer,
|
|
9
|
-
} from "@unikvs/core";
|
|
10
|
-
|
|
11
|
-
import UniKvsStorage from "./_storage.js";
|
|
12
|
-
import UniKvsTransformer from "./_transformer.js";
|
|
13
|
-
import type { ContextSource } from "./context.types.js";
|
|
14
|
-
import { MissingStorageError, TransformerRegistrationError } from "./errors.js";
|
|
15
|
-
import type UniKvs from "./unikvs.js";
|
|
16
|
-
import type { ValueOf } from "./utils.types.js";
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* トランスフォーマーから、デコード時の入力データの型を推論するユーティリティー型です。
|
|
20
|
-
*
|
|
21
|
-
* @template TTransformer 対象となるトランスフォーマーの型です。
|
|
22
|
-
*/
|
|
23
|
-
type $InferDecodeDataInput<TTransformer extends ITransformer> =
|
|
24
|
-
TTransformer extends ITransformer<any, infer TDecodeDataInput> ? TDecodeDataInput : never;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* トランスフォーマーから、エンコード時の出力データの型を推論するユーティリティー型です。
|
|
28
|
-
*
|
|
29
|
-
* @template TTransformer 対象となるトランスフォーマーの型です。
|
|
30
|
-
*/
|
|
31
|
-
type $InferEncodeDataOutput<TTransformer extends ITransformer> =
|
|
32
|
-
TTransformer extends ITransformer<any, any, infer TEncodeDataOutput> ? TEncodeDataOutput : never;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* トランスフォーマーから、デコードストリームの入力チャンクデータの型を推論するユーティリティー型です。
|
|
36
|
-
*
|
|
37
|
-
* @template TTransformer 対象となるトランスフォーマーの型です。
|
|
38
|
-
*/
|
|
39
|
-
type $InferDecodeChunkInput<TTransformer extends ITransformer> =
|
|
40
|
-
TTransformer extends IDecodableStreamTransformer<infer TDecodeChunkInput>
|
|
41
|
-
? TDecodeChunkInput
|
|
42
|
-
: never;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* トランスフォーマーから、エンコードストリームの出力チャンクデータの型を推論するユーティリティー型です。
|
|
46
|
-
*
|
|
47
|
-
* @template TTransformer 対象となるトランスフォーマーの型です。
|
|
48
|
-
*/
|
|
49
|
-
type $InferEncodeChunkOutput<TTransformer extends ITransformer> =
|
|
50
|
-
TTransformer extends IEncodableStreamTransformer<any, infer TEncodeChunkOutput>
|
|
51
|
-
? TEncodeChunkOutput
|
|
52
|
-
: never;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* ストレージから、書き込みストリームの入力チャンクデータの型を推論するユーティリティー型です。
|
|
56
|
-
*
|
|
57
|
-
* @template TStorage 対象となるストレージの型です。
|
|
58
|
-
*/
|
|
59
|
-
type $InferWriteChunkInput<TStorage extends IStorage> =
|
|
60
|
-
TStorage extends IWritableStreamStorage<infer TWriteChunkInput> ? TWriteChunkInput : never;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* ストレージから、読み込みストリームの出力チャンクデータの型を推論するユーティリティー型です。
|
|
64
|
-
*
|
|
65
|
-
* @template TStorage 対象となるストレージの型です。
|
|
66
|
-
*/
|
|
67
|
-
type $InferReadChunkOutput<TStorage extends IStorage> =
|
|
68
|
-
TStorage extends IReadableStreamStorage<infer TReadChunkOutput> ? TReadChunkOutput : never;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* プレーンな値を識別するための固有のシンボルです。
|
|
72
|
-
*/
|
|
73
|
-
declare const PLAIN_VALUE: unique symbol;
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* ストリームではない通常の値を表す型定義です。
|
|
77
|
-
*
|
|
78
|
-
* @template TData 保持するデータの型です。
|
|
79
|
-
*/
|
|
80
|
-
export type PlainValue<TData = any> = [Type: typeof PLAIN_VALUE, Data: TData];
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* ストリーム形式の値を識別するための固有のシンボルです。
|
|
84
|
-
*/
|
|
85
|
-
declare const STREAM_VALUE: unique symbol;
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* ストリームとして扱われる値を表す型定義です。
|
|
89
|
-
*
|
|
90
|
-
* @template TChunkData ストリームのチャンクデータの型です。
|
|
91
|
-
*/
|
|
92
|
-
export type StreamValue<TChunkData = any> = [Type: typeof STREAM_VALUE, ChunkData: TChunkData];
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* UniKvs で扱う値の抽象型です。プレーンな値かストリーム値のいずれかになります。
|
|
96
|
-
*
|
|
97
|
-
* @template TData データまたはチャンクデータの型です。
|
|
98
|
-
*/
|
|
99
|
-
export type Value<TData = any> = PlainValue<TData> | StreamValue<TData>;
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* キーと値のマッピングを定義するオブジェクトの型です。
|
|
103
|
-
*
|
|
104
|
-
* @template T マッピングされる値の型です。
|
|
105
|
-
*/
|
|
106
|
-
export type KeyValueMapping<T = any> = { readonly [key: IStorage.Key]: Value<T> };
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* PlainValue 型から内部のデータ型を抽出します。
|
|
110
|
-
*
|
|
111
|
-
* @template TPlainValue 対象となる PlainValue 型です。
|
|
112
|
-
*/
|
|
113
|
-
export type $InferPlainValueData<TPlainValue> =
|
|
114
|
-
TPlainValue extends PlainValue<infer TData> ? TData : never;
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* StreamValue 型から内部のチャンクデータ型を抽出します。
|
|
118
|
-
*
|
|
119
|
-
* @template TStremValue 対象となる StreamValue 型です。
|
|
120
|
-
*/
|
|
121
|
-
export type $InferStreamValueChunkData<TStremValue> =
|
|
122
|
-
TStremValue extends StreamValue<infer TChunkData> ? TChunkData : never;
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* KeyValueMapping から有効なキーの型を抽出します。
|
|
126
|
-
*
|
|
127
|
-
* @template TKeyValueMapping 対象となるマッピング型です。
|
|
128
|
-
*/
|
|
129
|
-
export type KeyofKeyValueMapping<TKeyValueMapping extends KeyValueMapping = KeyValueMapping> =
|
|
130
|
-
Extract<keyof TKeyValueMapping, IStorage.Key>;
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* UniKvs の設定を構築するためのビルダーインターフェースです。
|
|
134
|
-
*
|
|
135
|
-
* トランスフォーマーの追加やストレージの登録を型安全に行うための流れるようなインターフェースを提供します。
|
|
136
|
-
*
|
|
137
|
-
* @template TKeyValueMapping キーと値のマッピング型です。
|
|
138
|
-
* @template TUniKvsDataInput UniKvs への入力データの型です。
|
|
139
|
-
* @template TUniKvsDataOutput UniKvs からの出力データの型です。
|
|
140
|
-
* @template TUniKvsChunkInput UniKvs への入力チャンクデータの型です。
|
|
141
|
-
* @template TUniKvsChunkOutput UniKvs からのストリーム出力チャンクデータの型です。
|
|
142
|
-
* @template TLastTransformerDecodeDataInput 最後に適用されたトランスフォーマーのデコード入力データの型です。
|
|
143
|
-
* @template TLastTransformerEncodeDataOutput 最後に適用されたトランスフォーマーのエンコード出力データの型です。
|
|
144
|
-
* @template TLastTransformerDecodeChunkInput 最後に適用されたトランスフォーマーのデコード入力チャンクデータの型です。
|
|
145
|
-
* @template TLastTransformerEncodeChunkOutput 最後に適用されたトランスフォーマーのエンコード出力チャンクデータの型です。
|
|
146
|
-
*/
|
|
147
|
-
export interface IUniKvsConfigBuilder<
|
|
148
|
-
TKeyValueMapping extends KeyValueMapping = KeyValueMapping,
|
|
149
|
-
TUniKvsDataInput = ValueOf<{
|
|
150
|
-
[TKey in KeyofKeyValueMapping<TKeyValueMapping>]: $InferPlainValueData<TKeyValueMapping[TKey]>;
|
|
151
|
-
}>,
|
|
152
|
-
TUniKvsDataOutput = TUniKvsDataInput,
|
|
153
|
-
TUniKvsChunkInput = ValueOf<{
|
|
154
|
-
[TKey in KeyofKeyValueMapping<TKeyValueMapping>]: $InferStreamValueChunkData<
|
|
155
|
-
TKeyValueMapping[TKey]
|
|
156
|
-
>;
|
|
157
|
-
}>,
|
|
158
|
-
TUniKvsChunkOutput = TUniKvsChunkInput,
|
|
159
|
-
TLastTransformerDecodeDataInput = TUniKvsDataOutput,
|
|
160
|
-
TLastTransformerEncodeDataOutput = TUniKvsDataInput,
|
|
161
|
-
TLastTransformerDecodeChunkInput = TUniKvsChunkOutput,
|
|
162
|
-
TLastTransformerEncodeChunkOutput = TUniKvsChunkInput,
|
|
163
|
-
> {
|
|
164
|
-
/**
|
|
165
|
-
* コンテキスト情報を設定します。
|
|
166
|
-
*
|
|
167
|
-
* @param context 設定するコンテキストのソースです。
|
|
168
|
-
* @returns インスタンス自身を返します。
|
|
169
|
-
*/
|
|
170
|
-
setContext(context: ContextSource): this;
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* ストレージをパイプラインの終端に追加します。
|
|
174
|
-
*
|
|
175
|
-
* ストレージが追加されると、設定はファイナライズ段階に移行します。
|
|
176
|
-
*
|
|
177
|
-
* @template TStorage 追加するストレージの型です。
|
|
178
|
-
* @param storage ストレージのインスタンスです。
|
|
179
|
-
* @returns ファイナライザーインターフェースを返します。
|
|
180
|
-
*/
|
|
181
|
-
appendStorage<
|
|
182
|
-
TStorage extends IStorage<
|
|
183
|
-
[TLastTransformerEncodeDataOutput] extends [never] ? any : TLastTransformerEncodeDataOutput,
|
|
184
|
-
[TLastTransformerDecodeDataInput] extends [never] ? any : TLastTransformerDecodeDataInput,
|
|
185
|
-
[TLastTransformerEncodeChunkOutput] extends [never] ? any : TLastTransformerEncodeChunkOutput,
|
|
186
|
-
[TLastTransformerDecodeChunkInput] extends [never] ? any : TLastTransformerDecodeChunkInput
|
|
187
|
-
>,
|
|
188
|
-
>(
|
|
189
|
-
storage: TStorage,
|
|
190
|
-
): IUniKvsConfigFinalizer<
|
|
191
|
-
TKeyValueMapping,
|
|
192
|
-
TLastTransformerEncodeDataOutput,
|
|
193
|
-
TLastTransformerDecodeDataInput,
|
|
194
|
-
[TLastTransformerEncodeChunkOutput] extends [never]
|
|
195
|
-
? never
|
|
196
|
-
: [$InferWriteChunkInput<TStorage>] extends [never]
|
|
197
|
-
? never
|
|
198
|
-
: TLastTransformerEncodeChunkOutput,
|
|
199
|
-
[TLastTransformerDecodeChunkInput] extends [never]
|
|
200
|
-
? never
|
|
201
|
-
: [$InferReadChunkOutput<TStorage>] extends [never]
|
|
202
|
-
? never
|
|
203
|
-
: TLastTransformerDecodeChunkInput
|
|
204
|
-
>;
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* トランスフォーマーをパイプラインに追加します。
|
|
208
|
-
*
|
|
209
|
-
* データ変換の層を積み重ねることで、シリアライズなどの処理を定義できます。
|
|
210
|
-
*
|
|
211
|
-
* @template TTransformer 追加するトランスフォーマーの型です。
|
|
212
|
-
* @param transformer トランスフォーマーのインスタンスです。
|
|
213
|
-
* @returns 新しい型情報を持つビルダーを返します。
|
|
214
|
-
*/
|
|
215
|
-
appendTransformer<
|
|
216
|
-
TTransformer extends ITransformer<
|
|
217
|
-
// 最後のトランスファーマーのエンコード出力を、入力値として受け入れられる必要があります。
|
|
218
|
-
[TLastTransformerEncodeDataOutput] extends [never] ? any : TLastTransformerEncodeDataOutput,
|
|
219
|
-
// ここではまだ、後段のトランスフォーマーのデコード出力を気にしません。
|
|
220
|
-
any,
|
|
221
|
-
// ここではまだ、後段のトランスフォーマーのエンコード入力を気にしません。
|
|
222
|
-
any,
|
|
223
|
-
// 最後のトランスフォーマーのデコード入力を出力する必要があります。
|
|
224
|
-
[TLastTransformerDecodeDataInput] extends [never] ? any : TLastTransformerDecodeDataInput,
|
|
225
|
-
// 最後のトランスファーマーのエンコード出力を、入力値として受け入れられる必要があります。
|
|
226
|
-
[TLastTransformerEncodeChunkOutput] extends [never] ? any : TLastTransformerEncodeChunkOutput,
|
|
227
|
-
// ここではまだ、後段のトランスフォーマーのデコード出力を気にしません。
|
|
228
|
-
any,
|
|
229
|
-
// ここではまだ、後段のトランスフォーマーのエンコード入力を気にしません。
|
|
230
|
-
any,
|
|
231
|
-
// 最後のトランスフォーマーのデコード入力を出力する必要があります。
|
|
232
|
-
[TLastTransformerDecodeChunkInput] extends [never] ? any : TLastTransformerDecodeChunkInput
|
|
233
|
-
>,
|
|
234
|
-
>(
|
|
235
|
-
transformer: TTransformer,
|
|
236
|
-
): IUniKvsConfigBuilder<
|
|
237
|
-
TKeyValueMapping,
|
|
238
|
-
TUniKvsDataInput,
|
|
239
|
-
TUniKvsDataOutput,
|
|
240
|
-
[TUniKvsChunkInput] extends [never]
|
|
241
|
-
? never
|
|
242
|
-
: [$InferDecodeChunkInput<TTransformer>] extends [never]
|
|
243
|
-
? never
|
|
244
|
-
: TUniKvsChunkInput,
|
|
245
|
-
[TUniKvsChunkOutput] extends [never]
|
|
246
|
-
? never
|
|
247
|
-
: [$InferEncodeChunkOutput<TTransformer>] extends [never]
|
|
248
|
-
? never
|
|
249
|
-
: TUniKvsChunkOutput,
|
|
250
|
-
$InferDecodeDataInput<TTransformer>,
|
|
251
|
-
$InferEncodeDataOutput<TTransformer>,
|
|
252
|
-
$InferDecodeChunkInput<TTransformer>,
|
|
253
|
-
$InferEncodeChunkOutput<TTransformer>
|
|
254
|
-
>;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* UniKvs の設定を完了させるためのファイナライザーインターフェースです。
|
|
259
|
-
*
|
|
260
|
-
* @template TKeyValueMapping キーと値のマッピング型です。
|
|
261
|
-
* @template TWriteDataInput ストレージへの書き込み入力データの型です。
|
|
262
|
-
* @template TReadDataOutput ストレージからの読み込み出力データの型です。
|
|
263
|
-
* @template TWriteChunkInput ストレージへの書き込みチャンクデータの型です。
|
|
264
|
-
* @template TReadChunkOutput ストレージからの読み込みチャンクデータの型です。
|
|
265
|
-
*/
|
|
266
|
-
export interface IUniKvsConfigFinalizer<
|
|
267
|
-
TKeyValueMapping extends KeyValueMapping = KeyValueMapping,
|
|
268
|
-
TWriteDataInput = any,
|
|
269
|
-
TReadDataOutput = any,
|
|
270
|
-
TWriteChunkInput = any,
|
|
271
|
-
TReadChunkOutput = any,
|
|
272
|
-
> {
|
|
273
|
-
/**
|
|
274
|
-
* 設定に基づいて UniKvs インスタンスを作成します。
|
|
275
|
-
*
|
|
276
|
-
* @returns 作成された UniKvs のインスタンスです。
|
|
277
|
-
*/
|
|
278
|
-
create(): UniKvs<TKeyValueMapping>;
|
|
279
|
-
|
|
280
|
-
/**
|
|
281
|
-
* コンテキスト情報を設定します。
|
|
282
|
-
*
|
|
283
|
-
* @param context 設定するコンテキストのソースです。
|
|
284
|
-
* @returns インスタンス自身を返します。
|
|
285
|
-
*/
|
|
286
|
-
setContext(context: ContextSource): this;
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* 追加のストレージを登録します。UniKvs は複数のストレージへのマルチキャスト書き込みをサポートします。
|
|
290
|
-
*
|
|
291
|
-
* @template TStorage 追加するストレージの型です。
|
|
292
|
-
* @param storage ストレージのインスタンスです。
|
|
293
|
-
* @returns ファイナライザーインターフェースを返します。
|
|
294
|
-
*/
|
|
295
|
-
appendStorage<
|
|
296
|
-
TStorage extends IStorage<
|
|
297
|
-
[TWriteDataInput] extends [never] ? any : TWriteDataInput,
|
|
298
|
-
[TReadDataOutput] extends [never] ? any : TReadDataOutput,
|
|
299
|
-
[TWriteChunkInput] extends [never] ? any : TWriteChunkInput,
|
|
300
|
-
[TReadChunkOutput] extends [never] ? any : TReadChunkOutput
|
|
301
|
-
>,
|
|
302
|
-
>(
|
|
303
|
-
storage: TStorage,
|
|
304
|
-
): IUniKvsConfigFinalizer<
|
|
305
|
-
TKeyValueMapping,
|
|
306
|
-
TWriteDataInput,
|
|
307
|
-
TReadDataOutput,
|
|
308
|
-
[TWriteChunkInput] extends [never]
|
|
309
|
-
? never
|
|
310
|
-
: [$InferWriteChunkInput<TStorage>] extends [never]
|
|
311
|
-
? never
|
|
312
|
-
: TWriteChunkInput,
|
|
313
|
-
[TReadChunkOutput] extends [never]
|
|
314
|
-
? never
|
|
315
|
-
: [$InferReadChunkOutput<TStorage>] extends [never]
|
|
316
|
-
? never
|
|
317
|
-
: TReadChunkOutput
|
|
318
|
-
>;
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* UniKvs の構成を管理する設定クラスです。
|
|
323
|
-
*
|
|
324
|
-
* ビルダーパターンを用いて、コンテキスト、トランスフォーマー、ストレージの順で設定を積み上げます。
|
|
325
|
-
*/
|
|
326
|
-
export default class UniKvsConfig implements IUniKvsConfigBuilder, IUniKvsConfigFinalizer {
|
|
327
|
-
/**
|
|
328
|
-
* UniKvs のコンストラクターです。
|
|
329
|
-
*/
|
|
330
|
-
readonly #UniKvs: typeof UniKvs;
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* アプリケーションの実行時情報を保持するコンテキストオブジェクトです。
|
|
334
|
-
*/
|
|
335
|
-
#context: Context;
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* データの永続化先となるストレージのリストです。
|
|
339
|
-
*/
|
|
340
|
-
readonly #destinations: IStorage[];
|
|
341
|
-
|
|
342
|
-
/**
|
|
343
|
-
* データを変換するためのトランスフォーマーのリストです。
|
|
344
|
-
*/
|
|
345
|
-
readonly #transformers: ITransformer[];
|
|
346
|
-
|
|
347
|
-
/**
|
|
348
|
-
* UniKvsConfig インスタンスを初期化します。
|
|
349
|
-
*
|
|
350
|
-
* @param UniKvsConstructor UniKvs のクラスコンストラクターです。
|
|
351
|
-
*/
|
|
352
|
-
public constructor(UniKvsConstructor: typeof UniKvs) {
|
|
353
|
-
this.#UniKvs = UniKvsConstructor;
|
|
354
|
-
this.#context = {};
|
|
355
|
-
this.#destinations = [];
|
|
356
|
-
this.#transformers = [];
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* 現在の設定を使用して UniKvs インスタンスを作成します。
|
|
361
|
-
*
|
|
362
|
-
* @returns 作成された UniKvs インスタンスです。
|
|
363
|
-
* @throws ストレージが一つも登録されていない場合にエラーを投げます。
|
|
364
|
-
*/
|
|
365
|
-
public create(): UniKvs {
|
|
366
|
-
// 登録されたストレージから先頭の要素を取得します。
|
|
367
|
-
const [dest, ...destinations] = this.#destinations.map((io) => new UniKvsStorage(io));
|
|
368
|
-
|
|
369
|
-
// ストレージが空の場合は UniKvs として機能できないため、例外を投げます。
|
|
370
|
-
if (!dest) {
|
|
371
|
-
throw new MissingStorageError();
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
// コンテキストの参照を切り離すために浅いコピーを作成して UniKvs を初期化します。
|
|
375
|
-
// トランスフォーマーの配列もスライスしてコピーを渡し、内部状態の安全性を確保します。
|
|
376
|
-
return new this.#UniKvs(
|
|
377
|
-
this.#context,
|
|
378
|
-
[dest, ...destinations],
|
|
379
|
-
this.#transformers.map((tf) => new UniKvsTransformer(tf)),
|
|
380
|
-
);
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* コンテキスト情報を設定します。既存のコンテキストは上書きされます。
|
|
385
|
-
*
|
|
386
|
-
* @param context 設定するコンテキストのソースデータです。
|
|
387
|
-
* @returns インスタンス自身を返します。
|
|
388
|
-
*/
|
|
389
|
-
public setContext(context: ContextSource): this {
|
|
390
|
-
this.#context = Array.isArray(context) ? Object.fromEntries(context) : { ...context };
|
|
391
|
-
|
|
392
|
-
return this;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* ストレージを登録リストに追加します。
|
|
397
|
-
*
|
|
398
|
-
* @param storage 追加するストレージインスタンスです。
|
|
399
|
-
* @returns ファイナライザーとして自身を返します。
|
|
400
|
-
*/
|
|
401
|
-
public appendStorage(storage: IStorage): IUniKvsConfigFinalizer {
|
|
402
|
-
this.#destinations.push(storage);
|
|
403
|
-
|
|
404
|
-
return this;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* トランスフォーマーを変換パイプラインに追加します。
|
|
409
|
-
*
|
|
410
|
-
* ストレージが登録された後には追加できない制約があります。
|
|
411
|
-
*
|
|
412
|
-
* @param transformer 追加するトランスフォーマーインスタンスです。
|
|
413
|
-
* @returns ビルダーとして自身を返します。
|
|
414
|
-
* @throws すでにストレージが登録されている状態で呼び出された場合にエラーを投げます。
|
|
415
|
-
*/
|
|
416
|
-
public appendTransformer(transformer: ITransformer): IUniKvsConfigBuilder {
|
|
417
|
-
// パイプラインの順序を守るため、終端であるストレージが登録済みでないか確認します。
|
|
418
|
-
if (this.#destinations.length > 0) {
|
|
419
|
-
throw new TransformerRegistrationError();
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
this.#transformers.push(transformer);
|
|
423
|
-
|
|
424
|
-
return this;
|
|
425
|
-
}
|
|
426
|
-
}
|
package/src/utils.types.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 値を非同期に流すための読み取り専用ストリームを定義するインターフェースです。
|
|
3
|
-
*
|
|
4
|
-
* `ReadableStream` を拡張しており、標準的なストリーム操作に加えて非同期イテレーターによる反復処理をサポートします。
|
|
5
|
-
*
|
|
6
|
-
* @template T ストリームを流れるデータの型です。
|
|
7
|
-
*/
|
|
8
|
-
export interface ValueStream<T = any>
|
|
9
|
-
extends
|
|
10
|
-
Omit<ReadableStream, keyof AsyncDisposable | keyof AsyncIterable<unknown>>,
|
|
11
|
-
AsyncDisposable,
|
|
12
|
-
AsyncIterable<T, void, unknown> {
|
|
13
|
-
/**
|
|
14
|
-
* ストリームを閉じ、関連するリソースを解放します。
|
|
15
|
-
*
|
|
16
|
-
* @returns リソースの解放が完了したときに解決される Promise です。
|
|
17
|
-
*/
|
|
18
|
-
dispose: (this: void) => Promise<void>;
|
|
19
|
-
}
|