From d08a6891e79beffeaae83a7e76b606aefba9d26c Mon Sep 17 00:00:00 2001 From: Simon Chan <1330321+yume-chan@users.noreply.github.com> Date: Tue, 28 Feb 2023 00:25:07 +0800 Subject: [PATCH] feat(aoa): emulating HID keyboard via AOA protocol --- apps/demo/package.json | 2 + apps/demo/src/components/scrcpy/input.ts | 224 +++ apps/demo/src/components/scrcpy/state.tsx | 20 +- .../src/components/scrcpy/video-container.tsx | 1 - apps/demo/src/pages/audio.tsx | 79 + apps/demo/src/pages/scrcpy.tsx | 42 +- apps/demo/src/utils/icons.tsx | 3 + common/config/rush/pnpm-lock.yaml | 1685 +++++++++-------- common/config/rush/repo-state.json | 2 +- libraries/aoa/.eslintrc.cjs | 11 + libraries/aoa/.npmignore | 16 + libraries/aoa/LICENSE | 21 + libraries/aoa/README.md | 3 + libraries/aoa/package.json | 42 + libraries/aoa/src/audio.ts | 125 ++ libraries/aoa/src/filter.ts | 12 + libraries/aoa/src/hid.ts | 105 + libraries/aoa/src/index.ts | 7 + libraries/aoa/src/initialize.ts | 33 + libraries/aoa/src/keyboard.ts | 311 +++ libraries/aoa/src/mouse.ts | 60 + libraries/aoa/src/touchscreen.ts | 132 ++ libraries/aoa/src/type.ts | 10 + libraries/aoa/tsconfig.build.json | 12 + libraries/aoa/tsconfig.json | 10 + libraries/aoa/tsconfig.test.json | 9 + .../scrcpy/src/control/inject-keycode.ts | 18 +- rush.json | 4 + 28 files changed, 2118 insertions(+), 881 deletions(-) create mode 100644 apps/demo/src/components/scrcpy/input.ts create mode 100644 apps/demo/src/pages/audio.tsx create mode 100644 libraries/aoa/.eslintrc.cjs create mode 100644 libraries/aoa/.npmignore create mode 100644 libraries/aoa/LICENSE create mode 100644 libraries/aoa/README.md create mode 100644 libraries/aoa/package.json create mode 100644 libraries/aoa/src/audio.ts create mode 100644 libraries/aoa/src/filter.ts create mode 100644 libraries/aoa/src/hid.ts create mode 100644 libraries/aoa/src/index.ts create mode 100644 libraries/aoa/src/initialize.ts create mode 100644 libraries/aoa/src/keyboard.ts create mode 100644 libraries/aoa/src/mouse.ts create mode 100644 libraries/aoa/src/touchscreen.ts create mode 100644 libraries/aoa/src/type.ts create mode 100644 libraries/aoa/tsconfig.build.json create mode 100644 libraries/aoa/tsconfig.json create mode 100644 libraries/aoa/tsconfig.test.json diff --git a/apps/demo/package.json b/apps/demo/package.json index f0be4619..3e7fa6e9 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -22,6 +22,7 @@ "@yume-chan/adb-backend-ws": "workspace:^0.0.9", "@yume-chan/adb-credential-web": "workspace:^0.0.18", "@yume-chan/android-bin": "workspace:^0.0.18", + "@yume-chan/aoa": "workspace:^0.0.18", "@yume-chan/async": "^2.2.0", "@yume-chan/b-tree": "workspace:^0.0.16", "@yume-chan/event": "workspace:^0.0.18", @@ -46,6 +47,7 @@ "@mdx-js/loader": "^2.2.1", "@mdx-js/react": "^2.2.1", "@next/mdx": "^13.1.1", + "@types/node": "^18.11.18", "@types/react": "18.0.27", "eslint": "^8.31.0", "eslint-config-next": "13.1.5", diff --git a/apps/demo/src/components/scrcpy/input.ts b/apps/demo/src/components/scrcpy/input.ts new file mode 100644 index 00000000..5db855cb --- /dev/null +++ b/apps/demo/src/components/scrcpy/input.ts @@ -0,0 +1,224 @@ +import { AoaHidDevice, HidKeyCode, HidKeyboard } from "@yume-chan/aoa"; +import { Disposable } from "@yume-chan/event"; +import { + AdbScrcpyClient, + AndroidKeyCode, + AndroidKeyEventAction, + AndroidKeyEventMeta, +} from "@yume-chan/scrcpy"; + +export interface KeyboardInjector extends Disposable { + down(key: string): Promise; + up(key: string): Promise; + reset(): Promise; +} + +export class ScrcpyKeyboardInjector implements KeyboardInjector { + private readonly client: AdbScrcpyClient; + + private _controlLeft = false; + private _controlRight = false; + private _shiftLeft = false; + private _shiftRight = false; + private _altLeft = false; + private _altRight = false; + private _metaLeft = false; + private _metaRight = false; + + private _capsLock = false; + private _numLock = true; + + private _keys: Set = new Set(); + + public constructor(client: AdbScrcpyClient) { + this.client = client; + } + + private setModifier(keyCode: AndroidKeyCode, value: boolean) { + switch (keyCode) { + case AndroidKeyCode.ControlLeft: + this._controlLeft = value; + break; + case AndroidKeyCode.ControlRight: + this._controlRight = value; + break; + case AndroidKeyCode.ShiftLeft: + this._shiftLeft = value; + break; + case AndroidKeyCode.ShiftRight: + this._shiftRight = value; + break; + case AndroidKeyCode.AltLeft: + this._altLeft = value; + break; + case AndroidKeyCode.AltRight: + this._altRight = value; + break; + case AndroidKeyCode.MetaLeft: + this._metaLeft = value; + break; + case AndroidKeyCode.MetaRight: + this._metaRight = value; + break; + case AndroidKeyCode.CapsLock: + if (value) { + this._capsLock = !this._capsLock; + } + break; + case AndroidKeyCode.NumLock: + if (value) { + this._numLock = !this._numLock; + } + break; + } + } + + private getMetaState(): AndroidKeyEventMeta { + let metaState = 0; + if (this._altLeft) { + metaState |= + AndroidKeyEventMeta.AltOn | AndroidKeyEventMeta.AltLeftOn; + } + if (this._altRight) { + metaState |= + AndroidKeyEventMeta.AltOn | AndroidKeyEventMeta.AltRightOn; + } + if (this._shiftLeft) { + metaState |= + AndroidKeyEventMeta.ShiftOn | AndroidKeyEventMeta.ShiftLeftOn; + } + if (this._shiftRight) { + metaState |= + AndroidKeyEventMeta.ShiftOn | AndroidKeyEventMeta.ShiftRightOn; + } + if (this._controlLeft) { + metaState |= + AndroidKeyEventMeta.CtrlOn | AndroidKeyEventMeta.CtrlLeftOn; + } + if (this._controlRight) { + metaState |= + AndroidKeyEventMeta.CtrlOn | AndroidKeyEventMeta.CtrlRightOn; + } + if (this._metaLeft) { + metaState |= + AndroidKeyEventMeta.MetaOn | AndroidKeyEventMeta.MetaLeftOn; + } + if (this._metaRight) { + metaState |= + AndroidKeyEventMeta.MetaOn | AndroidKeyEventMeta.MetaRightOn; + } + if (this._capsLock) { + metaState |= AndroidKeyEventMeta.CapsLockOn; + } + if (this._numLock) { + metaState |= AndroidKeyEventMeta.NumLockOn; + } + return metaState; + } + + public async down(key: string): Promise { + const keyCode = AndroidKeyCode[key as keyof typeof AndroidKeyCode]; + if (!keyCode) { + return; + } + + this.setModifier(keyCode, true); + this._keys.add(keyCode); + await this.client.controlMessageSerializer?.injectKeyCode({ + action: AndroidKeyEventAction.Down, + keyCode, + metaState: this.getMetaState(), + repeat: 0, + }); + } + + public async up(key: string): Promise { + const keyCode = AndroidKeyCode[key as keyof typeof AndroidKeyCode]; + if (!keyCode) { + return; + } + + this.setModifier(keyCode, false); + this._keys.delete(keyCode); + await this.client.controlMessageSerializer?.injectKeyCode({ + action: AndroidKeyEventAction.Up, + keyCode, + metaState: this.getMetaState(), + repeat: 0, + }); + } + + public async reset(): Promise { + this._controlLeft = false; + this._controlRight = false; + this._shiftLeft = false; + this._shiftRight = false; + this._altLeft = false; + this._altRight = false; + this._metaLeft = false; + this._metaRight = false; + for (const key of this._keys) { + this.up(AndroidKeyCode[key]); + } + this._keys.clear(); + } + + public dispose(): void { + // do nothing + } +} + +export class AoaKeyboardInjector implements KeyboardInjector { + public static async register( + device: USBDevice + ): Promise { + const keyboard = await AoaHidDevice.register( + device, + 0, + HidKeyboard.DESCRIPTOR + ); + return new AoaKeyboardInjector(keyboard); + } + + private readonly aoaKeyboard: AoaHidDevice; + private readonly hidKeyboard = new HidKeyboard(); + + public constructor(aoaKeyboard: AoaHidDevice) { + this.aoaKeyboard = aoaKeyboard; + } + + public async down(key: string): Promise { + const keyCode = HidKeyCode[key as keyof typeof HidKeyCode]; + if (!keyCode) { + return; + } + + this.hidKeyboard.down(keyCode); + await this.aoaKeyboard.sendInputReport( + this.hidKeyboard.serializeInputReport() + ); + } + + public async up(key: string): Promise { + const keyCode = HidKeyCode[key as keyof typeof HidKeyCode]; + if (!keyCode) { + return; + } + + this.hidKeyboard.up(keyCode); + await this.aoaKeyboard.sendInputReport( + this.hidKeyboard.serializeInputReport() + ); + } + + public async reset(): Promise { + this.hidKeyboard.reset(); + await this.aoaKeyboard.sendInputReport( + this.hidKeyboard.serializeInputReport() + ); + } + + public async dispose(): Promise { + await this.aoaKeyboard.unregister(); + } +} diff --git a/apps/demo/src/components/scrcpy/state.tsx b/apps/demo/src/components/scrcpy/state.tsx index 91d15764..c826da9b 100644 --- a/apps/demo/src/components/scrcpy/state.tsx +++ b/apps/demo/src/components/scrcpy/state.tsx @@ -1,8 +1,8 @@ import { ADB_SYNC_MAX_PACKET_SIZE } from "@yume-chan/adb"; +import { AdbWebUsbBackend } from "@yume-chan/adb-backend-webusb"; import { AdbScrcpyClient, AdbScrcpyOptions1_22, - AndroidKeyCode, AndroidScreenPowerMode, CodecOptions, DEFAULT_SERVER_PATH, @@ -25,6 +25,11 @@ import { action, autorun, makeAutoObservable, runInAction } from "mobx"; import { GLOBAL_STATE } from "../../state"; import { ProgressStream } from "../../utils"; import { fetchServer } from "./fetch-server"; +import { + AoaKeyboardInjector, + KeyboardInjector, + ScrcpyKeyboardInjector, +} from "./input"; import { MuxerStream, RECORD_STATE } from "./recorder"; import { H264Decoder, SETTING_STATE } from "./settings"; @@ -58,7 +63,7 @@ export class ScrcpyPageState { client: AdbScrcpyClient | undefined = undefined; hoverHelper: ScrcpyHoverHelper | undefined = undefined; - pressedKeys: Set = new Set(); + keyboard: KeyboardInjector | undefined = undefined; async pushServer() { const serverBuffer = await fetchServer(); @@ -351,6 +356,14 @@ export class ScrcpyPageState { this.hoverHelper = new ScrcpyHoverHelper(); this.running = true; }); + + if (GLOBAL_STATE.backend instanceof AdbWebUsbBackend) { + this.keyboard = await AoaKeyboardInjector.register( + GLOBAL_STATE.backend.device + ); + } else { + this.keyboard = new ScrcpyKeyboardInjector(client); + } } catch (e: any) { GLOBAL_STATE.showErrorDialog(e); } finally { @@ -376,7 +389,8 @@ export class ScrcpyPageState { RECORD_STATE.recording = false; } - this.pressedKeys.clear(); + this.keyboard?.dispose(); + this.keyboard = undefined; this.fps = "0"; clearTimeout(this.fpsCounterIntervalId); diff --git a/apps/demo/src/components/scrcpy/video-container.tsx b/apps/demo/src/components/scrcpy/video-container.tsx index e2edaf79..99fadc34 100644 --- a/apps/demo/src/components/scrcpy/video-container.tsx +++ b/apps/demo/src/components/scrcpy/video-container.tsx @@ -111,7 +111,6 @@ function handlePointerLeave(e: PointerEvent) { e.preventDefault(); e.stopPropagation(); - // Because pointer capture on pointer down, this event only happens for hovering mouse and pen. // Release the injected pointer, otherwise it will stuck at the last position. injectTouch(AndroidMotionEventAction.HoverExit, e); diff --git a/apps/demo/src/pages/audio.tsx b/apps/demo/src/pages/audio.tsx new file mode 100644 index 00000000..1ea87805 --- /dev/null +++ b/apps/demo/src/pages/audio.tsx @@ -0,0 +1,79 @@ +import { DefaultButton, PrimaryButton } from "@fluentui/react"; +import { AdbWebUsbBackend } from "@yume-chan/adb-backend-webusb"; +import { + aoaGetProtocol, + aoaSetAudioMode, + aoaStartAccessory, +} from "@yume-chan/aoa"; +import { observer } from "mobx-react-lite"; +import { useCallback, useState } from "react"; +import { GLOBAL_STATE } from "../state"; + +function AudioPage() { + const [supported, setSupported] = useState(undefined); + const handleQuerySupportClick = useCallback(async () => { + const backend = GLOBAL_STATE.backend as AdbWebUsbBackend; + const device = backend.device; + const version = await aoaGetProtocol(device); + setSupported(version >= 2); + }, []); + + const handleEnableClick = useCallback(async () => { + const backend = GLOBAL_STATE.backend as AdbWebUsbBackend; + const device = backend.device; + const version = await aoaGetProtocol(device); + if (version < 2) { + return; + } + await aoaSetAudioMode(device, 1); + await aoaStartAccessory(device); + }, []); + const handleDisableClick = useCallback(async () => { + const backend = GLOBAL_STATE.backend as AdbWebUsbBackend; + const device = backend.device; + const version = await aoaGetProtocol(device); + if (version < 2) { + return; + } + await aoaSetAudioMode(device, 0); + await aoaStartAccessory(device); + }, []); + + if ( + !GLOBAL_STATE.backend || + !(GLOBAL_STATE.backend instanceof AdbWebUsbBackend) + ) { + return
Audio forward can only be used with WebUSB backend.
; + } + + return ( +
+
+ Supported:{" "} + {supported === undefined ? "Unknown" : supported ? "Yes" : "No"} +
+
+ + Query Support + + + Enable + + + Disable + +
+
+ ); +} + +export default observer(AudioPage); diff --git a/apps/demo/src/pages/scrcpy.tsx b/apps/demo/src/pages/scrcpy.tsx index e87c29a0..cfe4c1ac 100644 --- a/apps/demo/src/pages/scrcpy.tsx +++ b/apps/demo/src/pages/scrcpy.tsx @@ -1,11 +1,6 @@ import { Dialog, LayerHost, ProgressIndicator, Stack } from "@fluentui/react"; import { useId } from "@fluentui/react-hooks"; import { makeStyles, shorthands } from "@griffel/react"; -import { - AndroidKeyCode, - AndroidKeyEventAction, - AndroidKeyEventMeta, -} from "@yume-chan/scrcpy"; import { WebCodecsDecoder } from "@yume-chan/scrcpy-decoder-webcodecs"; import { action, runInAction } from "mobx"; import { observer } from "mobx-react-lite"; @@ -132,29 +127,7 @@ async function handleKeyEvent(e: KeyboardEvent) { e.stopPropagation(); const { type, code } = e; - const keyCode = AndroidKeyCode[code as keyof typeof AndroidKeyCode]; - if (keyCode) { - if (type === "keydown") { - STATE.pressedKeys.add(keyCode); - } else { - STATE.pressedKeys.delete(keyCode); - } - - // TODO: workaround the missing keyup event on macOS https://crbug.com/1393524 - STATE.client!.controlMessageSerializer!.injectKeyCode({ - action: - type === "keydown" - ? AndroidKeyEventAction.Down - : AndroidKeyEventAction.Up, - keyCode, - metaState: - (e.ctrlKey ? AndroidKeyEventMeta.CtrlOn : 0) | - (e.shiftKey ? AndroidKeyEventMeta.ShiftOn : 0) | - (e.altKey ? AndroidKeyEventMeta.AltOn : 0) | - (e.metaKey ? AndroidKeyEventMeta.MetaOn : 0), - repeat: 0, - }); - } + STATE.keyboard![type === "keydown" ? "down" : "up"](code); } function handleBlur() { @@ -162,18 +135,7 @@ function handleBlur() { return; } - // Release all pressed keys on window blur, - // Because there will not be any keyup events when window is not focused. - for (const key of STATE.pressedKeys) { - STATE.client.controlMessageSerializer!.injectKeyCode({ - action: AndroidKeyEventAction.Up, - keyCode: key, - metaState: 0, - repeat: 0, - }); - } - - STATE.pressedKeys.clear(); + STATE.keyboard?.reset(); } const Scrcpy: NextPage = () => { diff --git a/apps/demo/src/utils/icons.tsx b/apps/demo/src/utils/icons.tsx index 8bf879f6..2666ec1f 100644 --- a/apps/demo/src/utils/icons.tsx +++ b/apps/demo/src/utils/icons.tsx @@ -34,6 +34,7 @@ import { PersonFeedbackRegular, PhoneLaptopRegular, PhoneRegular, + PhoneSpeakerRegular, PlayRegular, PlugConnectedRegular, PlugDisconnectedRegular, @@ -86,6 +87,7 @@ export function register() { PersonFeedback: , Phone: , PhoneLaptop: , + PhoneSpeaker: , Play: , PlugConnected: , PlugDisconnected: , @@ -155,6 +157,7 @@ const Icons = { PersonFeedback: "PersonFeedback", Phone: "Phone", PhoneLaptop: "PhoneLaptop", + PhoneSpeaker: "PhoneSpeaker", Play: "Play", PlugConnected: "PlugConnected", PlugDisconnected: "PlugDisconnected", diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 26015f06..d738839b 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -16,6 +16,7 @@ importers: '@mdx-js/loader': ^2.2.1 '@mdx-js/react': ^2.2.1 '@next/mdx': ^13.1.1 + '@types/node': ^18.11.18 '@types/react': 18.0.27 '@yume-chan/adb': workspace:^0.0.18 '@yume-chan/adb-backend-direct-sockets': workspace:^0.0.9 @@ -23,6 +24,7 @@ importers: '@yume-chan/adb-backend-ws': workspace:^0.0.9 '@yume-chan/adb-credential-web': workspace:^0.0.18 '@yume-chan/android-bin': workspace:^0.0.18 + '@yume-chan/aoa': workspace:^0.0.18 '@yume-chan/async': ^2.2.0 '@yume-chan/b-tree': workspace:^0.0.16 '@yume-chan/event': workspace:^0.0.18 @@ -48,18 +50,19 @@ importers: xterm-addon-search: ^0.11.0 xterm-addon-webgl: ^0.14.0 dependencies: - '@fluentui/react': 8.104.7_5ndqzdd6t4rivxsukjv3i3ak2q - '@fluentui/react-file-type-icons': 8.8.5_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/react-hooks': 8.6.15_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/react-icons': 2.0.192_react@18.2.0 - '@fluentui/style-utilities': 8.8.5_3stiutgnnbnfnf3uowm5cip22i - '@griffel/react': 1.5.3_react@18.2.0 + '@fluentui/react': 8.106.1_5ndqzdd6t4rivxsukjv3i3ak2q + '@fluentui/react-file-type-icons': 8.8.9_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/react-hooks': 8.6.17_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/react-icons': 2.0.194_react@18.2.0 + '@fluentui/style-utilities': 8.9.2_3stiutgnnbnfnf3uowm5cip22i + '@griffel/react': 1.5.4_react@18.2.0 '@yume-chan/adb': link:../../libraries/adb '@yume-chan/adb-backend-direct-sockets': link:../../libraries/adb-backend-direct-sockets '@yume-chan/adb-backend-webusb': link:../../libraries/adb-backend-webusb '@yume-chan/adb-backend-ws': link:../../libraries/adb-backend-ws '@yume-chan/adb-credential-web': link:../../libraries/adb-credential-web '@yume-chan/android-bin': link:../../libraries/android-bin + '@yume-chan/aoa': link:../../libraries/aoa '@yume-chan/async': 2.2.0 '@yume-chan/b-tree': link:../../libraries/b-tree '@yume-chan/event': link:../../libraries/event @@ -69,26 +72,27 @@ importers: '@yume-chan/stream-extra': link:../../libraries/stream-extra '@yume-chan/stream-saver': 2.0.6 '@yume-chan/struct': link:../../libraries/struct - mobx: 6.7.0 - mobx-react-lite: 3.4.0_jofyzmwkboewm6mjrhi25mngky + mobx: 6.8.0 + mobx-react-lite: 3.4.0_woojb62cqeyk443mbl7msrwu2e next: 13.1.5_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - webm-muxer: 1.1.9 + webm-muxer: 1.2.1 xterm: 5.1.0 xterm-addon-fit: 0.7.0_xterm@5.1.0 xterm-addon-search: 0.11.0_xterm@5.1.0 xterm-addon-webgl: 0.14.0_xterm@5.1.0 devDependencies: - '@mdx-js/loader': 2.2.1 - '@mdx-js/react': 2.2.1_react@18.2.0 - '@next/mdx': 13.1.5_vvg67iglxhejglpl7nsv3pjzui + '@mdx-js/loader': 2.3.0 + '@mdx-js/react': 2.3.0_react@18.2.0 + '@next/mdx': 13.1.6_msthxdjvrhmdkfpqqalumiidgq + '@types/node': 18.14.0 '@types/react': 18.0.27 - eslint: 8.32.0 - eslint-config-next: 13.1.5_7uibuqfxkfaozanbtbziikiqje + eslint: 8.34.0 + eslint-config-next: 13.1.5_7kw3g6rralp5ps6mg3uyzz6azm prettier: 2.8.4 source-map-loader: 4.0.1 - typescript: 4.9.4 + typescript: 4.9.5 ../../libraries/adb: specifiers: @@ -116,16 +120,16 @@ importers: '@yume-chan/struct': link:../struct tslib: 2.5.0 devDependencies: - '@jest/globals': 29.4.1 - '@types/node': 18.11.18 + '@jest/globals': 29.4.3 + '@types/node': 18.14.0 '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig cross-env: 7.0.3 - eslint: 8.32.0 - jest: 29.4.1_@types+node@18.11.18 + eslint: 8.34.0 + jest: 29.4.3_@types+node@18.14.0 prettier: 2.8.4 - ts-jest: 29.0.5_xnqx6kewz4og5i3pgc6ahzwloy - typescript: 4.9.4 + ts-jest: 29.0.5_orzzknleilowtsz34rkaotjvzm + typescript: 4.9.5 ../../libraries/adb-backend-direct-sockets: specifiers: @@ -144,9 +148,9 @@ importers: devDependencies: '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig - eslint: 8.32.0 + eslint: 8.34.0 prettier: 2.8.4 - typescript: 4.9.4 + typescript: 4.9.5 ../../libraries/adb-backend-webusb: specifiers: @@ -169,9 +173,9 @@ importers: devDependencies: '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig - eslint: 8.32.0 + eslint: 8.34.0 prettier: 2.8.4 - typescript: 4.9.4 + typescript: 4.9.5 ../../libraries/adb-backend-ws: specifiers: @@ -191,10 +195,10 @@ importers: devDependencies: '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig - eslint: 8.32.0 - jest: 29.4.1 + eslint: 8.34.0 + jest: 29.4.3 prettier: 2.8.4 - typescript: 4.9.4 + typescript: 4.9.5 ../../libraries/adb-credential-web: specifiers: @@ -211,9 +215,9 @@ importers: devDependencies: '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig - eslint: 8.32.0 + eslint: 8.34.0 prettier: 2.8.4 - typescript: 4.9.4 + typescript: 4.9.5 ../../libraries/android-bin: specifiers: @@ -234,9 +238,24 @@ importers: devDependencies: '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig - eslint: 8.32.0 + eslint: 8.34.0 prettier: 2.8.4 - typescript: 4.9.4 + typescript: 4.9.5 + + ../../libraries/aoa: + specifiers: + '@types/w3c-web-usb': ^1.0.6 + '@yume-chan/eslint-config': workspace:^1.0.0 + '@yume-chan/tsconfig': workspace:^1.0.0 + eslint: ^8.31.0 + typescript: ^4.9.4 + dependencies: + '@types/w3c-web-usb': 1.0.6 + devDependencies: + '@yume-chan/eslint-config': link:../../toolchain/eslint-config + '@yume-chan/tsconfig': link:../../toolchain/tsconfig + eslint: 8.34.0 + typescript: 4.9.5 ../../libraries/b-tree: specifiers: @@ -253,15 +272,15 @@ importers: dependencies: tslib: 2.5.0 devDependencies: - '@jest/globals': 29.4.1 + '@jest/globals': 29.4.3 '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig cross-env: 7.0.3 - eslint: 8.32.0 - jest: 29.4.1 + eslint: 8.34.0 + jest: 29.4.3 prettier: 2.8.4 - ts-jest: 29.0.5_xnqx6kewz4og5i3pgc6ahzwloy - typescript: 4.9.4 + ts-jest: 29.0.5_orzzknleilowtsz34rkaotjvzm + typescript: 4.9.5 ../../libraries/dataview-bigint-polyfill: specifiers: @@ -277,10 +296,10 @@ importers: devDependencies: '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig - eslint: 8.32.0 - jest: 29.4.1 + eslint: 8.34.0 + jest: 29.4.3 prettier: 2.8.4 - typescript: 4.9.4 + typescript: 4.9.5 ../../libraries/event: specifiers: @@ -299,15 +318,15 @@ importers: '@yume-chan/async': 2.2.0 tslib: 2.5.0 devDependencies: - '@jest/globals': 29.4.1 + '@jest/globals': 29.4.3 '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig cross-env: 7.0.3 - eslint: 8.32.0 - jest: 29.4.1 + eslint: 8.34.0 + jest: 29.4.3 prettier: 2.8.4 - ts-jest: 29.0.5_xnqx6kewz4og5i3pgc6ahzwloy - typescript: 4.9.4 + ts-jest: 29.0.5_orzzknleilowtsz34rkaotjvzm + typescript: 4.9.5 ../../libraries/scrcpy: specifiers: @@ -334,17 +353,17 @@ importers: '@yume-chan/struct': link:../struct tslib: 2.5.0 devDependencies: - '@jest/globals': 29.4.1 + '@jest/globals': 29.4.3 '@yume-chan/adb': link:../adb '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig cross-env: 7.0.3 - eslint: 8.32.0 + eslint: 8.34.0 gh-release-fetch: 3.0.2 - jest: 29.4.1 + jest: 29.4.3 prettier: 2.8.4 - ts-jest: 29.0.5_xnqx6kewz4og5i3pgc6ahzwloy - typescript: 4.9.4 + ts-jest: 29.0.5_orzzknleilowtsz34rkaotjvzm + typescript: 4.9.5 ../../libraries/scrcpy-decoder-tinyh264: specifiers: @@ -375,15 +394,15 @@ importers: yuv-buffer: 1.0.0 yuv-canvas: 1.2.11 devDependencies: - '@jest/globals': 29.4.1 + '@jest/globals': 29.4.3 '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig cross-env: 7.0.3 - eslint: 8.32.0 - jest: 29.4.1 + eslint: 8.34.0 + jest: 29.4.3 prettier: 2.8.4 - ts-jest: 29.0.5_xnqx6kewz4og5i3pgc6ahzwloy - typescript: 4.9.4 + ts-jest: 29.0.5_orzzknleilowtsz34rkaotjvzm + typescript: 4.9.5 ../../libraries/scrcpy-decoder-webcodecs: specifiers: @@ -406,15 +425,15 @@ importers: '@yume-chan/stream-extra': link:../stream-extra tslib: 2.5.0 devDependencies: - '@jest/globals': 29.4.1 + '@jest/globals': 29.4.3 '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig cross-env: 7.0.3 - eslint: 8.32.0 - jest: 29.4.1 + eslint: 8.34.0 + jest: 29.4.3 prettier: 2.8.4 - ts-jest: 29.0.5_xnqx6kewz4og5i3pgc6ahzwloy - typescript: 4.9.4 + ts-jest: 29.0.5_orzzknleilowtsz34rkaotjvzm + typescript: 4.9.5 ../../libraries/stream-extra: specifiers: @@ -437,15 +456,15 @@ importers: tslib: 2.5.0 web-streams-polyfill: 4.0.0-beta.3 devDependencies: - '@jest/globals': 29.4.1 + '@jest/globals': 29.4.3 '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig cross-env: 7.0.3 - eslint: 8.32.0 - jest: 29.4.1 + eslint: 8.34.0 + jest: 29.4.3 prettier: 2.8.4 - ts-jest: 29.0.5_xnqx6kewz4og5i3pgc6ahzwloy - typescript: 4.9.4 + ts-jest: 29.0.5_orzzknleilowtsz34rkaotjvzm + typescript: 4.9.5 ../../libraries/struct: specifiers: @@ -464,15 +483,15 @@ importers: '@yume-chan/dataview-bigint-polyfill': link:../dataview-bigint-polyfill tslib: 2.5.0 devDependencies: - '@jest/globals': 29.4.1 + '@jest/globals': 29.4.3 '@yume-chan/eslint-config': link:../../toolchain/eslint-config '@yume-chan/tsconfig': link:../../toolchain/tsconfig cross-env: 7.0.3 - eslint: 8.32.0 - jest: 29.4.1 + eslint: 8.34.0 + jest: 29.4.3 prettier: 2.8.4 - ts-jest: 29.0.5_xnqx6kewz4og5i3pgc6ahzwloy - typescript: 4.9.4 + ts-jest: 29.0.5_orzzknleilowtsz34rkaotjvzm + typescript: 4.9.5 ../../toolchain/eslint-config: specifiers: @@ -485,11 +504,11 @@ importers: typescript: ^4.9.4 dependencies: '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/eslint-plugin': 5.49.0_iu322prlnwsygkcra5kbpy22si - '@typescript-eslint/parser': 5.49.0_7uibuqfxkfaozanbtbziikiqje - eslint: 8.32.0 - eslint-plugin-import: 2.27.5_eslint@8.32.0 - typescript: 4.9.4 + '@typescript-eslint/eslint-plugin': 5.53.0_ny4s7qc6yg74faf3d6xty2ofzy + '@typescript-eslint/parser': 5.53.0_7kw3g6rralp5ps6mg3uyzz6azm + eslint: 8.34.0 + eslint-plugin-import: 2.27.5_eslint@8.34.0 + typescript: 4.9.5 devDependencies: prettier: 2.8.4 @@ -516,25 +535,25 @@ packages: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data/7.20.10: - resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} + /@babel/compat-data/7.21.0: + resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.20.12: - resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} + /@babel/core/7.21.0: + resolution: {integrity: sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-module-transforms': 7.20.11 - '@babel/helpers': 7.20.13 - '@babel/parser': 7.20.13 + '@babel/generator': 7.21.1 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0 + '@babel/helper-module-transforms': 7.21.0 + '@babel/helpers': 7.21.0 + '@babel/parser': 7.21.1 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.0 + '@babel/types': 7.21.0 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -544,25 +563,26 @@ packages: - supports-color dev: true - /@babel/generator/7.20.7: - resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==} + /@babel/generator/7.21.1: + resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.0 '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.20.10 - '@babel/core': 7.20.12 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.0 + '@babel/helper-validator-option': 7.21.0 + browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 dev: true @@ -572,30 +592,30 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-function-name/7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + /@babel/helper-function-name/7.21.0: + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.20.7 + '@babel/types': 7.21.0 dev: true /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.0 dev: true /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.0 dev: true - /@babel/helper-module-transforms/7.20.11: - resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} + /@babel/helper-module-transforms/7.21.0: + resolution: {integrity: sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 @@ -604,8 +624,8 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.0 + '@babel/types': 7.21.0 transitivePeerDependencies: - supports-color dev: true @@ -619,14 +639,14 @@ packages: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.0 dev: true /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.0 dev: true /@babel/helper-string-parser/7.19.4: @@ -639,18 +659,18 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option/7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + /@babel/helper-validator-option/7.21.0: + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helpers/7.20.13: - resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==} + /@babel/helpers/7.21.0: + resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.0 + '@babel/types': 7.21.0 transitivePeerDependencies: - supports-color dev: true @@ -664,143 +684,143 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.20.13: - resolution: {integrity: sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==} + /@babel/parser/7.21.1: + resolution: {integrity: sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==} engines: {node: '>=6.0.0'} hasBin: true dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12: + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.0: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.0: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.0: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12: + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.0: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.0: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.0: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.12: + /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.0: resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/runtime/7.20.13: - resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + /@babel/runtime/7.21.0: + resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 @@ -810,30 +830,30 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.13 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.1 + '@babel/types': 7.21.0 dev: true - /@babel/traverse/7.20.13: - resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} + /@babel/traverse/7.21.0: + resolution: {integrity: sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 + '@babel/generator': 7.21.1 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.13 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.1 + '@babel/types': 7.21.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.20.7: - resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} + /@babel/types/7.21.0: + resolution: {integrity: sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 @@ -856,7 +876,7 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.4.1 - globals: 13.19.0 + globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -865,109 +885,109 @@ packages: transitivePeerDependencies: - supports-color - /@fluentui/date-time-utilities/8.5.4: - resolution: {integrity: sha512-PHLrbKs/s80xVkvFLQkaYb78a9nRUlohj8FCDBFQ8F1qPJj3iVH1RuSLyTiCIRJy/v1hW6KMEIXqLu/EoMefXw==} + /@fluentui/date-time-utilities/8.5.5: + resolution: {integrity: sha512-P/qfyMIF1aWPVaZvgAE0u166Rp1Rfpymv63/NKQT1o56cc5LzfWTzjD2Ey1GyA+tn6dCf7g1ZXTpKo5H+CuM4Q==} dependencies: - '@fluentui/set-version': 8.2.4 + '@fluentui/set-version': 8.2.5 tslib: 2.5.0 dev: false - /@fluentui/dom-utilities/2.2.4: - resolution: {integrity: sha512-X4fN5zbvAETw9LE8bw9x5otKcpS3A3cB9wn/BookbTD4hkBESx06SzmX/WdabFq7qqbDqbURiQMpmdGUUlLsqw==} + /@fluentui/dom-utilities/2.2.5: + resolution: {integrity: sha512-VGCtAmPU/3uj/QV4Kx7gO/H2vNrhNSB346sE7xM+bBtxj+hf/owaGTvN6/tuZ8HXQu8tjTf8+ubQ3d7D7DUIjA==} dependencies: - '@fluentui/set-version': 8.2.4 + '@fluentui/set-version': 8.2.5 tslib: 2.5.0 dev: false - /@fluentui/font-icons-mdl2/8.5.6_3stiutgnnbnfnf3uowm5cip22i: - resolution: {integrity: sha512-6yGZcc/fIeT/HDPjnn003TNuC/EUoiZTiyZQyPSSQl5PeOzkmNOqG8nq/l8s+qXHs4uZC/FH081vxPxSwA2qWA==} + /@fluentui/font-icons-mdl2/8.5.9_3stiutgnnbnfnf3uowm5cip22i: + resolution: {integrity: sha512-u2a45ZE7GDLOSLpKPIDykVfbZs48oLT1m12JUdz4oGTkR9bR0+l8cnQL/+rYTu0KcJp2V5F9zLyTpJdlZnV36w==} dependencies: - '@fluentui/set-version': 8.2.4 - '@fluentui/style-utilities': 8.8.5_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/utilities': 8.13.5_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/set-version': 8.2.5 + '@fluentui/style-utilities': 8.9.2_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/utilities': 8.13.7_3stiutgnnbnfnf3uowm5cip22i tslib: 2.5.0 transitivePeerDependencies: - '@types/react' - react dev: false - /@fluentui/foundation-legacy/8.2.26_3stiutgnnbnfnf3uowm5cip22i: - resolution: {integrity: sha512-7XKz23HB7IeIIXORS1os2fIakYTLTTGFcs+mnK5f/b4xFJAOxxdte6i10f2WsPPFiTjW1kLOzICsRsfwuHAVRw==} + /@fluentui/foundation-legacy/8.2.29_3stiutgnnbnfnf3uowm5cip22i: + resolution: {integrity: sha512-apO4PcZtU8N4zFW9fLE6aEb6JdlPyssI98MHSvCWKMiUqWSUhimvIgJ75CT3XmbKdI3bXu/miKjWSOMIHsZkiQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/merge-styles': 8.5.5 - '@fluentui/set-version': 8.2.4 - '@fluentui/style-utilities': 8.8.5_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/utilities': 8.13.5_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/merge-styles': 8.5.6 + '@fluentui/set-version': 8.2.5 + '@fluentui/style-utilities': 8.9.2_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/utilities': 8.13.7_3stiutgnnbnfnf3uowm5cip22i '@types/react': 18.0.27 react: 18.2.0 tslib: 2.5.0 dev: false - /@fluentui/keyboard-key/0.4.4: - resolution: {integrity: sha512-nx0bQ9B5QtUym9a21ig5eHPt2T6EWaqrleFb37d6ImikP6xVXUHrWQJFuVS1CSg0n63KOPsmh1QvAUfxfmyLhw==} + /@fluentui/keyboard-key/0.4.5: + resolution: {integrity: sha512-c+B+mdEgj0B6fhYIjznesGi8Al1rTpdFNudpNmFoVjlhCle5qj5RBtM4WaT8XygdzAVQq7oHSXom0vd32+zAZg==} dependencies: tslib: 2.5.0 dev: false - /@fluentui/merge-styles/8.5.5: - resolution: {integrity: sha512-+cyN28iRAn8BWlZkMSEWzXpsJJiy3wWFxdJx5UnvU3iLK1slwog94inJak/BmnQKk3dFXK9vVPtDp2s3l+2/hg==} + /@fluentui/merge-styles/8.5.6: + resolution: {integrity: sha512-i9Wy+7V+lKfX+UWRTrrK+3xm4aa8jl9tK2/7Ku696yWJ5v3D6xjRcMevfxUZDrZ3xS4/GRFfWKPHkAjzz/BQoQ==} dependencies: - '@fluentui/set-version': 8.2.4 + '@fluentui/set-version': 8.2.5 tslib: 2.5.0 dev: false - /@fluentui/react-file-type-icons/8.8.5_3stiutgnnbnfnf3uowm5cip22i: - resolution: {integrity: sha512-UR0tx2ruDrIWyym10SeYm5nj9NHBJgOYM6OM4K0ja/4hNeQ1gVktYe2pCDBFN+pQ8AiZ2wLWH3r9lK/pHDd0fw==} + /@fluentui/react-file-type-icons/8.8.9_3stiutgnnbnfnf3uowm5cip22i: + resolution: {integrity: sha512-sWxR4oJE6Jlf3uSRYp6cg3rqh7Rk3Ff6E8vAhtYlbU3b1nEO2McuzeESe+nWWcwu2RpLqZ/12iu3Yu/Diu5HUg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/set-version': 8.2.4 - '@fluentui/style-utilities': 8.8.5_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/set-version': 8.2.5 + '@fluentui/style-utilities': 8.9.2_3stiutgnnbnfnf3uowm5cip22i '@types/react': 18.0.27 react: 18.2.0 tslib: 2.5.0 dev: false - /@fluentui/react-focus/8.8.12_3stiutgnnbnfnf3uowm5cip22i: - resolution: {integrity: sha512-2uuU/CQ371YnNxKqUVfnxahW93OT3y2Tp8calmBVxzmyBwZxGpI5JF+PdNorNWhDSaruX+j31QwxoXUNz1vI9Q==} + /@fluentui/react-focus/8.8.15_3stiutgnnbnfnf3uowm5cip22i: + resolution: {integrity: sha512-TRYOSkQ6hQmZnfiM8k8Uw7bVAi69iguFc4V6lO90QHZ3fHQxlIHBHEmBzysYDORKMwQbtbllCtkm9ImlhsxEJw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/keyboard-key': 0.4.4 - '@fluentui/merge-styles': 8.5.5 - '@fluentui/set-version': 8.2.4 - '@fluentui/style-utilities': 8.8.5_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/utilities': 8.13.5_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/keyboard-key': 0.4.5 + '@fluentui/merge-styles': 8.5.6 + '@fluentui/set-version': 8.2.5 + '@fluentui/style-utilities': 8.9.2_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/utilities': 8.13.7_3stiutgnnbnfnf3uowm5cip22i '@types/react': 18.0.27 react: 18.2.0 tslib: 2.5.0 dev: false - /@fluentui/react-hooks/8.6.15_3stiutgnnbnfnf3uowm5cip22i: - resolution: {integrity: sha512-oh1OdXAUwPyhMRum8TU2/C8V4hb69qGFTh/XYzyfiAwa0UzODszq/LoaDyVThEJEi5OBPdeuXturAvgqCT8kNw==} + /@fluentui/react-hooks/8.6.17_3stiutgnnbnfnf3uowm5cip22i: + resolution: {integrity: sha512-UdsK3YZ6Rx5fCNFfIcyJ2il8j5Ypb7OQY+0Qe2nmrn+/NKrtCeFVCIAs+i5MzjlL5wOsX27YXZwqby2DBUuSPg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-window-provider': 2.2.5_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/set-version': 8.2.4 - '@fluentui/utilities': 8.13.5_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/react-window-provider': 2.2.6_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/set-version': 8.2.5 + '@fluentui/utilities': 8.13.7_3stiutgnnbnfnf3uowm5cip22i '@types/react': 18.0.27 react: 18.2.0 tslib: 2.5.0 dev: false - /@fluentui/react-icons/2.0.192_react@18.2.0: - resolution: {integrity: sha512-AIqzzml5Sgpcksb5gReZ/y5H2HWCUYtx0fzoK9U02ywDvdt6QwZgOtONv8qMkjyuWvuZ/RxOiVjNyRhB47Uu9Q==} + /@fluentui/react-icons/2.0.194_react@18.2.0: + resolution: {integrity: sha512-0mjnqQmXeg/VapcOW068evvgLFjMNi01c2QBzOvdou1dd7yYVXl4qQZtA03Z7O2huA02/Gt5EK4WQiJodgB/gA==} peerDependencies: react: '>=16.8.0 <19.0.0' dependencies: - '@griffel/react': 1.5.3_react@18.2.0 + '@griffel/react': 1.5.4_react@18.2.0 react: 18.2.0 tslib: 2.5.0 dev: false @@ -983,38 +1003,38 @@ packages: tslib: 2.5.0 dev: false - /@fluentui/react-window-provider/2.2.5_3stiutgnnbnfnf3uowm5cip22i: - resolution: {integrity: sha512-uct8xpHLFoECeoM8xRsw98yrxLV1MY2rA/Ml0M65JSWREdDUk+btgu7HLZp4QV/GpfPvP1WiNFLSLhrZFSnIAg==} + /@fluentui/react-window-provider/2.2.6_3stiutgnnbnfnf3uowm5cip22i: + resolution: {integrity: sha512-bcQM5mdi4ugVb30GNtde8sP173F+l9p7uQfgK/I8O07EfKHUHZeY4wj5arD53s1cUIQI0kxWJ5RD7upZNRQeQA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/set-version': 8.2.4 + '@fluentui/set-version': 8.2.5 '@types/react': 18.0.27 react: 18.2.0 tslib: 2.5.0 dev: false - /@fluentui/react/8.104.7_5ndqzdd6t4rivxsukjv3i3ak2q: - resolution: {integrity: sha512-VPaOdsN2klRgfbFASudIFz1q73WA+FMG0wDfBlQQJqhlzgAeCcrEYeZU1Zz3cu3idre2gjGPbYGKBwVWqSDmqQ==} + /@fluentui/react/8.106.1_5ndqzdd6t4rivxsukjv3i3ak2q: + resolution: {integrity: sha512-cLagkBBsknKOYFXBeWBwAm5VryPeJFVUIgLa0XlXcxmeOco/IhmWlhY5gEEQ9YoX1dFyNVcYXWxNFR55KUpZoA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/date-time-utilities': 8.5.4 - '@fluentui/font-icons-mdl2': 8.5.6_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/foundation-legacy': 8.2.26_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/merge-styles': 8.5.5 - '@fluentui/react-focus': 8.8.12_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/react-hooks': 8.6.15_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/date-time-utilities': 8.5.5 + '@fluentui/font-icons-mdl2': 8.5.9_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/foundation-legacy': 8.2.29_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/merge-styles': 8.5.6 + '@fluentui/react-focus': 8.8.15_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/react-hooks': 8.6.17_3stiutgnnbnfnf3uowm5cip22i '@fluentui/react-portal-compat-context': 9.0.4_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/react-window-provider': 2.2.5_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/set-version': 8.2.4 - '@fluentui/style-utilities': 8.8.5_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/theme': 2.6.21_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/utilities': 8.13.5_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/react-window-provider': 2.2.6_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/set-version': 8.2.5 + '@fluentui/style-utilities': 8.9.2_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/theme': 2.6.23_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/utilities': 8.13.7_3stiutgnnbnfnf3uowm5cip22i '@microsoft/load-themed-styles': 1.10.295 '@types/react': 18.0.27 react: 18.2.0 @@ -1022,19 +1042,19 @@ packages: tslib: 2.5.0 dev: false - /@fluentui/set-version/8.2.4: - resolution: {integrity: sha512-v12VUrpThYcJESFrnu3LdL7/s957hoSCJ3t8C014Hp2IOmk3dnZRZJymf1k/RAOXztS4w9dF2Zhs8uP31qwcZw==} + /@fluentui/set-version/8.2.5: + resolution: {integrity: sha512-DwJq9wIXLc8WkeJ/lqYM4Sv+R0Ccb6cy3cY1Bqaa5POsroVKIfL6W+njvAMOj3LO3+DaXo2aDeiUnnw70M8xIw==} dependencies: tslib: 2.5.0 dev: false - /@fluentui/style-utilities/8.8.5_3stiutgnnbnfnf3uowm5cip22i: - resolution: {integrity: sha512-qUi+1a2v0nWo3LB4c13Qf81qQH1yO9YHAgfbRNLqs4w7Oie7NDBDkq7UgRmLErpSVEafvlcCZeCSKW5pvSxz5w==} + /@fluentui/style-utilities/8.9.2_3stiutgnnbnfnf3uowm5cip22i: + resolution: {integrity: sha512-cnP3p73+9RDE91Dy6aWHgkkBLbtv9Ct66YD6Hgr/tU3th3Z/CJU2TcJ4EN8RqiIBCiO4LU+W2jrFFZNnXTAxEw==} dependencies: - '@fluentui/merge-styles': 8.5.5 - '@fluentui/set-version': 8.2.4 - '@fluentui/theme': 2.6.21_3stiutgnnbnfnf3uowm5cip22i - '@fluentui/utilities': 8.13.5_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/merge-styles': 8.5.6 + '@fluentui/set-version': 8.2.5 + '@fluentui/theme': 2.6.23_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/utilities': 8.13.7_3stiutgnnbnfnf3uowm5cip22i '@microsoft/load-themed-styles': 1.10.295 tslib: 2.5.0 transitivePeerDependencies: @@ -1042,36 +1062,36 @@ packages: - react dev: false - /@fluentui/theme/2.6.21_3stiutgnnbnfnf3uowm5cip22i: - resolution: {integrity: sha512-jqPOo375pt1bQ4WuzP2GP5gfgeBK/PDHUf4+DxDTZ9y0TXp8KxV4jCp5Rq2rnVYlXi51JQ2Y+snFtMDcMTyfRQ==} + /@fluentui/theme/2.6.23_3stiutgnnbnfnf3uowm5cip22i: + resolution: {integrity: sha512-xuX3jHsIrB/LbgVwmZwiXkmCT+EY8c7b97wV2SGDpVUSsFDSQMQPZgQ3eAfXNA1ZLbgYcxBycm5f+gDxjlKA8g==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/merge-styles': 8.5.5 - '@fluentui/set-version': 8.2.4 - '@fluentui/utilities': 8.13.5_3stiutgnnbnfnf3uowm5cip22i + '@fluentui/merge-styles': 8.5.6 + '@fluentui/set-version': 8.2.5 + '@fluentui/utilities': 8.13.7_3stiutgnnbnfnf3uowm5cip22i '@types/react': 18.0.27 react: 18.2.0 tslib: 2.5.0 dev: false - /@fluentui/utilities/8.13.5_3stiutgnnbnfnf3uowm5cip22i: - resolution: {integrity: sha512-YusKxwTEQmsJidEWxn8blf5ehBmBDMZDrOjQkSX4piCvi/57MfigQZ57L3Bdic8kDKsabVtS1IVMHLZzGy4zcQ==} + /@fluentui/utilities/8.13.7_3stiutgnnbnfnf3uowm5cip22i: + resolution: {integrity: sha512-whH09ttg7DGzANijSFXTF//xJNYjTrMB6TcgC7ge+5suI7VVwsh3NZc9lYN2mKKUveHEOjLgeunEhQ3neAvn5Q==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/dom-utilities': 2.2.4 - '@fluentui/merge-styles': 8.5.5 - '@fluentui/set-version': 8.2.4 + '@fluentui/dom-utilities': 2.2.5 + '@fluentui/merge-styles': 8.5.6 + '@fluentui/set-version': 8.2.5 '@types/react': 18.0.27 react: 18.2.0 tslib: 2.5.0 dev: false - /@griffel/core/1.9.1: - resolution: {integrity: sha512-Z2xXT8rEWW7VMItI5M9WWsFNnbrJlTyUOUQFGAQ/YCRSF/ewRzjYp6aN1VOxyJDsfuONPNVVAaZhOUatNGHjVQ==} + /@griffel/core/1.9.2: + resolution: {integrity: sha512-bGYgCIjyAh/TtTPowiGcS8E7u8Kt0pjL55ZwMOcqmvkKIv1CHyAgK+DUgGiCuM4YGuN0QLV0X/mLddStcVyPsg==} dependencies: '@emotion/hash': 0.8.0 csstype: 3.1.1 @@ -1080,12 +1100,12 @@ packages: tslib: 2.5.0 dev: false - /@griffel/react/1.5.3_react@18.2.0: - resolution: {integrity: sha512-3oNp6r7wJLKUmqLV0Jd4mGbFX0t2QVGAi1D5+F7IQAHNyY31dMdQPZjEHz6IOacnPJiDdlHjxlaAPU05sN2G1w==} + /@griffel/react/1.5.4_react@18.2.0: + resolution: {integrity: sha512-FmoM7JPTrQZlR2I0y5lkh6RnWD+3N4fj+0G/gsIKrylrzTGSiNYSihGwWYMLVNxPzvAsnC4D+NQEgzKHvTP75A==} peerDependencies: react: '>=16.8.0 <19.0.0' dependencies: - '@griffel/core': 1.9.1 + '@griffel/core': 1.9.2 react: 18.2.0 tslib: 2.5.0 dev: false @@ -1123,20 +1143,20 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console/29.4.1: - resolution: {integrity: sha512-m+XpwKSi3PPM9znm5NGS8bBReeAJJpSkL1OuFCqaMaJL2YX9YXLkkI+MBchMPwu+ZuM2rynL51sgfkQteQ1CKQ==} + /@jest/console/29.4.3: + resolution: {integrity: sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 chalk: 4.1.2 - jest-message-util: 29.4.1 - jest-util: 29.4.1 + jest-message-util: 29.4.3 + jest-util: 29.4.3 slash: 3.0.0 dev: true - /@jest/core/29.4.1: - resolution: {integrity: sha512-RXFTohpBqpaTebNdg5l3I5yadnKo9zLBajMT0I38D0tDhreVBYv3fA8kywthI00sWxPztWLD3yjiUkewwu/wKA==} + /@jest/core/29.4.3: + resolution: {integrity: sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -1144,32 +1164,32 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.4.1 - '@jest/reporters': 29.4.1 - '@jest/test-result': 29.4.1 - '@jest/transform': 29.4.1 - '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@jest/console': 29.4.3 + '@jest/reporters': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/transform': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.7.1 + ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.10 - jest-changed-files: 29.4.0 - jest-config: 29.4.1_@types+node@18.11.18 - jest-haste-map: 29.4.1 - jest-message-util: 29.4.1 - jest-regex-util: 29.2.0 - jest-resolve: 29.4.1 - jest-resolve-dependencies: 29.4.1 - jest-runner: 29.4.1 - jest-runtime: 29.4.1 - jest-snapshot: 29.4.1 - jest-util: 29.4.1 - jest-validate: 29.4.1 - jest-watcher: 29.4.1 + jest-changed-files: 29.4.3 + jest-config: 29.4.3_@types+node@18.14.0 + jest-haste-map: 29.4.3 + jest-message-util: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.4.3 + jest-resolve-dependencies: 29.4.3 + jest-runner: 29.4.3 + jest-runtime: 29.4.3 + jest-snapshot: 29.4.3 + jest-util: 29.4.3 + jest-validate: 29.4.3 + jest-watcher: 29.4.3 micromatch: 4.0.5 - pretty-format: 29.4.1 + pretty-format: 29.4.3 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -1177,59 +1197,59 @@ packages: - ts-node dev: true - /@jest/environment/29.4.1: - resolution: {integrity: sha512-pJ14dHGSQke7Q3mkL/UZR9ZtTOxqskZaC91NzamEH4dlKRt42W+maRBXiw/LWkdJe+P0f/zDR37+SPMplMRlPg==} + /@jest/environment/29.4.3: + resolution: {integrity: sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.4.1 - '@jest/types': 29.4.1 - '@types/node': 18.11.18 - jest-mock: 29.4.1 + '@jest/fake-timers': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 + jest-mock: 29.4.3 dev: true - /@jest/expect-utils/29.4.1: - resolution: {integrity: sha512-w6YJMn5DlzmxjO00i9wu2YSozUYRBhIoJ6nQwpMYcBMtiqMGJm1QBzOf6DDgRao8dbtpDoaqLg6iiQTvv0UHhQ==} + /@jest/expect-utils/29.4.3: + resolution: {integrity: sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.2.0 + jest-get-type: 29.4.3 dev: true - /@jest/expect/29.4.1: - resolution: {integrity: sha512-ZxKJP5DTUNF2XkpJeZIzvnzF1KkfrhEF6Rz0HGG69fHl6Bgx5/GoU3XyaeFYEjuuKSOOsbqD/k72wFvFxc3iTw==} + /@jest/expect/29.4.3: + resolution: {integrity: sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.4.1 - jest-snapshot: 29.4.1 + expect: 29.4.3 + jest-snapshot: 29.4.3 transitivePeerDependencies: - supports-color dev: true - /@jest/fake-timers/29.4.1: - resolution: {integrity: sha512-/1joI6rfHFmmm39JxNfmNAO3Nwm6Y0VoL5fJDy7H1AtWrD1CgRtqJbN9Ld6rhAkGO76qqp4cwhhxJ9o9kYjQMw==} + /@jest/fake-timers/29.4.3: + resolution: {integrity: sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.1 + '@jest/types': 29.4.3 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.11.18 - jest-message-util: 29.4.1 - jest-mock: 29.4.1 - jest-util: 29.4.1 + '@types/node': 18.14.0 + jest-message-util: 29.4.3 + jest-mock: 29.4.3 + jest-util: 29.4.3 dev: true - /@jest/globals/29.4.1: - resolution: {integrity: sha512-znoK2EuFytbHH0ZSf2mQK2K1xtIgmaw4Da21R2C/NE/+NnItm5mPEFQmn8gmF3f0rfOlmZ3Y3bIf7bFj7DHxAA==} + /@jest/globals/29.4.3: + resolution: {integrity: sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.1 - '@jest/expect': 29.4.1 - '@jest/types': 29.4.1 - jest-mock: 29.4.1 + '@jest/environment': 29.4.3 + '@jest/expect': 29.4.3 + '@jest/types': 29.4.3 + jest-mock: 29.4.3 transitivePeerDependencies: - supports-color dev: true - /@jest/reporters/29.4.1: - resolution: {integrity: sha512-AISY5xpt2Xpxj9R6y0RF1+O6GRy9JsGa8+vK23Lmzdy1AYcpQn5ItX79wJSsTmfzPKSAcsY1LNt/8Y5Xe5LOSg==} + /@jest/reporters/29.4.3: + resolution: {integrity: sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -1238,12 +1258,12 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.4.1 - '@jest/test-result': 29.4.1 - '@jest/transform': 29.4.1 - '@jest/types': 29.4.1 + '@jest/console': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/transform': 29.4.3 + '@jest/types': 29.4.3 '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.11.18 + '@types/node': 18.14.0 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -1254,26 +1274,26 @@ packages: istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 - jest-message-util: 29.4.1 - jest-util: 29.4.1 - jest-worker: 29.4.1 + jest-message-util: 29.4.3 + jest-util: 29.4.3 + jest-worker: 29.4.3 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.0.1 + v8-to-istanbul: 9.1.0 transitivePeerDependencies: - supports-color dev: true - /@jest/schemas/29.4.0: - resolution: {integrity: sha512-0E01f/gOZeNTG76i5eWWSupvSHaIINrTie7vCyjiYFKgzNdyEGd12BUv4oNBFHOqlHDbtoJi3HrQ38KCC90NsQ==} + /@jest/schemas/29.4.3: + resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@sinclair/typebox': 0.25.21 + '@sinclair/typebox': 0.25.23 dev: true - /@jest/source-map/29.2.0: - resolution: {integrity: sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==} + /@jest/source-map/29.4.3: + resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jridgewell/trace-mapping': 0.3.17 @@ -1281,58 +1301,58 @@ packages: graceful-fs: 4.2.10 dev: true - /@jest/test-result/29.4.1: - resolution: {integrity: sha512-WRt29Lwt+hEgfN8QDrXqXGgCTidq1rLyFqmZ4lmJOpVArC8daXrZWkWjiaijQvgd3aOUj2fM8INclKHsQW9YyQ==} + /@jest/test-result/29.4.3: + resolution: {integrity: sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.4.1 - '@jest/types': 29.4.1 + '@jest/console': 29.4.3 + '@jest/types': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/29.4.1: - resolution: {integrity: sha512-v5qLBNSsM0eHzWLXsQ5fiB65xi49A3ILPSFQKPXzGL4Vyux0DPZAIN7NAFJa9b4BiTDP9MBF/Zqc/QA1vuiJ0w==} + /@jest/test-sequencer/29.4.3: + resolution: {integrity: sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.4.1 + '@jest/test-result': 29.4.3 graceful-fs: 4.2.10 - jest-haste-map: 29.4.1 + jest-haste-map: 29.4.3 slash: 3.0.0 dev: true - /@jest/transform/29.4.1: - resolution: {integrity: sha512-5w6YJrVAtiAgr0phzKjYd83UPbCXsBRTeYI4BXokv9Er9CcrH9hfXL/crCvP2d2nGOcovPUnlYiLPFLZrkG5Hg==} + /@jest/transform/29.4.3: + resolution: {integrity: sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.20.12 - '@jest/types': 29.4.1 + '@babel/core': 7.21.0 + '@jest/types': 29.4.3 '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 - jest-haste-map: 29.4.1 - jest-regex-util: 29.2.0 - jest-util: 29.4.1 + jest-haste-map: 29.4.3 + jest-regex-util: 29.4.3 + jest-util: 29.4.3 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 - write-file-atomic: 5.0.0 + write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color dev: true - /@jest/types/29.4.1: - resolution: {integrity: sha512-zbrAXDUOnpJ+FMST2rV7QZOgec8rskg2zv8g2ajeqitp4tvZiyqTCYXANrKsM+ryj5o+LI+ZN2EgU9drrkiwSA==} + /@jest/types/29.4.3: + resolution: {integrity: sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.0 + '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.18 - '@types/yargs': 17.0.20 + '@types/node': 18.14.0 + '@types/yargs': 17.0.22 chalk: 4.1.2 dev: true @@ -1374,43 +1394,43 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@mdx-js/loader/2.2.1: - resolution: {integrity: sha512-J4E8A5H+xtk4otZiEZ5AXl61Tj04Avm5MqLQazITdI3+puVXVnTTuZUKM1oNHTtfDIfOl0uMt+o/Ij+x6Fvf+g==} + /@mdx-js/loader/2.3.0: + resolution: {integrity: sha512-IqsscXh7Q3Rzb+f5DXYk0HU71PK+WuFsEhf+mSV3fOhpLcEpgsHvTQ2h0T6TlZ5gHOaBeFjkXwB52by7ypMyNg==} peerDependencies: webpack: '>=4' dependencies: - '@mdx-js/mdx': 2.2.1 + '@mdx-js/mdx': 2.3.0 source-map: 0.7.4 transitivePeerDependencies: - supports-color dev: true - /@mdx-js/mdx/2.2.1: - resolution: {integrity: sha512-hZ3ex7exYLJn6FfReq8yTvA6TE53uW9UHJQM9IlSauOuS55J9y8RtA7W+dzp6Yrzr00/U1sd7q+Wf61q6SfiTQ==} + /@mdx-js/mdx/2.3.0: + resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} dependencies: '@types/estree-jsx': 1.0.0 '@types/mdx': 2.0.3 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 - estree-util-to-js: 1.1.1 + estree-util-to-js: 1.2.0 estree-walker: 3.0.3 - hast-util-to-estree: 2.2.1 + hast-util-to-estree: 2.3.2 markdown-extensions: 1.1.1 periscopic: 3.1.0 - remark-mdx: 2.2.1 + remark-mdx: 2.3.0 remark-parse: 10.0.1 remark-rehype: 10.1.0 unified: 10.1.2 unist-util-position-from-estree: 1.1.2 unist-util-stringify-position: 3.0.3 unist-util-visit: 4.1.2 - vfile: 5.3.6 + vfile: 5.3.7 transitivePeerDependencies: - supports-color dev: true - /@mdx-js/react/2.2.1_react@18.2.0: - resolution: {integrity: sha512-YdXcMcEnqZhzql98RNrqYo9cEhTTesBiCclEtoiQUbJwx87q9453GTapYU6kJ8ZZ2ek1Vp25SiAXEFy5O/eAPw==} + /@mdx-js/react/2.3.0_react@18.2.0: + resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} peerDependencies: react: '>=16' dependencies: @@ -1433,14 +1453,14 @@ packages: glob: 7.1.7 dev: true - /@next/mdx/13.1.5_vvg67iglxhejglpl7nsv3pjzui: - resolution: {integrity: sha512-j+syay//B029UPOpCbk7ZkrMGNC9Br4XWFk/RFN0BjIp8/fAtHRjQrE4OoVfMf9y/+mYVXrHTjahfzAVDlqvag==} + /@next/mdx/13.1.6_msthxdjvrhmdkfpqqalumiidgq: + resolution: {integrity: sha512-ZLhXXDJeHbudFpSZT68eYQRzOaNwkaw+NuO7Zvnm5XKB6P7hKSj2dS47ZtitrY0JaL3KxR4FoxUSYeLvdoRwtQ==} peerDependencies: '@mdx-js/loader': '>=0.15.0' '@mdx-js/react': '*' dependencies: - '@mdx-js/loader': 2.2.1 - '@mdx-js/react': 2.2.1_react@18.2.0 + '@mdx-js/loader': 2.3.0 + '@mdx-js/react': 2.3.0_react@18.2.0 source-map: 0.7.4 dev: true @@ -1585,7 +1605,7 @@ packages: dependencies: cross-spawn: 7.0.3 is-glob: 4.0.3 - open: 8.4.0 + open: 8.4.2 picocolors: 1.0.0 tiny-glob: 0.2.9 tslib: 2.5.0 @@ -1594,8 +1614,8 @@ packages: /@rushstack/eslint-patch/1.2.0: resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} - /@sinclair/typebox/0.25.21: - resolution: {integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==} + /@sinclair/typebox/0.25.23: + resolution: {integrity: sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==} dev: true /@sindresorhus/is/0.7.0: @@ -1630,8 +1650,8 @@ packages: /@types/babel__core/7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.20.13 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.1 + '@babel/types': 7.21.0 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.3 @@ -1640,20 +1660,20 @@ packages: /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.0 dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.20.13 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.1 + '@babel/types': 7.21.0 dev: true /@types/babel__traverse/7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.0 dev: true /@types/debug/4.1.7: @@ -1665,7 +1685,7 @@ packages: /@types/decompress/4.2.4: resolution: {integrity: sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA==} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.14.0 dev: true /@types/dom-webcodecs/0.1.5: @@ -1677,7 +1697,7 @@ packages: dependencies: '@types/decompress': 4.2.4 '@types/got': 9.6.12 - '@types/node': 18.11.18 + '@types/node': 18.14.0 dev: true /@types/estree-jsx/1.0.0: @@ -1693,7 +1713,7 @@ packages: /@types/got/9.6.12: resolution: {integrity: sha512-X4pj/HGHbXVLqTpKjA2ahI4rV/nNBc9mGO2I/0CgAra+F2dKgMXnENv2SRpemScBzBAI4vMelIVYViQxlSE6xA==} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.14.0 '@types/tough-cookie': 4.0.2 form-data: 2.5.1 dev: true @@ -1701,7 +1721,7 @@ packages: /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.14.0 dev: true /@types/hast/2.3.4: @@ -1750,12 +1770,12 @@ packages: /@types/node-fetch/2.6.2: resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.14.0 form-data: 3.0.1 dev: true - /@types/node/18.11.18: - resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} + /@types/node/18.14.0: + resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==} dev: true /@types/prettier/2.7.2: @@ -1802,14 +1822,14 @@ packages: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs/17.0.20: - resolution: {integrity: sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A==} + /@types/yargs/17.0.22: + resolution: {integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.49.0_iu322prlnwsygkcra5kbpy22si: - resolution: {integrity: sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==} + /@typescript-eslint/eslint-plugin/5.53.0_ny4s7qc6yg74faf3d6xty2ofzy: + resolution: {integrity: sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -1819,24 +1839,25 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.49.0_7uibuqfxkfaozanbtbziikiqje - '@typescript-eslint/scope-manager': 5.49.0 - '@typescript-eslint/type-utils': 5.49.0_7uibuqfxkfaozanbtbziikiqje - '@typescript-eslint/utils': 5.49.0_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/parser': 5.53.0_7kw3g6rralp5ps6mg3uyzz6azm + '@typescript-eslint/scope-manager': 5.53.0 + '@typescript-eslint/type-utils': 5.53.0_7kw3g6rralp5ps6mg3uyzz6azm + '@typescript-eslint/utils': 5.53.0_7kw3g6rralp5ps6mg3uyzz6azm debug: 4.3.4 - eslint: 8.32.0 + eslint: 8.34.0 + grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 regexpp: 3.2.0 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/parser/5.49.0_7uibuqfxkfaozanbtbziikiqje: - resolution: {integrity: sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==} + /@typescript-eslint/parser/5.53.0_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1845,24 +1866,24 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.49.0 - '@typescript-eslint/types': 5.49.0 - '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.9.4 + '@typescript-eslint/scope-manager': 5.53.0 + '@typescript-eslint/types': 5.53.0 + '@typescript-eslint/typescript-estree': 5.53.0_typescript@4.9.5 debug: 4.3.4 - eslint: 8.32.0 - typescript: 4.9.4 + eslint: 8.34.0 + typescript: 4.9.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/scope-manager/5.49.0: - resolution: {integrity: sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==} + /@typescript-eslint/scope-manager/5.53.0: + resolution: {integrity: sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.49.0 - '@typescript-eslint/visitor-keys': 5.49.0 + '@typescript-eslint/types': 5.53.0 + '@typescript-eslint/visitor-keys': 5.53.0 - /@typescript-eslint/type-utils/5.49.0_7uibuqfxkfaozanbtbziikiqje: - resolution: {integrity: sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==} + /@typescript-eslint/type-utils/5.53.0_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1871,22 +1892,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.9.4 - '@typescript-eslint/utils': 5.49.0_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/typescript-estree': 5.53.0_typescript@4.9.5 + '@typescript-eslint/utils': 5.53.0_7kw3g6rralp5ps6mg3uyzz6azm debug: 4.3.4 - eslint: 8.32.0 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 + eslint: 8.34.0 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/types/5.49.0: - resolution: {integrity: sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==} + /@typescript-eslint/types/5.53.0: + resolution: {integrity: sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@typescript-eslint/typescript-estree/5.49.0_typescript@4.9.4: - resolution: {integrity: sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==} + /@typescript-eslint/typescript-estree/5.53.0_typescript@4.9.5: + resolution: {integrity: sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1894,42 +1915,42 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.49.0 - '@typescript-eslint/visitor-keys': 5.49.0 + '@typescript-eslint/types': 5.53.0 + '@typescript-eslint/visitor-keys': 5.53.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/utils/5.49.0_7uibuqfxkfaozanbtbziikiqje: - resolution: {integrity: sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==} + /@typescript-eslint/utils/5.53.0_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.49.0 - '@typescript-eslint/types': 5.49.0 - '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.9.4 - eslint: 8.32.0 + '@typescript-eslint/scope-manager': 5.53.0 + '@typescript-eslint/types': 5.53.0 + '@typescript-eslint/typescript-estree': 5.53.0_typescript@4.9.5 + eslint: 8.34.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.32.0 + eslint-utils: 3.0.0_eslint@8.34.0 semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: false - /@typescript-eslint/visitor-keys/5.49.0: - resolution: {integrity: sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==} + /@typescript-eslint/visitor-keys/5.53.0: + resolution: {integrity: sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/types': 5.53.0 eslint-visitor-keys: 3.3.0 /@yume-chan/async/2.2.0: @@ -2030,7 +2051,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 get-intrinsic: 1.2.0 is-string: 1.0.7 @@ -2044,7 +2065,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 @@ -2053,7 +2074,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 @@ -2061,7 +2082,7 @@ packages: resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 get-intrinsic: 1.2.0 @@ -2095,17 +2116,17 @@ packages: deep-equal: 2.2.0 dev: true - /babel-jest/29.4.1_@babel+core@7.20.12: - resolution: {integrity: sha512-xBZa/pLSsF/1sNpkgsiT3CmY7zV1kAsZ9OxxtrFqYucnOuRftXAfcJqcDVyOPeN4lttWTwhLdu0T9f8uvoPEUg==} + /babel-jest/29.4.3_@babel+core@7.21.0: + resolution: {integrity: sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.20.12 - '@jest/transform': 29.4.1 + '@babel/core': 7.21.0 + '@jest/transform': 29.4.3 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.4.0_@babel+core@7.20.12 + babel-preset-jest: 29.4.3_@babel+core@7.21.0 chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -2126,45 +2147,45 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/29.4.0: - resolution: {integrity: sha512-a/sZRLQJEmsmejQ2rPEUe35nO1+C9dc9O1gplH1SXmJxveQSRUYdBk8yGZG/VOUuZs1u2aHZJusEGoRMbhhwCg==} + /babel-plugin-jest-hoist/29.4.3: + resolution: {integrity: sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.20.7 + '@babel/types': 7.21.0 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.3 dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.12: + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.0: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.0 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.0 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.0 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.0 dev: true - /babel-preset-jest/29.4.0_@babel+core@7.20.12: - resolution: {integrity: sha512-fUB9vZflUSM3dO/6M2TCAepTzvA4VkOvl67PjErcrQMGt9Eve7uazaeyCZ2th3UtI7ljpiBJES0F7A1vBRsLZA==} + /babel-preset-jest/29.4.3_@babel+core@7.21.0: + resolution: {integrity: sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 - babel-plugin-jest-hoist: 29.4.0 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + '@babel/core': 7.21.0 + babel-plugin-jest-hoist: 29.4.3 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.0 dev: true /bail/2.0.2: @@ -2197,15 +2218,15 @@ packages: dependencies: fill-range: 7.0.1 - /browserslist/4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + /browserslist/4.21.5: + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001448 - electron-to-chromium: 1.4.284 - node-releases: 2.0.8 - update-browserslist-db: 1.0.10_browserslist@4.21.4 + caniuse-lite: 1.0.30001457 + electron-to-chromium: 1.4.308 + node-releases: 2.0.10 + update-browserslist-db: 1.0.10_browserslist@4.21.5 dev: true /bs-logger/0.2.6: @@ -2283,8 +2304,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001448: - resolution: {integrity: sha512-tq2YI+MJnooG96XpbTRYkBxLxklZPOdLmNIOdIhvf7SNJan6u5vCKum8iT7ZfCt70m1GPkuC7P3TtX6UuhupuA==} + /caniuse-lite/1.0.30001457: + resolution: {integrity: sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==} /ccount/2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2327,8 +2348,8 @@ packages: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} dev: true - /ci-info/3.7.1: - resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==} + /ci-info/3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: true @@ -2559,8 +2580,8 @@ packages: /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + /deepmerge/4.3.0: + resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} dev: true @@ -2569,8 +2590,8 @@ packages: engines: {node: '>=8'} dev: true - /define-properties/1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + /define-properties/1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: has-property-descriptors: 1.0.0 @@ -2591,8 +2612,8 @@ packages: engines: {node: '>=8'} dev: true - /diff-sequences/29.3.1: - resolution: {integrity: sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==} + /diff-sequences/29.4.3: + resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true @@ -2640,8 +2661,8 @@ packages: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} dev: true - /electron-to-chromium/1.4.284: - resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + /electron-to-chromium/1.4.308: + resolution: {integrity: sha512-qyTx2aDFjEni4UnRWEME9ubd2Xc9c0zerTUl/ZinvD4QPsF0S7kJTV/Es/lPCTkNX6smyYar+z/n8Cl6pFr8yQ==} dev: true /emittery/0.13.1: @@ -2695,7 +2716,7 @@ packages: has-property-descriptors: 1.0.0 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.4 + internal-slot: 1.0.5 is-array-buffer: 3.0.1 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -2769,7 +2790,7 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /eslint-config-next/13.1.5_7uibuqfxkfaozanbtbziikiqje: + /eslint-config-next/13.1.5_7kw3g6rralp5ps6mg3uyzz6azm: resolution: {integrity: sha512-7FqkjkvGCQfvYUiPTFRiRYPR1uI6Ew+4f4mVp16lLSWcaChtWoZxQCZHM5n0yxzKKVmuEg1aM4uvDQfSXSjTww==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -2780,15 +2801,15 @@ packages: dependencies: '@next/eslint-plugin-next': 13.1.5 '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.49.0_7uibuqfxkfaozanbtbziikiqje - eslint: 8.32.0 + '@typescript-eslint/parser': 5.53.0_7kw3g6rralp5ps6mg3uyzz6azm + eslint: 8.34.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.3_ps7hf4l2dvbuxvtusmrfhmzsba - eslint-plugin-import: 2.27.5_eslint@8.32.0 - eslint-plugin-jsx-a11y: 6.7.1_eslint@8.32.0 - eslint-plugin-react: 7.32.1_eslint@8.32.0 - eslint-plugin-react-hooks: 4.6.0_eslint@8.32.0 - typescript: 4.9.4 + eslint-import-resolver-typescript: 3.5.3_mvgyw3chnqkp6sgfmmtihyjpnm + eslint-plugin-import: 2.27.5_eslint@8.34.0 + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.34.0 + eslint-plugin-react: 7.32.2_eslint@8.34.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.34.0 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true @@ -2800,7 +2821,7 @@ packages: is-core-module: 2.11.0 resolve: 1.22.1 - /eslint-import-resolver-typescript/3.5.3_ps7hf4l2dvbuxvtusmrfhmzsba: + /eslint-import-resolver-typescript/3.5.3_mvgyw3chnqkp6sgfmmtihyjpnm: resolution: {integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -2809,18 +2830,18 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.12.0 - eslint: 8.32.0 - eslint-plugin-import: 2.27.5_eslint@8.32.0 - get-tsconfig: 4.3.0 + eslint: 8.34.0 + eslint-plugin-import: 2.27.5_eslint@8.34.0 + get-tsconfig: 4.4.0 globby: 13.1.3 is-core-module: 2.11.0 is-glob: 4.0.3 - synckit: 0.8.4 + synckit: 0.8.5 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils/2.7.4_eslint@8.32.0: + /eslint-module-utils/2.7.4_eslint@8.34.0: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -2830,9 +2851,9 @@ packages: optional: true dependencies: debug: 3.2.7 - eslint: 8.32.0 + eslint: 8.34.0 - /eslint-plugin-import/2.27.5_eslint@8.32.0: + /eslint-plugin-import/2.27.5_eslint@8.34.0: resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -2843,9 +2864,9 @@ packages: array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.32.0 + eslint: 8.34.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4_eslint@8.32.0 + eslint-module-utils: 2.7.4_eslint@8.34.0 has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -2855,13 +2876,13 @@ packages: semver: 6.3.0 tsconfig-paths: 3.14.1 - /eslint-plugin-jsx-a11y/6.7.1_eslint@8.32.0: + /eslint-plugin-jsx-a11y/6.7.1_eslint@8.34.0: resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 aria-query: 5.1.3 array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 @@ -2870,7 +2891,7 @@ packages: axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.32.0 + eslint: 8.34.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.5 @@ -2880,17 +2901,17 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-react-hooks/4.6.0_eslint@8.32.0: + /eslint-plugin-react-hooks/4.6.0_eslint@8.34.0: resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.32.0 + eslint: 8.34.0 dev: true - /eslint-plugin-react/7.32.1_eslint@8.32.0: - resolution: {integrity: sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==} + /eslint-plugin-react/7.32.2_eslint@8.34.0: + resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -2899,7 +2920,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.32.0 + eslint: 8.34.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -2928,13 +2949,13 @@ packages: esrecurse: 4.3.0 estraverse: 5.3.0 - /eslint-utils/3.0.0_eslint@8.32.0: + /eslint-utils/3.0.0_eslint@8.34.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.32.0 + eslint: 8.34.0 eslint-visitor-keys: 2.1.0 /eslint-visitor-keys/2.1.0: @@ -2945,8 +2966,8 @@ packages: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /eslint/8.32.0: - resolution: {integrity: sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==} + /eslint/8.34.0: + resolution: {integrity: sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: @@ -2961,16 +2982,16 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.32.0 + eslint-utils: 3.0.0_eslint@8.34.0 eslint-visitor-keys: 3.3.0 espree: 9.4.1 - esquery: 1.4.0 + esquery: 1.4.2 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.19.0 + globals: 13.20.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 import-fresh: 3.3.0 @@ -3006,8 +3027,8 @@ packages: hasBin: true dev: true - /esquery/1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + /esquery/1.4.2: + resolution: {integrity: sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -3045,8 +3066,8 @@ packages: resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} dev: true - /estree-util-to-js/1.1.1: - resolution: {integrity: sha512-tW/ADSJON4o+T8rSmSX1ZXdat4n6bVOu0iTUFY9ZFF2dD/1/Hug8Lc/HYuJRA4Mop9zDZHQMo1m4lIxxJHkTjQ==} + /estree-util-to-js/1.2.0: + resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} dependencies: '@types/estree-jsx': 1.0.0 astring: 1.8.4 @@ -3090,15 +3111,15 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /expect/29.4.1: - resolution: {integrity: sha512-OKrGESHOaMxK3b6zxIq9SOW8kEXztKff/Dvg88j4xIJxur1hspEbedVkR3GpHe5LO+WB2Qw7OWN0RMTdp6as5A==} + /expect/29.4.3: + resolution: {integrity: sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/expect-utils': 29.4.1 - jest-get-type: 29.2.0 - jest-matcher-utils: 29.4.1 - jest-message-util: 29.4.1 - jest-util: 29.4.1 + '@jest/expect-utils': 29.4.3 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.4.3 + jest-message-util: 29.4.3 + jest-util: 29.4.3 dev: true /ext-list/2.2.2: @@ -3285,7 +3306,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 functions-have-names: 1.2.3 @@ -3346,8 +3367,8 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.0 - /get-tsconfig/4.3.0: - resolution: {integrity: sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ==} + /get-tsconfig/4.4.0: + resolution: {integrity: sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==} dev: true /gh-release-fetch/3.0.2: @@ -3358,7 +3379,7 @@ packages: '@types/node-fetch': 2.6.2 '@types/semver': 7.3.13 download: 8.0.0 - node-fetch: 2.6.8 + node-fetch: 2.6.9 semver: 7.3.8 transitivePeerDependencies: - encoding @@ -3402,8 +3423,8 @@ packages: engines: {node: '>=4'} dev: true - /globals/13.19.0: - resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} + /globals/13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -3412,7 +3433,7 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.1.4 + define-properties: 1.2.0 /globalyzer/0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} @@ -3526,8 +3547,8 @@ packages: dependencies: function-bind: 1.1.1 - /hast-util-to-estree/2.2.1: - resolution: {integrity: sha512-kiGD9WIW3gRKK8Gao3n1f+ahUeTMeJUJILnIT2QNrPigDNdH7rJxzhEbh81UajGeAdAHFecT1a+fLVOCTq9B4Q==} + /hast-util-to-estree/2.3.2: + resolution: {integrity: sha512-YYDwATNdnvZi3Qi84iatPIl1lWpXba1MeNrNbDfJfVzEBZL8uUmtR7mt7bxKBC8kuAuvb0bkojXYZzsNHyHCLg==} dependencies: '@types/estree': 1.0.0 '@types/estree-jsx': 1.0.0 @@ -3537,8 +3558,8 @@ packages: estree-util-attach-comments: 2.1.1 estree-util-is-identifier-name: 2.1.0 hast-util-whitespace: 2.0.1 - mdast-util-mdx-expression: 1.3.1 - mdast-util-mdxjs-esm: 1.3.0 + mdast-util-mdx-expression: 1.3.2 + mdast-util-mdxjs-esm: 1.3.1 property-information: 6.2.0 space-separated-tokens: 2.0.2 style-to-object: 0.4.1 @@ -3613,8 +3634,8 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: true - /internal-slot/1.0.4: - resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} + /internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.0 @@ -3867,8 +3888,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.20.12 - '@babel/parser': 7.20.13 + '@babel/core': 7.21.0 + '@babel/parser': 7.21.1 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -3912,43 +3933,43 @@ packages: is-object: 1.0.2 dev: true - /jest-changed-files/29.4.0: - resolution: {integrity: sha512-rnI1oPxgFghoz32Y8eZsGJMjW54UlqT17ycQeCEktcxxwqqKdlj9afl8LNeO0Pbu+h2JQHThQP0BzS67eTRx4w==} + /jest-changed-files/29.4.3: + resolution: {integrity: sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 p-limit: 3.1.0 dev: true - /jest-circus/29.4.1: - resolution: {integrity: sha512-v02NuL5crMNY4CGPHBEflLzl4v91NFb85a+dH9a1pUNx6Xjggrd8l9pPy4LZ1VYNRXlb+f65+7O/MSIbLir6pA==} + /jest-circus/29.4.3: + resolution: {integrity: sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.1 - '@jest/expect': 29.4.1 - '@jest/test-result': 29.4.1 - '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@jest/environment': 29.4.3 + '@jest/expect': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 - jest-each: 29.4.1 - jest-matcher-utils: 29.4.1 - jest-message-util: 29.4.1 - jest-runtime: 29.4.1 - jest-snapshot: 29.4.1 - jest-util: 29.4.1 + jest-each: 29.4.3 + jest-matcher-utils: 29.4.3 + jest-message-util: 29.4.3 + jest-runtime: 29.4.3 + jest-snapshot: 29.4.3 + jest-util: 29.4.3 p-limit: 3.1.0 - pretty-format: 29.4.1 + pretty-format: 29.4.3 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: - supports-color dev: true - /jest-cli/29.4.1: - resolution: {integrity: sha512-jz7GDIhtxQ37M+9dlbv5K+/FVcIo1O/b1sX3cJgzlQUf/3VG25nvuWzlDC4F1FLLzUThJeWLu8I7JF9eWpuURQ==} + /jest-cli/29.4.3: + resolution: {integrity: sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -3957,26 +3978,26 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.4.1 - '@jest/test-result': 29.4.1 - '@jest/types': 29.4.1 + '@jest/core': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/types': 29.4.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.4.1 - jest-util: 29.4.1 - jest-validate: 29.4.1 + jest-config: 29.4.3 + jest-util: 29.4.3 + jest-validate: 29.4.3 prompts: 2.4.2 - yargs: 17.6.2 + yargs: 17.7.1 transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /jest-cli/29.4.1_@types+node@18.11.18: - resolution: {integrity: sha512-jz7GDIhtxQ37M+9dlbv5K+/FVcIo1O/b1sX3cJgzlQUf/3VG25nvuWzlDC4F1FLLzUThJeWLu8I7JF9eWpuURQ==} + /jest-cli/29.4.3_@types+node@18.14.0: + resolution: {integrity: sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -3985,26 +4006,26 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.4.1 - '@jest/test-result': 29.4.1 - '@jest/types': 29.4.1 + '@jest/core': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/types': 29.4.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.4.1_@types+node@18.11.18 - jest-util: 29.4.1 - jest-validate: 29.4.1 + jest-config: 29.4.3_@types+node@18.14.0 + jest-util: 29.4.3 + jest-validate: 29.4.3 prompts: 2.4.2 - yargs: 17.6.2 + yargs: 17.7.1 transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /jest-config/29.4.1: - resolution: {integrity: sha512-g7p3q4NuXiM4hrS4XFATTkd+2z0Ml2RhFmFPM8c3WyKwVDNszbl4E7cV7WIx1YZeqqCtqbtTtZhGZWJlJqngzg==} + /jest-config/29.4.3: + resolution: {integrity: sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -4015,34 +4036,34 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.20.12 - '@jest/test-sequencer': 29.4.1 - '@jest/types': 29.4.1 - babel-jest: 29.4.1_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@jest/test-sequencer': 29.4.3 + '@jest/types': 29.4.3 + babel-jest: 29.4.3_@babel+core@7.21.0 chalk: 4.1.2 - ci-info: 3.7.1 - deepmerge: 4.2.2 + ci-info: 3.8.0 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 - jest-circus: 29.4.1 - jest-environment-node: 29.4.1 - jest-get-type: 29.2.0 - jest-regex-util: 29.2.0 - jest-resolve: 29.4.1 - jest-runner: 29.4.1 - jest-util: 29.4.1 - jest-validate: 29.4.1 + jest-circus: 29.4.3 + jest-environment-node: 29.4.3 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.4.3 + jest-runner: 29.4.3 + jest-util: 29.4.3 + jest-validate: 29.4.3 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.4.1 + pretty-format: 29.4.3 slash: 3.0.0 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color dev: true - /jest-config/29.4.1_@types+node@18.11.18: - resolution: {integrity: sha512-g7p3q4NuXiM4hrS4XFATTkd+2z0Ml2RhFmFPM8c3WyKwVDNszbl4E7cV7WIx1YZeqqCtqbtTtZhGZWJlJqngzg==} + /jest-config/29.4.3_@types+node@18.14.0: + resolution: {integrity: sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -4053,140 +4074,140 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.20.12 - '@jest/test-sequencer': 29.4.1 - '@jest/types': 29.4.1 - '@types/node': 18.11.18 - babel-jest: 29.4.1_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@jest/test-sequencer': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 + babel-jest: 29.4.3_@babel+core@7.21.0 chalk: 4.1.2 - ci-info: 3.7.1 - deepmerge: 4.2.2 + ci-info: 3.8.0 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 - jest-circus: 29.4.1 - jest-environment-node: 29.4.1 - jest-get-type: 29.2.0 - jest-regex-util: 29.2.0 - jest-resolve: 29.4.1 - jest-runner: 29.4.1 - jest-util: 29.4.1 - jest-validate: 29.4.1 + jest-circus: 29.4.3 + jest-environment-node: 29.4.3 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.4.3 + jest-runner: 29.4.3 + jest-util: 29.4.3 + jest-validate: 29.4.3 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.4.1 + pretty-format: 29.4.3 slash: 3.0.0 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color dev: true - /jest-diff/29.4.1: - resolution: {integrity: sha512-uazdl2g331iY56CEyfbNA0Ut7Mn2ulAG5vUaEHXycf1L6IPyuImIxSz4F0VYBKi7LYIuxOwTZzK3wh5jHzASMw==} + /jest-diff/29.4.3: + resolution: {integrity: sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - diff-sequences: 29.3.1 - jest-get-type: 29.2.0 - pretty-format: 29.4.1 + diff-sequences: 29.4.3 + jest-get-type: 29.4.3 + pretty-format: 29.4.3 dev: true - /jest-docblock/29.2.0: - resolution: {integrity: sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==} + /jest-docblock/29.4.3: + resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each/29.4.1: - resolution: {integrity: sha512-QlYFiX3llJMWUV0BtWht/esGEz9w+0i7BHwODKCze7YzZzizgExB9MOfiivF/vVT0GSQ8wXLhvHXh3x2fVD4QQ==} + /jest-each/29.4.3: + resolution: {integrity: sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.1 + '@jest/types': 29.4.3 chalk: 4.1.2 - jest-get-type: 29.2.0 - jest-util: 29.4.1 - pretty-format: 29.4.1 + jest-get-type: 29.4.3 + jest-util: 29.4.3 + pretty-format: 29.4.3 dev: true - /jest-environment-node/29.4.1: - resolution: {integrity: sha512-x/H2kdVgxSkxWAIlIh9MfMuBa0hZySmfsC5lCsWmWr6tZySP44ediRKDUiNggX/eHLH7Cd5ZN10Rw+XF5tXsqg==} + /jest-environment-node/29.4.3: + resolution: {integrity: sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.1 - '@jest/fake-timers': 29.4.1 - '@jest/types': 29.4.1 - '@types/node': 18.11.18 - jest-mock: 29.4.1 - jest-util: 29.4.1 + '@jest/environment': 29.4.3 + '@jest/fake-timers': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 + jest-mock: 29.4.3 + jest-util: 29.4.3 dev: true - /jest-get-type/29.2.0: - resolution: {integrity: sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==} + /jest-get-type/29.4.3: + resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map/29.4.1: - resolution: {integrity: sha512-imTjcgfVVTvg02khXL11NNLTx9ZaofbAWhilrMg/G8dIkp+HYCswhxf0xxJwBkfhWb3e8dwbjuWburvxmcr58w==} + /jest-haste-map/29.4.3: + resolution: {integrity: sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.1 + '@jest/types': 29.4.3 '@types/graceful-fs': 4.1.6 - '@types/node': 18.11.18 + '@types/node': 18.14.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 - jest-regex-util: 29.2.0 - jest-util: 29.4.1 - jest-worker: 29.4.1 + jest-regex-util: 29.4.3 + jest-util: 29.4.3 + jest-worker: 29.4.3 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 dev: true - /jest-leak-detector/29.4.1: - resolution: {integrity: sha512-akpZv7TPyGMnH2RimOCgy+hPmWZf55EyFUvymQ4LMsQP8xSPlZumCPtXGoDhFNhUE2039RApZkTQDKU79p/FiQ==} + /jest-leak-detector/29.4.3: + resolution: {integrity: sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.2.0 - pretty-format: 29.4.1 + jest-get-type: 29.4.3 + pretty-format: 29.4.3 dev: true - /jest-matcher-utils/29.4.1: - resolution: {integrity: sha512-k5h0u8V4nAEy6lSACepxL/rw78FLDkBnXhZVgFneVpnJONhb2DhZj/Gv4eNe+1XqQ5IhgUcqj745UwH0HJmMnA==} + /jest-matcher-utils/29.4.3: + resolution: {integrity: sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - jest-diff: 29.4.1 - jest-get-type: 29.2.0 - pretty-format: 29.4.1 + jest-diff: 29.4.3 + jest-get-type: 29.4.3 + pretty-format: 29.4.3 dev: true - /jest-message-util/29.4.1: - resolution: {integrity: sha512-H4/I0cXUaLeCw6FM+i4AwCnOwHRgitdaUFOdm49022YD5nfyr8C/DrbXOBEyJaj+w/y0gGJ57klssOaUiLLQGQ==} + /jest-message-util/29.4.3: + resolution: {integrity: sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.18.6 - '@jest/types': 29.4.1 + '@jest/types': 29.4.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.10 micromatch: 4.0.5 - pretty-format: 29.4.1 + pretty-format: 29.4.3 slash: 3.0.0 stack-utils: 2.0.6 dev: true - /jest-mock/29.4.1: - resolution: {integrity: sha512-MwA4hQ7zBOcgVCVnsM8TzaFLVUD/pFWTfbkY953Y81L5ret3GFRZtmPmRFAjKQSdCKoJvvqOu6Bvfpqlwwb0dQ==} + /jest-mock/29.4.3: + resolution: {integrity: sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.1 - '@types/node': 18.11.18 - jest-util: 29.4.1 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 + jest-util: 29.4.3 dev: true - /jest-pnp-resolver/1.2.3_jest-resolve@29.4.1: + /jest-pnp-resolver/1.2.3_jest-resolve@29.4.3: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -4195,181 +4216,180 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.4.1 + jest-resolve: 29.4.3 dev: true - /jest-regex-util/29.2.0: - resolution: {integrity: sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==} + /jest-regex-util/29.4.3: + resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/29.4.1: - resolution: {integrity: sha512-Y3QG3M1ncAMxfjbYgtqNXC5B595zmB6e//p/qpA/58JkQXu/IpLDoLeOa8YoYfsSglBKQQzNUqtfGJJT/qLmJg==} + /jest-resolve-dependencies/29.4.3: + resolution: {integrity: sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-regex-util: 29.2.0 - jest-snapshot: 29.4.1 + jest-regex-util: 29.4.3 + jest-snapshot: 29.4.3 transitivePeerDependencies: - supports-color dev: true - /jest-resolve/29.4.1: - resolution: {integrity: sha512-j/ZFNV2lm9IJ2wmlq1uYK0Y/1PiyDq9g4HEGsNTNr3viRbJdV+8Lf1SXIiLZXFvyiisu0qUyIXGBnw+OKWkJwQ==} + /jest-resolve/29.4.3: + resolution: {integrity: sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 - jest-haste-map: 29.4.1 - jest-pnp-resolver: 1.2.3_jest-resolve@29.4.1 - jest-util: 29.4.1 - jest-validate: 29.4.1 + jest-haste-map: 29.4.3 + jest-pnp-resolver: 1.2.3_jest-resolve@29.4.3 + jest-util: 29.4.3 + jest-validate: 29.4.3 resolve: 1.22.1 resolve.exports: 2.0.0 slash: 3.0.0 dev: true - /jest-runner/29.4.1: - resolution: {integrity: sha512-8d6XXXi7GtHmsHrnaqBKWxjKb166Eyj/ksSaUYdcBK09VbjPwIgWov1VwSmtupCIz8q1Xv4Qkzt/BTo3ZqiCeg==} + /jest-runner/29.4.3: + resolution: {integrity: sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.4.1 - '@jest/environment': 29.4.1 - '@jest/test-result': 29.4.1 - '@jest/transform': 29.4.1 - '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@jest/console': 29.4.3 + '@jest/environment': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/transform': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 - jest-docblock: 29.2.0 - jest-environment-node: 29.4.1 - jest-haste-map: 29.4.1 - jest-leak-detector: 29.4.1 - jest-message-util: 29.4.1 - jest-resolve: 29.4.1 - jest-runtime: 29.4.1 - jest-util: 29.4.1 - jest-watcher: 29.4.1 - jest-worker: 29.4.1 + jest-docblock: 29.4.3 + jest-environment-node: 29.4.3 + jest-haste-map: 29.4.3 + jest-leak-detector: 29.4.3 + jest-message-util: 29.4.3 + jest-resolve: 29.4.3 + jest-runtime: 29.4.3 + jest-util: 29.4.3 + jest-watcher: 29.4.3 + jest-worker: 29.4.3 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color dev: true - /jest-runtime/29.4.1: - resolution: {integrity: sha512-UXTMU9uKu2GjYwTtoAw5rn4STxWw/nadOfW7v1sx6LaJYa3V/iymdCLQM6xy3+7C6mY8GfX22vKpgxY171UIoA==} + /jest-runtime/29.4.3: + resolution: {integrity: sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.1 - '@jest/fake-timers': 29.4.1 - '@jest/globals': 29.4.1 - '@jest/source-map': 29.2.0 - '@jest/test-result': 29.4.1 - '@jest/transform': 29.4.1 - '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@jest/environment': 29.4.3 + '@jest/fake-timers': 29.4.3 + '@jest/globals': 29.4.3 + '@jest/source-map': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/transform': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 graceful-fs: 4.2.10 - jest-haste-map: 29.4.1 - jest-message-util: 29.4.1 - jest-mock: 29.4.1 - jest-regex-util: 29.2.0 - jest-resolve: 29.4.1 - jest-snapshot: 29.4.1 - jest-util: 29.4.1 - semver: 7.3.8 + jest-haste-map: 29.4.3 + jest-message-util: 29.4.3 + jest-mock: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.4.3 + jest-snapshot: 29.4.3 + jest-util: 29.4.3 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /jest-snapshot/29.4.1: - resolution: {integrity: sha512-l4iV8EjGgQWVz3ee/LR9sULDk2pCkqb71bjvlqn+qp90lFwpnulHj4ZBT8nm1hA1C5wowXLc7MGnw321u0tsYA==} + /jest-snapshot/29.4.3: + resolution: {integrity: sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.20.12 - '@babel/generator': 7.20.7 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 - '@jest/expect-utils': 29.4.1 - '@jest/transform': 29.4.1 - '@jest/types': 29.4.1 + '@babel/core': 7.21.0 + '@babel/generator': 7.21.1 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.0 + '@babel/traverse': 7.21.0 + '@babel/types': 7.21.0 + '@jest/expect-utils': 29.4.3 + '@jest/transform': 29.4.3 + '@jest/types': 29.4.3 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.0 chalk: 4.1.2 - expect: 29.4.1 + expect: 29.4.3 graceful-fs: 4.2.10 - jest-diff: 29.4.1 - jest-get-type: 29.2.0 - jest-haste-map: 29.4.1 - jest-matcher-utils: 29.4.1 - jest-message-util: 29.4.1 - jest-util: 29.4.1 + jest-diff: 29.4.3 + jest-get-type: 29.4.3 + jest-haste-map: 29.4.3 + jest-matcher-utils: 29.4.3 + jest-message-util: 29.4.3 + jest-util: 29.4.3 natural-compare: 1.4.0 - pretty-format: 29.4.1 + pretty-format: 29.4.3 semver: 7.3.8 transitivePeerDependencies: - supports-color dev: true - /jest-util/29.4.1: - resolution: {integrity: sha512-bQy9FPGxVutgpN4VRc0hk6w7Hx/m6L53QxpDreTZgJd9gfx/AV2MjyPde9tGyZRINAUrSv57p2inGBu2dRLmkQ==} + /jest-util/29.4.3: + resolution: {integrity: sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 chalk: 4.1.2 - ci-info: 3.7.1 + ci-info: 3.8.0 graceful-fs: 4.2.10 picomatch: 2.3.1 dev: true - /jest-validate/29.4.1: - resolution: {integrity: sha512-qNZXcZQdIQx4SfUB/atWnI4/I2HUvhz8ajOSYUu40CSmf9U5emil8EDHgE7M+3j9/pavtk3knlZBDsgFvv/SWw==} + /jest-validate/29.4.3: + resolution: {integrity: sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.1 + '@jest/types': 29.4.3 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 29.2.0 + jest-get-type: 29.4.3 leven: 3.1.0 - pretty-format: 29.4.1 + pretty-format: 29.4.3 dev: true - /jest-watcher/29.4.1: - resolution: {integrity: sha512-vFOzflGFs27nU6h8dpnVRER3O2rFtL+VMEwnG0H3KLHcllLsU8y9DchSh0AL/Rg5nN1/wSiQ+P4ByMGpuybaVw==} + /jest-watcher/29.4.3: + resolution: {integrity: sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.4.1 - '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@jest/test-result': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.14.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.4.1 + jest-util: 29.4.3 string-length: 4.0.2 dev: true - /jest-worker/29.4.1: - resolution: {integrity: sha512-O9doU/S1EBe+yp/mstQ0VpPwpv0Clgn68TkNwGxL6/usX/KUW9Arnn4ag8C3jc6qHcXznhsT5Na1liYzAsuAbQ==} + /jest-worker/29.4.3: + resolution: {integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.11.18 - jest-util: 29.4.1 + '@types/node': 18.14.0 + jest-util: 29.4.3 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest/29.4.1: - resolution: {integrity: sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg==} + /jest/29.4.3: + resolution: {integrity: sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -4378,18 +4398,18 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.4.1 - '@jest/types': 29.4.1 + '@jest/core': 29.4.3 + '@jest/types': 29.4.3 import-local: 3.1.0 - jest-cli: 29.4.1 + jest-cli: 29.4.3 transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /jest/29.4.1_@types+node@18.11.18: - resolution: {integrity: sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg==} + /jest/29.4.3_@types+node@18.14.0: + resolution: {integrity: sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -4398,10 +4418,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.4.1 - '@jest/types': 29.4.1 + '@jest/core': 29.4.3 + '@jest/types': 29.4.3 import-local: 3.1.0 - jest-cli: 29.4.1_@types+node@18.11.18 + jest-cli: 29.4.3_@types+node@18.14.0 transitivePeerDependencies: - '@types/node' - supports-color @@ -4452,7 +4472,7 @@ packages: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true dependencies: - minimist: 1.2.7 + minimist: 1.2.8 /json5/2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} @@ -4607,8 +4627,8 @@ packages: unist-util-visit: 4.1.2 dev: true - /mdast-util-from-markdown/1.2.0: - resolution: {integrity: sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==} + /mdast-util-from-markdown/1.3.0: + resolution: {integrity: sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==} dependencies: '@types/mdast': 3.0.10 '@types/unist': 2.0.6 @@ -4626,50 +4646,56 @@ packages: - supports-color dev: true - /mdast-util-mdx-expression/1.3.1: - resolution: {integrity: sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==} + /mdast-util-mdx-expression/1.3.2: + resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} dependencies: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 '@types/mdast': 3.0.10 - mdast-util-from-markdown: 1.2.0 + mdast-util-from-markdown: 1.3.0 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color dev: true - /mdast-util-mdx-jsx/2.1.0: - resolution: {integrity: sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==} + /mdast-util-mdx-jsx/2.1.2: + resolution: {integrity: sha512-o9vBCYQK5ZLGEj3tCGISJGjvafyHRVJlZmfJzSE7xjiogSzIeph/Z4zMY65q4WGRMezQBeAwPlrdymDYYYx0tA==} dependencies: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 ccount: 2.0.1 + mdast-util-from-markdown: 1.3.0 mdast-util-to-markdown: 1.5.0 - parse-entities: 4.0.0 + parse-entities: 4.0.1 stringify-entities: 4.0.3 unist-util-remove-position: 4.0.2 unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.3 - dev: true - - /mdast-util-mdx/2.0.0: - resolution: {integrity: sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==} - dependencies: - mdast-util-mdx-expression: 1.3.1 - mdast-util-mdx-jsx: 2.1.0 - mdast-util-mdxjs-esm: 1.3.0 + vfile-message: 3.1.4 transitivePeerDependencies: - supports-color dev: true - /mdast-util-mdxjs-esm/1.3.0: - resolution: {integrity: sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==} + /mdast-util-mdx/2.0.1: + resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + dependencies: + mdast-util-from-markdown: 1.3.0 + mdast-util-mdx-expression: 1.3.2 + mdast-util-mdx-jsx: 2.1.2 + mdast-util-mdxjs-esm: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-mdxjs-esm/1.3.1: + resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} dependencies: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 '@types/mdast': 3.0.10 - mdast-util-from-markdown: 1.2.0 + mdast-util-from-markdown: 1.3.0 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color @@ -4682,15 +4708,14 @@ packages: unist-util-is: 5.2.0 dev: true - /mdast-util-to-hast/12.2.6: - resolution: {integrity: sha512-Kfo1JNUsi6r6CI7ZOJ6yt/IEKMjMK4nNjQ8C+yc8YBbIlDSp9dmj0zY90ryiu6Vy4CVGv0zi1H4ZoIaYVV8cwA==} + /mdast-util-to-hast/12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} dependencies: '@types/hast': 2.3.4 '@types/mdast': 3.0.10 mdast-util-definitions: 5.1.2 micromark-util-sanitize-uri: 1.1.0 trim-lines: 3.0.1 - unist-builder: 3.0.1 unist-util-generated: 2.0.1 unist-util-position: 4.0.4 unist-util-visit: 4.1.2 @@ -4767,7 +4792,7 @@ packages: micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 uvu: 0.5.6 - vfile-message: 3.1.3 + vfile-message: 3.1.4 dev: true /micromark-extension-mdx-md/1.0.0: @@ -4786,7 +4811,7 @@ packages: micromark-util-types: 1.0.2 unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 - vfile-message: 3.1.3 + vfile-message: 3.1.4 dev: true /micromark-extension-mdxjs/1.0.0: @@ -4829,7 +4854,7 @@ packages: micromark-util-types: 1.0.2 unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 - vfile-message: 3.1.3 + vfile-message: 3.1.4 dev: true /micromark-factory-space/1.0.0: @@ -4913,8 +4938,8 @@ packages: estree-util-visit: 1.2.1 micromark-util-types: 1.0.2 uvu: 0.5.6 - vfile-location: 4.0.1 - vfile-message: 3.1.3 + vfile-location: 4.1.0 + vfile-message: 3.1.4 dev: true /micromark-util-html-tag-name/1.1.0: @@ -5016,10 +5041,10 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimist/1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - /mobx-react-lite/3.4.0_jofyzmwkboewm6mjrhi25mngky: + /mobx-react-lite/3.4.0_woojb62cqeyk443mbl7msrwu2e: resolution: {integrity: sha512-bRuZp3C0itgLKHu/VNxi66DN/XVkQG7xtoBVWxpvC5FhAqbOCP21+nPhULjnzEqd7xBMybp6KwytdUpZKEgpIQ==} peerDependencies: mobx: ^6.1.0 @@ -5032,13 +5057,13 @@ packages: react-native: optional: true dependencies: - mobx: 6.7.0 + mobx: 6.8.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: false - /mobx/6.7.0: - resolution: {integrity: sha512-1kBLBdSNG2bA522HQdbsTvwAwYf9hq9FWxmlhX7wTsJUAI54907J+ozfGW+LoYUo06vjit748g6QH1AAGLNebw==} + /mobx/6.8.0: + resolution: {integrity: sha512-+o/DrHa4zykFMSKfS8Z+CPSEg5LW9tSNGTuN8o6MF1GKxlfkSHSeJn5UtgxvPkGgaouplnrLXCF+duAsmm6FHQ==} dev: false /mri/1.2.0: @@ -5085,7 +5110,7 @@ packages: dependencies: '@next/env': 13.1.5 '@swc/helpers': 0.4.14 - caniuse-lite: 1.0.30001448 + caniuse-lite: 1.0.30001457 postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -5109,8 +5134,8 @@ packages: - babel-plugin-macros dev: false - /node-fetch/2.6.8: - resolution: {integrity: sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==} + /node-fetch/2.6.9: + resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -5125,8 +5150,8 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases/2.0.8: - resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==} + /node-releases/2.0.10: + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true /normalize-path/3.0.0: @@ -5163,7 +5188,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 dev: true /object-keys/1.1.1: @@ -5175,7 +5200,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -5184,7 +5209,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 dev: true @@ -5193,14 +5218,14 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 dev: true /object.hasown/1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 dev: true @@ -5209,7 +5234,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 /once/1.4.0: @@ -5224,8 +5249,8 @@ packages: mimic-fn: 2.1.0 dev: true - /open/8.4.0: - resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} + /open/8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 @@ -5310,8 +5335,8 @@ packages: dependencies: callsites: 3.1.0 - /parse-entities/4.0.0: - resolution: {integrity: sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==} + /parse-entities/4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: '@types/unist': 2.0.6 character-entities: 2.0.2 @@ -5434,11 +5459,11 @@ packages: hasBin: true dev: true - /pretty-format/29.4.1: - resolution: {integrity: sha512-dt/Z761JUVsrIKaY215o1xQJBGlSmTx/h4cSqXqjHLnU1+Kt+mavVE7UgqJJO5ukx5HjSswHfmXz4LjS2oIJfg==} + /pretty-format/29.4.3: + resolution: {integrity: sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.0 + '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 react-is: 18.2.0 dev: true @@ -5534,17 +5559,17 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 functions-have-names: 1.2.3 /regexpp/3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} - /remark-mdx/2.2.1: - resolution: {integrity: sha512-R9wcN+/THRXTKyRBp6Npo/mcbGA2iT3N4G8qUqLA5pOEg7kBidHv8K2hHidCMYZ6DXmwK18umu0K4cicgA2PPQ==} + /remark-mdx/2.3.0: + resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} dependencies: - mdast-util-mdx: 2.0.0 + mdast-util-mdx: 2.0.1 micromark-extension-mdxjs: 1.0.0 transitivePeerDependencies: - supports-color @@ -5554,7 +5579,7 @@ packages: resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} dependencies: '@types/mdast': 3.0.10 - mdast-util-from-markdown: 1.2.0 + mdast-util-from-markdown: 1.3.0 unified: 10.1.2 transitivePeerDependencies: - supports-color @@ -5565,7 +5590,7 @@ packages: dependencies: '@types/hast': 2.3.4 '@types/mdast': 3.0.10 - mdast-util-to-hast: 12.2.6 + mdast-util-to-hast: 12.3.0 unified: 10.1.2 dev: true @@ -5631,7 +5656,7 @@ packages: /rtl-css-js/1.16.1: resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 dev: false /run-parallel/1.2.0: @@ -5800,7 +5825,7 @@ packages: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} dependencies: - internal-slot: 1.0.4 + internal-slot: 1.0.5 dev: true /strict-uri-encode/1.1.0: @@ -5829,11 +5854,11 @@ packages: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 get-intrinsic: 1.2.0 has-symbols: 1.0.3 - internal-slot: 1.0.4 + internal-slot: 1.0.5 regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 dev: true @@ -5842,14 +5867,14 @@ packages: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 /string.prototype.trimstart/1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 /string_decoder/1.1.1: @@ -5953,8 +5978,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /synckit/0.8.4: - resolution: {integrity: sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==} + /synckit/0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/utils': 2.3.1 @@ -6049,7 +6074,7 @@ packages: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: true - /ts-jest/29.0.5_xnqx6kewz4og5i3pgc6ahzwloy: + /ts-jest/29.0.5_orzzknleilowtsz34rkaotjvzm: resolution: {integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6072,13 +6097,13 @@ packages: dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.4.1_@types+node@18.11.18 - jest-util: 29.4.1 + jest: 29.4.3_@types+node@18.14.0 + jest-util: 29.4.3 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.3.8 - typescript: 4.9.4 + typescript: 4.9.5 yargs-parser: 21.1.1 dev: true @@ -6087,7 +6112,7 @@ packages: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 - minimist: 1.2.7 + minimist: 1.2.8 strip-bom: 3.0.0 /tslib/1.14.1: @@ -6096,14 +6121,14 @@ packages: /tslib/2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsutils/3.21.0_typescript@4.9.4: + /tsutils/3.21.0_typescript@4.9.5: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.9.4 + typescript: 4.9.5 /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -6132,8 +6157,8 @@ packages: for-each: 0.3.3 is-typed-array: 1.1.10 - /typescript/4.9.4: - resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} + /typescript/4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true @@ -6161,13 +6186,7 @@ packages: is-buffer: 2.0.5 is-plain-obj: 4.1.0 trough: 2.1.0 - vfile: 5.3.6 - dev: true - - /unist-builder/3.0.1: - resolution: {integrity: sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ==} - dependencies: - '@types/unist': 2.0.6 + vfile: 5.3.7 dev: true /unist-util-generated/2.0.1: @@ -6218,13 +6237,13 @@ packages: unist-util-visit-parents: 5.1.3 dev: true - /update-browserslist-db/1.0.10_browserslist@4.21.4: + /update-browserslist-db/1.0.10_browserslist@4.21.5: resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 escalade: 3.1.1 picocolors: 1.0.0 dev: true @@ -6261,8 +6280,8 @@ packages: sade: 1.8.1 dev: true - /v8-to-istanbul/9.0.1: - resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} + /v8-to-istanbul/9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: '@jridgewell/trace-mapping': 0.3.17 @@ -6270,27 +6289,27 @@ packages: convert-source-map: 1.9.0 dev: true - /vfile-location/4.0.1: - resolution: {integrity: sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==} + /vfile-location/4.1.0: + resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} dependencies: '@types/unist': 2.0.6 - vfile: 5.3.6 + vfile: 5.3.7 dev: true - /vfile-message/3.1.3: - resolution: {integrity: sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==} + /vfile-message/3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: '@types/unist': 2.0.6 unist-util-stringify-position: 3.0.3 dev: true - /vfile/5.3.6: - resolution: {integrity: sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==} + /vfile/5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: '@types/unist': 2.0.6 is-buffer: 2.0.5 unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.3 + vfile-message: 3.1.4 dev: true /walker/1.0.8: @@ -6308,8 +6327,8 @@ packages: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true - /webm-muxer/1.1.9: - resolution: {integrity: sha512-hHU/6WRwGRcIDjIzRXbY+mB60V8sZOzHBUX4TSXKDiFir1p5V7NSylcXjn5jzN0aMq+mpoAJLVo1GQUNq2TuuA==} + /webm-muxer/1.2.1: + resolution: {integrity: sha512-FaH7GVeK9tOZoWEW0gT/ryR9EoZnDe/RplJlTkG6zPWfEdrIy24PaXwEiyUnKwwO3zsjJWzFq4DLHECqGdJXIw==} dependencies: '@types/dom-webcodecs': 0.1.5 '@types/wicg-file-system-access': 2020.9.5 @@ -6374,9 +6393,9 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic/5.0.0: - resolution: {integrity: sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + /write-file-atomic/4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 @@ -6432,8 +6451,8 @@ packages: engines: {node: '>=12'} dev: true - /yargs/17.6.2: - resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} + /yargs/17.7.1: + resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} engines: {node: '>=12'} dependencies: cliui: 8.0.1 diff --git a/common/config/rush/repo-state.json b/common/config/rush/repo-state.json index ee42553b..02d2c155 100644 --- a/common/config/rush/repo-state.json +++ b/common/config/rush/repo-state.json @@ -1,5 +1,5 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "3e5a716ba1e8bfb6c9b5bd7018741744d14f80d0", + "pnpmShrinkwrapHash": "8b04c1bdf0fa11f10bb4abc856fd9d1c0903908e", "preferredVersionsHash": "bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f" } diff --git a/libraries/aoa/.eslintrc.cjs b/libraries/aoa/.eslintrc.cjs new file mode 100644 index 00000000..e225d0db --- /dev/null +++ b/libraries/aoa/.eslintrc.cjs @@ -0,0 +1,11 @@ +module.exports = { + "extends": [ + "@yume-chan" + ], + parserOptions: { + tsconfigRootDir: __dirname, + project: [ + "./tsconfig.test.json" + ], + }, +} diff --git a/libraries/aoa/.npmignore b/libraries/aoa/.npmignore new file mode 100644 index 00000000..e44e2e62 --- /dev/null +++ b/libraries/aoa/.npmignore @@ -0,0 +1,16 @@ +.rush + +# Test +coverage +**/*.spec.ts +**/*.spec.js +**/*.spec.js.map +**/__helpers__ +jest.config.js + +.eslintrc.cjs +tsconfig.json +tsconfig.test.json + +# Logs +*.log diff --git a/libraries/aoa/LICENSE b/libraries/aoa/LICENSE new file mode 100644 index 00000000..9bd36e79 --- /dev/null +++ b/libraries/aoa/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2023 Simon Chan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/libraries/aoa/README.md b/libraries/aoa/README.md new file mode 100644 index 00000000..1da671a3 --- /dev/null +++ b/libraries/aoa/README.md @@ -0,0 +1,3 @@ +# @yume-chan/aoa + +A TypeScript implementation of [Android Open Accessory](https://source.android.com/docs/core/interaction/accessories/protocol) protocol using WebUSB API. diff --git a/libraries/aoa/package.json b/libraries/aoa/package.json new file mode 100644 index 00000000..841321fe --- /dev/null +++ b/libraries/aoa/package.json @@ -0,0 +1,42 @@ +{ + "name": "@yume-chan/aoa", + "version": "0.0.18", + "description": "TypeScript implementation of Android Open Accessory protocol.", + "keywords": [ + "adb", + "android-phone" + ], + "license": "MIT", + "author": { + "name": "Simon Chan", + "email": "cnsimonchan@live.com", + "url": "https://chensi.moe/blog" + }, + "homepage": "https://github.com/yume-chan/ya-webadb/tree/main/packages/aoa#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/yume-chan/ya-webadb.git", + "directory": "packages/aoa" + }, + "bugs": { + "url": "https://github.com/yume-chan/ya-webadb/issues" + }, + "type": "module", + "main": "esm/index.js", + "types": "esm/index.d.ts", + "scripts": { + "build": "tsc -b tsconfig.build.json", + "build:watch": "tsc -b tsconfig.build.json", + "lint": "eslint src/**/*.ts --fix", + "prepublishOnly": "npm run build" + }, + "dependencies": { + "@types/w3c-web-usb": "^1.0.6" + }, + "devDependencies": { + "@yume-chan/eslint-config": "workspace:^1.0.0", + "@yume-chan/tsconfig": "workspace:^1.0.0", + "eslint": "^8.31.0", + "typescript": "^4.9.4" + } +} diff --git a/libraries/aoa/src/audio.ts b/libraries/aoa/src/audio.ts new file mode 100644 index 00000000..78605c96 --- /dev/null +++ b/libraries/aoa/src/audio.ts @@ -0,0 +1,125 @@ +import { AoaRequestType } from "./type.js"; + +// The original plan is to add more audio modes, +// but AOA audio accessory mode is soon deprecated in Android 8. +export enum AoaAudioMode { + Off, + /** + * 2 channel, 16 bit, 44.1KHz PCM + */ + On, +} + +/** + * Sets the audio mode. This method must be called before {@link aoaStartAccessory}. + * + * AOA audio accessory mode turns the Android device into a USB microphone, + * all system audio will be directed to the microphone, to be capture by the USB host. + * + * It's like connecting a audio cable between the Android headphone jack and PC microphone jack, + * except all signals are digital. + * + * Audio mode is deprecated in Android 8. On Android 9 and later, this call still switches the device + * to audio accessory mode, and the device will be recognized as a USB microphone, but the + * required USB endpoint is not presented anymore. + * @param device The Android device. + * @param mode The audio mode. + */ +export async function aoaSetAudioMode(device: USBDevice, mode: AoaAudioMode) { + await device.controlTransferOut( + { + recipient: "device", + requestType: "vendor", + request: AoaRequestType.SetAudioMode, + value: mode, + index: 0, + }, + new ArrayBuffer(0) + ); +} + +function findAudioStreamingInterface(device: USBDevice) { + for (const configuration of device.configurations) { + for (const interface_ of configuration.interfaces) { + for (const alternate of interface_.alternates) { + // Audio + if (alternate.interfaceClass !== 0x01) { + continue; + } + // AudioStreaming + if (alternate.interfaceSubclass !== 0x02) { + continue; + } + if (alternate.endpoints.length === 0) { + continue; + } + return { configuration, interface_, alternate }; + } + } + } + + throw new Error("No matched alternate interface found"); +} + +/** + * It doesn't work on Web, because Chrome blocked audio devices from WebUSB API. + * @param device The Android device. + * @returns A readable stream of raw audio data. + */ +export function aoaGetAudioStream(device: USBDevice) { + let endpointNumber!: number; + return new ReadableStream({ + async start() { + const { configuration, interface_, alternate } = + findAudioStreamingInterface(device); + + if ( + device.configuration?.configurationValue !== + configuration.configurationValue + ) { + await device.selectConfiguration( + configuration.configurationValue + ); + } + + if (!interface_.claimed) { + await device.claimInterface(interface_.interfaceNumber); + } + + if ( + interface_.alternate.alternateSetting !== + alternate.alternateSetting + ) { + await device.selectAlternateInterface( + interface_.interfaceNumber, + alternate.alternateSetting + ); + } + + const endpoint = alternate.endpoints.find( + (endpoint) => + endpoint.type === "isochronous" && + endpoint.direction === "in" + ); + if (!endpoint) { + throw new Error("No matched endpoint found"); + } + + endpointNumber = endpoint.endpointNumber; + }, + async pull(controller) { + const result = await device.isochronousTransferIn(endpointNumber, [ + 1024, + ]); + for (const packet of result.packets) { + const data = packet.data!; + const array = new Uint8Array( + data.buffer, + data.byteOffset, + data.byteLength + ); + controller.enqueue(array); + } + }, + }); +} diff --git a/libraries/aoa/src/filter.ts b/libraries/aoa/src/filter.ts new file mode 100644 index 00000000..2a97047f --- /dev/null +++ b/libraries/aoa/src/filter.ts @@ -0,0 +1,12 @@ +export const AOA_DEFAULT_DEVICE_FILTERS = [ + { + vendorId: 0x18d1, + // accessory + productId: 0x2d00, + }, + { + vendorId: 0x18d1, + // accessory + adb + productId: 0x2d01, + }, +] as const satisfies readonly USBDeviceFilter[]; diff --git a/libraries/aoa/src/hid.ts b/libraries/aoa/src/hid.ts new file mode 100644 index 00000000..38286230 --- /dev/null +++ b/libraries/aoa/src/hid.ts @@ -0,0 +1,105 @@ +import { AoaRequestType } from "./type.js"; + +export async function aoaHidRegister( + device: USBDevice, + accessoryId: number, + reportDescriptorSize: number +) { + await device.controlTransferOut( + { + recipient: "device", + requestType: "vendor", + request: AoaRequestType.RegisterHid, + value: accessoryId, + index: reportDescriptorSize, + }, + new ArrayBuffer(0) + ); +} + +export async function aoaHidSetReportDescriptor( + device: USBDevice, + accessoryId: number, + reportDescriptor: Uint8Array +) { + await device.controlTransferOut( + { + recipient: "device", + requestType: "vendor", + request: AoaRequestType.SetHidReportDescriptor, + value: accessoryId, + index: 0, + }, + reportDescriptor + ); +} + +export async function aoaHidUnregister(device: USBDevice, accessoryId: number) { + await device.controlTransferOut( + { + recipient: "device", + requestType: "vendor", + request: AoaRequestType.UnregisterHid, + value: accessoryId, + index: 0, + }, + new ArrayBuffer(0) + ); +} + +export async function aoaHidSendInputReport( + device: USBDevice, + accessoryId: number, + event: Uint8Array +) { + await device.controlTransferOut( + { + recipient: "device", + requestType: "vendor", + request: AoaRequestType.SendHidEvent, + value: accessoryId, + index: 0, + }, + event + ); +} + +/** + * Emulate a HID device over AOA protocol. + * + * It can only send input reports, but not send feature reports nor receive output reports. + */ +export class AoaHidDevice { + /** + * Register a HID device. + * @param device The Android device. + * @param accessoryId An arbitrary number to uniquely identify the HID device. + * @param reportDescriptor The HID report descriptor. + * @returns An instance of AoaHidDevice to send events. + */ + public static async register( + device: USBDevice, + accessoryId: number, + reportDescriptor: Uint8Array + ) { + await aoaHidRegister(device, accessoryId, reportDescriptor.length); + await aoaHidSetReportDescriptor(device, accessoryId, reportDescriptor); + return new AoaHidDevice(device, accessoryId); + } + + private _device: USBDevice; + private _accessoryId: number; + + private constructor(device: USBDevice, accessoryId: number) { + this._device = device; + this._accessoryId = accessoryId; + } + + public async sendInputReport(event: Uint8Array) { + await aoaHidSendInputReport(this._device, this._accessoryId, event); + } + + public async unregister() { + await aoaHidUnregister(this._device, this._accessoryId); + } +} diff --git a/libraries/aoa/src/index.ts b/libraries/aoa/src/index.ts new file mode 100644 index 00000000..debeaeae --- /dev/null +++ b/libraries/aoa/src/index.ts @@ -0,0 +1,7 @@ +export * from "./audio.js"; +export * from "./filter.js"; +export * from "./hid.js"; +export * from "./initialize.js"; +export * from "./keyboard.js"; +export * from "./mouse.js"; +export * from "./type.js"; diff --git a/libraries/aoa/src/initialize.ts b/libraries/aoa/src/initialize.ts new file mode 100644 index 00000000..ff7f06d5 --- /dev/null +++ b/libraries/aoa/src/initialize.ts @@ -0,0 +1,33 @@ +import { AoaRequestType } from "./type.js"; + +export async function aoaGetProtocol(device: USBDevice) { + const result = await device.controlTransferIn( + { + recipient: "device", + requestType: "vendor", + request: AoaRequestType.GetProtocol, + value: 0, + index: 0, + }, + 2 + ); + const version = result.data!.getUint16(0, true); + return version; +} + +/** + * The device will reset (disconnect) after this call. + * @param device The Android device. + */ +export async function aoaStartAccessory(device: USBDevice) { + await device.controlTransferOut( + { + recipient: "device", + requestType: "vendor", + request: AoaRequestType.Start, + value: 0, + index: 0, + }, + new ArrayBuffer(0) + ); +} diff --git a/libraries/aoa/src/keyboard.ts b/libraries/aoa/src/keyboard.ts new file mode 100644 index 00000000..e6a04be2 --- /dev/null +++ b/libraries/aoa/src/keyboard.ts @@ -0,0 +1,311 @@ +// cspell:ignore Oper + +// Most names follow Web API `KeyboardEvent.code`, +export enum HidKeyCode { + KeyA = 4, + KeyB, + KeyC, + KeyD, + KeyE, + KeyF, + KeyG, + KeyH, + KeyI, + KeyJ, + KeyK, + KeyL, + KeyM, + KeyN, + KeyO, + KeyP, + KeyQ, + KeyR, + KeyS, + KeyT, + KeyU, + KeyV, + KeyW, + KeyX, + KeyY, + KeyZ, + Digit1, + Digit2, + Digit3, + Digit4, + Digit5, + Digit6, + Digit7, + Digit8, + Digit9, + Digit0, + Enter, + Escape, + Backspace, + Tab, + Space, + Minus, + Equal, + BracketLeft, + BracketRight, + Backslash, + NonUsHash, + Semicolon, + Quote, + Backquote, + Comma, + Period, + Slash, + CapsLock, + F1, + F2, + F3, + F4, + F5, + F6, + F7, + F8, + F9, + F10, + F11, + F12, + PrintScreen, + ScrollLock, + Pause, + Insert, + Home, + PageUp, + Delete, + End, + PageDown, + ArrowRight, + ArrowLeft, + ArrowDown, + ArrowUp, + NumLock, + NumpadDivide, + NumpadMultiply, + NumpadSubtract, + NumpadAdd, + NumpadEnter, + Numpad1, + Numpad2, + Numpad3, + Numpad4, + Numpad5, + Numpad6, + Numpad7, + Numpad8, + Numpad9, + Numpad0, + NumpadDecimal, + NonUsBackslash, + ContextMenu, + Power, + NumpadEqual, + F13, + F14, + F15, + F16, + F17, + F18, + F19, + F20, + F21, + F22, + F23, + F24, + + Execute, + Help, + Menu, + Select, + Stop, + Again, + Undo, + Cut, + Copy, + Paste, + Find, + Mute, + VolumeUp, + VolumeDown, + LockingCapsLock, + LockingNumLock, + LockingScrollLock, + NumpadComma, + KeypadEqualSign, + International1, + International2, + International3, + International4, + International5, + International6, + International7, + International8, + International9, + Lang1, + Lang2, + Lang3, + Lang4, + Lang5, + Lang6, + Lang7, + Lang8, + Lang9, + AlternateErase, + SysReq, + Cancel, + Clear, + Prior, + Return2, + Separator, + Out, + Oper, + ClearAgain, + CrSel, + ExSel, + + Keypad00 = 0xb0, + Keypad000, + ThousandsSeparator, + DecimalSeparator, + CurrencyUnit, + CurrencySubUnit, + KeypadLeftParen, + KeypadRightParen, + KeypadLeftBrace, + KeypadRightBrace, + KeypadTab, + KeypadBackspace, + KeypadA, + KeypadB, + KeypadC, + KeypadD, + KeypadE, + KeypadF, + KeypadXor, + KeypadPower, + KeypadPercent, + KeypadLess, + KeypadGreater, + KeypadAmpersand, + KeypadDblAmpersand, + KeypadVerticalBar, + KeypadDblVerticalBar, + KeypadColon, + KeypadHash, + KeypadSpace, + KeypadAt, + KeypadExclamation, + KeypadMemStore, + KeypadMemRecall, + KeypadMemClear, + KeypadMemAdd, + KeypadMemSubtract, + KeypadMemMultiply, + KeypadMemDivide, + KeypadPlusMinus, + KeypadClear, + KeypadClearEntry, + KeypadBinary, + KeypadOctal, + KeypadDecimal, + KeypadHexadecimal, + + ControlLeft = 0xe0, + ShiftLeft, + AltLeft, + MetaLeft, + ControlRight, + ShiftRight, + AltRight, + MetaRight, +} + +export class HidKeyboard { + /** + * A HID Keyboard Report Descriptor. + * + * It's compatible with the legacy boot protocol. (1 byte modifier, 1 byte reserved, 6 bytes key codes). + * Technically it doesn't need to be compatible with the legacy boot protocol, but it's the most common implementation. + */ + public static readonly DESCRIPTOR = new Uint8Array( + // prettier-ignore + [ + 0x05, 0x01, // Usage Page (Generic Desktop) + 0x09, 0x06, // Usage (Keyboard) + 0xa1, 0x01, // Collection (Application) + 0x05, 0x07, // Usage Page (Keyboard) + 0x19, 0xe0, // Usage Minimum (Keyboard Left Control) + 0x29, 0xe7, // Usage Maximum (Keyboard Right GUI) + 0x15, 0x00, // Logical Minimum (0) + 0x25, 0x01, // Logical Maximum (1) + 0x75, 0x01, // Report Size (1) + 0x95, 0x08, // Report Count (8) + 0x81, 0x02, // Input (Data, Variable, Absolute) + + 0x75, 0x08, // Report Size (8) + 0x95, 0x01, // Report Count (1) + 0x81, 0x01, // Input (Constant) + + 0x05, 0x08, // Usage Page (LEDs) + 0x19, 0x01, // Usage Minimum (Num Lock) + 0x29, 0x05, // Usage Maximum (Kana) + 0x75, 0x01, // Report Size (1) + 0x95, 0x05, // Report Count (5) + 0x91, 0x02, // Output (Data, Variable, Absolute) + + 0x75, 0x03, // Report Size (3) + 0x95, 0x01, // Report Count (1) + 0x91, 0x01, // Output (Constant) + + 0x05, 0x07, // Usage Page (Keyboard) + 0x19, 0x00, // Usage Minimum (Reserved (no event indicated)) + 0x29, 0xdd, // Usage Maximum (Keyboard Application) + 0x15, 0x00, // Logical Minimum (0) + 0x25, 0xdd, // Logical Maximum (221) + 0x75, 0x08, // Report Size (8) + 0x95, 0x06, // Report Count (6) + 0x81, 0x00, // Input (Data, Array) + 0xc0 // End Collection + ] + ); + + private _modifiers = 0; + private _keys: Set = new Set(); + + public down(key: HidKeyCode) { + if (key >= HidKeyCode.ControlLeft && key <= HidKeyCode.MetaRight) { + this._modifiers |= 1 << (key - HidKeyCode.ControlLeft); + } else { + this._keys.add(key); + } + } + + public up(key: HidKeyCode) { + if (key >= HidKeyCode.ControlLeft && key <= HidKeyCode.MetaRight) { + this._modifiers &= ~(1 << (key - HidKeyCode.ControlLeft)); + } else { + this._keys.delete(key); + } + } + + public reset() { + this._modifiers = 0; + this._keys.clear(); + } + + public serializeInputReport() { + const buffer = new Uint8Array(8); + buffer[0] = this._modifiers; + let i = 2; + for (const key of this._keys) { + buffer[i] = key; + i += 1; + if (i >= 8) { + break; + } + } + return buffer; + } +} diff --git a/libraries/aoa/src/mouse.ts b/libraries/aoa/src/mouse.ts new file mode 100644 index 00000000..f27d401c --- /dev/null +++ b/libraries/aoa/src/mouse.ts @@ -0,0 +1,60 @@ +export class HidMouse { + public static readonly descriptor = new Uint8Array( + // prettier-ignore + [ + 0x05, 0x01, // Usage Page (Generic Desktop) + 0x09, 0x02, // Usage (Mouse) + 0xa1, 0x01, // Collection (Application) + 0x09, 0x01, // Usage (Pointer) + 0xa1, 0x00, // Collection (Physical) + 0x05, 0x09, // Usage Page (Button) + 0x19, 0x01, // Usage Minimum (Button 1) + 0x29, 0x05, // Usage Maximum (Button 5) + 0x15, 0x00, // Logical Minimum (0) + 0x25, 0x01, // Logical Maximum (1) + 0x75, 0x01, // Report Size (1) + 0x95, 0x05, // Report Count (5) + 0x81, 0x02, // Input (Data, Variable, Absolute) + + 0x75, 0x03, // Report Size (3) + 0x95, 0x01, // Report Count (1) + 0x81, 0x01, // Input (Constant) + + 0x05, 0x01, // Usage Page (Generic Desktop) + 0x09, 0x30, // Usage (X) + 0x09, 0x31, // Usage (Y) + 0x09, 0x38, // Usage (Wheel) + 0x15, 0x81, // Logical Minimum (-127) + 0x25, 0x7f, // Logical Maximum (127) + 0x75, 0x08, // Report Size (8) + 0x95, 0x03, // Report Count (3) + 0x81, 0x06, // Input (Data, Variable, Relative) + + 0x05, 0x0C, // Usage Page (Consumer) + 0x0A, 0x38, 0x02, // Usage (AC Pan) + 0x15, 0x81, // Logical Minimum (-127) + 0x25, 0x7f, // Logical Maximum (127) + 0x75, 0x08, // Report Size (8) + 0x95, 0x01, // Report Count (1) + 0x81, 0x06, // Input (Data, Variable, Relative) + 0xc0, // End Collection + 0xc0, // End Collection + ] + ); + + public static serializeInputReport( + movementX: number, + movementY: number, + buttons: number, + scrollX: number, + scrollY: number + ): Uint8Array { + return new Uint8Array([ + buttons, + movementX, + movementY, + scrollY, + scrollX, + ]); + } +} diff --git a/libraries/aoa/src/touchscreen.ts b/libraries/aoa/src/touchscreen.ts new file mode 100644 index 00000000..f086a8bc --- /dev/null +++ b/libraries/aoa/src/touchscreen.ts @@ -0,0 +1,132 @@ +const FINGER_DESCRIPTOR = new Uint8Array( + // prettier-ignore + [ + 0x09, 0x22, // Usage (Finger) + 0xa1, 0x02, // Collection (Logical) + 0x09, 0x51, // Usage (Contact Identifier) + 0x15, 0x00, // Logical Minimum (0) + 0x25, 0x7f, // Logical Maximum (127) + 0x75, 0x08, // Report Size (8) + 0x95, 0x01, // Report Count (1) + 0x81, 0x02, // Input (Data, Variable, Absolute) + + 0x09, 0x42, // Usage (Tip Switch) + 0x15, 0x00, // Logical Minimum (0) + 0x25, 0x01, // Logical Maximum (1) + 0x75, 0x01, // Report Size (1) + 0x95, 0x01, // Report Count (1) + 0x81, 0x02, // Input (Data, Variable, Absolute) + + 0x95, 0x07, // Report Count (7) + 0x81, 0x03, // Input (Constant) + + 0x05, 0x01, // Usage Page (Generic Desktop) + 0x09, 0x30, // Usage (X) + 0x09, 0x31, // Usage (Y) + 0x15, 0x00, // Logical Minimum (0) + 0x26, 0xff, 0x7f, // Logical Maximum (32767) + 0x35, 0x00, // Physical Minimum (0) + 0x46, 0xff, 0x7f, // Physical Maximum (32767) + 0x66, 0x00, 0x00, // Unit (None) + 0x75, 0x10, // Report Size (16) + 0x95, 0x02, // Report Count (2) + 0x81, 0x02, // Input (Data, Variable, Absolute) + 0xc0, // End Collection + ] +); + +const DESCRIPTOR_HEAD = new Uint8Array( + // prettier-ignore + [ + 0x05, 0x0d, // Usage Page (Digitizers) + 0x09, 0x04, // Usage (Touch Screen) + 0xa1, 0x01, // Collection (Application) + 0x09, 0x55, // Usage (Contact Count Maximum) + 0x25, 0x0a, // Logical Maximum (10) + 0xB1, 0x02, // Feature (Data, Variable, Absolute) + + 0x09, 0x54, // Usage (Contact Count) + 0x15, 0x00, // Logical Minimum (0) + 0x25, 0x0a, // Logical Maximum (10) + 0x75, 0x08, // Report Size (8) + 0x95, 0x01, // Report Count (1) + 0x81, 0x02, // Input (Data, Variable, Absolute) + ] +); + +const DESCRIPTOR_TAIL = new Uint8Array([ + 0xc0, // End Collection +]); + +const DESCRIPTOR = new Uint8Array( + DESCRIPTOR_HEAD.length + + FINGER_DESCRIPTOR.length * 10 + + DESCRIPTOR_TAIL.length +); +let offset = 0; +DESCRIPTOR.set(DESCRIPTOR_HEAD, offset); +offset += DESCRIPTOR_HEAD.length; +for (let i = 0; i < 10; i += 1) { + DESCRIPTOR.set(FINGER_DESCRIPTOR, offset); + offset += FINGER_DESCRIPTOR.length; +} +DESCRIPTOR.set(DESCRIPTOR_TAIL, offset); + +interface Finger { + x: number; + y: number; +} + +/** + * A ten-point touch screen. + */ +export class HidTouchScreen { + public static readonly FINGER_DESCRIPTOR = FINGER_DESCRIPTOR; + + public static readonly DESCRIPTOR = DESCRIPTOR; + + private fingers: Map = new Map(); + + public down(id: number, x: number, y: number) { + if (this.fingers.size >= 10) { + return; + } + + this.fingers.set(id, { + x, + y, + }); + } + + public move(id: number, x: number, y: number) { + const finger = this.fingers.get(id); + if (finger) { + finger.x = x; + finger.y = y; + } + } + + public up(id: number) { + this.fingers.delete(id); + } + + public serializeInputReport(): Uint8Array { + const report = new Uint8Array(1 + 6 * 10); + report[0] = this.fingers.size; + let offset = 1; + for (const [id, finger] of this.fingers) { + report[offset] = id; + offset += 1; + + report[offset] = 1; + offset += 1; + + report[offset] = finger.x & 0xff; + report[offset + 1] = (finger.x >> 8) & 0xff; + report[offset + 2] = finger.y & 0xff; + report[offset + 3] = (finger.y >> 8) & 0xff; + offset += 4; + } + return report; + } +} diff --git a/libraries/aoa/src/type.ts b/libraries/aoa/src/type.ts new file mode 100644 index 00000000..e65828eb --- /dev/null +++ b/libraries/aoa/src/type.ts @@ -0,0 +1,10 @@ +export enum AoaRequestType { + GetProtocol = 51, + SendString, + Start, + RegisterHid, + UnregisterHid, + SetHidReportDescriptor, + SendHidEvent, + SetAudioMode, +} diff --git a/libraries/aoa/tsconfig.build.json b/libraries/aoa/tsconfig.build.json new file mode 100644 index 00000000..40ecf7fd --- /dev/null +++ b/libraries/aoa/tsconfig.build.json @@ -0,0 +1,12 @@ +{ + "extends": "./node_modules/@yume-chan/tsconfig/tsconfig.base.json", + "compilerOptions": { + "lib": [ + "ESNext", + "DOM" + ], + "types": [ + "w3c-web-usb", + ] + } +} diff --git a/libraries/aoa/tsconfig.json b/libraries/aoa/tsconfig.json new file mode 100644 index 00000000..85fc5a7a --- /dev/null +++ b/libraries/aoa/tsconfig.json @@ -0,0 +1,10 @@ +{ + "references": [ + { + "path": "./tsconfig.test.json" + }, + { + "path": "./tsconfig.build.json" + }, + ] +} diff --git a/libraries/aoa/tsconfig.test.json b/libraries/aoa/tsconfig.test.json new file mode 100644 index 00000000..c73f3e44 --- /dev/null +++ b/libraries/aoa/tsconfig.test.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.build.json", + "compilerOptions": { + "types": [ + "w3c-web-usb", + ], + }, + "exclude": [] +} diff --git a/libraries/scrcpy/src/control/inject-keycode.ts b/libraries/scrcpy/src/control/inject-keycode.ts index aa8c0b5a..ee63ed46 100644 --- a/libraries/scrcpy/src/control/inject-keycode.ts +++ b/libraries/scrcpy/src/control/inject-keycode.ts @@ -7,15 +7,27 @@ export enum AndroidKeyEventAction { Up = 1, } +// https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/view/KeyEvent.java;l=993;drc=95c1165bb895dd844e1793460710f7163dd330a3 export enum AndroidKeyEventMeta { AltOn = 0x02, - CtrlOn = 0x1000, + AltLeftOn = 0x10, + AltRightOn = 0x20, ShiftOn = 0x01, + ShiftLeftOn = 0x40, + ShiftRightOn = 0x80, + CtrlOn = 0x1000, + CtrlLeftOn = 0x2000, + CtrlRightOn = 0x4000, MetaOn = 0x10000, + MetaLeftOn = 0x20000, + MetaRightOn = 0x40000, + CapsLockOn = 0x100000, + NumLockOn = 0x200000, + ScrollLockOn = 0x400000, } // https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/view/KeyEvent.java;l=97;drc=95c1165bb895dd844e1793460710f7163dd330a3 -// Most name follows Web API `KeyboardEvent.code`, +// Most names follow Web API `KeyboardEvent.code`, // Android-only (not exist in HID keyboard standard) keys are prefixed by `Android`. export enum AndroidKeyCode { AndroidHome = 3, @@ -127,7 +139,7 @@ export enum AndroidKeyCode { AndroidFocus, Plus, // Name not verified - Menu, // Name not verified + ContextMenu, AndroidNotification, AndroidSearch, diff --git a/rush.json b/rush.json index 843c6c2d..63915cf1 100644 --- a/rush.json +++ b/rush.json @@ -383,6 +383,10 @@ "shouldPublish": true, "versionPolicyName": "adb" }, + { + "packageName": "@yume-chan/aoa", + "projectFolder": "libraries/aoa" + }, { "packageName": "@yume-chan/b-tree", "projectFolder": "libraries/b-tree"