unikvs 0.0.6 → 0.0.8

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.
@@ -1,4 +1,13 @@
1
1
  import { Context } from "@unikvs/core";
2
2
  import type { ContextSource } from "./context.types.js";
3
+ /**
4
+ * 2 つの Context オブジェクトを結合します。
5
+ *
6
+ * 基本となる Context に対して、追加または上書きするコンテキスト情報を結合し、新しい Context オブジェクトを生成して返します。追加するコンテキスト情報が配列(キーと値のペアの配列)である場合は、オブジェクトに変換した上で結合処理を行います。
7
+ *
8
+ * @param a ベースとなる読み取り専用の Context オブジェクトです。
9
+ * @param b 結合する読み取り専用の Context、または ContextSource、あるいは undefined です。
10
+ * @returns 結合された新しい Context オブジェクトです。
11
+ */
3
12
  export default function mergeContext(a: Readonly<Context>, b: Readonly<Context> | ContextSource | undefined): Context;
4
13
  //# sourceMappingURL=_merge-context.d.ts.map
@@ -1 +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"}
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;;;;;;;;GAQG;AACH,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"}
@@ -1,3 +1,12 @@
1
+ /**
2
+ * 2 つの Context オブジェクトを結合します。
3
+ *
4
+ * 基本となる Context に対して、追加または上書きするコンテキスト情報を結合し、新しい Context オブジェクトを生成して返します。追加するコンテキスト情報が配列(キーと値のペアの配列)である場合は、オブジェクトに変換した上で結合処理を行います。
5
+ *
6
+ * @param a ベースとなる読み取り専用の Context オブジェクトです。
7
+ * @param b 結合する読み取り専用の Context、または ContextSource、あるいは undefined です。
8
+ * @returns 結合された新しい Context オブジェクトです。
9
+ */
1
10
  export default function mergeContext(a, b) {
2
11
  return { ...a, ...(Array.isArray(b) ? Object.fromEntries(b) : b) };
3
12
  }
@@ -1,17 +1,18 @@
1
- import type { Context, IReadableStream, IStorage, IWritableStream } from "@unikvs/core";
1
+ import type { Context, IStorage, IReadableStream, IWritableStream } from "@unikvs/core";
2
2
  import { type PluginOperationAggregateError } from "./errors.js";
3
3
  export default class UniKvsStorage {
4
4
  private readonly io;
5
+ private managed;
5
6
  constructor(io: IStorage);
6
7
  open(context: Context, signal: AbortSignal): Promise<void>;
7
8
  close(context: Context, signal: AbortSignal): Promise<void>;
8
- onOtherWriteError(context: Context, signal: AbortSignal, key: IStorage.Key, error: PluginOperationAggregateError): Promise<void>;
9
9
  write(context: Context, signal: AbortSignal, key: IStorage.Key, data: unknown): Promise<void>;
10
10
  read(context: Context, signal: AbortSignal, key: IStorage.Key): Promise<unknown>;
11
11
  exists(context: Context, signal: AbortSignal, key: IStorage.Key): Promise<boolean>;
12
12
  delete(context: Context, signal: AbortSignal, key: IStorage.Key): Promise<void>;
13
13
  clear(context: Context, signal: AbortSignal): Promise<void>;
14
- getWritable(context: Context, signal: AbortSignal, key: IStorage.Key): Promise<IWritableStream>;
15
14
  getReadable(context: Context, signal: AbortSignal, key: IStorage.Key): Promise<IReadableStream>;
15
+ getWritable(context: Context, signal: AbortSignal, key: IStorage.Key): Promise<IWritableStream>;
16
+ onOtherWriteError(context: Context, signal: AbortSignal, key: IStorage.Key, err: PluginOperationAggregateError): Promise<void>;
16
17
  }
17
18
  //# sourceMappingURL=_storage.d.ts.map
@@ -1 +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,MAAM,cAAc,CAAC;AAGxF,OAAO,EACL,KAAK,6BAA6B,EAInC,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,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,QAAQ,CAAC,GAAG,EACjB,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,IAAI,CAAC;IAiBH,KAAK,CAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,QAAQ,CAAC,GAAG,EACjB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,IAAI,CAAC;IAQH,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhF,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAWlF,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/E,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,QAAQ,CAAC,GAAG,GAChB,OAAO,CAAC,eAAe,CAAC;IAed,WAAW,CACtB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,QAAQ,CAAC,GAAG,GAChB,OAAO,CAAC,eAAe,CAAC;CAc5B"}
1
+ {"version":3,"file":"_storage.d.ts","sourceRoot":"","sources":["../../src/_storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAa,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGnG,OAAO,EACL,KAAK,6BAA6B,EAInC,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAE9B,OAAO,CAAC,OAAO,CAAU;gBAEN,EAAE,EAAE,QAAQ;IAKlB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1D,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D,KAAK,CAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,QAAQ,CAAC,GAAG,EACjB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,IAAI,CAAC;IAQH,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhF,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAWlF,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/E,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,QAAQ,CAAC,GAAG,GAChB,OAAO,CAAC,eAAe,CAAC;IAed,WAAW,CACtB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,QAAQ,CAAC,GAAG,GAChB,OAAO,CAAC,eAAe,CAAC;IAed,iBAAiB,CAC5B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,QAAQ,CAAC,GAAG,EACjB,GAAG,EAAE,6BAA6B,GACjC,OAAO,CAAC,IAAI,CAAC;CAuBjB"}
@@ -1,14 +1,16 @@
1
1
  import * as v from "./_valibot.js";
2
- import { ReadableStreamNotSupportedError, StorageIsNotOpenError, WritableStreamNotSupportedError, } from "./errors.js";
2
+ import { StorageIsNotOpenError, ReadableStreamNotSupportedError, WritableStreamNotSupportedError, } from "./errors.js";
3
3
  export default class UniKvsStorage {
4
4
  constructor(io) {
5
5
  this.io = io;
6
+ this.managed = false;
6
7
  }
7
8
  async open(context, signal) {
8
9
  if (typeof this.io.open !== "function") {
9
10
  return;
10
11
  }
11
12
  if (!this.io.isOpen) {
13
+ this.managed = true;
12
14
  await this.io.open({ signal, context });
13
15
  }
14
16
  }
@@ -16,24 +18,10 @@ export default class UniKvsStorage {
16
18
  if (typeof this.io.close !== "function") {
17
19
  return;
18
20
  }
19
- if (this.io.isOpen) {
21
+ if (this.io.isOpen && this.managed) {
20
22
  await this.io.close({ signal, context });
21
23
  }
22
24
  }
23
- async onOtherWriteError(context, signal, key, error) {
24
- if (!this.io.isOpen) {
25
- throw new StorageIsNotOpenError({ name: this.io.name });
26
- }
27
- if (typeof this.io.onOtherWriteError !== "function") {
28
- return;
29
- }
30
- await this.io.onOtherWriteError({
31
- key,
32
- error: error,
33
- signal,
34
- context,
35
- });
36
- }
37
25
  async write(context, signal, key, data) {
38
26
  if (!this.io.isOpen) {
39
27
  throw new StorageIsNotOpenError({ name: this.io.name });
@@ -67,6 +55,17 @@ export default class UniKvsStorage {
67
55
  }
68
56
  await this.io.clear({ signal, context });
69
57
  }
58
+ async getReadable(context, signal, key) {
59
+ if (!this.io.isOpen) {
60
+ throw new StorageIsNotOpenError({ name: this.io.name });
61
+ }
62
+ if (typeof this.io.getReadable !== "function") {
63
+ throw new ReadableStreamNotSupportedError({ name: this.io.name });
64
+ }
65
+ const output = await this.io.getReadable({ key, signal, context });
66
+ const parsed = v.parseOutput(v.instance(ReadableStream), output);
67
+ return parsed;
68
+ }
70
69
  async getWritable(context, signal, key) {
71
70
  if (!this.io.isOpen) {
72
71
  throw new StorageIsNotOpenError({ name: this.io.name });
@@ -78,15 +77,18 @@ export default class UniKvsStorage {
78
77
  const parsed = v.parseOutput(v.instance(WritableStream), output);
79
78
  return parsed;
80
79
  }
81
- async getReadable(context, signal, key) {
80
+ async onOtherWriteError(context, signal, key, err) {
82
81
  if (!this.io.isOpen) {
83
82
  throw new StorageIsNotOpenError({ name: this.io.name });
84
83
  }
85
- if (typeof this.io.getReadable !== "function") {
86
- throw new ReadableStreamNotSupportedError({ name: this.io.name });
84
+ if (typeof this.io.onOtherWriteError !== "function") {
85
+ return;
87
86
  }
88
- const output = await this.io.getReadable({ key, signal, context });
89
- const parsed = v.parseOutput(v.instance(ReadableStream), output);
90
- return parsed;
87
+ await this.io.onOtherWriteError({
88
+ key,
89
+ error: err,
90
+ signal,
91
+ context,
92
+ });
91
93
  }
92
94
  }
@@ -1 +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"}
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,CA0DhB"}
@@ -10,13 +10,24 @@ import logger from "./_logger.js";
10
10
  */
11
11
  export default function toValueStream(readableStream, onAsyncDispose) {
12
12
  const cacheMap = new Map();
13
- async function handleDispose() {
13
+ async function disposeValueStream() {
14
14
  await callAsyncableFnOnce(cacheMap, "dispose", onAsyncDispose);
15
15
  }
16
- // 既存のストリームに対して Symbol.asyncIterator を動的に割り当てて返します。
17
- return Object.assign(readableStream.pipeThrough(new TransformStream({ flush: handleDispose })), {
18
- dispose: handleDispose,
19
- [Symbol.asyncDispose]: handleDispose,
16
+ return Object.assign(
17
+ // ReadableStream
18
+ readableStream.pipeThrough(new TransformStream({
19
+ flush: disposeValueStream,
20
+ })),
21
+ // AsyncDisposable
22
+ {
23
+ [Symbol.asyncDispose]: disposeValueStream,
24
+ },
25
+ // { dispose(): Promise<void> }
26
+ {
27
+ dispose: disposeValueStream,
28
+ },
29
+ // AsyncIterable<T, void, unknown>
30
+ {
20
31
  async *[Symbol.asyncIterator]() {
21
32
  const r = this.getReader();
22
33
  try {
@@ -1,6 +1,7 @@
1
1
  import type { Context, IDecodable, ITransformer, IEncodable } from "@unikvs/core";
2
2
  export default class UniKvsTransformer {
3
3
  private readonly tf;
4
+ private managed;
4
5
  constructor(tf: ITransformer);
5
6
  open(context: Context, signal: AbortSignal): Promise<void>;
6
7
  close(context: Context, signal: AbortSignal): Promise<void>;
@@ -1 +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,OAAO,CAAC;IAU1E,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1E,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAexE,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CActF"}
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;IAElC,OAAO,CAAC,OAAO,CAAU;gBAEN,EAAE,EAAE,YAAY;IAKtB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1D,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,OAAO,CAAC;IAU1E,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1E,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAexE,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CActF"}
@@ -2,12 +2,14 @@ import { DecodableStreamNotSupportedError, EncodableStreamNotSupportedError, Tra
2
2
  export default class UniKvsTransformer {
3
3
  constructor(tf) {
4
4
  this.tf = tf;
5
+ this.managed = false;
5
6
  }
6
7
  async open(context, signal) {
7
8
  if (typeof this.tf.open !== "function") {
8
9
  return;
9
10
  }
10
11
  if (!this.tf.isOpen) {
12
+ this.managed = true;
11
13
  await this.tf.open({ signal, context });
12
14
  }
13
15
  }
@@ -15,7 +17,7 @@ export default class UniKvsTransformer {
15
17
  if (typeof this.tf.close !== "function") {
16
18
  return;
17
19
  }
18
- if (this.tf.isOpen) {
20
+ if (this.tf.isOpen && this.managed) {
19
21
  await this.tf.close({ signal, context });
20
22
  }
21
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"_valibot.d.ts","sourceRoot":"","sources":["../../src/_valibot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEtD,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAErF,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,WAAW,0BAA0B;IACzC,KAAK,IAAI,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC;CAClE;AAED,wBAAgB,UAAU,CAAC,KAAK,CAAC,OAAO,SAAS,UAAU,EACzD,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,OAAO,EACd,KAAK,GAAE,0BAA8C,GACpD,WAAW,CAAC,OAAO,CAAC,CAStB;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC;CACnE;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,OAAO,SAAS,UAAU,EAC1D,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,OAAO,EACd,KAAK,GAAE,2BAAgD,GACtD,WAAW,CAAC,OAAO,CAAC,CAStB"}
1
+ {"version":3,"file":"_valibot.d.ts","sourceRoot":"","sources":["../../src/_valibot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEtD,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAG5B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAErF,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,WAAW,0BAA0B;IACzC,KAAK,IAAI,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC;CAClE;AAED,wBAAgB,UAAU,CAAC,KAAK,CAAC,OAAO,SAAS,UAAU,EACzD,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,OAAO,EACd,KAAK,GAAE,0BAA8C,GACpD,WAAW,CAAC,OAAO,CAAC,CAStB;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC;CACnE;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,OAAO,SAAS,UAAU,EAC1D,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,OAAO,EACd,KAAK,GAAE,2BAAgD,GACtD,WAAW,CAAC,OAAO,CAAC,CAStB"}
@@ -3,7 +3,7 @@ import UniKvsStorage from "./_storage.js";
3
3
  import UniKvsTransformer from "./_transformer.js";
4
4
  import * as v from "./_valibot.js";
5
5
  import type { ContextSource } from "./context.types.js";
6
- import { type $InferPlainValueData, type $InferStreamValueChunkData, type IUniKvsConfigBuilder, type KeyofKeyValueMapping, type KeyValueMapping, type PlainValue, type StreamValue, type Value } from "./unikvs-config.js";
6
+ import { type Value, type PlainValue, type StreamValue, type KeyValueMapping, type $InferPlainValueData, type IUniKvsConfigBuilder, type KeyofKeyValueMapping, type $InferStreamValueChunkData } from "./unikvs-config.js";
7
7
  import type { ValueOf } from "./utils.types.js";
8
8
  import type { ValueStream } from "./value-stream.types.js";
9
9
  /**
@@ -253,16 +253,6 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
253
253
  */
254
254
  close(options?: CloseOptions): Promise<void>;
255
255
  [Symbol.asyncDispose](): Promise<void>;
256
- /**
257
- * 指定したキーに値を保存します。
258
- *
259
- * @template TKey 対象キーの型定義です。
260
- * @param key 操作対象を識別するためのキーです。
261
- * @param value 保存する値です。
262
- * @param options 追加のオプションです。
263
- * @returns 完了を通知する Promise です。
264
- */
265
- set<const TKey extends KeyofKeyValueMapping<TKeyValueMapping>>(key: TKey, value: SetValue<TKeyValueMapping[TKey]>, options?: Omit<SetOptions, "key" | "value">): Promise<void>;
266
256
  /**
267
257
  * 指定したオプションで値を保存します。
268
258
  *
@@ -272,14 +262,15 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
272
262
  */
273
263
  set<const TKey extends KeyofKeyValueMapping<TKeyValueMapping>>(options: SetOptions<TKeyValueMapping, TKey>): Promise<void>;
274
264
  /**
275
- * 指定したキーから値を取得します。
265
+ * 指定したキーに値を保存します。
276
266
  *
277
267
  * @template TKey 対象キーの型定義です。
278
268
  * @param key 操作対象を識別するためのキーです。
269
+ * @param value 保存する値です。
279
270
  * @param options 追加のオプションです。
280
- * @returns 取得した値を返します。
271
+ * @returns 完了を通知する Promise です。
281
272
  */
282
- get<const TKey extends KeyofKeyValueMappingHasPlainValue<TKeyValueMapping>>(key: TKey, options?: Omit<GetOptions, "key">): Promise<$InferPlainValueData<TKeyValueMapping[TKey]>>;
273
+ set<const TKey extends KeyofKeyValueMapping<TKeyValueMapping>>(key: TKey, value: SetValue<TKeyValueMapping[TKey]>, options?: Omit<SetOptions, "key" | "value">): Promise<void>;
283
274
  /**
284
275
  * 指定したオプションで値を取得します。
285
276
  *
@@ -289,14 +280,14 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
289
280
  */
290
281
  get<const TKey extends KeyofKeyValueMappingHasPlainValue<TKeyValueMapping>>(options: GetOptions<TKey>): Promise<$InferPlainValueData<TKeyValueMapping[TKey]>>;
291
282
  /**
292
- * 指定したキーからストリームを取得します。
283
+ * 指定したキーから値を取得します。
293
284
  *
294
285
  * @template TKey 対象キーの型定義です。
295
286
  * @param key 操作対象を識別するためのキーです。
296
287
  * @param options 追加のオプションです。
297
- * @returns 取得したストリームを返します。
288
+ * @returns 取得した値を返します。
298
289
  */
299
- stream<const TKey extends KeyofKeyValueMappingHasStreamValue<TKeyValueMapping>>(key: TKey, options?: Omit<StreamOptions, "key">): Promise<ValueStream<$InferStreamValueChunkData<TKeyValueMapping[TKey]>>>;
290
+ get<const TKey extends KeyofKeyValueMappingHasPlainValue<TKeyValueMapping>>(key: TKey, options?: Omit<GetOptions, "key">): Promise<$InferPlainValueData<TKeyValueMapping[TKey]>>;
300
291
  /**
301
292
  * 指定したオプションでストリームを取得します。
302
293
  *
@@ -306,13 +297,14 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
306
297
  */
307
298
  stream<const TKey extends KeyofKeyValueMappingHasStreamValue<TKeyValueMapping>>(options: StreamOptions<TKey>): Promise<ValueStream<$InferStreamValueChunkData<TKeyValueMapping[TKey]>>>;
308
299
  /**
309
- * 指定したキーが存在するかを確認します。
300
+ * 指定したキーからストリームを取得します。
310
301
  *
302
+ * @template TKey 対象キーの型定義です。
311
303
  * @param key 操作対象を識別するためのキーです。
312
304
  * @param options 追加のオプションです。
313
- * @returns 存在する場合は true、そうでない場合は false を返します。
305
+ * @returns 取得したストリームを返します。
314
306
  */
315
- has(key: KeyofKeyValueMapping<TKeyValueMapping>, options?: Omit<HasOptions, "key">): Promise<boolean>;
307
+ stream<const TKey extends KeyofKeyValueMappingHasStreamValue<TKeyValueMapping>>(key: TKey, options?: Omit<StreamOptions, "key">): Promise<ValueStream<$InferStreamValueChunkData<TKeyValueMapping[TKey]>>>;
316
308
  /**
317
309
  * 指定したオプションでキーの存在を確認します。
318
310
  *
@@ -321,13 +313,13 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
321
313
  */
322
314
  has(options: HasOptions<KeyofKeyValueMapping<TKeyValueMapping>>): Promise<boolean>;
323
315
  /**
324
- * 指定したキーを削除します。
316
+ * 指定したキーが存在するかを確認します。
325
317
  *
326
318
  * @param key 操作対象を識別するためのキーです。
327
319
  * @param options 追加のオプションです。
328
- * @returns 完了を通知する Promise です。
320
+ * @returns 存在する場合は true、そうでない場合は false を返します。
329
321
  */
330
- delete(key: KeyofKeyValueMapping<TKeyValueMapping>, options?: Omit<DeleteOptions, "key">): Promise<void>;
322
+ has(key: KeyofKeyValueMapping<TKeyValueMapping>, options?: Omit<HasOptions, "key">): Promise<boolean>;
331
323
  /**
332
324
  * 指定したオプションでキーを削除します。
333
325
  *
@@ -335,6 +327,14 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
335
327
  * @returns 完了を通知する Promise です。
336
328
  */
337
329
  delete(options: DeleteOptions<KeyofKeyValueMapping<TKeyValueMapping>>): Promise<void>;
330
+ /**
331
+ * 指定したキーを削除します。
332
+ *
333
+ * @param key 操作対象を識別するためのキーです。
334
+ * @param options 追加のオプションです。
335
+ * @returns 完了を通知する Promise です。
336
+ */
337
+ delete(key: KeyofKeyValueMapping<TKeyValueMapping>, options?: Omit<DeleteOptions, "key">): Promise<void>;
338
338
  /**
339
339
  * すべてのストレージ内のデータを全削除します。
340
340
  *
@@ -1 +1 @@
1
- {"version":3,"file":"unikvs.d.ts","sourceRoot":"","sources":["../../src/unikvs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unikvs.d.ts","sourceRoot":"","sources":["../../src/unikvs.ts"],"names":[],"mappings":"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"}
@@ -10,13 +10,13 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
12
  var _UniKvs_instances, _UniKvs_con, _UniKvs_acSet, _UniKvs_context, _UniKvs_destinations, _UniKvs_transformers, _UniKvs_close;
13
+ import { combineSignals } from "abort-signal-utils";
13
14
  import { asyncmux, Asyncmux } from "asyncmux";
14
- import combineSignals from "./_combine-signals.js";
15
15
  import logger from "./_logger.js";
16
16
  import mergeContext from "./_merge-context.js";
17
17
  import toValueStream from "./_to-value-stream.js";
18
18
  import * as v from "./_valibot.js";
19
- import { KeyNotFoundError, PluginOperationAggregateError, UniKvsIsNotOpenError, UniKvsIsOpenError, } from "./errors.js";
19
+ import { KeyNotFoundError, UniKvsIsOpenError, PluginOperationAggregateError, UniKvsIsNotOpenError, } from "./errors.js";
20
20
  import UniKvsConfig from "./unikvs-config.js";
21
21
  // -------------------------------------------------------------------------------------------------
22
22
  //
@@ -122,10 +122,9 @@ const ClearArgsSchema = v.tuple([v.optional(ClearOptionsSchema)]);
122
122
  const ioLockRegistry = typeof FinalizationRegistry !== "function"
123
123
  ? null
124
124
  : new FinalizationRegistry((lock) => {
125
- try {
125
+ if (!lock.released) {
126
126
  lock.release();
127
127
  }
128
- catch { }
129
128
  });
130
129
  /**
131
130
  * UniKvs メインクラスです。
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @template T ストリームを流れるデータの型です。
7
7
  */
8
- export interface ValueStream<T = any> extends Omit<ReadableStream, keyof AsyncDisposable | keyof AsyncIteratorObject<T>>, AsyncDisposable, AsyncIteratorObject<T, void, void> {
8
+ export interface ValueStream<T = any> extends Omit<ReadableStream, keyof AsyncDisposable | keyof AsyncIterable<unknown>>, AsyncDisposable, AsyncIterable<T, void, unknown> {
9
9
  dispose(): Promise<void>;
10
10
  }
11
11
  //# sourceMappingURL=value-stream.types.d.ts.map
@@ -1 +1 @@
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,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAC1E,eAAe,EACf,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IACpC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
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,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unikvs",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "",
5
5
  "homepage": "https://github.com/tai-kun/unikvs",
6
6
  "license": "MIT",
@@ -25,28 +25,29 @@
25
25
  }
26
26
  },
27
27
  "dependencies": {
28
- "@tai-kun/valibot-extra-lab": "^0.0.4",
29
- "@unikvs/core": "0.0.6",
28
+ "@tai-kun/valibot-extra-lab": "^0.0.5",
29
+ "@unikvs/core": "0.0.8",
30
+ "abort-signal-utils": "^0.0.2",
30
31
  "asyncmux": "^0.0.8",
31
- "call-fn-once": "^0.0.4",
32
+ "call-fn-once": "^0.0.6",
32
33
  "try-capture-stack-trace": "^0.0.3"
33
34
  },
34
35
  "devDependencies": {
35
36
  "@tsconfig/node24": "^24.0.4",
36
37
  "@tsconfig/strictest": "^2.0.8",
37
- "@types/node": "^24.12.2",
38
- "@unikvs/checksum": "0.0.6",
39
- "@unikvs/compression": "0.0.6",
40
- "@unikvs/fs.node": "0.0.6",
41
- "@unikvs/memory": "0.0.6",
42
- "@unikvs/opfs": "0.0.6",
43
- "@unikvs/utils": "0.0.6",
44
- "@vitest/browser": "^4.1.5",
45
- "@vitest/browser-playwright": "^4.1.5",
38
+ "@types/node": "^24.12.4",
39
+ "@unikvs/checksum": "0.0.8",
40
+ "@unikvs/compression": "0.0.8",
41
+ "@unikvs/fs.node": "0.0.8",
42
+ "@unikvs/memory": "0.0.8",
43
+ "@unikvs/opfs": "0.0.8",
44
+ "@unikvs/utils": "0.0.8",
45
+ "@vitest/browser": "^4.1.6",
46
+ "@vitest/browser-playwright": "^4.1.6",
46
47
  "npm-check-updates": "^20.0.2",
47
- "playwright": "^1.59.1",
48
- "vite": "^8.0.10",
49
- "vitest": "^4.1.5"
48
+ "playwright": "^1.60.0",
49
+ "vite": "^8.0.12",
50
+ "vitest": "^4.1.6"
50
51
  },
51
52
  "peerDependencies": {
52
53
  "@logtape/logtape": "^2.0.0",
@@ -2,6 +2,15 @@ import { Context } from "@unikvs/core";
2
2
 
3
3
  import type { ContextSource } from "./context.types.js";
4
4
 
5
+ /**
6
+ * 2 つの Context オブジェクトを結合します。
7
+ *
8
+ * 基本となる Context に対して、追加または上書きするコンテキスト情報を結合し、新しい Context オブジェクトを生成して返します。追加するコンテキスト情報が配列(キーと値のペアの配列)である場合は、オブジェクトに変換した上で結合処理を行います。
9
+ *
10
+ * @param a ベースとなる読み取り専用の Context オブジェクトです。
11
+ * @param b 結合する読み取り専用の Context、または ContextSource、あるいは undefined です。
12
+ * @returns 結合された新しい Context オブジェクトです。
13
+ */
5
14
  export default function mergeContext(
6
15
  a: Readonly<Context>,
7
16
  b: Readonly<Context> | ContextSource | undefined,
package/src/_storage.ts CHANGED
@@ -1,18 +1,21 @@
1
- import type { Context, IReadableStream, IStorage, IWritableStream } from "@unikvs/core";
1
+ import type { Context, IStorage, ErrorBase, IReadableStream, IWritableStream } from "@unikvs/core";
2
2
 
3
3
  import * as v from "./_valibot.js";
4
4
  import {
5
5
  type PluginOperationAggregateError,
6
- ReadableStreamNotSupportedError,
7
6
  StorageIsNotOpenError,
7
+ ReadableStreamNotSupportedError,
8
8
  WritableStreamNotSupportedError,
9
9
  } from "./errors.js";
10
10
 
11
11
  export default class UniKvsStorage {
12
12
  private readonly io: IStorage;
13
13
 
14
+ private managed: boolean;
15
+
14
16
  public constructor(io: IStorage) {
15
17
  this.io = io;
18
+ this.managed = false;
16
19
  }
17
20
 
18
21
  public async open(context: Context, signal: AbortSignal): Promise<void> {
@@ -21,6 +24,7 @@ export default class UniKvsStorage {
21
24
  }
22
25
 
23
26
  if (!this.io.isOpen) {
27
+ this.managed = true;
24
28
  await this.io.open({ signal, context });
25
29
  }
26
30
  }
@@ -30,33 +34,11 @@ export default class UniKvsStorage {
30
34
  return;
31
35
  }
32
36
 
33
- if (this.io.isOpen) {
37
+ if (this.io.isOpen && this.managed) {
34
38
  await this.io.close({ signal, context });
35
39
  }
36
40
  }
37
41
 
38
- public async onOtherWriteError(
39
- context: Context,
40
- signal: AbortSignal,
41
- key: IStorage.Key,
42
- error: PluginOperationAggregateError,
43
- ): Promise<void> {
44
- if (!this.io.isOpen) {
45
- throw new StorageIsNotOpenError({ name: this.io.name });
46
- }
47
-
48
- if (typeof this.io.onOtherWriteError !== "function") {
49
- return;
50
- }
51
-
52
- await this.io.onOtherWriteError({
53
- key,
54
- error: error as any,
55
- signal,
56
- context,
57
- });
58
- }
59
-
60
42
  public async write(
61
43
  context: Context,
62
44
  signal: AbortSignal,
@@ -107,6 +89,25 @@ export default class UniKvsStorage {
107
89
  await this.io.clear({ signal, context });
108
90
  }
109
91
 
92
+ public async getReadable(
93
+ context: Context,
94
+ signal: AbortSignal,
95
+ key: IStorage.Key,
96
+ ): Promise<IReadableStream> {
97
+ if (!this.io.isOpen) {
98
+ throw new StorageIsNotOpenError({ name: this.io.name });
99
+ }
100
+
101
+ if (typeof this.io.getReadable !== "function") {
102
+ throw new ReadableStreamNotSupportedError({ name: this.io.name });
103
+ }
104
+
105
+ const output = await this.io.getReadable({ key, signal, context });
106
+ const parsed = v.parseOutput(v.instance(ReadableStream), output);
107
+
108
+ return parsed;
109
+ }
110
+
110
111
  public async getWritable(
111
112
  context: Context,
112
113
  signal: AbortSignal,
@@ -126,22 +127,32 @@ export default class UniKvsStorage {
126
127
  return parsed;
127
128
  }
128
129
 
129
- public async getReadable(
130
+ public async onOtherWriteError(
130
131
  context: Context,
131
132
  signal: AbortSignal,
132
133
  key: IStorage.Key,
133
- ): Promise<IReadableStream> {
134
+ err: PluginOperationAggregateError,
135
+ ): Promise<void> {
134
136
  if (!this.io.isOpen) {
135
137
  throw new StorageIsNotOpenError({ name: this.io.name });
136
138
  }
137
139
 
138
- if (typeof this.io.getReadable !== "function") {
139
- throw new ReadableStreamNotSupportedError({ name: this.io.name });
140
+ if (typeof this.io.onOtherWriteError !== "function") {
141
+ return;
140
142
  }
141
143
 
142
- const output = await this.io.getReadable({ key, signal, context });
143
- const parsed = v.parseOutput(v.instance(ReadableStream), output);
144
-
145
- return parsed;
144
+ await this.io.onOtherWriteError({
145
+ key,
146
+ error: err as ErrorBase<{
147
+ readonly plugin: "storage";
148
+ readonly action: "write";
149
+ readonly errors: readonly {
150
+ readonly plugin: "storage";
151
+ readonly reason: unknown;
152
+ }[];
153
+ }>,
154
+ signal,
155
+ context,
156
+ });
146
157
  }
147
158
  }
@@ -17,43 +17,60 @@ export default function toValueStream<T>(
17
17
  onAsyncDispose: () => Promise<void>,
18
18
  ): ValueStream<T> {
19
19
  const cacheMap = new Map();
20
- async function handleDispose(): Promise<void> {
20
+ async function disposeValueStream(): Promise<void> {
21
21
  await callAsyncableFnOnce(cacheMap, "dispose", onAsyncDispose);
22
22
  }
23
23
 
24
- // 既存のストリームに対して Symbol.asyncIterator を動的に割り当てて返します。
25
- return Object.assign(readableStream.pipeThrough(new TransformStream({ flush: handleDispose })), {
26
- dispose: handleDispose,
27
- [Symbol.asyncDispose]: handleDispose,
28
- async *[Symbol.asyncIterator](this: IReadableStream<T>) {
29
- const r = this.getReader();
30
- try {
31
- // ストリームが終了するまでループを回し、チャンクを読み取ります。
32
- while (true) {
33
- const { done, value } = await r.read();
34
- if (done) {
35
- break;
36
- }
24
+ return Object.assign(
25
+ // ReadableStream
26
+ readableStream.pipeThrough(
27
+ new TransformStream({
28
+ flush: disposeValueStream,
29
+ }),
30
+ ),
37
31
 
38
- yield value;
39
- }
40
- } catch (ex) {
41
- // エラーが発生した場合は、リーダーのキャンセルを試みます。
42
- try {
43
- await r.cancel(ex);
44
- } catch (ex) {
45
- logger.error`Failed to cancel reader: ${ex}`;
46
- }
32
+ // AsyncDisposable
33
+ {
34
+ [Symbol.asyncDispose]: disposeValueStream,
35
+ },
47
36
 
48
- throw ex;
49
- } finally {
50
- // 最後に必ずリーダーのロックを解放し、ストリームを再利用可能な状態にします。
37
+ // { dispose(): Promise<void> }
38
+ {
39
+ dispose: disposeValueStream,
40
+ },
41
+
42
+ // AsyncIterable<T, void, unknown>
43
+ {
44
+ async *[Symbol.asyncIterator](this: ReadableStream<T>) {
45
+ const r = this.getReader();
51
46
  try {
52
- r.releaseLock();
47
+ // ストリームが終了するまでループを回し、チャンクを読み取ります。
48
+ while (true) {
49
+ const { done, value } = await r.read();
50
+ if (done) {
51
+ break;
52
+ }
53
+
54
+ yield value;
55
+ }
53
56
  } catch (ex) {
54
- logger.error`Failed to release reader's lock: ${ex}`;
57
+ // エラーが発生した場合は、リーダーのキャンセルを試みます。
58
+ try {
59
+ await r.cancel(ex);
60
+ } catch (ex) {
61
+ logger.error`Failed to cancel reader: ${ex}`;
62
+ }
63
+
64
+ throw ex;
65
+ } finally {
66
+ // 最後に必ずリーダーのロックを解放し、ストリームを再利用可能な状態にします。
67
+ try {
68
+ r.releaseLock();
69
+ } catch (ex) {
70
+ logger.error`Failed to release reader's lock: ${ex}`;
71
+ }
55
72
  }
56
- }
73
+ },
57
74
  },
58
- }) as unknown as ValueStream<T>;
75
+ );
59
76
  }
@@ -9,8 +9,11 @@ import {
9
9
  export default class UniKvsTransformer {
10
10
  private readonly tf: ITransformer;
11
11
 
12
+ private managed: boolean;
13
+
12
14
  public constructor(tf: ITransformer) {
13
15
  this.tf = tf;
16
+ this.managed = false;
14
17
  }
15
18
 
16
19
  public async open(context: Context, signal: AbortSignal): Promise<void> {
@@ -19,6 +22,7 @@ export default class UniKvsTransformer {
19
22
  }
20
23
 
21
24
  if (!this.tf.isOpen) {
25
+ this.managed = true;
22
26
  await this.tf.open({ signal, context });
23
27
  }
24
28
  }
@@ -28,7 +32,7 @@ export default class UniKvsTransformer {
28
32
  return;
29
33
  }
30
34
 
31
- if (this.tf.isOpen) {
35
+ if (this.tf.isOpen && this.managed) {
32
36
  await this.tf.close({ signal, context });
33
37
  }
34
38
  }
package/src/_valibot.ts CHANGED
@@ -3,10 +3,10 @@ import { tryCaptureStackTrace } from "try-capture-stack-trace";
3
3
  import { type InferOutput, safeParse } from "valibot";
4
4
 
5
5
  import {
6
- InvalidInputError,
7
- InvalidOutputError,
8
6
  type InvalidInputErrorArgs,
9
7
  type InvalidOutputErrorArgs,
8
+ InvalidInputError,
9
+ InvalidOutputError,
10
10
  } from "./errors.js";
11
11
 
12
12
  export type { InferInput, InferOutput } from "valibot";
package/src/unikvs.ts CHANGED
@@ -1,7 +1,7 @@
1
- import type { Context, IReadableStream, IStorage } from "@unikvs/core";
2
- import { asyncmux, Asyncmux, type AsyncmuxLock } from "asyncmux";
1
+ import type { Context, IStorage, IReadableStream } from "@unikvs/core";
2
+ import { combineSignals } from "abort-signal-utils";
3
+ import { type AsyncmuxLock, asyncmux, Asyncmux } from "asyncmux";
3
4
 
4
- import combineSignals from "./_combine-signals.js";
5
5
  import logger from "./_logger.js";
6
6
  import mergeContext from "./_merge-context.js";
7
7
  import UniKvsStorage from "./_storage.js";
@@ -11,19 +11,19 @@ import * as v from "./_valibot.js";
11
11
  import type { ContextSource } from "./context.types.js";
12
12
  import {
13
13
  KeyNotFoundError,
14
+ UniKvsIsOpenError,
14
15
  PluginOperationAggregateError,
15
16
  UniKvsIsNotOpenError,
16
- UniKvsIsOpenError,
17
17
  } from "./errors.js";
18
18
  import UniKvsConfig, {
19
+ type Value,
20
+ type PlainValue,
21
+ type StreamValue,
22
+ type KeyValueMapping,
19
23
  type $InferPlainValueData,
20
- type $InferStreamValueChunkData,
21
24
  type IUniKvsConfigBuilder,
22
25
  type KeyofKeyValueMapping,
23
- type KeyValueMapping,
24
- type PlainValue,
25
- type StreamValue,
26
- type Value,
26
+ type $InferStreamValueChunkData,
27
27
  } from "./unikvs-config.js";
28
28
  import type { ValueOf } from "./utils.types.js";
29
29
  import type { ValueStream } from "./value-stream.types.js";
@@ -344,13 +344,13 @@ export type ClearOptions = v.InferInput<typeof ClearOptionsSchema>;
344
344
  /**
345
345
  * ストリームの読み取りロックを自動解放するための FinalizationRegistry です。
346
346
  */
347
- const ioLockRegistry: FinalizationRegistry<AsyncmuxLock> | null =
347
+ const ioLockRegistry =
348
348
  typeof FinalizationRegistry !== "function"
349
349
  ? null
350
- : new FinalizationRegistry((lock) => {
351
- try {
350
+ : new FinalizationRegistry<AsyncmuxLock>((lock) => {
351
+ if (!lock.released) {
352
352
  lock.release();
353
- } catch {}
353
+ }
354
354
  });
355
355
 
356
356
  /**
@@ -676,29 +676,29 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
676
676
  }
677
677
 
678
678
  /**
679
- * 指定したキーに値を保存します。
679
+ * 指定したオプションで値を保存します。
680
680
  *
681
681
  * @template TKey 対象キーの型定義です。
682
- * @param key 操作対象を識別するためのキーです。
683
- * @param value 保存する値です。
684
- * @param options 追加のオプションです。
682
+ * @param options セット操作のオプション一式です。
685
683
  * @returns 完了を通知する Promise です。
686
684
  */
687
685
  public set<const TKey extends KeyofKeyValueMapping<TKeyValueMapping>>(
688
- key: TKey,
689
- value: SetValue<TKeyValueMapping[TKey]>,
690
- options?: Omit<SetOptions, "key" | "value">,
686
+ options: SetOptions<TKeyValueMapping, TKey>,
691
687
  ): Promise<void>;
692
688
 
693
689
  /**
694
- * 指定したオプションで値を保存します。
690
+ * 指定したキーに値を保存します。
695
691
  *
696
692
  * @template TKey 対象キーの型定義です。
697
- * @param options セット操作のオプション一式です。
693
+ * @param key 操作対象を識別するためのキーです。
694
+ * @param value 保存する値です。
695
+ * @param options 追加のオプションです。
698
696
  * @returns 完了を通知する Promise です。
699
697
  */
700
698
  public set<const TKey extends KeyofKeyValueMapping<TKeyValueMapping>>(
701
- options: SetOptions<TKeyValueMapping, TKey>,
699
+ key: TKey,
700
+ value: SetValue<TKeyValueMapping[TKey]>,
701
+ options?: Omit<SetOptions, "key" | "value">,
702
702
  ): Promise<void>;
703
703
 
704
704
  public async set(...args: any): Promise<void> {
@@ -814,27 +814,27 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
814
814
  }
815
815
 
816
816
  /**
817
- * 指定したキーから値を取得します。
817
+ * 指定したオプションで値を取得します。
818
818
  *
819
819
  * @template TKey 対象キーの型定義です。
820
- * @param key 操作対象を識別するためのキーです。
821
- * @param options 追加のオプションです。
820
+ * @param options 取得操作のオプション一式です。
822
821
  * @returns 取得した値を返します。
823
822
  */
824
823
  public get<const TKey extends KeyofKeyValueMappingHasPlainValue<TKeyValueMapping>>(
825
- key: TKey,
826
- options?: Omit<GetOptions, "key">,
824
+ options: GetOptions<TKey>,
827
825
  ): Promise<$InferPlainValueData<TKeyValueMapping[TKey]>>;
828
826
 
829
827
  /**
830
- * 指定したオプションで値を取得します。
828
+ * 指定したキーから値を取得します。
831
829
  *
832
830
  * @template TKey 対象キーの型定義です。
833
- * @param options 取得操作のオプション一式です。
831
+ * @param key 操作対象を識別するためのキーです。
832
+ * @param options 追加のオプションです。
834
833
  * @returns 取得した値を返します。
835
834
  */
836
835
  public get<const TKey extends KeyofKeyValueMappingHasPlainValue<TKeyValueMapping>>(
837
- options: GetOptions<TKey>,
836
+ key: TKey,
837
+ options?: Omit<GetOptions, "key">,
838
838
  ): Promise<$InferPlainValueData<TKeyValueMapping[TKey]>>;
839
839
 
840
840
  public async get(...args: any): Promise<unknown> {
@@ -893,27 +893,27 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
893
893
  }
894
894
 
895
895
  /**
896
- * 指定したキーからストリームを取得します。
896
+ * 指定したオプションでストリームを取得します。
897
897
  *
898
898
  * @template TKey 対象キーの型定義です。
899
- * @param key 操作対象を識別するためのキーです。
900
- * @param options 追加のオプションです。
899
+ * @param options ストリーム取得操作のオプション一式です。
901
900
  * @returns 取得したストリームを返します。
902
901
  */
903
902
  public stream<const TKey extends KeyofKeyValueMappingHasStreamValue<TKeyValueMapping>>(
904
- key: TKey,
905
- options?: Omit<StreamOptions, "key">,
903
+ options: StreamOptions<TKey>,
906
904
  ): Promise<ValueStream<$InferStreamValueChunkData<TKeyValueMapping[TKey]>>>;
907
905
 
908
906
  /**
909
- * 指定したオプションでストリームを取得します。
907
+ * 指定したキーからストリームを取得します。
910
908
  *
911
909
  * @template TKey 対象キーの型定義です。
912
- * @param options ストリーム取得操作のオプション一式です。
910
+ * @param key 操作対象を識別するためのキーです。
911
+ * @param options 追加のオプションです。
913
912
  * @returns 取得したストリームを返します。
914
913
  */
915
914
  public stream<const TKey extends KeyofKeyValueMappingHasStreamValue<TKeyValueMapping>>(
916
- options: StreamOptions<TKey>,
915
+ key: TKey,
916
+ options?: Omit<StreamOptions, "key">,
917
917
  ): Promise<ValueStream<$InferStreamValueChunkData<TKeyValueMapping[TKey]>>>;
918
918
 
919
919
  public async stream(...args: any): Promise<ValueStream> {
@@ -1000,6 +1000,14 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
1000
1000
  }
1001
1001
  }
1002
1002
 
1003
+ /**
1004
+ * 指定したオプションでキーの存在を確認します。
1005
+ *
1006
+ * @param options 存在確認操作のオプションです。
1007
+ * @returns 存在する場合は true、そうでない場合は false を返します。
1008
+ */
1009
+ public has(options: HasOptions<KeyofKeyValueMapping<TKeyValueMapping>>): Promise<boolean>;
1010
+
1003
1011
  /**
1004
1012
  * 指定したキーが存在するかを確認します。
1005
1013
  *
@@ -1012,14 +1020,6 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
1012
1020
  options?: Omit<HasOptions, "key">,
1013
1021
  ): Promise<boolean>;
1014
1022
 
1015
- /**
1016
- * 指定したオプションでキーの存在を確認します。
1017
- *
1018
- * @param options 存在確認操作のオプションです。
1019
- * @returns 存在する場合は true、そうでない場合は false を返します。
1020
- */
1021
- public has(options: HasOptions<KeyofKeyValueMapping<TKeyValueMapping>>): Promise<boolean>;
1022
-
1023
1023
  public async has(...args: any): Promise<boolean> {
1024
1024
  if (this.#con === null) {
1025
1025
  throw new UniKvsIsNotOpenError();
@@ -1060,6 +1060,14 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
1060
1060
  }
1061
1061
  }
1062
1062
 
1063
+ /**
1064
+ * 指定したオプションでキーを削除します。
1065
+ *
1066
+ * @param options 削除操作のオプションです。
1067
+ * @returns 完了を通知する Promise です。
1068
+ */
1069
+ public delete(options: DeleteOptions<KeyofKeyValueMapping<TKeyValueMapping>>): Promise<void>;
1070
+
1063
1071
  /**
1064
1072
  * 指定したキーを削除します。
1065
1073
  *
@@ -1072,14 +1080,6 @@ export default class UniKvs<TKeyValueMapping extends KeyValueMapping = KeyValueM
1072
1080
  options?: Omit<DeleteOptions, "key">,
1073
1081
  ): Promise<void>;
1074
1082
 
1075
- /**
1076
- * 指定したオプションでキーを削除します。
1077
- *
1078
- * @param options 削除操作のオプションです。
1079
- * @returns 完了を通知する Promise です。
1080
- */
1081
- public delete(options: DeleteOptions<KeyofKeyValueMapping<TKeyValueMapping>>): Promise<void>;
1082
-
1083
1083
  public async delete(...args: any): Promise<void> {
1084
1084
  if (this.#con === null) {
1085
1085
  throw new UniKvsIsNotOpenError();
@@ -7,8 +7,8 @@
7
7
  */
8
8
  export interface ValueStream<T = any>
9
9
  extends
10
- Omit<ReadableStream, keyof AsyncDisposable | keyof AsyncIteratorObject<T>>,
10
+ Omit<ReadableStream, keyof AsyncDisposable | keyof AsyncIterable<unknown>>,
11
11
  AsyncDisposable,
12
- AsyncIteratorObject<T, void, void> {
12
+ AsyncIterable<T, void, unknown> {
13
13
  dispose(): Promise<void>;
14
14
  }
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,59 +0,0 @@
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;
@@ -1,67 +0,0 @@
1
- /**
2
- * 複数の AbortSignal を 1 つに結合します。
3
- *
4
- * @param signals 結合対象となる AbortSignal、または null / undefined の配列です。
5
- * @returns 結合された新しい AbortSignal です。
6
- */
7
- let combineSignals: (signals: readonly (AbortSignal | null | undefined)[]) => AbortSignal;
8
-
9
- if ("any" in AbortSignal && typeof AbortSignal.any === "function") {
10
- // AbortSignal.any がネイティブでサポートされている場合はそれを使用します。
11
-
12
- const AbortSignalAny = AbortSignal.any.bind(AbortSignal);
13
- combineSignals = function combineSignals(inputSignals) {
14
- const signals = inputSignals.filter((signal) => signal instanceof AbortSignal);
15
- return AbortSignalAny(signals);
16
- };
17
- } else {
18
- // AbortSignal.any が未実装の環境向けのポリフィル実装です。
19
-
20
- combineSignals = function combineSignals(inputSignals) {
21
- const ac = new AbortController();
22
- const signals: AbortSignal[] = [];
23
- for (const signal of inputSignals) {
24
- if (signal?.aborted) {
25
- // すでに中断されている場合は、その理由(reason)を使用して即座に中断処理を行います。
26
- ac.abort(signal.reason);
27
- return ac.signal;
28
- }
29
-
30
- if (signal instanceof AbortSignal) {
31
- signals.push(signal);
32
- }
33
- }
34
-
35
- /**
36
- * すべての監視対象信号からイベントリスナーを削除するクリーンアップ関数です。
37
- *
38
- * メモリーリークを防ぐために、いずれかの信号が中断された際に実行されます。
39
- */
40
- function cleanup(): void {
41
- for (const signal of signals) {
42
- signal.removeEventListener("abort", handleAbort);
43
- }
44
- }
45
-
46
- /**
47
- * いずれかの信号が abort イベントを発火させた際に呼び出されるハンドラーです。
48
- *
49
- * @this AbortSignal 中断を検知した AbortSignal インスタンス自身を指します。
50
- */
51
- function handleAbort(this: AbortSignal): void {
52
- // 親のコントローラーに対して、検知した信号の理由を添えて中断を指示します。
53
- ac.abort(this.reason);
54
- // 一つの信号が中断されれば他の監視は不要になるため、クリーンアップを呼び出します。
55
- cleanup();
56
- }
57
-
58
- // すべての有効な信号に対して、中断イベントを監視するリスナーを登録します。
59
- for (const signal of signals) {
60
- signal.addEventListener("abort", handleAbort, { once: true });
61
- }
62
-
63
- return ac.signal;
64
- };
65
- }
66
-
67
- export default combineSignals;