unikvs 0.0.2 → 0.0.3
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/LICENSE +21 -0
- package/dist/src/core/_assign-context.d.ts +3 -0
- package/dist/src/core/_assign-context.d.ts.map +1 -0
- package/dist/src/core/_assign-context.js +3 -0
- package/dist/src/core/_combine-signals.d.ts +3 -0
- package/dist/src/core/_combine-signals.d.ts.map +1 -0
- package/dist/src/core/_combine-signals.js +34 -0
- package/dist/src/core/_is-iterable.d.ts +2 -0
- package/dist/src/core/_is-iterable.d.ts.map +1 -0
- package/dist/src/core/_is-iterable.js +3 -0
- package/dist/src/core/_is-plain-object.d.ts +2 -0
- package/dist/src/core/_is-plain-object.d.ts.map +1 -0
- package/dist/src/core/_is-plain-object.js +7 -0
- package/dist/src/core/_logger.d.ts +3 -0
- package/dist/src/core/_logger.d.ts.map +1 -0
- package/dist/src/core/_logger.js +3 -0
- package/dist/src/core/_merge-context.d.ts +3 -0
- package/dist/src/core/_merge-context.d.ts.map +1 -0
- package/dist/src/core/_merge-context.js +4 -0
- package/dist/src/core/_to-context.d.ts +7 -0
- package/dist/src/core/_to-context.d.ts.map +1 -0
- package/dist/src/core/_to-context.js +42 -0
- package/dist/src/core/_to-value-stream.d.ts +4 -0
- package/dist/src/core/_to-value-stream.d.ts.map +1 -0
- package/dist/src/core/_to-value-stream.js +38 -0
- package/dist/src/core/_with-readable-stream-from.d.ts +6 -0
- package/dist/src/core/_with-readable-stream-from.d.ts.map +1 -0
- package/dist/src/core/_with-readable-stream-from.js +58 -0
- package/dist/src/core/context.types.d.ts +5 -0
- package/dist/src/core/context.types.d.ts.map +1 -0
- package/dist/src/core/context.types.js +1 -0
- package/dist/src/core/errors.d.ts +13 -0
- package/dist/src/core/errors.d.ts.map +1 -0
- package/dist/src/core/errors.js +20 -0
- package/dist/src/core/index.d.ts +15 -0
- package/dist/src/core/index.d.ts.map +1 -0
- package/dist/src/core/index.js +4 -0
- package/dist/src/core/plugin.types.d.ts +8 -0
- package/dist/src/core/plugin.types.d.ts.map +1 -0
- package/dist/src/core/plugin.types.js +1 -0
- package/dist/src/core/storage.types.d.ts +22 -0
- package/dist/src/core/storage.types.d.ts.map +1 -0
- package/dist/src/core/storage.types.js +1 -0
- package/dist/src/core/to-readable-stream.d.ts +2 -0
- package/dist/src/core/to-readable-stream.d.ts.map +1 -0
- package/dist/src/core/to-readable-stream.js +4 -0
- package/dist/src/core/transformer.types.d.ts +18 -0
- package/dist/src/core/transformer.types.d.ts.map +1 -0
- package/dist/src/core/transformer.types.js +1 -0
- package/dist/src/core/unikvs-config.d.ts +82 -0
- package/dist/src/core/unikvs-config.d.ts.map +1 -0
- package/dist/src/core/unikvs-config.js +49 -0
- package/dist/src/core/unikvs.d.ts +73 -0
- package/dist/src/core/unikvs.d.ts.map +1 -0
- package/dist/src/core/unikvs.js +678 -0
- package/dist/src/core/utils.types.d.ts +3 -0
- package/dist/src/core/utils.types.d.ts.map +1 -0
- package/dist/src/core/utils.types.js +1 -0
- package/dist/src/core/value-stream.types.d.ts +4 -0
- package/dist/src/core/value-stream.types.d.ts.map +1 -0
- package/dist/src/core/value-stream.types.js +1 -0
- package/dist/src/destinations/memory-storage.d.ts +17 -0
- package/dist/src/destinations/memory-storage.d.ts.map +1 -0
- package/dist/src/destinations/memory-storage.js +113 -0
- package/dist/src/types/storage.d.ts +5 -0
- package/dist/src/types/storage.d.ts.map +1 -0
- package/dist/src/types/storage.js +1 -0
- package/dist/src/types/transformer.d.ts +5 -0
- package/dist/src/types/transformer.d.ts.map +1 -0
- package/dist/src/types/transformer.js +1 -0
- package/package.json +69 -6
- package/src/core/_assign-context.ts +5 -0
- package/src/core/_combine-signals.ts +40 -0
- package/src/core/_is-iterable.ts +3 -0
- package/src/core/_is-plain-object.ts +11 -0
- package/src/core/_logger.ts +5 -0
- package/src/core/_merge-context.ts +9 -0
- package/src/core/_to-context.ts +59 -0
- package/src/core/_to-value-stream.ts +41 -0
- package/src/core/_with-readable-stream-from.ts +70 -0
- package/src/core/context.types.ts +7 -0
- package/src/core/errors.ts +37 -0
- package/src/core/index.ts +23 -0
- package/src/core/plugin.types.ts +10 -0
- package/src/core/storage.types.ts +53 -0
- package/src/core/to-readable-stream.ts +7 -0
- package/src/core/transformer.types.ts +110 -0
- package/src/core/unikvs-config.ts +230 -0
- package/src/core/unikvs.ts +740 -0
- package/src/core/utils.types.ts +3 -0
- package/src/core/value-stream.types.ts +3 -0
- package/src/destinations/memory-storage.ts +160 -0
- package/src/types/storage.ts +5 -0
- package/src/types/transformer.ts +5 -0
- package/README.md +0 -45
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { Context } from "./context.types.js";
|
|
2
|
+
import type { IPlugin } from "./plugin.types.js";
|
|
3
|
+
import type { MaybePromise } from "./utils.types.js";
|
|
4
|
+
|
|
5
|
+
// export interface IEncodeBatchTransformer<
|
|
6
|
+
// TEncodeDataInput = any,
|
|
7
|
+
// TEncodeDataOutput = any,
|
|
8
|
+
// > {
|
|
9
|
+
// encode(
|
|
10
|
+
// data: TEncodeDataInput,
|
|
11
|
+
// signal: AbortSignal,
|
|
12
|
+
// context: Context,
|
|
13
|
+
// ): MaybePromise<TEncodeDataOutput>;
|
|
14
|
+
// }
|
|
15
|
+
|
|
16
|
+
// export interface IDecodeBatchTransformer<
|
|
17
|
+
// TDecodeDataInput = any,
|
|
18
|
+
// TDecodeDataOutput = any,
|
|
19
|
+
// > {
|
|
20
|
+
// decode(
|
|
21
|
+
// data: TDecodeDataInput,
|
|
22
|
+
// signal: AbortSignal,
|
|
23
|
+
// context: Context,
|
|
24
|
+
// ): MaybePromise<TDecodeDataOutput>;
|
|
25
|
+
// }
|
|
26
|
+
|
|
27
|
+
// export interface IBatchTransformer<
|
|
28
|
+
// TEncodeDataInput = any,
|
|
29
|
+
// TDecodeDataInput = any,
|
|
30
|
+
// TEncodeDataOutput = TDecodeDataInput,
|
|
31
|
+
// TDecodeDataOutput = TEncodeDataInput,
|
|
32
|
+
// > extends
|
|
33
|
+
// IEncodeBatchTransformer<TEncodeDataInput, TEncodeDataOutput>,
|
|
34
|
+
// IDecodeBatchTransformer<TDecodeDataInput, TDecodeDataOutput>
|
|
35
|
+
// {}
|
|
36
|
+
|
|
37
|
+
export interface IEncodable<
|
|
38
|
+
TEncodeChunkInput = any,
|
|
39
|
+
TEncodeChunkOutput = any,
|
|
40
|
+
> extends TransformStream<TEncodeChunkInput, TEncodeChunkOutput> {}
|
|
41
|
+
|
|
42
|
+
export interface IEncodableStreamTransformer<TEncodeChunkInput = any, TEncodeChunkOutput = any> {
|
|
43
|
+
getEncodable(
|
|
44
|
+
signal: AbortSignal,
|
|
45
|
+
context: Context,
|
|
46
|
+
): MaybePromise<IEncodable<TEncodeChunkInput, TEncodeChunkOutput>>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface IDecodable<
|
|
50
|
+
TDecodeChunkInput = any,
|
|
51
|
+
TDecodeChunkOutput = any,
|
|
52
|
+
> extends TransformStream<TDecodeChunkInput, TDecodeChunkOutput> {}
|
|
53
|
+
|
|
54
|
+
export interface IDecodableStreamTransformer<TDecodeChunkInput = any, TDecodeChunkOutput = any> {
|
|
55
|
+
getDecodable(
|
|
56
|
+
signal: AbortSignal,
|
|
57
|
+
context: Context,
|
|
58
|
+
): MaybePromise<IDecodable<TDecodeChunkInput, TDecodeChunkOutput>>;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// export interface IStreamTransformer<
|
|
62
|
+
// TEncodeChunkInput = any,
|
|
63
|
+
// TDecodeChunkInput = any,
|
|
64
|
+
// TEncodeChunkOutput = TDecodeChunkInput,
|
|
65
|
+
// TDecodeChunkOutput = TEncodeChunkInput,
|
|
66
|
+
// > extends
|
|
67
|
+
// IEncodableStreamTransformer<TEncodeChunkInput, TEncodeChunkOutput>,
|
|
68
|
+
// IDecodableStreamTransformer<TDecodeChunkInput, TDecodeChunkOutput>
|
|
69
|
+
// {}
|
|
70
|
+
|
|
71
|
+
export interface ITransformer<
|
|
72
|
+
TEncodeDataInput = any,
|
|
73
|
+
TDecodeDataInput = any,
|
|
74
|
+
TEncodeDataOutput = any,
|
|
75
|
+
TDecodeDataOutput = any,
|
|
76
|
+
TEncodeChunkInput = any,
|
|
77
|
+
TDecodeChunkInput = any,
|
|
78
|
+
TEncodeChunkOutput = any,
|
|
79
|
+
TDecodeChunkOutput = any,
|
|
80
|
+
>
|
|
81
|
+
extends
|
|
82
|
+
IPlugin,
|
|
83
|
+
// IBatchTransformer<
|
|
84
|
+
// TEncodeDataInput,
|
|
85
|
+
// TDecodeDataInput,
|
|
86
|
+
// TEncodeDataOutput,
|
|
87
|
+
// TDecodeDataOutput
|
|
88
|
+
// >,
|
|
89
|
+
// Partial<
|
|
90
|
+
// IStreamTransformer<
|
|
91
|
+
// TEncodeChunkInput,
|
|
92
|
+
// TDecodeChunkInput,
|
|
93
|
+
// TEncodeChunkOutput,
|
|
94
|
+
// TDecodeChunkOutput
|
|
95
|
+
// >
|
|
96
|
+
// >
|
|
97
|
+
Partial<IEncodableStreamTransformer<TEncodeChunkInput, TEncodeChunkOutput>>,
|
|
98
|
+
Partial<IDecodableStreamTransformer<TDecodeChunkInput, TDecodeChunkOutput>> {
|
|
99
|
+
encode(
|
|
100
|
+
data: TEncodeDataInput,
|
|
101
|
+
signal: AbortSignal,
|
|
102
|
+
context: Context,
|
|
103
|
+
): MaybePromise<TEncodeDataOutput>;
|
|
104
|
+
|
|
105
|
+
decode(
|
|
106
|
+
data: TDecodeDataInput,
|
|
107
|
+
signal: AbortSignal,
|
|
108
|
+
context: Context,
|
|
109
|
+
): MaybePromise<TDecodeDataOutput>;
|
|
110
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import toContext from "./_to-context.js";
|
|
2
|
+
import type { Context, ContextSource } from "./context.types.js";
|
|
3
|
+
import type {
|
|
4
|
+
IReadableStreamStorage,
|
|
5
|
+
IStorage,
|
|
6
|
+
IWritableStreamStorage,
|
|
7
|
+
Key,
|
|
8
|
+
} from "./storage.types.js";
|
|
9
|
+
import type {
|
|
10
|
+
IDecodableStreamTransformer,
|
|
11
|
+
IEncodableStreamTransformer,
|
|
12
|
+
ITransformer,
|
|
13
|
+
} from "./transformer.types.js";
|
|
14
|
+
import type UniKvs from "./unikvs.js";
|
|
15
|
+
import type { ValueOf } from "./utils.types.js";
|
|
16
|
+
|
|
17
|
+
type $InferDecodeDataInput<TTransformer extends ITransformer> =
|
|
18
|
+
TTransformer extends ITransformer<any, infer TDecodeDataInput> ? TDecodeDataInput : never;
|
|
19
|
+
|
|
20
|
+
type $InferEncodeDataOutput<TTransformer extends ITransformer> =
|
|
21
|
+
TTransformer extends ITransformer<any, any, infer TEncodeDataOutput> ? TEncodeDataOutput : never;
|
|
22
|
+
|
|
23
|
+
type $InferDecodeChunkInput<TTransformer extends ITransformer> =
|
|
24
|
+
TTransformer extends IDecodableStreamTransformer<infer TDecodeChunkInput>
|
|
25
|
+
? TDecodeChunkInput
|
|
26
|
+
: never;
|
|
27
|
+
|
|
28
|
+
type $InferEncodeChunkOutput<TTransformer extends ITransformer> =
|
|
29
|
+
TTransformer extends IEncodableStreamTransformer<any, infer TEncodeChunkOutput>
|
|
30
|
+
? TEncodeChunkOutput
|
|
31
|
+
: never;
|
|
32
|
+
|
|
33
|
+
type $InferWriteChunkInput<TStorage extends IStorage> =
|
|
34
|
+
TStorage extends IWritableStreamStorage<infer TWriteChunkInput> ? TWriteChunkInput : never;
|
|
35
|
+
|
|
36
|
+
type $InferReadChunkOutput<TStorage extends IStorage> =
|
|
37
|
+
TStorage extends IReadableStreamStorage<infer TReadChunkOutput> ? TReadChunkOutput : never;
|
|
38
|
+
|
|
39
|
+
declare const PLAIN_VALUE: unique symbol;
|
|
40
|
+
export type PlainValue<TData = any> = [Kind: typeof PLAIN_VALUE, Data: TData];
|
|
41
|
+
|
|
42
|
+
declare const STREAM_VALUE: unique symbol;
|
|
43
|
+
export type StreamValue<TChunkData = any> = [Kind: typeof STREAM_VALUE, ChunkData: TChunkData];
|
|
44
|
+
|
|
45
|
+
export type Value<TDataAndChunkData = any> =
|
|
46
|
+
| PlainValue<TDataAndChunkData>
|
|
47
|
+
| StreamValue<TDataAndChunkData>;
|
|
48
|
+
|
|
49
|
+
export type KeyValueMapping<T = any> = { readonly [key: Key]: Value<T> };
|
|
50
|
+
|
|
51
|
+
export type $InferPlainValueData<TPlainValue> =
|
|
52
|
+
TPlainValue extends PlainValue<infer TData> ? TData : never;
|
|
53
|
+
|
|
54
|
+
export type $InferStreamValueChunkData<TStremValue> =
|
|
55
|
+
TStremValue extends StreamValue<infer TChunkData> ? TChunkData : never;
|
|
56
|
+
|
|
57
|
+
export type KeyofKeyValueMapping<TKeyValueMapping extends KeyValueMapping = KeyValueMapping> =
|
|
58
|
+
Extract<keyof TKeyValueMapping, Key>;
|
|
59
|
+
|
|
60
|
+
export interface IUniKvsConfigBuilder<
|
|
61
|
+
TKeyValueMapping extends KeyValueMapping = KeyValueMapping,
|
|
62
|
+
TUniKvsDataInput = ValueOf<{
|
|
63
|
+
[TKey in KeyofKeyValueMapping<TKeyValueMapping>]: $InferPlainValueData<TKeyValueMapping[TKey]>;
|
|
64
|
+
}>,
|
|
65
|
+
TUniKvsDataOutput = TUniKvsDataInput,
|
|
66
|
+
TUniKvsChunkInput = ValueOf<{
|
|
67
|
+
[TKey in KeyofKeyValueMapping<TKeyValueMapping>]: $InferStreamValueChunkData<
|
|
68
|
+
TKeyValueMapping[TKey]
|
|
69
|
+
>;
|
|
70
|
+
}>,
|
|
71
|
+
TUniKvsChunkOutput = TUniKvsChunkInput,
|
|
72
|
+
TLastTransformerDecodeDataInput = TUniKvsDataOutput,
|
|
73
|
+
TLastTransformerEncodeDataOutput = TUniKvsDataInput,
|
|
74
|
+
TLastTransformerDecodeChunkInput = TUniKvsChunkOutput,
|
|
75
|
+
TLastTransformerEncodeChunkOutput = TUniKvsChunkInput,
|
|
76
|
+
> {
|
|
77
|
+
setContext(context: ContextSource): this;
|
|
78
|
+
|
|
79
|
+
appendStorage<
|
|
80
|
+
TStorage extends IStorage<
|
|
81
|
+
[TLastTransformerEncodeDataOutput] extends [never] ? any : TLastTransformerEncodeDataOutput,
|
|
82
|
+
[TLastTransformerDecodeDataInput] extends [never] ? any : TLastTransformerDecodeDataInput,
|
|
83
|
+
[TLastTransformerEncodeChunkOutput] extends [never] ? any : TLastTransformerEncodeChunkOutput,
|
|
84
|
+
[TLastTransformerDecodeChunkInput] extends [never] ? any : TLastTransformerDecodeChunkInput
|
|
85
|
+
>,
|
|
86
|
+
>(
|
|
87
|
+
storage: TStorage,
|
|
88
|
+
): IUniKvsConfigFinalizer<
|
|
89
|
+
TKeyValueMapping,
|
|
90
|
+
TLastTransformerEncodeDataOutput,
|
|
91
|
+
TLastTransformerDecodeDataInput,
|
|
92
|
+
[TLastTransformerEncodeChunkOutput] extends [never]
|
|
93
|
+
? never
|
|
94
|
+
: [$InferWriteChunkInput<TStorage>] extends [never]
|
|
95
|
+
? never
|
|
96
|
+
: TLastTransformerEncodeChunkOutput,
|
|
97
|
+
[TLastTransformerDecodeChunkInput] extends [never]
|
|
98
|
+
? never
|
|
99
|
+
: [$InferReadChunkOutput<TStorage>] extends [never]
|
|
100
|
+
? never
|
|
101
|
+
: TLastTransformerDecodeChunkInput
|
|
102
|
+
>;
|
|
103
|
+
|
|
104
|
+
appendTransformer<
|
|
105
|
+
TTransformer extends ITransformer<
|
|
106
|
+
// 最後のトランスファーマーのエンコード出力を、入力値として受け入れられる必要があります。
|
|
107
|
+
[TLastTransformerEncodeDataOutput] extends [never] ? any : TLastTransformerEncodeDataOutput,
|
|
108
|
+
// ここではまだ、後段のトランスフォーマーのデコード出力を気にしません。
|
|
109
|
+
any,
|
|
110
|
+
// ここではまだ、後段のトランスフォーマーのエンコード入力を気にしません。
|
|
111
|
+
any,
|
|
112
|
+
// 最後のトランスフォーマーのデコード入力を出力する必要があります。
|
|
113
|
+
[TLastTransformerDecodeDataInput] extends [never] ? any : TLastTransformerDecodeDataInput,
|
|
114
|
+
// 最後のトランスファーマーのエンコード出力を、入力値として受け入れられる必要があります。
|
|
115
|
+
[TLastTransformerEncodeChunkOutput] extends [never] ? any : TLastTransformerEncodeChunkOutput,
|
|
116
|
+
// ここではまだ、後段のトランスフォーマーのデコード出力を気にしません。
|
|
117
|
+
any,
|
|
118
|
+
// ここではまだ、後段のトランスフォーマーのエンコード入力を気にしません。
|
|
119
|
+
any,
|
|
120
|
+
// 最後のトランスフォーマーのデコード入力を出力する必要があります。
|
|
121
|
+
[TLastTransformerDecodeChunkInput] extends [never] ? any : TLastTransformerDecodeChunkInput
|
|
122
|
+
>,
|
|
123
|
+
>(
|
|
124
|
+
transformer: TTransformer,
|
|
125
|
+
): IUniKvsConfigBuilder<
|
|
126
|
+
TKeyValueMapping,
|
|
127
|
+
TUniKvsDataInput,
|
|
128
|
+
TUniKvsDataOutput,
|
|
129
|
+
[TUniKvsChunkInput] extends [never]
|
|
130
|
+
? never
|
|
131
|
+
: [$InferDecodeChunkInput<TTransformer>] extends [never]
|
|
132
|
+
? never
|
|
133
|
+
: TUniKvsChunkInput,
|
|
134
|
+
[TUniKvsChunkOutput] extends [never]
|
|
135
|
+
? never
|
|
136
|
+
: [$InferEncodeChunkOutput<TTransformer>] extends [never]
|
|
137
|
+
? never
|
|
138
|
+
: TUniKvsChunkOutput,
|
|
139
|
+
$InferDecodeDataInput<TTransformer>,
|
|
140
|
+
$InferEncodeDataOutput<TTransformer>,
|
|
141
|
+
$InferDecodeChunkInput<TTransformer>,
|
|
142
|
+
$InferEncodeChunkOutput<TTransformer>
|
|
143
|
+
>;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export interface IUniKvsConfigFinalizer<
|
|
147
|
+
TKeyValueMapping extends KeyValueMapping = KeyValueMapping,
|
|
148
|
+
TWriteDataInput = any,
|
|
149
|
+
TReadDataOutput = any,
|
|
150
|
+
TWriteChunkInput = any,
|
|
151
|
+
TReadChunkOutput = any,
|
|
152
|
+
> {
|
|
153
|
+
create(): UniKvs<TKeyValueMapping>;
|
|
154
|
+
|
|
155
|
+
setContext(context: ContextSource): this;
|
|
156
|
+
|
|
157
|
+
appendStorage<
|
|
158
|
+
TStorage extends IStorage<
|
|
159
|
+
[TWriteDataInput] extends [never] ? any : TWriteDataInput,
|
|
160
|
+
[TReadDataOutput] extends [never] ? any : TReadDataOutput,
|
|
161
|
+
[TWriteChunkInput] extends [never] ? any : TWriteChunkInput,
|
|
162
|
+
[TReadChunkOutput] extends [never] ? any : TReadChunkOutput
|
|
163
|
+
>,
|
|
164
|
+
>(
|
|
165
|
+
storage: TStorage,
|
|
166
|
+
): IUniKvsConfigFinalizer<
|
|
167
|
+
TKeyValueMapping,
|
|
168
|
+
TWriteDataInput,
|
|
169
|
+
TReadDataOutput,
|
|
170
|
+
[TWriteChunkInput] extends [never]
|
|
171
|
+
? never
|
|
172
|
+
: [$InferWriteChunkInput<TStorage>] extends [never]
|
|
173
|
+
? never
|
|
174
|
+
: TWriteChunkInput,
|
|
175
|
+
[TReadChunkOutput] extends [never]
|
|
176
|
+
? never
|
|
177
|
+
: [$InferReadChunkOutput<TStorage>] extends [never]
|
|
178
|
+
? never
|
|
179
|
+
: TReadChunkOutput
|
|
180
|
+
>;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export default class UniKvsConfig implements IUniKvsConfigBuilder, IUniKvsConfigFinalizer {
|
|
184
|
+
readonly #UniKvs: typeof UniKvs;
|
|
185
|
+
|
|
186
|
+
#context: Context;
|
|
187
|
+
|
|
188
|
+
readonly #destinations: IStorage[];
|
|
189
|
+
|
|
190
|
+
readonly #transformers: ITransformer[];
|
|
191
|
+
|
|
192
|
+
public constructor(UniKvsConstructor: typeof UniKvs) {
|
|
193
|
+
this.#UniKvs = UniKvsConstructor;
|
|
194
|
+
this.#context = {};
|
|
195
|
+
this.#destinations = [];
|
|
196
|
+
this.#transformers = [];
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
public create(): UniKvs {
|
|
200
|
+
const [dest, ...destinations] = this.#destinations;
|
|
201
|
+
if (!dest) {
|
|
202
|
+
throw new Error("UniKvs を使用するためには最低 1 つのストレージが必要です。");
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return new this.#UniKvs(
|
|
206
|
+
{ ...this.#context },
|
|
207
|
+
[dest, ...destinations],
|
|
208
|
+
this.#transformers.slice(),
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
public setContext(context: ContextSource): this {
|
|
213
|
+
this.#context = toContext(context, { copy: true });
|
|
214
|
+
return this;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
public appendStorage(storage: IStorage): IUniKvsConfigFinalizer {
|
|
218
|
+
this.#destinations.push(storage);
|
|
219
|
+
return this;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
public appendTransformer(transformer: ITransformer): IUniKvsConfigBuilder {
|
|
223
|
+
if (this.#destinations.length > 0) {
|
|
224
|
+
throw new Error("ストレージが登録された後にトランスフォーマーを追加することはできません。");
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
this.#transformers.push(transformer);
|
|
228
|
+
return this;
|
|
229
|
+
}
|
|
230
|
+
}
|