unikvs 0.0.3 → 0.0.4
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/src/_combine-signals.d.ts +9 -0
- package/dist/src/_combine-signals.d.ts.map +1 -0
- package/dist/src/_combine-signals.js +59 -0
- package/dist/src/_logger.d.ts +3 -0
- package/dist/src/_logger.d.ts.map +1 -0
- package/dist/src/_logger.js +3 -0
- package/dist/src/_merge-context.d.ts +4 -0
- package/dist/src/_merge-context.d.ts.map +1 -0
- package/dist/src/_merge-context.js +3 -0
- package/dist/src/_storage.d.ts +17 -0
- package/dist/src/_storage.d.ts.map +1 -0
- package/dist/src/_storage.js +84 -0
- package/dist/src/_to-value-stream.d.ts +12 -0
- package/dist/src/_to-value-stream.d.ts.map +1 -0
- package/dist/src/_to-value-stream.js +53 -0
- package/dist/src/_transformer.d.ts +12 -0
- package/dist/src/_transformer.d.ts.map +1 -0
- package/dist/src/_transformer.js +52 -0
- package/dist/src/_valibot.d.ts +13 -0
- package/dist/src/_valibot.d.ts.map +1 -0
- package/dist/src/_valibot.js +12 -0
- package/dist/src/context.types.d.ts +17 -0
- package/dist/src/context.types.d.ts.map +1 -0
- package/dist/src/errors.d.ts +108 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +169 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +3 -0
- package/dist/src/unikvs-config.d.ts +255 -0
- package/dist/src/unikvs-config.d.ts.map +1 -0
- package/dist/src/unikvs-config.js +105 -0
- package/dist/src/unikvs.d.ts +324 -0
- package/dist/src/unikvs.d.ts.map +1 -0
- package/dist/src/unikvs.js +693 -0
- package/dist/src/utils.types.d.ts +7 -0
- package/dist/src/utils.types.d.ts.map +1 -0
- package/dist/src/value-stream.types.d.ts +11 -0
- package/dist/src/value-stream.types.d.ts.map +1 -0
- package/package.json +22 -39
- package/src/_combine-signals.ts +67 -0
- package/src/_logger.ts +5 -0
- package/src/_merge-context.ts +10 -0
- package/src/_storage.ts +130 -0
- package/src/_to-value-stream.ts +59 -0
- package/src/_transformer.ts +75 -0
- package/src/_valibot.ts +30 -0
- package/src/context.types.ts +19 -0
- package/src/errors.ts +382 -0
- package/src/index.ts +52 -0
- package/src/unikvs-config.ts +429 -0
- package/src/unikvs.ts +1171 -0
- package/src/utils.types.ts +6 -0
- package/src/value-stream.types.ts +14 -0
- package/dist/src/core/_assign-context.d.ts +0 -3
- package/dist/src/core/_assign-context.d.ts.map +0 -1
- package/dist/src/core/_assign-context.js +0 -3
- package/dist/src/core/_combine-signals.d.ts +0 -3
- package/dist/src/core/_combine-signals.d.ts.map +0 -1
- package/dist/src/core/_combine-signals.js +0 -34
- package/dist/src/core/_is-iterable.d.ts +0 -2
- package/dist/src/core/_is-iterable.d.ts.map +0 -1
- package/dist/src/core/_is-iterable.js +0 -3
- package/dist/src/core/_is-plain-object.d.ts +0 -2
- package/dist/src/core/_is-plain-object.d.ts.map +0 -1
- package/dist/src/core/_is-plain-object.js +0 -7
- package/dist/src/core/_logger.d.ts +0 -3
- package/dist/src/core/_logger.d.ts.map +0 -1
- package/dist/src/core/_logger.js +0 -3
- package/dist/src/core/_merge-context.d.ts +0 -3
- package/dist/src/core/_merge-context.d.ts.map +0 -1
- package/dist/src/core/_merge-context.js +0 -4
- package/dist/src/core/_to-context.d.ts +0 -7
- package/dist/src/core/_to-context.d.ts.map +0 -1
- package/dist/src/core/_to-context.js +0 -42
- package/dist/src/core/_to-value-stream.d.ts +0 -4
- package/dist/src/core/_to-value-stream.d.ts.map +0 -1
- package/dist/src/core/_to-value-stream.js +0 -38
- package/dist/src/core/_with-readable-stream-from.d.ts +0 -6
- package/dist/src/core/_with-readable-stream-from.d.ts.map +0 -1
- package/dist/src/core/_with-readable-stream-from.js +0 -58
- package/dist/src/core/context.types.d.ts +0 -5
- package/dist/src/core/context.types.d.ts.map +0 -1
- package/dist/src/core/errors.d.ts +0 -13
- package/dist/src/core/errors.d.ts.map +0 -1
- package/dist/src/core/errors.js +0 -20
- package/dist/src/core/index.d.ts +0 -15
- package/dist/src/core/index.d.ts.map +0 -1
- package/dist/src/core/index.js +0 -4
- package/dist/src/core/plugin.types.d.ts +0 -8
- package/dist/src/core/plugin.types.d.ts.map +0 -1
- package/dist/src/core/plugin.types.js +0 -1
- package/dist/src/core/storage.types.d.ts +0 -22
- package/dist/src/core/storage.types.d.ts.map +0 -1
- package/dist/src/core/storage.types.js +0 -1
- package/dist/src/core/to-readable-stream.d.ts +0 -2
- package/dist/src/core/to-readable-stream.d.ts.map +0 -1
- package/dist/src/core/to-readable-stream.js +0 -4
- package/dist/src/core/transformer.types.d.ts +0 -18
- package/dist/src/core/transformer.types.d.ts.map +0 -1
- package/dist/src/core/transformer.types.js +0 -1
- package/dist/src/core/unikvs-config.d.ts +0 -82
- package/dist/src/core/unikvs-config.d.ts.map +0 -1
- package/dist/src/core/unikvs-config.js +0 -49
- package/dist/src/core/unikvs.d.ts +0 -73
- package/dist/src/core/unikvs.d.ts.map +0 -1
- package/dist/src/core/unikvs.js +0 -678
- package/dist/src/core/utils.types.d.ts +0 -3
- package/dist/src/core/utils.types.d.ts.map +0 -1
- package/dist/src/core/value-stream.types.d.ts +0 -4
- package/dist/src/core/value-stream.types.d.ts.map +0 -1
- package/dist/src/destinations/memory-storage.d.ts +0 -17
- package/dist/src/destinations/memory-storage.d.ts.map +0 -1
- package/dist/src/destinations/memory-storage.js +0 -113
- package/dist/src/types/storage.d.ts +0 -5
- package/dist/src/types/storage.d.ts.map +0 -1
- package/dist/src/types/storage.js +0 -1
- package/dist/src/types/transformer.d.ts +0 -5
- package/dist/src/types/transformer.d.ts.map +0 -1
- package/dist/src/types/transformer.js +0 -1
- package/src/core/_assign-context.ts +0 -5
- package/src/core/_combine-signals.ts +0 -40
- package/src/core/_is-iterable.ts +0 -3
- package/src/core/_is-plain-object.ts +0 -11
- package/src/core/_logger.ts +0 -5
- package/src/core/_merge-context.ts +0 -9
- package/src/core/_to-context.ts +0 -59
- package/src/core/_to-value-stream.ts +0 -41
- package/src/core/_with-readable-stream-from.ts +0 -70
- package/src/core/context.types.ts +0 -7
- package/src/core/errors.ts +0 -37
- package/src/core/index.ts +0 -23
- package/src/core/plugin.types.ts +0 -10
- package/src/core/storage.types.ts +0 -53
- package/src/core/to-readable-stream.ts +0 -7
- package/src/core/transformer.types.ts +0 -110
- package/src/core/unikvs-config.ts +0 -230
- package/src/core/unikvs.ts +0 -740
- package/src/core/utils.types.ts +0 -3
- package/src/core/value-stream.types.ts +0 -3
- package/src/destinations/memory-storage.ts +0 -160
- package/src/types/storage.ts +0 -5
- package/src/types/transformer.ts +0 -5
- /package/dist/src/{core/context.types.js → context.types.js} +0 -0
- /package/dist/src/{core/utils.types.js → utils.types.js} +0 -0
- /package/dist/src/{core/value-stream.types.js → value-stream.types.js} +0 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 複数の AbortSignal を 1 つに結合します。
|
|
3
|
+
*
|
|
4
|
+
* @param signals 結合対象となる AbortSignal、または null / undefined の配列です。
|
|
5
|
+
* @returns 結合された新しい AbortSignal です。
|
|
6
|
+
*/
|
|
7
|
+
declare let combineSignals: (signals: readonly (AbortSignal | null | undefined)[]) => AbortSignal;
|
|
8
|
+
export default combineSignals;
|
|
9
|
+
//# sourceMappingURL=_combine-signals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_combine-signals.d.ts","sourceRoot":"","sources":["../../src/_combine-signals.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,QAAA,IAAI,cAAc,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,KAAK,WAAW,CAAC;AA4D1F,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 複数の AbortSignal を 1 つに結合します。
|
|
3
|
+
*
|
|
4
|
+
* @param signals 結合対象となる AbortSignal、または null / undefined の配列です。
|
|
5
|
+
* @returns 結合された新しい AbortSignal です。
|
|
6
|
+
*/
|
|
7
|
+
let combineSignals;
|
|
8
|
+
if ("any" in AbortSignal && typeof AbortSignal.any === "function") {
|
|
9
|
+
// AbortSignal.any がネイティブでサポートされている場合はそれを使用します。
|
|
10
|
+
const AbortSignalAny = AbortSignal.any.bind(AbortSignal);
|
|
11
|
+
combineSignals = function combineSignals(inputSignals) {
|
|
12
|
+
const signals = inputSignals.filter((signal) => signal instanceof AbortSignal);
|
|
13
|
+
return AbortSignalAny(signals);
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
// AbortSignal.any が未実装の環境向けのポリフィル実装です。
|
|
18
|
+
combineSignals = function combineSignals(inputSignals) {
|
|
19
|
+
const ac = new AbortController();
|
|
20
|
+
const signals = [];
|
|
21
|
+
for (const signal of inputSignals) {
|
|
22
|
+
if (signal?.aborted) {
|
|
23
|
+
// すでに中断されている場合は、その理由(reason)を使用して即座に中断処理を行います。
|
|
24
|
+
ac.abort(signal.reason);
|
|
25
|
+
return ac.signal;
|
|
26
|
+
}
|
|
27
|
+
if (signal instanceof AbortSignal) {
|
|
28
|
+
signals.push(signal);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* すべての監視対象信号からイベントリスナーを削除するクリーンアップ関数です。
|
|
33
|
+
*
|
|
34
|
+
* メモリーリークを防ぐために、いずれかの信号が中断された際に実行されます。
|
|
35
|
+
*/
|
|
36
|
+
function cleanup() {
|
|
37
|
+
for (const signal of signals) {
|
|
38
|
+
signal.removeEventListener("abort", handleAbort);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* いずれかの信号が abort イベントを発火させた際に呼び出されるハンドラーです。
|
|
43
|
+
*
|
|
44
|
+
* @this AbortSignal 中断を検知した AbortSignal インスタンス自身を指します。
|
|
45
|
+
*/
|
|
46
|
+
function handleAbort() {
|
|
47
|
+
// 親のコントローラーに対して、検知した信号の理由を添えて中断を指示します。
|
|
48
|
+
ac.abort(this.reason);
|
|
49
|
+
// 一つの信号が中断されれば他の監視は不要になるため、クリーンアップを呼び出します。
|
|
50
|
+
cleanup();
|
|
51
|
+
}
|
|
52
|
+
// すべての有効な信号に対して、中断イベントを監視するリスナーを登録します。
|
|
53
|
+
for (const signal of signals) {
|
|
54
|
+
signal.addEventListener("abort", handleAbort, { once: true });
|
|
55
|
+
}
|
|
56
|
+
return ac.signal;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export default combineSignals;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_logger.d.ts","sourceRoot":"","sources":["../../src/_logger.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,MAAM,mCAAsB,CAAC;AAEnC,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_merge-context.d.ts","sourceRoot":"","sources":["../../src/_merge-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,EACpB,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,aAAa,GAAG,SAAS,GAC/C,OAAO,CAET"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Context, IReadableStream, IStorage, IWritableStream, Key } from "@unikvs/core";
|
|
2
|
+
import { type PluginOperationAggregateError } from "./errors.js";
|
|
3
|
+
export declare class UniKvsStorage {
|
|
4
|
+
private readonly io;
|
|
5
|
+
constructor(io: IStorage);
|
|
6
|
+
open(context: Context, signal: AbortSignal): Promise<void>;
|
|
7
|
+
close(context: Context, signal: AbortSignal): Promise<void>;
|
|
8
|
+
onOtherWriteError(context: Context, signal: AbortSignal, key: Key, error: PluginOperationAggregateError): Promise<void>;
|
|
9
|
+
write(context: Context, signal: AbortSignal, key: Key, data: any): Promise<void>;
|
|
10
|
+
read(context: Context, signal: AbortSignal, key: Key): Promise<any>;
|
|
11
|
+
exists(context: Context, signal: AbortSignal, key: Key): Promise<boolean>;
|
|
12
|
+
delete(context: Context, signal: AbortSignal, key: Key): Promise<void>;
|
|
13
|
+
clear(context: Context, signal: AbortSignal): Promise<void>;
|
|
14
|
+
getWritable(context: Context, signal: AbortSignal, key: Key): Promise<IWritableStream>;
|
|
15
|
+
getReadable(context: Context, signal: AbortSignal, key: Key): Promise<IReadableStream>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=_storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_storage.d.ts","sourceRoot":"","sources":["../../src/_storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAE7F,OAAO,EACL,KAAK,6BAA6B,EAInC,MAAM,aAAa,CAAC;AAErB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;gBAEX,EAAE,EAAE,QAAQ;IAIlB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1D,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D,iBAAiB,CAC5B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,IAAI,CAAC;IAiBH,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhF,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAQnE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAQzE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,WAAW,CACtB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,eAAe,CAAC;IAYd,WAAW,CACtB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,eAAe,CAAC;CAW5B"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { ReadableStreamNotSupportedError, StorageIsNotOpenError, WritableStreamNotSupportedError, } from "./errors.js";
|
|
2
|
+
export class UniKvsStorage {
|
|
3
|
+
constructor(io) {
|
|
4
|
+
this.io = io;
|
|
5
|
+
}
|
|
6
|
+
async open(context, signal) {
|
|
7
|
+
if (typeof this.io.open !== "function") {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (!this.io.isOpen) {
|
|
11
|
+
await this.io.open({ signal, context });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
async close(context, signal) {
|
|
15
|
+
if (typeof this.io.close !== "function") {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (this.io.isOpen) {
|
|
19
|
+
await this.io.close({ signal, context });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async onOtherWriteError(context, signal, key, error) {
|
|
23
|
+
if (!this.io.isOpen) {
|
|
24
|
+
throw new StorageIsNotOpenError({ name: this.io.name });
|
|
25
|
+
}
|
|
26
|
+
if (typeof this.io.onOtherWriteError !== "function") {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
await this.io.onOtherWriteError({
|
|
30
|
+
key,
|
|
31
|
+
error: error,
|
|
32
|
+
signal,
|
|
33
|
+
context,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async write(context, signal, key, data) {
|
|
37
|
+
if (!this.io.isOpen) {
|
|
38
|
+
throw new StorageIsNotOpenError({ name: this.io.name });
|
|
39
|
+
}
|
|
40
|
+
await this.io.write({ key, data, signal, context });
|
|
41
|
+
}
|
|
42
|
+
async read(context, signal, key) {
|
|
43
|
+
if (!this.io.isOpen) {
|
|
44
|
+
throw new StorageIsNotOpenError({ name: this.io.name });
|
|
45
|
+
}
|
|
46
|
+
return await this.io.read({ key, signal, context });
|
|
47
|
+
}
|
|
48
|
+
async exists(context, signal, key) {
|
|
49
|
+
if (!this.io.isOpen) {
|
|
50
|
+
throw new StorageIsNotOpenError({ name: this.io.name });
|
|
51
|
+
}
|
|
52
|
+
return await this.io.exists({ key, signal, context });
|
|
53
|
+
}
|
|
54
|
+
async delete(context, signal, key) {
|
|
55
|
+
if (!this.io.isOpen) {
|
|
56
|
+
throw new StorageIsNotOpenError({ name: this.io.name });
|
|
57
|
+
}
|
|
58
|
+
await this.io.delete({ key, signal, context });
|
|
59
|
+
}
|
|
60
|
+
async clear(context, signal) {
|
|
61
|
+
if (!this.io.isOpen) {
|
|
62
|
+
throw new StorageIsNotOpenError({ name: this.io.name });
|
|
63
|
+
}
|
|
64
|
+
await this.io.clear({ signal, context });
|
|
65
|
+
}
|
|
66
|
+
async getWritable(context, signal, key) {
|
|
67
|
+
if (!this.io.isOpen) {
|
|
68
|
+
throw new StorageIsNotOpenError({ name: this.io.name });
|
|
69
|
+
}
|
|
70
|
+
if (typeof this.io.getWritable !== "function") {
|
|
71
|
+
throw new WritableStreamNotSupportedError({ name: this.io.name });
|
|
72
|
+
}
|
|
73
|
+
return await this.io.getWritable({ key, signal, context });
|
|
74
|
+
}
|
|
75
|
+
async getReadable(context, signal, key) {
|
|
76
|
+
if (!this.io.isOpen) {
|
|
77
|
+
throw new StorageIsNotOpenError({ name: this.io.name });
|
|
78
|
+
}
|
|
79
|
+
if (typeof this.io.getReadable !== "function") {
|
|
80
|
+
throw new ReadableStreamNotSupportedError({ name: this.io.name });
|
|
81
|
+
}
|
|
82
|
+
return await this.io.getReadable({ key, signal, context });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IReadableStream } from "@unikvs/core";
|
|
2
|
+
import type { ValueStream } from "./value-stream.types.js";
|
|
3
|
+
/**
|
|
4
|
+
* 与えられた `IReadableStream` を `ValueStream` に変換します。
|
|
5
|
+
*
|
|
6
|
+
* @template T ストリームが保持する値の型です。
|
|
7
|
+
* @param readableStream 変換対象となる `IReadableStream` インスタンスです。
|
|
8
|
+
* @param onAsyncDispose ストリーム破棄時の処理です。
|
|
9
|
+
* @returns 非同期イテレーターが付与された `ValueStream` インスタンスを返します。
|
|
10
|
+
*/
|
|
11
|
+
export default function toValueStream<T>(readableStream: IReadableStream<T>, onAsyncDispose: () => Promise<void>): ValueStream<T>;
|
|
12
|
+
//# sourceMappingURL=_to-value-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_to-value-stream.d.ts","sourceRoot":"","sources":["../../src/_to-value-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,CAAC,EACrC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,EAClC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAClC,WAAW,CAAC,CAAC,CAAC,CAyChB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { callAsyncableFnOnce } from "call-fn-once";
|
|
2
|
+
import logger from "./_logger.js";
|
|
3
|
+
/**
|
|
4
|
+
* 与えられた `IReadableStream` を `ValueStream` に変換します。
|
|
5
|
+
*
|
|
6
|
+
* @template T ストリームが保持する値の型です。
|
|
7
|
+
* @param readableStream 変換対象となる `IReadableStream` インスタンスです。
|
|
8
|
+
* @param onAsyncDispose ストリーム破棄時の処理です。
|
|
9
|
+
* @returns 非同期イテレーターが付与された `ValueStream` インスタンスを返します。
|
|
10
|
+
*/
|
|
11
|
+
export default function toValueStream(readableStream, onAsyncDispose) {
|
|
12
|
+
const cacheMap = new Map();
|
|
13
|
+
async function handleDispose() {
|
|
14
|
+
await callAsyncableFnOnce(cacheMap, "dispose", onAsyncDispose);
|
|
15
|
+
}
|
|
16
|
+
// 既存のストリームに対して Symbol.asyncIterator を動的に割り当てて返します。
|
|
17
|
+
return Object.assign(readableStream.pipeThrough(new TransformStream({ flush: handleDispose })), {
|
|
18
|
+
dispose: handleDispose,
|
|
19
|
+
[Symbol.asyncDispose]: handleDispose,
|
|
20
|
+
async *[Symbol.asyncIterator]() {
|
|
21
|
+
const r = this.getReader();
|
|
22
|
+
try {
|
|
23
|
+
// ストリームが終了するまでループを回し、チャンクを読み取ります。
|
|
24
|
+
while (true) {
|
|
25
|
+
const { done, value } = await r.read();
|
|
26
|
+
if (done) {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
yield value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (ex) {
|
|
33
|
+
// エラーが発生した場合は、リーダーのキャンセルを試みます。
|
|
34
|
+
try {
|
|
35
|
+
await r.cancel(ex);
|
|
36
|
+
}
|
|
37
|
+
catch (ex) {
|
|
38
|
+
logger.error `Failed to cancel reader: ${ex}`;
|
|
39
|
+
}
|
|
40
|
+
throw ex;
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
// 最後に必ずリーダーのロックを解放し、ストリームを再利用可能な状態にします。
|
|
44
|
+
try {
|
|
45
|
+
r.releaseLock();
|
|
46
|
+
}
|
|
47
|
+
catch (ex) {
|
|
48
|
+
logger.error `Failed to release reader's lock: ${ex}`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Context, IDecodable, ITransformer, IEncodable } from "@unikvs/core";
|
|
2
|
+
export default class UniKvsTransformer {
|
|
3
|
+
private readonly tf;
|
|
4
|
+
constructor(tf: ITransformer);
|
|
5
|
+
open(context: Context, signal: AbortSignal): Promise<void>;
|
|
6
|
+
close(context: Context, signal: AbortSignal): Promise<void>;
|
|
7
|
+
encode(context: Context, signal: AbortSignal, data: any): Promise<void>;
|
|
8
|
+
decode(context: Context, signal: AbortSignal, data: any): Promise<any>;
|
|
9
|
+
getEncodable(context: Context, signal: AbortSignal): Promise<IEncodable>;
|
|
10
|
+
getDecodable(context: Context, signal: AbortSignal): Promise<IDecodable>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=_transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_transformer.d.ts","sourceRoot":"","sources":["../../src/_transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQlF,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;gBAEf,EAAE,EAAE,YAAY;IAItB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1D,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAQtE,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAYxE,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAWtF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { DecodableStreamNotSupportedError, EncodableStreamNotSupportedError, TransformerIsNotOpenError, } from "./errors.js";
|
|
2
|
+
export default class UniKvsTransformer {
|
|
3
|
+
constructor(tf) {
|
|
4
|
+
this.tf = tf;
|
|
5
|
+
}
|
|
6
|
+
async open(context, signal) {
|
|
7
|
+
if (typeof this.tf.open !== "function") {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (!this.tf.isOpen) {
|
|
11
|
+
await this.tf.open({ signal, context });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
async close(context, signal) {
|
|
15
|
+
if (typeof this.tf.close !== "function") {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (this.tf.isOpen) {
|
|
19
|
+
await this.tf.close({ signal, context });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async encode(context, signal, data) {
|
|
23
|
+
if (!this.tf.isOpen) {
|
|
24
|
+
throw new TransformerIsNotOpenError({ name: this.tf.name });
|
|
25
|
+
}
|
|
26
|
+
return await this.tf.encode({ data, signal, context });
|
|
27
|
+
}
|
|
28
|
+
async decode(context, signal, data) {
|
|
29
|
+
if (!this.tf.isOpen) {
|
|
30
|
+
throw new TransformerIsNotOpenError({ name: this.tf.name });
|
|
31
|
+
}
|
|
32
|
+
return await this.tf.decode({ data, signal, context });
|
|
33
|
+
}
|
|
34
|
+
async getEncodable(context, signal) {
|
|
35
|
+
if (!this.tf.isOpen) {
|
|
36
|
+
throw new TransformerIsNotOpenError({ name: this.tf.name });
|
|
37
|
+
}
|
|
38
|
+
if (typeof this.tf.getEncodable !== "function") {
|
|
39
|
+
throw new EncodableStreamNotSupportedError({ name: this.tf.name });
|
|
40
|
+
}
|
|
41
|
+
return await this.tf.getEncodable({ signal, context });
|
|
42
|
+
}
|
|
43
|
+
async getDecodable(context, signal) {
|
|
44
|
+
if (!this.tf.isOpen) {
|
|
45
|
+
throw new TransformerIsNotOpenError({ name: this.tf.name });
|
|
46
|
+
}
|
|
47
|
+
if (typeof this.tf.getDecodable !== "function") {
|
|
48
|
+
throw new DecodableStreamNotSupportedError({ name: this.tf.name });
|
|
49
|
+
}
|
|
50
|
+
return await this.tf.getDecodable({ signal, context });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type InferOutput, safeParse } from "valibot";
|
|
2
|
+
import { type Issue } from "./errors.js";
|
|
3
|
+
type BaseSchema = typeof safeParse extends (schema: infer S, ...args: any) => any ? S : never;
|
|
4
|
+
export type ParseErrorConstructorArgs = {
|
|
5
|
+
readonly value: unknown;
|
|
6
|
+
readonly issues: readonly [Issue, ...Issue[]];
|
|
7
|
+
};
|
|
8
|
+
export interface ParseErrorConstructor {
|
|
9
|
+
new (args: ParseErrorConstructorArgs): Error;
|
|
10
|
+
}
|
|
11
|
+
export declare function parse<const TSchema extends BaseSchema>(schema: TSchema, value: unknown, Error?: ParseErrorConstructor): InferOutput<TSchema>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=_valibot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_valibot.d.ts","sourceRoot":"","sources":["../../src/_valibot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEtD,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAE5D,KAAK,UAAU,GAAG,OAAO,SAAS,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAE9F,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,KAAK,IAAI,EAAE,yBAAyB,GAAG,KAAK,CAAC;CAC9C;AAED,wBAAgB,KAAK,CAAC,KAAK,CAAC,OAAO,SAAS,UAAU,EACpD,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,OAAO,EACd,KAAK,GAAE,qBAAyC,GAC/C,WAAW,CAAC,OAAO,CAAC,CAStB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { tryCaptureStackTrace } from "try-capture-stack-trace";
|
|
2
|
+
import { safeParse } from "valibot";
|
|
3
|
+
import { InvalidInputError } from "./errors.js";
|
|
4
|
+
export function parse(schema, value, Error = InvalidInputError) {
|
|
5
|
+
const result = safeParse(schema, value);
|
|
6
|
+
if (result.success) {
|
|
7
|
+
return result.output;
|
|
8
|
+
}
|
|
9
|
+
const error = new Error({ value, issues: result.issues });
|
|
10
|
+
tryCaptureStackTrace(error, parse);
|
|
11
|
+
throw error;
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Context } from "@unikvs/core";
|
|
2
|
+
import type { ValueOf } from "./utils.types.js";
|
|
3
|
+
/**
|
|
4
|
+
* コンテキストの単一のエントリーを表す、読み取り専用のキーと値のペア(タプル)です。
|
|
5
|
+
*
|
|
6
|
+
* インデックス 0 はキー、1 は値を保持します。
|
|
7
|
+
*/
|
|
8
|
+
export type ContextKeyValuePair = readonly [key: keyof Context, value: ValueOf<Context>];
|
|
9
|
+
/**
|
|
10
|
+
* コンテキストの初期化や更新に使用できる、データソースの型定義です。
|
|
11
|
+
*
|
|
12
|
+
* 以下のいずれかの形式を受け入れます:
|
|
13
|
+
* 1. 読み取り専用のコンテキストオブジェクト
|
|
14
|
+
* 2. キーと値のペアを列挙した反復可能なオブジェクト
|
|
15
|
+
*/
|
|
16
|
+
export type ContextSource = Readonly<Context> | readonly ContextKeyValuePair[];
|
|
17
|
+
//# sourceMappingURL=context.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.types.d.ts","sourceRoot":"","sources":["../../src/context.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,SAAS,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { ErrorBase, type ErrorOptions, type ErrorMeta, Key } from "@unikvs/core";
|
|
2
|
+
import type { BaseIssue } from "valibot";
|
|
3
|
+
export declare class InvalidUsageErrorBase<TMeta extends ErrorMeta | undefined = ErrorMeta | undefined> extends ErrorBase<TMeta> {
|
|
4
|
+
}
|
|
5
|
+
export type Issue = BaseIssue<unknown>;
|
|
6
|
+
export type InvalidInputErrorMeta = {
|
|
7
|
+
readonly input: unknown;
|
|
8
|
+
readonly issues: readonly [Issue, ...Issue[]];
|
|
9
|
+
};
|
|
10
|
+
export type InvalidInputErrorArgs = {
|
|
11
|
+
readonly value: unknown;
|
|
12
|
+
readonly issues: readonly [Issue, ...Issue[]];
|
|
13
|
+
};
|
|
14
|
+
export declare class InvalidInputError extends InvalidUsageErrorBase<InvalidInputErrorMeta> {
|
|
15
|
+
constructor(args: InvalidInputErrorArgs, options?: ErrorOptions);
|
|
16
|
+
}
|
|
17
|
+
export type InvalidOutputErrorMeta = {
|
|
18
|
+
readonly output: unknown;
|
|
19
|
+
readonly issues: readonly [Issue, ...Issue[]];
|
|
20
|
+
};
|
|
21
|
+
export type InvalidOutputErrorArgs = {
|
|
22
|
+
readonly value: unknown;
|
|
23
|
+
readonly issues: readonly [Issue, ...Issue[]];
|
|
24
|
+
};
|
|
25
|
+
export declare class InvalidOutputError extends InvalidUsageErrorBase<InvalidOutputErrorMeta> {
|
|
26
|
+
constructor(args: InvalidOutputErrorArgs, options?: ErrorOptions);
|
|
27
|
+
}
|
|
28
|
+
export declare class UniKvsIsOpenError extends ErrorBase<undefined> {
|
|
29
|
+
constructor(options?: ErrorOptions);
|
|
30
|
+
}
|
|
31
|
+
export declare class UniKvsIsNotOpenError extends ErrorBase<undefined> {
|
|
32
|
+
constructor(options?: ErrorOptions);
|
|
33
|
+
}
|
|
34
|
+
export type KeyNotFoundErrorMeta = {
|
|
35
|
+
readonly key: Key;
|
|
36
|
+
};
|
|
37
|
+
export type KeyNotFoundErrorArgs = KeyNotFoundErrorMeta;
|
|
38
|
+
export declare class KeyNotFoundError extends ErrorBase<KeyNotFoundErrorMeta> {
|
|
39
|
+
constructor(args: KeyNotFoundErrorArgs, options?: ErrorOptions);
|
|
40
|
+
}
|
|
41
|
+
export type StorageIsNotOpenErrorMeta = {
|
|
42
|
+
readonly name: string;
|
|
43
|
+
};
|
|
44
|
+
export type StorageIsNotOpenErrorArgs = StorageIsNotOpenErrorMeta;
|
|
45
|
+
export declare class StorageIsNotOpenError extends ErrorBase<StorageIsNotOpenErrorMeta> {
|
|
46
|
+
constructor(args: StorageIsNotOpenErrorArgs, options?: ErrorOptions);
|
|
47
|
+
}
|
|
48
|
+
export type WritableStreamNotSupportedErrorMeta = {
|
|
49
|
+
readonly name: string;
|
|
50
|
+
};
|
|
51
|
+
export type WritableStreamNotSupportedErrorArgs = WritableStreamNotSupportedErrorMeta;
|
|
52
|
+
export declare class WritableStreamNotSupportedError extends ErrorBase<WritableStreamNotSupportedErrorMeta> {
|
|
53
|
+
constructor(args: WritableStreamNotSupportedErrorArgs, options?: ErrorOptions);
|
|
54
|
+
}
|
|
55
|
+
export type ReadableStreamNotSupportedErrorMeta = {
|
|
56
|
+
readonly name: string;
|
|
57
|
+
};
|
|
58
|
+
export type ReadableStreamNotSupportedErrorArgs = ReadableStreamNotSupportedErrorMeta;
|
|
59
|
+
export declare class ReadableStreamNotSupportedError extends ErrorBase<ReadableStreamNotSupportedErrorMeta> {
|
|
60
|
+
constructor(args: ReadableStreamNotSupportedErrorArgs, options?: ErrorOptions);
|
|
61
|
+
}
|
|
62
|
+
export type TransformerIsNotOpenErrorMeta = {
|
|
63
|
+
readonly name: string;
|
|
64
|
+
};
|
|
65
|
+
export type TransformerIsNotOpenErrorArgs = TransformerIsNotOpenErrorMeta;
|
|
66
|
+
export declare class TransformerIsNotOpenError extends ErrorBase<TransformerIsNotOpenErrorMeta> {
|
|
67
|
+
constructor(args: TransformerIsNotOpenErrorArgs, options?: ErrorOptions);
|
|
68
|
+
}
|
|
69
|
+
export type EncodableStreamNotSupportedErrorMeta = {
|
|
70
|
+
readonly name: string;
|
|
71
|
+
};
|
|
72
|
+
export type EncodableStreamNotSupportedErrorArgs = EncodableStreamNotSupportedErrorMeta;
|
|
73
|
+
export declare class EncodableStreamNotSupportedError extends ErrorBase<EncodableStreamNotSupportedErrorMeta> {
|
|
74
|
+
constructor(args: EncodableStreamNotSupportedErrorArgs, options?: ErrorOptions);
|
|
75
|
+
}
|
|
76
|
+
export type DecodableStreamNotSupportedErrorMeta = {
|
|
77
|
+
readonly name: string;
|
|
78
|
+
};
|
|
79
|
+
export type DecodableStreamNotSupportedErrorArgs = DecodableStreamNotSupportedErrorMeta;
|
|
80
|
+
export declare class DecodableStreamNotSupportedError extends ErrorBase<DecodableStreamNotSupportedErrorMeta> {
|
|
81
|
+
constructor(args: DecodableStreamNotSupportedErrorArgs, options?: ErrorOptions);
|
|
82
|
+
}
|
|
83
|
+
export type PluginOperationAggregateErrorMeta = {
|
|
84
|
+
readonly plugin: "plugin" | "storage" | "transformer";
|
|
85
|
+
readonly action: "open" | "close" | "write" | "delete" | "clear";
|
|
86
|
+
readonly errors: readonly {
|
|
87
|
+
readonly plugin: "storage" | "transformer";
|
|
88
|
+
readonly reason: unknown;
|
|
89
|
+
}[];
|
|
90
|
+
};
|
|
91
|
+
export type PluginOperationAggregateErrorArgs = {
|
|
92
|
+
readonly plugin?: "storage" | "transformer";
|
|
93
|
+
readonly action: "open" | "close" | "write" | "delete" | "clear";
|
|
94
|
+
readonly errors: readonly {
|
|
95
|
+
readonly plugin?: "storage" | "transformer";
|
|
96
|
+
readonly reason: unknown;
|
|
97
|
+
}[];
|
|
98
|
+
};
|
|
99
|
+
export declare class PluginOperationAggregateError extends ErrorBase<PluginOperationAggregateErrorMeta> {
|
|
100
|
+
constructor(args: PluginOperationAggregateErrorArgs, options?: ErrorOptions);
|
|
101
|
+
}
|
|
102
|
+
export declare class MissingStorageError extends ErrorBase<undefined> {
|
|
103
|
+
constructor(options?: ErrorOptions);
|
|
104
|
+
}
|
|
105
|
+
export declare class TransformerRegistrationError extends ErrorBase<undefined> {
|
|
106
|
+
constructor(options?: ErrorOptions);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
|