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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/dist/src/core/_assign-context.d.ts +3 -0
  3. package/dist/src/core/_assign-context.d.ts.map +1 -0
  4. package/dist/src/core/_assign-context.js +3 -0
  5. package/dist/src/core/_combine-signals.d.ts +3 -0
  6. package/dist/src/core/_combine-signals.d.ts.map +1 -0
  7. package/dist/src/core/_combine-signals.js +34 -0
  8. package/dist/src/core/_is-iterable.d.ts +2 -0
  9. package/dist/src/core/_is-iterable.d.ts.map +1 -0
  10. package/dist/src/core/_is-iterable.js +3 -0
  11. package/dist/src/core/_is-plain-object.d.ts +2 -0
  12. package/dist/src/core/_is-plain-object.d.ts.map +1 -0
  13. package/dist/src/core/_is-plain-object.js +7 -0
  14. package/dist/src/core/_logger.d.ts +3 -0
  15. package/dist/src/core/_logger.d.ts.map +1 -0
  16. package/dist/src/core/_logger.js +3 -0
  17. package/dist/src/core/_merge-context.d.ts +3 -0
  18. package/dist/src/core/_merge-context.d.ts.map +1 -0
  19. package/dist/src/core/_merge-context.js +4 -0
  20. package/dist/src/core/_to-context.d.ts +7 -0
  21. package/dist/src/core/_to-context.d.ts.map +1 -0
  22. package/dist/src/core/_to-context.js +42 -0
  23. package/dist/src/core/_to-value-stream.d.ts +4 -0
  24. package/dist/src/core/_to-value-stream.d.ts.map +1 -0
  25. package/dist/src/core/_to-value-stream.js +38 -0
  26. package/dist/src/core/_with-readable-stream-from.d.ts +6 -0
  27. package/dist/src/core/_with-readable-stream-from.d.ts.map +1 -0
  28. package/dist/src/core/_with-readable-stream-from.js +58 -0
  29. package/dist/src/core/context.types.d.ts +5 -0
  30. package/dist/src/core/context.types.d.ts.map +1 -0
  31. package/dist/src/core/context.types.js +1 -0
  32. package/dist/src/core/errors.d.ts +13 -0
  33. package/dist/src/core/errors.d.ts.map +1 -0
  34. package/dist/src/core/errors.js +20 -0
  35. package/dist/src/core/index.d.ts +15 -0
  36. package/dist/src/core/index.d.ts.map +1 -0
  37. package/dist/src/core/index.js +4 -0
  38. package/dist/src/core/plugin.types.d.ts +8 -0
  39. package/dist/src/core/plugin.types.d.ts.map +1 -0
  40. package/dist/src/core/plugin.types.js +1 -0
  41. package/dist/src/core/storage.types.d.ts +22 -0
  42. package/dist/src/core/storage.types.d.ts.map +1 -0
  43. package/dist/src/core/storage.types.js +1 -0
  44. package/dist/src/core/to-readable-stream.d.ts +2 -0
  45. package/dist/src/core/to-readable-stream.d.ts.map +1 -0
  46. package/dist/src/core/to-readable-stream.js +4 -0
  47. package/dist/src/core/transformer.types.d.ts +18 -0
  48. package/dist/src/core/transformer.types.d.ts.map +1 -0
  49. package/dist/src/core/transformer.types.js +1 -0
  50. package/dist/src/core/unikvs-config.d.ts +82 -0
  51. package/dist/src/core/unikvs-config.d.ts.map +1 -0
  52. package/dist/src/core/unikvs-config.js +49 -0
  53. package/dist/src/core/unikvs.d.ts +73 -0
  54. package/dist/src/core/unikvs.d.ts.map +1 -0
  55. package/dist/src/core/unikvs.js +678 -0
  56. package/dist/src/core/utils.types.d.ts +3 -0
  57. package/dist/src/core/utils.types.d.ts.map +1 -0
  58. package/dist/src/core/utils.types.js +1 -0
  59. package/dist/src/core/value-stream.types.d.ts +4 -0
  60. package/dist/src/core/value-stream.types.d.ts.map +1 -0
  61. package/dist/src/core/value-stream.types.js +1 -0
  62. package/dist/src/destinations/memory-storage.d.ts +17 -0
  63. package/dist/src/destinations/memory-storage.d.ts.map +1 -0
  64. package/dist/src/destinations/memory-storage.js +113 -0
  65. package/dist/src/types/storage.d.ts +5 -0
  66. package/dist/src/types/storage.d.ts.map +1 -0
  67. package/dist/src/types/storage.js +1 -0
  68. package/dist/src/types/transformer.d.ts +5 -0
  69. package/dist/src/types/transformer.d.ts.map +1 -0
  70. package/dist/src/types/transformer.js +1 -0
  71. package/package.json +69 -6
  72. package/src/core/_assign-context.ts +5 -0
  73. package/src/core/_combine-signals.ts +40 -0
  74. package/src/core/_is-iterable.ts +3 -0
  75. package/src/core/_is-plain-object.ts +11 -0
  76. package/src/core/_logger.ts +5 -0
  77. package/src/core/_merge-context.ts +9 -0
  78. package/src/core/_to-context.ts +59 -0
  79. package/src/core/_to-value-stream.ts +41 -0
  80. package/src/core/_with-readable-stream-from.ts +70 -0
  81. package/src/core/context.types.ts +7 -0
  82. package/src/core/errors.ts +37 -0
  83. package/src/core/index.ts +23 -0
  84. package/src/core/plugin.types.ts +10 -0
  85. package/src/core/storage.types.ts +53 -0
  86. package/src/core/to-readable-stream.ts +7 -0
  87. package/src/core/transformer.types.ts +110 -0
  88. package/src/core/unikvs-config.ts +230 -0
  89. package/src/core/unikvs.ts +740 -0
  90. package/src/core/utils.types.ts +3 -0
  91. package/src/core/value-stream.types.ts +3 -0
  92. package/src/destinations/memory-storage.ts +160 -0
  93. package/src/types/storage.ts +5 -0
  94. package/src/types/transformer.ts +5 -0
  95. 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
+ }