diff --git a/.changeset/brown-badgers-stare.md b/.changeset/brown-badgers-stare.md new file mode 100644 index 00000000..c888fac1 --- /dev/null +++ b/.changeset/brown-badgers-stare.md @@ -0,0 +1,5 @@ +--- +"@yume-chan/scrcpy-decoder-tinyh264": patch +--- + +Add support for rendering into `OffscreenCanvas` diff --git a/.changeset/eighty-spies-run.md b/.changeset/eighty-spies-run.md new file mode 100644 index 00000000..af45a5f3 --- /dev/null +++ b/.changeset/eighty-spies-run.md @@ -0,0 +1,8 @@ +--- +"@yume-chan/adb": patch +"@yume-chan/adb-scrcpy": patch +"@yume-chan/scrcpy": patch +"@yume-chan/struct": patch +--- + +Rewrite the struct API completely diff --git a/.changeset/fifty-knives-hunt.md b/.changeset/fifty-knives-hunt.md new file mode 100644 index 00000000..15c9774b --- /dev/null +++ b/.changeset/fifty-knives-hunt.md @@ -0,0 +1,5 @@ +--- +"@yume-chan/adb-daemon-webusb": patch +--- + +Accept standard `USBDeviceFilter` type and fill in default interface filters automatically diff --git a/.changeset/fifty-points-protect.md b/.changeset/fifty-points-protect.md new file mode 100644 index 00000000..b71c1e57 --- /dev/null +++ b/.changeset/fifty-points-protect.md @@ -0,0 +1,6 @@ +--- +"@yume-chan/adb": patch +"@yume-chan/adb-credential-web": patch +--- + +Add common interface for device observers diff --git a/.changeset/four-pets-shave.md b/.changeset/four-pets-shave.md new file mode 100644 index 00000000..8f20675f --- /dev/null +++ b/.changeset/four-pets-shave.md @@ -0,0 +1,5 @@ +--- +"@yume-chan/scrcpy-decoder-webcodecs": patch +--- + +Fix H.265 rendering in Microsoft Edge diff --git a/.changeset/gold-dancers-turn.md b/.changeset/gold-dancers-turn.md new file mode 100644 index 00000000..88f27197 --- /dev/null +++ b/.changeset/gold-dancers-turn.md @@ -0,0 +1,5 @@ +--- +"@yume-chan/adb-daemon-webusb": patch +--- + +Throw `DeviceBusyError` when interface can't be claimed diff --git a/.changeset/slow-dodos-train.md b/.changeset/slow-dodos-train.md new file mode 100644 index 00000000..20608aa1 --- /dev/null +++ b/.changeset/slow-dodos-train.md @@ -0,0 +1,7 @@ +--- +"@yume-chan/adb": patch +"@yume-chan/scrcpy": patch +"@yume-chan/struct": patch +--- + +Improve tree-shaking by removing TypeScript enum and namespace diff --git a/.changeset/twelve-rivers-remain.md b/.changeset/twelve-rivers-remain.md new file mode 100644 index 00000000..97c58bfe --- /dev/null +++ b/.changeset/twelve-rivers-remain.md @@ -0,0 +1,5 @@ +--- +"@yume-chan/scrcpy-decoder-webcodecs": patch +--- + +Add a `snapshot` method to convert the last rendered frame into PNG diff --git a/.changeset/wicked-llamas-lick.md b/.changeset/wicked-llamas-lick.md new file mode 100644 index 00000000..a2c320d0 --- /dev/null +++ b/.changeset/wicked-llamas-lick.md @@ -0,0 +1,5 @@ +--- +"@yume-chan/adb-scrcpy": patch +--- + +Fix automatically switching to forward tunnel when reverse tunnel is not supported diff --git a/apps/cli/package.json b/apps/cli/package.json index 794e807f..07b0ce92 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -41,7 +41,7 @@ "source-map-support": "^0.5.21" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "@yume-chan/eslint-config": "workspace:^", "@yume-chan/tsconfig": "workspace:^", "prettier": "^3.3.3", diff --git a/libraries/adb-credential-web/tsconfig.build.json b/libraries/adb-credential-web/tsconfig.build.json index 97dd1c7b..46f446da 100644 --- a/libraries/adb-credential-web/tsconfig.build.json +++ b/libraries/adb-credential-web/tsconfig.build.json @@ -5,10 +5,5 @@ "ESNext", "DOM" ] - }, - "references": [ - { - "path": "../adb/tsconfig.build.json" - } - ] + } } diff --git a/libraries/adb-credential-web/tsconfig.json b/libraries/adb-credential-web/tsconfig.json index a96f9b5d..54f9defc 100644 --- a/libraries/adb-credential-web/tsconfig.json +++ b/libraries/adb-credential-web/tsconfig.json @@ -2,6 +2,12 @@ "references": [ { "path": "./tsconfig.build.json" + }, + { + "path": "./tsconfig.test.json" + }, + { + "path": "../adb/tsconfig.build.json" } ] } diff --git a/libraries/adb-daemon-webusb/package.json b/libraries/adb-daemon-webusb/package.json index 6e62edd8..688b6ba2 100644 --- a/libraries/adb-daemon-webusb/package.json +++ b/libraries/adb-daemon-webusb/package.json @@ -39,7 +39,7 @@ "@yume-chan/struct": "workspace:^" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "@yume-chan/eslint-config": "workspace:^", "@yume-chan/test-runner": "workspace:^", "@yume-chan/tsconfig": "workspace:^", diff --git a/libraries/adb-daemon-webusb/src/observer.ts b/libraries/adb-daemon-webusb/src/observer.ts index 266d2827..d597443d 100644 --- a/libraries/adb-daemon-webusb/src/observer.ts +++ b/libraries/adb-daemon-webusb/src/observer.ts @@ -17,17 +17,17 @@ export class AdbDaemonWebUsbDeviceObserver #filters: UsbInterfaceFilter[]; #usbManager: USB; - #deviceAdded = new EventEmitter(); - deviceAdded = this.#deviceAdded.event; + #onError = new EventEmitter(); + onError = this.#onError.event; - #deviceRemoved = new EventEmitter(); - deviceRemoved = this.#deviceRemoved.event; + #onDeviceAdd = new EventEmitter(); + onDeviceAdd = this.#onDeviceAdd.event; - #deviceChanged = new EventEmitter(); - deviceChanged = this.#deviceChanged.event; + #onDeviceRemove = new EventEmitter(); + onDeviceRemove = this.#onDeviceRemove.event; - #listChanged = new EventEmitter(); - listChanged = this.#listChanged.event; + #onListChange = new EventEmitter(); + onListChange = this.#onListChange.event; current: AdbDaemonWebUsbDevice[] = []; @@ -49,9 +49,9 @@ export class AdbDaemonWebUsbDeviceObserver this.#filters, this.#usbManager, ); - this.#deviceAdded.fire([device]); + this.#onDeviceAdd.fire([device]); this.current.push(device); - this.#listChanged.fire(this.current); + this.#onListChange.fire(this.current); }; #handleDisconnect = (e: USBConnectionEvent) => { @@ -60,10 +60,10 @@ export class AdbDaemonWebUsbDeviceObserver ); if (index !== -1) { const device = this.current[index]!; - this.#deviceRemoved.fire([device]); + this.#onDeviceRemove.fire([device]); this.current[index] = this.current[this.current.length - 1]!; this.current.length -= 1; - this.#listChanged.fire(this.current); + this.#onListChange.fire(this.current); } }; diff --git a/libraries/adb-scrcpy/package.json b/libraries/adb-scrcpy/package.json index 6d994c37..53e864f0 100644 --- a/libraries/adb-scrcpy/package.json +++ b/libraries/adb-scrcpy/package.json @@ -33,7 +33,7 @@ }, "dependencies": { "@yume-chan/adb": "workspace:^", - "@yume-chan/async": "^4.0.0", + "@yume-chan/async": "^4.0.2", "@yume-chan/event": "workspace:^", "@yume-chan/scrcpy": "workspace:^", "@yume-chan/stream-extra": "workspace:^", diff --git a/libraries/adb-scrcpy/src/connection.ts b/libraries/adb-scrcpy/src/connection.ts index 60905f7b..3bf20527 100644 --- a/libraries/adb-scrcpy/src/connection.ts +++ b/libraries/adb-scrcpy/src/connection.ts @@ -1,5 +1,6 @@ import type { Adb, AdbSocket } from "@yume-chan/adb"; import { AdbReverseNotSupportedError, NOOP } from "@yume-chan/adb"; +import type { MaybePromiseLike } from "@yume-chan/async"; import { delay } from "@yume-chan/async"; import type { Disposable } from "@yume-chan/event"; import type { @@ -13,7 +14,6 @@ import { BufferedReadableStream, PushReadableStream, } from "@yume-chan/stream-extra"; -import type { MaybePromiseLike } from "@yume-chan/struct"; export interface AdbScrcpyConnectionOptions { scid: number; diff --git a/libraries/adb-server-node-tcp/package.json b/libraries/adb-server-node-tcp/package.json index 750fd7a7..a760f5bc 100644 --- a/libraries/adb-server-node-tcp/package.json +++ b/libraries/adb-server-node-tcp/package.json @@ -33,11 +33,12 @@ }, "dependencies": { "@yume-chan/adb": "workspace:^", + "@yume-chan/async": "^4.0.2", "@yume-chan/stream-extra": "workspace:^", "@yume-chan/struct": "workspace:^" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "@yume-chan/eslint-config": "workspace:^", "@yume-chan/tsconfig": "workspace:^", "prettier": "^3.3.3", diff --git a/libraries/adb-server-node-tcp/src/index.ts b/libraries/adb-server-node-tcp/src/index.ts index 07634c3b..42b514f6 100644 --- a/libraries/adb-server-node-tcp/src/index.ts +++ b/libraries/adb-server-node-tcp/src/index.ts @@ -2,12 +2,12 @@ import type { AddressInfo, SocketConnectOpts } from "net"; import { Server, Socket } from "net"; import type { AdbIncomingSocketHandler, AdbServerClient } from "@yume-chan/adb"; +import type { MaybePromiseLike } from "@yume-chan/async"; import { MaybeConsumable, PushReadableStream, tryClose, } from "@yume-chan/stream-extra"; -import type { MaybePromiseLike } from "@yume-chan/struct"; function nodeSocketToConnection( socket: Socket, diff --git a/libraries/adb/package.json b/libraries/adb/package.json index 51a5bbe0..a2f5be0c 100644 --- a/libraries/adb/package.json +++ b/libraries/adb/package.json @@ -32,14 +32,14 @@ "test": "run-test" }, "dependencies": { - "@yume-chan/async": "^4.0.0", + "@yume-chan/async": "^4.0.2", "@yume-chan/event": "workspace:^", "@yume-chan/no-data-view": "workspace:^", "@yume-chan/stream-extra": "workspace:^", "@yume-chan/struct": "workspace:^" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "@yume-chan/eslint-config": "workspace:^", "@yume-chan/test-runner": "workspace:^", "@yume-chan/tsconfig": "workspace:^", diff --git a/libraries/adb/src/adb.ts b/libraries/adb/src/adb.ts index 4378a1ac..a1fabd4d 100644 --- a/libraries/adb/src/adb.ts +++ b/libraries/adb/src/adb.ts @@ -1,9 +1,9 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import type { MaybeConsumable, ReadableWritablePair, } from "@yume-chan/stream-extra"; import { ConcatStringStream, TextDecoderStream } from "@yume-chan/stream-extra"; -import type { MaybePromiseLike } from "@yume-chan/struct"; import type { AdbBanner } from "./banner.js"; import type { AdbFrameBuffer } from "./commands/index.js"; diff --git a/libraries/adb/src/commands/subprocess/protocols/types.ts b/libraries/adb/src/commands/subprocess/protocols/types.ts index f575449e..6c2e39c2 100644 --- a/libraries/adb/src/commands/subprocess/protocols/types.ts +++ b/libraries/adb/src/commands/subprocess/protocols/types.ts @@ -1,9 +1,9 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import type { MaybeConsumable, ReadableStream, WritableStream, } from "@yume-chan/stream-extra"; -import type { MaybePromiseLike } from "@yume-chan/struct"; import type { Adb, AdbSocket } from "../../../adb.js"; diff --git a/libraries/adb/src/daemon/auth.ts b/libraries/adb/src/daemon/auth.ts index 87d93ddd..202e9135 100644 --- a/libraries/adb/src/daemon/auth.ts +++ b/libraries/adb/src/daemon/auth.ts @@ -1,6 +1,6 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import { PromiseResolver } from "@yume-chan/async"; import type { Disposable } from "@yume-chan/event"; -import type { MaybePromiseLike } from "@yume-chan/struct"; import { EmptyUint8Array } from "@yume-chan/struct"; import { diff --git a/libraries/adb/src/daemon/device.ts b/libraries/adb/src/daemon/device.ts index 23b7e767..9929d071 100644 --- a/libraries/adb/src/daemon/device.ts +++ b/libraries/adb/src/daemon/device.ts @@ -1,5 +1,5 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import type { Consumable, ReadableWritablePair } from "@yume-chan/stream-extra"; -import type { MaybePromiseLike } from "@yume-chan/struct"; import type { AdbPacketData, AdbPacketInit } from "./packet.js"; diff --git a/libraries/adb/src/daemon/transport.ts b/libraries/adb/src/daemon/transport.ts index d6559559..b57796aa 100644 --- a/libraries/adb/src/daemon/transport.ts +++ b/libraries/adb/src/daemon/transport.ts @@ -1,3 +1,4 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import { PromiseResolver } from "@yume-chan/async"; import type { ReadableWritablePair } from "@yume-chan/stream-extra"; import { @@ -5,7 +6,6 @@ import { Consumable, WritableStream, } from "@yume-chan/stream-extra"; -import type { MaybePromiseLike } from "@yume-chan/struct"; import { decodeUtf8, encodeUtf8 } from "@yume-chan/struct"; import type { diff --git a/libraries/adb/src/device-observer.ts b/libraries/adb/src/device-observer.ts index 2fd573c8..201d336f 100644 --- a/libraries/adb/src/device-observer.ts +++ b/libraries/adb/src/device-observer.ts @@ -1,10 +1,11 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import type { Event } from "@yume-chan/event"; -import type { MaybePromiseLike } from "@yume-chan/struct"; export interface DeviceObserver { - deviceAdded: Event; - deviceRemoved: Event; - listChanged: Event; + onError: Event; + onDeviceAdd: Event; + onDeviceRemove: Event; + onListChange: Event; current: T[]; stop(): MaybePromiseLike; } diff --git a/libraries/adb/src/server/client.ts b/libraries/adb/src/server/client.ts index a6cf832d..c8e09ac8 100644 --- a/libraries/adb/src/server/client.ts +++ b/libraries/adb/src/server/client.ts @@ -1,5 +1,6 @@ // cspell:ignore tport +import type { MaybePromiseLike } from "@yume-chan/async"; import { PromiseResolver } from "@yume-chan/async"; import { EventEmitter } from "@yume-chan/event"; import { getUint64LittleEndian } from "@yume-chan/no-data-view"; @@ -14,7 +15,6 @@ import { tryCancel, tryClose, } from "@yume-chan/stream-extra"; -import type { MaybePromiseLike } from "@yume-chan/struct"; import { bipedal, decodeUtf8, @@ -297,46 +297,52 @@ export class AdbServerClient { const connection = await this.createConnection("host:track-devices-l"); let current: AdbServerClient.Device[] = []; - const deviceAddedEvent = new EventEmitter(); - const deviceRemovedEvent = new EventEmitter(); - const listChangedEvent = new EventEmitter(); + const onError = new EventEmitter(); + const onDeviceAdd = new EventEmitter(); + const onDeviceRemove = new EventEmitter(); + const onListChange = new EventEmitter(); void (async () => { - while (true) { - const response = await connection.readString(); - const next = AdbServerClient.parseDeviceList(response); + try { + while (true) { + const response = await connection.readString(); + const next = AdbServerClient.parseDeviceList(response); - const added: AdbServerClient.Device[] = []; - for (const nextDevice of next) { - const index = current.findIndex( - (device) => - device.transportId === nextDevice.transportId, - ); - if (index === -1) { - added.push(nextDevice); - continue; + const added: AdbServerClient.Device[] = []; + for (const nextDevice of next) { + const index = current.findIndex( + (device) => + device.transportId === nextDevice.transportId, + ); + if (index === -1) { + added.push(nextDevice); + continue; + } + + current[index] = current[current.length - 1]!; + current.length -= 1; } - current[index] = current[current.length - 1]!; - current.length -= 1; - } + if (added.length) { + onDeviceAdd.fire(added); + } + if (current.length) { + onDeviceRemove.fire(current); + } - if (added.length) { - deviceAddedEvent.fire(added); + current = next; + onListChange.fire(current); } - if (current.length) { - deviceRemovedEvent.fire(current); - } - - current = next; - listChangedEvent.fire(current); + } catch (e) { + onError.fire(e as Error); } })(); return { - deviceAdded: deviceAddedEvent.event, - deviceRemoved: deviceRemovedEvent.event, - listChanged: listChangedEvent.event, + onError: onError.event, + onDeviceAdd: onDeviceAdd.event, + onDeviceRemove: onDeviceRemove.event, + onListChange: onListChange.event, get current() { return current; }, diff --git a/libraries/adb/src/server/transport.ts b/libraries/adb/src/server/transport.ts index 434d7eb8..c1125f85 100644 --- a/libraries/adb/src/server/transport.ts +++ b/libraries/adb/src/server/transport.ts @@ -1,3 +1,4 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import { PromiseResolver } from "@yume-chan/async"; import { AbortController } from "@yume-chan/stream-extra"; @@ -95,7 +96,7 @@ export class AdbServerTransport implements AdbTransport { await this.#client.connector.clearReverseTunnels(); } - close(): void | Promise { + close(): MaybePromiseLike { this.#closed.resolve(); this.#waitAbortController.abort(); } diff --git a/libraries/android-bin/package.json b/libraries/android-bin/package.json index 11a18a19..25a8e96b 100644 --- a/libraries/android-bin/package.json +++ b/libraries/android-bin/package.json @@ -37,7 +37,7 @@ "@yume-chan/struct": "workspace:^" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "@yume-chan/eslint-config": "workspace:^", "@yume-chan/test-runner": "workspace:^", "@yume-chan/tsconfig": "workspace:^", diff --git a/libraries/event/package.json b/libraries/event/package.json index 466fe669..affef666 100644 --- a/libraries/event/package.json +++ b/libraries/event/package.json @@ -33,10 +33,10 @@ "test": "run-test" }, "dependencies": { - "@yume-chan/async": "^4.0.0" + "@yume-chan/async": "^4.0.2" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "@yume-chan/eslint-config": "workspace:^", "@yume-chan/test-runner": "workspace:^", "@yume-chan/tsconfig": "workspace:^", diff --git a/libraries/fetch-scrcpy-server/package.json b/libraries/fetch-scrcpy-server/package.json index 25e52299..c811c906 100644 --- a/libraries/fetch-scrcpy-server/package.json +++ b/libraries/fetch-scrcpy-server/package.json @@ -31,6 +31,6 @@ "gh-release-fetch": "^4.0.3" }, "devDependencies": { - "@types/node": "^22.9.0" + "@types/node": "^22.9.1" } } diff --git a/libraries/no-data-view/package.json b/libraries/no-data-view/package.json index 5f9e06e5..11b578ca 100644 --- a/libraries/no-data-view/package.json +++ b/libraries/no-data-view/package.json @@ -30,7 +30,7 @@ "test": "run-test" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "@yume-chan/eslint-config": "workspace:^", "@yume-chan/test-runner": "workspace:^", "@yume-chan/tsconfig": "workspace:^", diff --git a/libraries/scrcpy-decoder-tinyh264/package.json b/libraries/scrcpy-decoder-tinyh264/package.json index 1a5c1570..e0272345 100644 --- a/libraries/scrcpy-decoder-tinyh264/package.json +++ b/libraries/scrcpy-decoder-tinyh264/package.json @@ -33,7 +33,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@yume-chan/async": "^4.0.0", + "@yume-chan/async": "^4.0.2", "@yume-chan/event": "workspace:^", "@yume-chan/scrcpy": "workspace:^", "@yume-chan/stream-extra": "workspace:^", diff --git a/libraries/scrcpy-decoder-webcodecs/package.json b/libraries/scrcpy-decoder-webcodecs/package.json index c0c1000f..7197213e 100644 --- a/libraries/scrcpy-decoder-webcodecs/package.json +++ b/libraries/scrcpy-decoder-webcodecs/package.json @@ -33,6 +33,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { + "@yume-chan/async": "^4.0.2", "@yume-chan/event": "workspace:^", "@yume-chan/no-data-view": "workspace:^", "@yume-chan/scrcpy": "workspace:^", diff --git a/libraries/scrcpy-decoder-webcodecs/src/video/render/type.ts b/libraries/scrcpy-decoder-webcodecs/src/video/render/type.ts index c6d18fb8..9f0d33b3 100644 --- a/libraries/scrcpy-decoder-webcodecs/src/video/render/type.ts +++ b/libraries/scrcpy-decoder-webcodecs/src/video/render/type.ts @@ -1,5 +1,7 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; + export interface WebCodecsVideoDecoderRenderer { setSize(width: number, height: number): void; - draw(frame: VideoFrame): Promise; + draw(frame: VideoFrame): MaybePromiseLike; } diff --git a/libraries/scrcpy/package.json b/libraries/scrcpy/package.json index 1371d377..c3058f39 100644 --- a/libraries/scrcpy/package.json +++ b/libraries/scrcpy/package.json @@ -33,13 +33,13 @@ "test": "run-test" }, "dependencies": { - "@yume-chan/async": "^4.0.0", + "@yume-chan/async": "^4.0.2", "@yume-chan/no-data-view": "workspace:^", "@yume-chan/stream-extra": "workspace:^", "@yume-chan/struct": "workspace:^" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "@yume-chan/eslint-config": "workspace:^", "@yume-chan/test-runner": "workspace:^", "@yume-chan/tsconfig": "workspace:^", diff --git a/libraries/scrcpy/src/options/1_16/options.ts b/libraries/scrcpy/src/options/1_16/options.ts index ec06fd81..97a1bb60 100644 --- a/libraries/scrcpy/src/options/1_16/options.ts +++ b/libraries/scrcpy/src/options/1_16/options.ts @@ -1,3 +1,4 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import { getUint16BigEndian, getUint32BigEndian, @@ -12,7 +13,7 @@ import { StructDeserializeStream, TransformStream, } from "@yume-chan/stream-extra"; -import type { AsyncExactReadable, MaybePromiseLike } from "@yume-chan/struct"; +import type { AsyncExactReadable } from "@yume-chan/struct"; import { decodeUtf8 } from "@yume-chan/struct"; import type { diff --git a/libraries/scrcpy/src/options/1_22/options.ts b/libraries/scrcpy/src/options/1_22/options.ts index ab41b90a..b2ac145a 100644 --- a/libraries/scrcpy/src/options/1_22/options.ts +++ b/libraries/scrcpy/src/options/1_22/options.ts @@ -1,5 +1,5 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import type { ReadableStream } from "@yume-chan/stream-extra"; -import type { MaybePromiseLike } from "@yume-chan/struct"; import type { ScrcpyScrollController } from "../1_16/index.js"; import { ScrcpyOptions1_21 } from "../1_21.js"; diff --git a/libraries/scrcpy/src/options/2_0.ts b/libraries/scrcpy/src/options/2_0.ts index 7dfcb85f..e58901e7 100644 --- a/libraries/scrcpy/src/options/2_0.ts +++ b/libraries/scrcpy/src/options/2_0.ts @@ -1,10 +1,11 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import { getUint32BigEndian } from "@yume-chan/no-data-view"; import type { ReadableStream } from "@yume-chan/stream-extra"; import { BufferedReadableStream, PushReadableStream, } from "@yume-chan/stream-extra"; -import type { MaybePromiseLike, StructInit } from "@yume-chan/struct"; +import type { StructInit } from "@yume-chan/struct"; import { struct, u16, u32, u64, u8 } from "@yume-chan/struct"; import type { diff --git a/libraries/scrcpy/src/options/2_3.ts b/libraries/scrcpy/src/options/2_3.ts index 8f51a9c4..215af505 100644 --- a/libraries/scrcpy/src/options/2_3.ts +++ b/libraries/scrcpy/src/options/2_3.ts @@ -1,5 +1,5 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import type { ReadableStream } from "@yume-chan/stream-extra"; -import type { MaybePromiseLike } from "@yume-chan/struct"; import { ScrcpyOptions1_21 } from "./1_21.js"; import { ScrcpyOptions2_0 } from "./2_0.js"; diff --git a/libraries/scrcpy/src/options/types.ts b/libraries/scrcpy/src/options/types.ts index f5de7e9a..ca0b4308 100644 --- a/libraries/scrcpy/src/options/types.ts +++ b/libraries/scrcpy/src/options/types.ts @@ -1,5 +1,6 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import type { ReadableStream, TransformStream } from "@yume-chan/stream-extra"; -import type { AsyncExactReadable, MaybePromiseLike } from "@yume-chan/struct"; +import type { AsyncExactReadable } from "@yume-chan/struct"; import type { ScrcpyBackOrScreenOnControlMessage, diff --git a/libraries/stream-extra/package.json b/libraries/stream-extra/package.json index d2e0ffda..e702b4b9 100644 --- a/libraries/stream-extra/package.json +++ b/libraries/stream-extra/package.json @@ -32,11 +32,11 @@ "test": "run-test" }, "dependencies": { - "@yume-chan/async": "^4.0.0", + "@yume-chan/async": "^4.0.2", "@yume-chan/struct": "workspace:^" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "@yume-chan/eslint-config": "workspace:^", "@yume-chan/test-runner": "workspace:^", "@yume-chan/tsconfig": "workspace:^", diff --git a/libraries/stream-extra/src/buffered-transform.ts b/libraries/stream-extra/src/buffered-transform.ts index 0b59f0eb..df311c61 100644 --- a/libraries/stream-extra/src/buffered-transform.ts +++ b/libraries/stream-extra/src/buffered-transform.ts @@ -1,4 +1,4 @@ -import type { MaybePromiseLike } from "@yume-chan/struct"; +import type { MaybePromiseLike } from "@yume-chan/async"; import { StructEmptyError } from "@yume-chan/struct"; import { BufferedReadableStream } from "./buffered.js"; diff --git a/libraries/stream-extra/src/buffered.ts b/libraries/stream-extra/src/buffered.ts index ee737b65..6a270617 100644 --- a/libraries/stream-extra/src/buffered.ts +++ b/libraries/stream-extra/src/buffered.ts @@ -1,4 +1,5 @@ -import type { AsyncExactReadable, MaybePromiseLike } from "@yume-chan/struct"; +import type { MaybePromiseLike } from "@yume-chan/async"; +import type { AsyncExactReadable } from "@yume-chan/struct"; import { bipedal, ExactReadableEndedError } from "@yume-chan/struct"; import { PushReadableStream } from "./push-readable.js"; diff --git a/libraries/stream-extra/src/consumable.ts b/libraries/stream-extra/src/consumable.ts index 66c04ce0..b91a54b2 100644 --- a/libraries/stream-extra/src/consumable.ts +++ b/libraries/stream-extra/src/consumable.ts @@ -1,4 +1,4 @@ -import { PromiseResolver } from "@yume-chan/async"; +import { PromiseResolver, isPromiseLike } from "@yume-chan/async"; import type { QueuingStrategy, @@ -12,125 +12,122 @@ import { import type { Task } from "./task.js"; import { createTask } from "./task.js"; -function isPromiseLike(value: unknown): value is PromiseLike { - return typeof value === "object" && value !== null && "then" in value; +// Workaround https://github.com/evanw/esbuild/issues/3923 +class WritableStream extends NativeWritableStream> { + static async write( + writer: WritableStreamDefaultWriter>, + value: T, + ) { + const consumable = new Consumable(value); + await writer.write(consumable); + await consumable.consumed; + } + + constructor( + sink: Consumable.WritableStreamSink, + strategy?: QueuingStrategy, + ) { + let wrappedStrategy: QueuingStrategy> | undefined; + if (strategy) { + wrappedStrategy = {}; + if ("highWaterMark" in strategy) { + wrappedStrategy.highWaterMark = strategy.highWaterMark; + } + if ("size" in strategy) { + wrappedStrategy.size = (chunk) => { + return strategy.size!( + chunk instanceof Consumable ? chunk.value : chunk, + ); + }; + } + } + + super( + { + start(controller) { + return sink.start?.(controller); + }, + async write(chunk, controller) { + await chunk.tryConsume((chunk) => + sink.write?.(chunk, controller), + ); + }, + abort(reason) { + return sink.abort?.(reason); + }, + close() { + return sink.close?.(); + }, + }, + wrappedStrategy, + ); + } +} + +class ReadableStream extends NativeReadableStream> { + static async enqueue( + controller: { enqueue: (chunk: Consumable) => void }, + chunk: T, + ) { + const output = new Consumable(chunk); + controller.enqueue(output); + await output.consumed; + } + + constructor( + source: Consumable.ReadableStreamSource, + strategy?: QueuingStrategy, + ) { + let wrappedController: + | Consumable.ReadableStreamController + | undefined; + + let wrappedStrategy: QueuingStrategy> | undefined; + if (strategy) { + wrappedStrategy = {}; + if ("highWaterMark" in strategy) { + wrappedStrategy.highWaterMark = strategy.highWaterMark; + } + if ("size" in strategy) { + wrappedStrategy.size = (chunk) => { + return strategy.size!(chunk.value); + }; + } + } + + super( + { + async start(controller) { + wrappedController = { + async enqueue(chunk) { + await ReadableStream.enqueue(controller, chunk); + }, + close() { + controller.close(); + }, + error(reason) { + controller.error(reason); + }, + }; + + await source.start?.(wrappedController); + }, + async pull() { + await source.pull?.(wrappedController!); + }, + async cancel(reason) { + await source.cancel?.(reason); + }, + }, + wrappedStrategy, + ); + } } export class Consumable { - static readonly WritableStream = class WritableStream< - in T, - > extends NativeWritableStream> { - static async write( - writer: WritableStreamDefaultWriter>, - value: T, - ) { - const consumable = new Consumable(value); - await writer.write(consumable); - await consumable.consumed; - } + static readonly WritableStream = WritableStream; - constructor( - sink: Consumable.WritableStreamSink, - strategy?: QueuingStrategy, - ) { - let wrappedStrategy: QueuingStrategy> | undefined; - if (strategy) { - wrappedStrategy = {}; - if ("highWaterMark" in strategy) { - wrappedStrategy.highWaterMark = strategy.highWaterMark; - } - if ("size" in strategy) { - wrappedStrategy.size = (chunk) => { - return strategy.size!( - chunk instanceof Consumable ? chunk.value : chunk, - ); - }; - } - } - - super( - { - start(controller) { - return sink.start?.(controller); - }, - async write(chunk, controller) { - await chunk.tryConsume((chunk) => - sink.write?.(chunk, controller), - ); - }, - abort(reason) { - return sink.abort?.(reason); - }, - close() { - return sink.close?.(); - }, - }, - wrappedStrategy, - ); - } - }; - - static readonly ReadableStream = class ReadableStream< - T, - > extends NativeReadableStream> { - static async enqueue( - controller: { enqueue: (chunk: Consumable) => void }, - chunk: T, - ) { - const output = new Consumable(chunk); - controller.enqueue(output); - await output.consumed; - } - - constructor( - source: Consumable.ReadableStreamSource, - strategy?: QueuingStrategy, - ) { - let wrappedController: - | Consumable.ReadableStreamController - | undefined; - - let wrappedStrategy: QueuingStrategy> | undefined; - if (strategy) { - wrappedStrategy = {}; - if ("highWaterMark" in strategy) { - wrappedStrategy.highWaterMark = strategy.highWaterMark; - } - if ("size" in strategy) { - wrappedStrategy.size = (chunk) => { - return strategy.size!(chunk.value); - }; - } - } - - super( - { - async start(controller) { - wrappedController = { - async enqueue(chunk) { - await ReadableStream.enqueue(controller, chunk); - }, - close() { - controller.close(); - }, - error(reason) { - controller.error(reason); - }, - }; - - await source.start?.(wrappedController); - }, - async pull() { - await source.pull?.(wrappedController!); - }, - async cancel(reason) { - await source.cancel?.(reason); - }, - }, - wrappedStrategy, - ); - } - }; + static readonly ReadableStream = ReadableStream; readonly #task: Task; readonly #resolver: PromiseResolver; diff --git a/libraries/stream-extra/src/duplex.ts b/libraries/stream-extra/src/duplex.ts index d1f60531..b45f74da 100644 --- a/libraries/stream-extra/src/duplex.ts +++ b/libraries/stream-extra/src/duplex.ts @@ -1,5 +1,5 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; import { PromiseResolver } from "@yume-chan/async"; -import type { MaybePromiseLike } from "@yume-chan/struct"; import type { QueuingStrategy, diff --git a/libraries/stream-extra/src/push-readable.ts b/libraries/stream-extra/src/push-readable.ts index 302b5015..8302b79b 100644 --- a/libraries/stream-extra/src/push-readable.ts +++ b/libraries/stream-extra/src/push-readable.ts @@ -75,7 +75,7 @@ export class PushReadableStream extends ReadableStream { // But in `PushReadableStream`, `enqueue` is an async function, // the producer can't just check `abortSignal.aborted` // before calling `enqueue`, as it might change when waiting - // for the backpressure to be resolved. + // for the backpressure to be reduced. // // So IMO it's better to handle this for the producer // by simply ignoring the `enqueue` call. @@ -85,7 +85,7 @@ export class PushReadableStream extends ReadableStream { // they called `close` or `error`. // // Obviously, the producer should listen to the `abortSignal` and - // stop producing, but most pushing data sources can't be stopped. + // stop producing, but most pushing data sources don't support that. logger?.({ source: "producer", operation: "enqueue", diff --git a/libraries/stream-extra/src/wrap-readable.ts b/libraries/stream-extra/src/wrap-readable.ts index 4c1fd3b2..9206823e 100644 --- a/libraries/stream-extra/src/wrap-readable.ts +++ b/libraries/stream-extra/src/wrap-readable.ts @@ -1,4 +1,4 @@ -import type { MaybePromiseLike } from "@yume-chan/struct"; +import type { MaybePromiseLike } from "@yume-chan/async"; import type { QueuingStrategy, diff --git a/libraries/stream-extra/src/wrap-writable.ts b/libraries/stream-extra/src/wrap-writable.ts index c6ef1837..48f77785 100644 --- a/libraries/stream-extra/src/wrap-writable.ts +++ b/libraries/stream-extra/src/wrap-writable.ts @@ -1,4 +1,4 @@ -import type { MaybePromiseLike } from "@yume-chan/struct"; +import type { MaybePromiseLike } from "@yume-chan/async"; import type { TransformStream, WritableStreamDefaultWriter } from "./stream.js"; import { WritableStream } from "./stream.js"; diff --git a/libraries/struct/package.json b/libraries/struct/package.json index 28ee1fc5..26bef008 100644 --- a/libraries/struct/package.json +++ b/libraries/struct/package.json @@ -34,10 +34,11 @@ "test": "run-test" }, "dependencies": { + "@yume-chan/async": "^4.0.2", "@yume-chan/no-data-view": "workspace:^" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "@yume-chan/eslint-config": "workspace:^", "@yume-chan/test-runner": "workspace:^", "@yume-chan/tsconfig": "workspace:^", diff --git a/libraries/struct/src/bipedal.ts b/libraries/struct/src/bipedal.ts index a6930f6b..96a24b55 100644 --- a/libraries/struct/src/bipedal.ts +++ b/libraries/struct/src/bipedal.ts @@ -1,8 +1,5 @@ -import type { MaybePromiseLike } from "./utils.js"; - -function isPromiseLike(value: unknown): value is PromiseLike { - return typeof value === "object" && value !== null && "then" in value; -} +import type { MaybePromiseLike } from "@yume-chan/async"; +import { isPromiseLike } from "@yume-chan/async"; function advance( iterator: Iterator, diff --git a/libraries/struct/src/field.ts b/libraries/struct/src/field.ts index 595bffa1..0a415a75 100644 --- a/libraries/struct/src/field.ts +++ b/libraries/struct/src/field.ts @@ -1,5 +1,6 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; + import type { AsyncExactReadable } from "./readable.js"; -import type { MaybePromiseLike } from "./utils.js"; export interface SerializeContext { buffer: Uint8Array; diff --git a/libraries/struct/src/readable.ts b/libraries/struct/src/readable.ts index dbbab640..21df5f92 100644 --- a/libraries/struct/src/readable.ts +++ b/libraries/struct/src/readable.ts @@ -1,6 +1,6 @@ // TODO: allow over reading (returning a `Uint8Array`, an `offset` and a `length`) to avoid copying -import type { MaybePromiseLike } from "./utils.js"; +import type { MaybePromiseLike } from "@yume-chan/async"; export class ExactReadableEndedError extends Error { constructor() { diff --git a/libraries/struct/src/struct.ts b/libraries/struct/src/struct.ts index c198c638..99d1038a 100644 --- a/libraries/struct/src/struct.ts +++ b/libraries/struct/src/struct.ts @@ -1,8 +1,9 @@ +import type { MaybePromiseLike } from "@yume-chan/async"; + import { bipedal } from "./bipedal.js"; import type { DeserializeContext, Field, SerializeContext } from "./field.js"; import type { AsyncExactReadable, ExactReadable } from "./readable.js"; import { ExactReadableEndedError } from "./readable.js"; -import type { MaybePromiseLike } from "./utils.js"; export type FieldsType< T extends Record>, diff --git a/libraries/struct/src/utils.ts b/libraries/struct/src/utils.ts index 243eb4a9..06a3613a 100644 --- a/libraries/struct/src/utils.ts +++ b/libraries/struct/src/utils.ts @@ -38,7 +38,3 @@ export function decodeUtf8(buffer: ArrayBufferView | ArrayBuffer): string { // but this method is not for stream mode, so the instance can be reused return SharedDecoder.decode(buffer); } - -export type MaybePromise = T | Promise; - -export type MaybePromiseLike = T | PromiseLike; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8c1b9673..c155369a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,8 +34,8 @@ importers: version: 0.5.21 devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@yume-chan/eslint-config': specifier: workspace:^ version: link:../../toolchain/eslint-config @@ -52,8 +52,8 @@ importers: libraries/adb: dependencies: '@yume-chan/async': - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^4.0.2 + version: 4.0.2 '@yume-chan/event': specifier: workspace:^ version: link:../event @@ -68,8 +68,8 @@ importers: version: link:../struct devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@yume-chan/eslint-config': specifier: workspace:^ version: link:../../toolchain/eslint-config @@ -124,8 +124,8 @@ importers: version: link:../struct devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@yume-chan/eslint-config': specifier: workspace:^ version: link:../../toolchain/eslint-config @@ -148,8 +148,8 @@ importers: specifier: workspace:^ version: link:../adb '@yume-chan/async': - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^4.0.2 + version: 4.0.2 '@yume-chan/event': specifier: workspace:^ version: link:../event @@ -181,6 +181,9 @@ importers: '@yume-chan/adb': specifier: workspace:^ version: link:../adb + '@yume-chan/async': + specifier: ^4.0.2 + version: 4.0.2 '@yume-chan/stream-extra': specifier: workspace:^ version: link:../stream-extra @@ -189,8 +192,8 @@ importers: version: link:../struct devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@yume-chan/eslint-config': specifier: workspace:^ version: link:../../toolchain/eslint-config @@ -217,8 +220,8 @@ importers: version: link:../struct devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@yume-chan/eslint-config': specifier: workspace:^ version: link:../../toolchain/eslint-config @@ -257,12 +260,12 @@ importers: libraries/event: dependencies: '@yume-chan/async': - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^4.0.2 + version: 4.0.2 devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@yume-chan/eslint-config': specifier: workspace:^ version: link:../../toolchain/eslint-config @@ -286,14 +289,14 @@ importers: version: 4.0.3 devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 libraries/no-data-view: devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@yume-chan/eslint-config': specifier: workspace:^ version: link:../../toolchain/eslint-config @@ -334,8 +337,8 @@ importers: libraries/scrcpy: dependencies: '@yume-chan/async': - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^4.0.2 + version: 4.0.2 '@yume-chan/no-data-view': specifier: workspace:^ version: link:../no-data-view @@ -347,8 +350,8 @@ importers: version: link:../struct devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@yume-chan/eslint-config': specifier: workspace:^ version: link:../../toolchain/eslint-config @@ -368,8 +371,8 @@ importers: libraries/scrcpy-decoder-tinyh264: dependencies: '@yume-chan/async': - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^4.0.2 + version: 4.0.2 '@yume-chan/event': specifier: workspace:^ version: link:../event @@ -404,6 +407,9 @@ importers: libraries/scrcpy-decoder-webcodecs: dependencies: + '@yume-chan/async': + specifier: ^4.0.2 + version: 4.0.2 '@yume-chan/event': specifier: workspace:^ version: link:../event @@ -436,15 +442,15 @@ importers: libraries/stream-extra: dependencies: '@yume-chan/async': - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^4.0.2 + version: 4.0.2 '@yume-chan/struct': specifier: workspace:^ version: link:../struct devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@yume-chan/eslint-config': specifier: workspace:^ version: link:../../toolchain/eslint-config @@ -463,13 +469,16 @@ importers: libraries/struct: dependencies: + '@yume-chan/async': + specifier: ^4.0.2 + version: 4.0.2 '@yume-chan/no-data-view': specifier: workspace:^ version: link:../no-data-view devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@yume-chan/eslint-config': specifier: workspace:^ version: link:../../toolchain/eslint-config @@ -492,8 +501,8 @@ importers: specifier: ^9.15.0 version: 9.15.0 '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 eslint: specifier: ^9.15.0 version: 9.15.0 @@ -514,8 +523,8 @@ importers: toolchain/package-lint: dependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 json5: specifier: ^2.2.3 version: 2.2.3 @@ -523,8 +532,8 @@ importers: toolchain/test-runner: devDependencies: '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -694,8 +703,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.9.0': - resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + '@types/node@22.9.1': + resolution: {integrity: sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==} '@types/w3c-web-usb@1.0.10': resolution: {integrity: sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ==} @@ -790,8 +799,8 @@ packages: resolution: {integrity: sha512-mBvWew1kZJHfNQVVfVllMjUDwCGN9apPa0t4/z1zaUJ9MzpXjRL3w8fsfJKB8gHN/h4rik9HneKfDbh2fErN+w==} engines: {node: ^14.14.0 || >=16.0.0} - '@yume-chan/async@4.0.0': - resolution: {integrity: sha512-T4DOnvaVqrx+PQh8bESdS6y2ozii7M0isJ5MpGU0girfz9kmwOaJ+rF1oeTJGZ0k+v92+eo/q6SpJjcjnO9tuQ==} + '@yume-chan/async@4.0.2': + resolution: {integrity: sha512-YP5Hg4DZoq6CXzeTsiOu6rDNUaWw8SMiM4cB2rHam4zRTatgUHCWpSKMawQt0+nUro/+IeNTZLh2QpIFyxuGzg==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1978,7 +1987,7 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.9.0': + '@types/node@22.9.1': dependencies: undici-types: 6.19.8 @@ -2119,7 +2128,7 @@ snapshots: merge-options: 3.0.4 p-event: 5.0.1 - '@yume-chan/async@4.0.0': {} + '@yume-chan/async@4.0.2': {} acorn-jsx@5.3.2(acorn@8.14.0): dependencies: diff --git a/toolchain/eslint-config/package.json b/toolchain/eslint-config/package.json index c4b94421..577bc71a 100644 --- a/toolchain/eslint-config/package.json +++ b/toolchain/eslint-config/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@eslint/js": "^9.15.0", - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "eslint": "^9.15.0", "eslint-plugin-import-x": "^4.4.2", "typescript": "^5.6.3", diff --git a/toolchain/package-lint/package.json b/toolchain/package-lint/package.json index c8c1ab2a..b9b6acf6 100644 --- a/toolchain/package-lint/package.json +++ b/toolchain/package-lint/package.json @@ -7,7 +7,7 @@ "scripts": {}, "keywords": [], "dependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "json5": "^2.2.3" }, "author": "", diff --git a/toolchain/test-runner/package.json b/toolchain/test-runner/package.json index c927f74b..e1e80d93 100644 --- a/toolchain/test-runner/package.json +++ b/toolchain/test-runner/package.json @@ -6,7 +6,7 @@ "run-test": "wrapper.js" }, "devDependencies": { - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "typescript": "^5.6.3" } }