From 77301cbd738fa12594d5b25f085bfccd15c5e621 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Thu, 30 Nov 2023 14:10:47 +0100 Subject: [PATCH 01/28] Use single state var to track connection state of signal client (#949) * use single state var to track connection state of signal client * cleanup * avoid enum math * Create proud-drinks-shout.md --- .changeset/proud-drinks-shout.md | 5 + src/api/SignalClient.ts | 260 +++++++++++++---------- src/room/RTCEngine.ts | 10 +- src/room/Room.ts | 2 +- src/room/participant/LocalParticipant.ts | 2 +- 5 files changed, 156 insertions(+), 123 deletions(-) create mode 100644 .changeset/proud-drinks-shout.md diff --git a/.changeset/proud-drinks-shout.md b/.changeset/proud-drinks-shout.md new file mode 100644 index 0000000000..72d592b607 --- /dev/null +++ b/.changeset/proud-drinks-shout.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Use enum to track connection state of signal client diff --git a/src/api/SignalClient.ts b/src/api/SignalClient.ts index e92cdf3540..0de10587ae 100644 --- a/src/api/SignalClient.ts +++ b/src/api/SignalClient.ts @@ -82,12 +82,16 @@ function canPassThroughQueue(req: SignalMessage): boolean { return canPass; } +export enum SignalConnectionState { + CONNECTING, + CONNECTED, + RECONNECTING, + DISCONNECTING, + DISCONNECTED, +} + /** @internal */ export class SignalClient { - isConnected: boolean; - - isReconnecting: boolean; - requestQueue: AsyncQueue; queuedRequests: Array<() => Promise>; @@ -141,6 +145,17 @@ export class SignalClient { ws?: WebSocket; + get currentState() { + return this.state; + } + + get isDisconnected() { + return ( + this.state === SignalConnectionState.DISCONNECTING || + this.state === SignalConnectionState.DISCONNECTED + ); + } + private options?: SignalOptions; private pingTimeout: ReturnType | undefined; @@ -153,13 +168,17 @@ export class SignalClient { private closingLock: Mutex; + private state: SignalConnectionState = SignalConnectionState.DISCONNECTED; + + private connectionLock: Mutex; + constructor(useJSON: boolean = false) { - this.isConnected = false; - this.isReconnecting = false; this.useJSON = useJSON; this.requestQueue = new AsyncQueue(); this.queuedRequests = []; this.closingLock = new Mutex(); + this.connectionLock = new Mutex(); + this.state = SignalConnectionState.DISCONNECTED; } async join( @@ -170,7 +189,7 @@ export class SignalClient { ): Promise { // during a full reconnect, we'd want to start the sequence even if currently // connected - this.isConnected = false; + this.state = SignalConnectionState.CONNECTING; this.options = opts; const res = await this.connect(url, token, opts, abortSignal); return res as JoinResponse; @@ -186,7 +205,7 @@ export class SignalClient { log.warn('attempted to reconnect without signal options being set, ignoring'); return; } - this.isReconnecting = true; + this.state = SignalConnectionState.RECONNECTING; // clear ping interval and restart it once reconnected this.clearPingInterval(); @@ -215,127 +234,132 @@ export class SignalClient { const params = createConnectionParams(token, clientInfo, opts); return new Promise(async (resolve, reject) => { - const abortHandler = async () => { - this.close(); - clearTimeout(wsTimeout); - reject(new ConnectionError('room connection has been cancelled (signal)')); - }; - - const wsTimeout = setTimeout(() => { - this.close(); - reject(new ConnectionError('room connection has timed out (signal)')); - }, opts.websocketTimeout); - - if (abortSignal?.aborted) { - abortHandler(); - } - abortSignal?.addEventListener('abort', abortHandler); - log.debug(`connecting to ${url + params}`); - if (this.ws) { - await this.close(); - } - this.ws = new WebSocket(url + params); - this.ws.binaryType = 'arraybuffer'; + const unlock = await this.connectionLock.lock(); + try { + const abortHandler = async () => { + this.close(); + clearTimeout(wsTimeout); + reject(new ConnectionError('room connection has been cancelled (signal)')); + }; - this.ws.onopen = () => { - clearTimeout(wsTimeout); - }; + const wsTimeout = setTimeout(() => { + this.close(); + reject(new ConnectionError('room connection has timed out (signal)')); + }, opts.websocketTimeout); - this.ws.onerror = async (ev: Event) => { - if (!this.isConnected) { + if (abortSignal?.aborted) { + abortHandler(); + } + abortSignal?.addEventListener('abort', abortHandler); + log.debug(`connecting to ${url + params}`); + if (this.ws) { + await this.close(); + } + this.ws = new WebSocket(url + params); + this.ws.binaryType = 'arraybuffer'; + + this.ws.onopen = () => { clearTimeout(wsTimeout); - try { - const resp = await fetch(`http${url.substring(2)}/validate${params}`); - if (resp.status.toFixed(0).startsWith('4')) { - const msg = await resp.text(); - reject(new ConnectionError(msg, ConnectionErrorReason.NotAllowed, resp.status)); - } else { + }; + + this.ws.onerror = async (ev: Event) => { + if (this.state !== SignalConnectionState.CONNECTED) { + clearTimeout(wsTimeout); + try { + const resp = await fetch(`http${url.substring(2)}/validate${params}`); + if (resp.status.toFixed(0).startsWith('4')) { + const msg = await resp.text(); + reject(new ConnectionError(msg, ConnectionErrorReason.NotAllowed, resp.status)); + } else { + reject( + new ConnectionError( + 'Internal error', + ConnectionErrorReason.InternalError, + resp.status, + ), + ); + } + } catch (e) { reject( new ConnectionError( - 'Internal error', - ConnectionErrorReason.InternalError, - resp.status, + 'server was not reachable', + ConnectionErrorReason.ServerUnreachable, ), ); } - } catch (e) { - reject( - new ConnectionError( - 'server was not reachable', - ConnectionErrorReason.ServerUnreachable, - ), - ); + return; + } + // other errors, handle + this.handleWSError(ev); + }; + + this.ws.onmessage = async (ev: MessageEvent) => { + // not considered connected until JoinResponse is received + let resp: SignalResponse; + if (typeof ev.data === 'string') { + const json = JSON.parse(ev.data); + resp = SignalResponse.fromJson(json); + } else if (ev.data instanceof ArrayBuffer) { + resp = SignalResponse.fromBinary(new Uint8Array(ev.data)); + } else { + log.error(`could not decode websocket message: ${typeof ev.data}`); + return; } - return; - } - // other errors, handle - this.handleWSError(ev); - }; - - this.ws.onmessage = async (ev: MessageEvent) => { - // not considered connected until JoinResponse is received - let resp: SignalResponse; - if (typeof ev.data === 'string') { - const json = JSON.parse(ev.data); - resp = SignalResponse.fromJson(json); - } else if (ev.data instanceof ArrayBuffer) { - resp = SignalResponse.fromBinary(new Uint8Array(ev.data)); - } else { - log.error(`could not decode websocket message: ${typeof ev.data}`); - return; - } - if (!this.isConnected) { - let shouldProcessMessage = false; - // handle join message only - if (resp.message?.case === 'join') { - this.isConnected = true; - abortSignal?.removeEventListener('abort', abortHandler); - this.pingTimeoutDuration = resp.message.value.pingTimeout; - this.pingIntervalDuration = resp.message.value.pingInterval; - - if (this.pingTimeoutDuration && this.pingTimeoutDuration > 0) { - log.debug('ping config', { - timeout: this.pingTimeoutDuration, - interval: this.pingIntervalDuration, - }); + if (this.state !== SignalConnectionState.CONNECTED) { + let shouldProcessMessage = false; + // handle join message only + if (resp.message?.case === 'join') { + this.state = SignalConnectionState.CONNECTED; + abortSignal?.removeEventListener('abort', abortHandler); + this.pingTimeoutDuration = resp.message.value.pingTimeout; + this.pingIntervalDuration = resp.message.value.pingInterval; + + if (this.pingTimeoutDuration && this.pingTimeoutDuration > 0) { + log.debug('ping config', { + timeout: this.pingTimeoutDuration, + interval: this.pingIntervalDuration, + }); + this.startPingInterval(); + } + resolve(resp.message.value); + } else if (this.state === SignalConnectionState.RECONNECTING) { + // in reconnecting, any message received means signal reconnected + this.state = SignalConnectionState.CONNECTED; + abortSignal?.removeEventListener('abort', abortHandler); this.startPingInterval(); + if (resp.message?.case === 'reconnect') { + resolve(resp.message?.value); + } else { + resolve(); + shouldProcessMessage = true; + } + } else if (!opts.reconnect) { + // non-reconnect case, should receive join response first + reject( + new ConnectionError( + `did not receive join response, got ${resp.message?.case} instead`, + ), + ); } - resolve(resp.message.value); - } else if (opts.reconnect) { - // in reconnecting, any message received means signal reconnected - this.isConnected = true; - abortSignal?.removeEventListener('abort', abortHandler); - this.startPingInterval(); - if (resp.message?.case === 'reconnect') { - resolve(resp.message?.value); - } else { - resolve(); - shouldProcessMessage = true; + if (!shouldProcessMessage) { + return; } - } else if (!opts.reconnect) { - // non-reconnect case, should receive join response first - reject( - new ConnectionError( - `did not receive join response, got ${resp.message?.case} instead`, - ), - ); - } - if (!shouldProcessMessage) { - return; } - } - if (this.signalLatency) { - await sleep(this.signalLatency); - } - this.handleSignalResponse(resp); - }; - - this.ws.onclose = (ev: CloseEvent) => { - log.warn(`websocket closed`, { ev }); - this.handleOnClose(ev.reason); - }; + if (this.signalLatency) { + await sleep(this.signalLatency); + } + this.handleSignalResponse(resp); + }; + + this.ws.onclose = (ev: CloseEvent) => { + log.warn(`websocket closed`, { ev }); + this.handleOnClose(ev.reason); + }; + } finally { + unlock(); + } }); } @@ -357,7 +381,7 @@ export class SignalClient { async close() { const unlock = await this.closingLock.lock(); try { - this.isConnected = false; + this.state = SignalConnectionState.DISCONNECTING; if (this.ws) { this.ws.onmessage = null; this.ws.onopen = null; @@ -382,6 +406,7 @@ export class SignalClient { this.ws = undefined; } } finally { + this.state = SignalConnectionState.DISCONNECTED; this.clearPingInterval(); unlock(); } @@ -522,7 +547,7 @@ export class SignalClient { // capture all requests while reconnecting and put them in a queue // unless the request originates from the queue, then don't enqueue again const canQueue = !fromQueue && !canPassThroughQueue(message); - if (canQueue && this.isReconnecting) { + if (canQueue && this.state === SignalConnectionState.RECONNECTING) { this.queuedRequests.push(async () => { await this.sendRequest(message, true); }); @@ -648,11 +673,10 @@ export class SignalClient { this.requestQueue.run(req); } } - this.isReconnecting = false; } private async handleOnClose(reason: string) { - if (!this.isConnected) return; + if (this.state === SignalConnectionState.DISCONNECTED) return; const onCloseCallback = this.onClose; await this.close(); log.debug(`websocket connection closed: ${reason}`); diff --git a/src/room/RTCEngine.ts b/src/room/RTCEngine.ts index 4c323fad01..242f7ff8ee 100644 --- a/src/room/RTCEngine.ts +++ b/src/room/RTCEngine.ts @@ -2,7 +2,11 @@ import { EventEmitter } from 'events'; import type { MediaAttributes } from 'sdp-transform'; import type TypedEventEmitter from 'typed-emitter'; import type { SignalOptions } from '../api/SignalClient'; -import { SignalClient, toProtoSessionDescription } from '../api/SignalClient'; +import { + SignalClient, + SignalConnectionState, + toProtoSessionDescription, +} from '../api/SignalClient'; import log from '../logger'; import type { InternalRoomOptions } from '../options'; import { @@ -867,7 +871,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit log.info(`reconnecting, attempt: ${this.reconnectAttempts}`); this.emit(EngineEvent.Restarting); - if (this.client.isConnected) { + if (!this.client.isDisconnected) { await this.client.sendLeave(); } await this.cleanupPeerConnections(); @@ -1266,7 +1270,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit private handleBrowserOnLine = () => { // in case the engine is currently reconnecting, attempt a reconnect immediately after the browser state has changed to 'onLine' - if (this.client.isReconnecting) { + if (this.client.currentState === SignalConnectionState.RECONNECTING) { this.clearReconnectTimeout(); this.attemptReconnect(ReconnectReason.RR_SIGNAL_DISCONNECTED); } diff --git a/src/room/Room.ts b/src/room/Room.ts index 5cd737f785..d600fdb58b 100644 --- a/src/room/Room.ts +++ b/src/room/Room.ts @@ -664,7 +664,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.connectFuture = undefined; } // send leave - if (this.engine?.client.isConnected) { + if (!this.engine?.client.isDisconnected) { await this.engine.client.sendLeave(); } // close engine (also closes client) diff --git a/src/room/participant/LocalParticipant.ts b/src/room/participant/LocalParticipant.ts index c889189207..938a172d01 100644 --- a/src/room/participant/LocalParticipant.ts +++ b/src/room/participant/LocalParticipant.ts @@ -1129,7 +1129,7 @@ export default class LocalParticipant extends Participant { ) { this.participantTrackPermissions = participantTrackPermissions; this.allParticipantsAllowedToSubscribe = allParticipantsAllowed; - if (this.engine.client.isConnected) { + if (!this.engine.client.isDisconnected) { this.updateTrackSubscriptionPermissions(); } } From aed874803259173b251311a3c7ac66f38ebd4a32 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Thu, 30 Nov 2023 12:24:03 -0800 Subject: [PATCH 02/28] Disable VP9 for Safari 15, AV1 for Safari (incomplete support) (#950) * Disable VP9 for Safari 15 (incomplete support), AV1 for Safari * changeset --- .changeset/wild-steaks-switch.md | 5 +++++ src/room/utils.ts | 11 +++++++++++ 2 files changed, 16 insertions(+) create mode 100644 .changeset/wild-steaks-switch.md diff --git a/.changeset/wild-steaks-switch.md b/.changeset/wild-steaks-switch.md new file mode 100644 index 0000000000..58037ec06c --- /dev/null +++ b/.changeset/wild-steaks-switch.md @@ -0,0 +1,5 @@ +--- +'livekit-client': patch +--- + +Disable VP9 for Safari 15, AV1 for Safari (incomplete support) diff --git a/src/room/utils.ts b/src/room/utils.ts index 06e7086d1b..228ef72cda 100644 --- a/src/room/utils.ts +++ b/src/room/utils.ts @@ -47,6 +47,10 @@ export function supportsAV1(): boolean { if (!('getCapabilities' in RTCRtpSender)) { return false; } + if (isSafari()) { + // Safari 17 on iPhone14 reports AV1 capability, but does not actually support it + return false; + } const capabilities = RTCRtpSender.getCapabilities('video'); let hasAV1 = false; if (capabilities) { @@ -69,6 +73,13 @@ export function supportsVP9(): boolean { // https://bugzilla.mozilla.org/show_bug.cgi?id=1633876 return false; } + if (isSafari()) { + const browser = getBrowser(); + if (browser?.version && compareVersions(browser.version, '16') < 0) { + // Safari 16 and below does not support VP9 + return false; + } + } const capabilities = RTCRtpSender.getCapabilities('video'); let hasVP9 = false; if (capabilities) { From 6ec3c18da4f149420e03faae5b06df226c153052 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 15:00:14 +0100 Subject: [PATCH 03/28] Update dependency jsdom to v23 (#954) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 142 +++++++++++++++++++++---------------------------- 2 files changed, 62 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index 53dd441917..fe8fe3ca71 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "eslint-plugin-ecmascript-compat": "^3.0.0", "eslint-plugin-import": "2.29.0", "gh-pages": "6.0.0", - "jsdom": "^22.1.0", + "jsdom": "^23.0.0", "prettier": "^2.8.8", "rollup": "3.29.4", "rollup-plugin-delete": "^2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d03895708..039a773bfa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -107,8 +107,8 @@ devDependencies: specifier: 6.0.0 version: 6.0.0 jsdom: - specifier: ^22.1.0 - version: 22.1.0 + specifier: ^23.0.0 + version: 23.0.1 prettier: specifier: ^2.8.8 version: 2.8.8 @@ -141,7 +141,7 @@ devDependencies: version: 4.5.0(@types/node@20.8.10) vitest: specifier: ^0.34.0 - version: 0.34.6(jsdom@22.1.0) + version: 0.34.6(jsdom@23.0.1) packages: @@ -2041,11 +2041,6 @@ packages: - webpack-cli dev: true - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true - /@trivago/prettier-plugin-sort-imports@4.2.1(prettier@2.8.8): resolution: {integrity: sha512-iuy2MPVURGdxILTchHr15VAioItuYBejKfcTmQFlxIuqA7jeaT6ngr5aUIG6S6U096d6a6lJCgaOwlRrPLlOPg==} peerDependencies: @@ -2451,10 +2446,6 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - dev: true - /acorn-import-assertions@1.9.0(acorn@8.11.2): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: @@ -2482,9 +2473,9 @@ packages: hasBin: true dev: true - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} dependencies: debug: 4.3.4 transitivePeerDependencies: @@ -3004,13 +2995,12 @@ packages: stream-transform: 2.1.3 dev: true - /data-urls@4.0.0: - resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==} - engines: {node: '>=14'} + /data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 12.0.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 dev: true /dataloader@1.4.0: @@ -3147,13 +3137,6 @@ packages: esutils: 2.0.3 dev: true - /domexception@4.0.0: - resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} - engines: {node: '>=12'} - dependencies: - webidl-conversions: 7.0.0 - dev: true - /dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} @@ -3165,7 +3148,7 @@ packages: dependencies: semver: 7.5.4 shelljs: 0.8.5 - typescript: 5.4.0-dev.20231107 + typescript: 5.4.0-dev.20231130 dev: true /electron-to-chromium@1.4.577: @@ -3994,29 +3977,28 @@ packages: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} + /html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} dependencies: - whatwg-encoding: 2.0.0 + whatwg-encoding: 3.1.1 dev: true - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + /http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 + agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} dependencies: - agent-base: 6.0.2 + agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -4309,24 +4291,22 @@ packages: argparse: 2.0.1 dev: true - /jsdom@22.1.0: - resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==} - engines: {node: '>=16'} + /jsdom@23.0.1: + resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==} + engines: {node: '>=18'} peerDependencies: - canvas: ^2.5.0 + canvas: ^2.11.2 peerDependenciesMeta: canvas: optional: true dependencies: - abab: 2.0.6 cssstyle: 3.0.0 - data-urls: 4.0.0 + data-urls: 5.0.0 decimal.js: 10.4.3 - domexception: 4.0.0 form-data: 4.0.0 - html-encoding-sniffer: 3.0.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.7 parse5: 7.1.2 @@ -4334,13 +4314,13 @@ packages: saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.3 - w3c-xmlserializer: 4.0.0 + w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 - whatwg-mimetype: 3.0.0 - whatwg-url: 12.0.1 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 ws: 8.14.2 - xml-name-validator: 4.0.0 + xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil - supports-color @@ -5716,9 +5696,9 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /tr46@4.1.1: - resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} - engines: {node: '>=14'} + /tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} dependencies: punycode: 2.3.1 dev: true @@ -5889,8 +5869,8 @@ packages: hasBin: true dev: true - /typescript@5.4.0-dev.20231107: - resolution: {integrity: sha512-4bQlfsyFjzZMo1bSLEkFJEcvuQ64pgE0S/BpdWu16lYsQOfJZtntZIyWdED3h+e96IMtVgrC6sxzfPZhj4J/dw==} + /typescript@5.4.0-dev.20231130: + resolution: {integrity: sha512-YDc4V66/MiOKq3LZh7onu6+VNKqQZrvzQEKAbWCjSmlVeK8TYEPYlbTmYFJvKbqDHwrxGBayl3egTG/IzyxZMQ==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -6039,7 +6019,7 @@ packages: fsevents: 2.3.3 dev: true - /vitest@0.34.6(jsdom@22.1.0): + /vitest@0.34.6(jsdom@23.0.1): resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} engines: {node: '>=v14.18.0'} hasBin: true @@ -6083,7 +6063,7 @@ packages: cac: 6.7.14 chai: 4.3.10 debug: 4.3.4 - jsdom: 22.1.0 + jsdom: 23.0.1 local-pkg: 0.4.3 magic-string: 0.30.5 pathe: 1.1.1 @@ -6117,11 +6097,11 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} + /w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} dependencies: - xml-name-validator: 4.0.0 + xml-name-validator: 5.0.0 dev: true /watchpack@2.4.0: @@ -6199,23 +6179,23 @@ packages: sdp: 3.2.0 dev: false - /whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} + /whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} dependencies: iconv-lite: 0.6.3 dev: true - /whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} + /whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} dev: true - /whatwg-url@12.0.1: - resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==} - engines: {node: '>=14'} + /whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} dependencies: - tr46: 4.1.1 + tr46: 5.0.0 webidl-conversions: 7.0.0 dev: true @@ -6318,9 +6298,9 @@ packages: optional: true dev: true - /xml-name-validator@4.0.0: - resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} - engines: {node: '>=12'} + /xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} dev: true /xmlchars@2.2.0: From 77d69b83bef3dbf0f9a0a5130992e01aef7c657c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 15:18:50 +0100 Subject: [PATCH 04/28] Update devDependencies (non-major) (#951) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 18 +- pnpm-lock.yaml | 1152 ++++++++++++++++++++++++++---------------------- 2 files changed, 624 insertions(+), 546 deletions(-) diff --git a/package.json b/package.json index fe8fe3ca71..e8c92558df 100644 --- a/package.json +++ b/package.json @@ -62,10 +62,10 @@ "webrtc-adapter": "^8.1.1" }, "devDependencies": { - "@babel/core": "7.23.2", - "@babel/preset-env": "7.23.2", + "@babel/core": "7.23.5", + "@babel/preset-env": "7.23.5", "@bufbuild/protoc-gen-es": "^1.3.0", - "@changesets/cli": "2.26.2", + "@changesets/cli": "2.27.1", "@livekit/changesets-changelog-github": "^0.0.4", "@rollup/plugin-babel": "6.0.4", "@rollup/plugin-commonjs": "25.0.7", @@ -76,17 +76,17 @@ "@size-limit/webpack": "^8.2.4", "@trivago/prettier-plugin-sort-imports": "^4.1.1", "@types/events": "^3.0.0", - "@types/sdp-transform": "2.4.8", - "@types/ua-parser-js": "0.7.38", + "@types/sdp-transform": "2.4.9", + "@types/ua-parser-js": "0.7.39", "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", "downlevel-dts": "^0.11.0", - "eslint": "8.52.0", + "eslint": "8.54.0", "eslint-config-airbnb-typescript": "17.1.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-ecmascript-compat": "^3.0.0", "eslint-plugin-import": "2.29.0", - "gh-pages": "6.0.0", + "gh-pages": "6.1.0", "jsdom": "^23.0.0", "prettier": "^2.8.8", "rollup": "3.29.4", @@ -94,9 +94,9 @@ "rollup-plugin-re": "1.0.7", "rollup-plugin-typescript2": "0.36.0", "size-limit": "^8.2.4", - "typedoc": "0.25.3", + "typedoc": "0.25.4", "typedoc-plugin-no-inherit": "1.4.0", - "typescript": "5.2.2", + "typescript": "5.3.2", "vite": "4.5.0", "vitest": "^0.34.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 039a773bfa..4cf95b2711 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,23 +32,23 @@ dependencies: devDependencies: '@babel/core': - specifier: 7.23.2 - version: 7.23.2 + specifier: 7.23.5 + version: 7.23.5 '@babel/preset-env': - specifier: 7.23.2 - version: 7.23.2(@babel/core@7.23.2) + specifier: 7.23.5 + version: 7.23.5(@babel/core@7.23.5) '@bufbuild/protoc-gen-es': specifier: ^1.3.0 version: 1.4.2(@bufbuild/protobuf@1.4.2) '@changesets/cli': - specifier: 2.26.2 - version: 2.26.2 + specifier: 2.27.1 + version: 2.27.1 '@livekit/changesets-changelog-github': specifier: ^0.0.4 version: 0.0.4 '@rollup/plugin-babel': specifier: 6.0.4 - version: 6.0.4(@babel/core@7.23.2)(rollup@3.29.4) + version: 6.0.4(@babel/core@7.23.5)(rollup@3.29.4) '@rollup/plugin-commonjs': specifier: 25.0.7 version: 25.0.7(rollup@3.29.4) @@ -74,38 +74,38 @@ devDependencies: specifier: ^3.0.0 version: 3.0.3 '@types/sdp-transform': - specifier: 2.4.8 - version: 2.4.8 + specifier: 2.4.9 + version: 2.4.9 '@types/ua-parser-js': - specifier: 0.7.38 - version: 0.7.38 + specifier: 0.7.39 + version: 0.7.39 '@typescript-eslint/eslint-plugin': specifier: 5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.52.0)(typescript@5.2.2) + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.3.2) '@typescript-eslint/parser': specifier: 5.62.0 - version: 5.62.0(eslint@8.52.0)(typescript@5.2.2) + version: 5.62.0(eslint@8.54.0)(typescript@5.3.2) downlevel-dts: specifier: ^0.11.0 version: 0.11.0 eslint: - specifier: 8.52.0 - version: 8.52.0 + specifier: 8.54.0 + version: 8.54.0 eslint-config-airbnb-typescript: specifier: 17.1.0 - version: 17.1.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.0)(eslint@8.52.0) + version: 17.1.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.0)(eslint@8.54.0) eslint-config-prettier: specifier: 9.0.0 - version: 9.0.0(eslint@8.52.0) + version: 9.0.0(eslint@8.54.0) eslint-plugin-ecmascript-compat: specifier: ^3.0.0 - version: 3.1.0(eslint@8.52.0) + version: 3.1.0(eslint@8.54.0) eslint-plugin-import: specifier: 2.29.0 - version: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.52.0) + version: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0) gh-pages: - specifier: 6.0.0 - version: 6.0.0 + specifier: 6.1.0 + version: 6.1.0 jsdom: specifier: ^23.0.0 version: 23.0.1 @@ -123,19 +123,19 @@ devDependencies: version: 1.0.7 rollup-plugin-typescript2: specifier: 0.36.0 - version: 0.36.0(rollup@3.29.4)(typescript@5.2.2) + version: 0.36.0(rollup@3.29.4)(typescript@5.3.2) size-limit: specifier: ^8.2.4 version: 8.2.6 typedoc: - specifier: 0.25.3 - version: 0.25.3(typescript@5.2.2) + specifier: 0.25.4 + version: 0.25.4(typescript@5.3.2) typedoc-plugin-no-inherit: specifier: 1.4.0 - version: 1.4.0(typedoc@0.25.3) + version: 1.4.0(typedoc@0.25.4) typescript: - specifier: 5.2.2 - version: 5.2.2 + specifier: 5.3.2 + version: 5.3.2 vite: specifier: 4.5.0 version: 4.5.0(@types/node@20.8.10) @@ -166,25 +166,38 @@ packages: chalk: 2.4.2 dev: true + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + /@babel/compat-data@7.23.2: resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.2: - resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.23.5: + resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) - '@babel/helpers': 7.23.2 - '@babel/parser': 7.23.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helpers': 7.23.5 + '@babel/parser': 7.23.5 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.2 - '@babel/types': 7.23.0 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -198,7 +211,7 @@ packages: resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.0 + '@babel/types': 7.23.0 jsesc: 2.5.2 source-map: 0.5.7 dev: true @@ -213,6 +226,16 @@ packages: jsesc: 2.5.2 dev: true + /@babel/generator@7.23.5: + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + dev: true + /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -238,42 +261,42 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.2): + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.5): resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.2): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.5): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.2): + /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.5): resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 @@ -317,13 +340,13 @@ packages: '@babel/types': 7.23.0 dev: true - /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -343,25 +366,25 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.2): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.5): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.2): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -371,7 +394,7 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: @@ -393,6 +416,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} @@ -403,6 +431,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-wrap-function@7.22.20: resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} engines: {node: '>=6.9.0'} @@ -412,13 +445,13 @@ packages: '@babel/types': 7.23.0 dev: true - /@babel/helpers@7.23.2: - resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + /@babel/helpers@7.23.5: + resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.2 - '@babel/types': 7.23.0 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 transitivePeerDependencies: - supports-color dev: true @@ -432,6 +465,15 @@ packages: js-tokens: 4.0.0 dev: true + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + /@babel/parser@7.23.0: resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} engines: {node: '>=6.0.0'} @@ -440,835 +482,854 @@ packages: '@babel/types': 7.23.0 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==} + /@babel/parser@7.23.5: + resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.5 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) + dev: true + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.2): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.2): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.2): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.2): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.2): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.2): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.2): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.2): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.2): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.5): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-generator-functions@7.23.2(@babel/core@7.23.2): - resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==} + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==} + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 dev: true - /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==} + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==} + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} + /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==} + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==} + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==} + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==} + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.5): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==} + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==} + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==} + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.2 - '@babel/core': 7.23.2 + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==} + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==} + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==} + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.23.2): - resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.2): - resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.23.2(@babel/core@7.23.2): - resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==} + /@babel/preset-env@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.2 - '@babel/core': 7.23.2 + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-async-generator-functions': 7.23.2(@babel/core@7.23.2) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.2) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.2) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.2) - '@babel/types': 7.23.0 - babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.2) - babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.2) - babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.2) + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.5) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.5) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.5) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.5) + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.5) + babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.5) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.5) core-js-compat: 3.33.2 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.2): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.5): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/types': 7.23.0 esutils: 2.0.3 @@ -1289,9 +1350,9 @@ packages: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 dev: true /@babel/traverse@7.23.2: @@ -1312,6 +1373,24 @@ packages: - supports-color dev: true + /@babel/traverse@7.23.5: + resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.17.0: resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} @@ -1329,6 +1408,15 @@ packages: to-fast-properties: 2.0.0 dev: true + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + /@bufbuild/protobuf@1.4.2: resolution: {integrity: sha512-JyEH8Z+OD5Sc2opSg86qMHn1EM1Sa+zj/Tc0ovxdwk56ByVNONJSabuCUbLQp+eKN3rWNfrho0X+3SEqEPXIow==} @@ -1358,14 +1446,14 @@ packages: - supports-color dev: true - /@changesets/apply-release-plan@6.1.4: - resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} + /@changesets/apply-release-plan@7.0.0: + resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} dependencies: '@babel/runtime': 7.23.2 - '@changesets/config': 2.3.1 - '@changesets/get-version-range-type': 0.3.2 - '@changesets/git': 2.0.0 - '@changesets/types': 5.2.1 + '@changesets/config': 3.0.0 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 fs-extra: 7.0.1 @@ -1376,51 +1464,50 @@ packages: semver: 7.5.4 dev: true - /@changesets/assemble-release-plan@5.2.4: - resolution: {integrity: sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==} + /@changesets/assemble-release-plan@6.0.0: + resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} dependencies: '@babel/runtime': 7.23.2 - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.6 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 semver: 7.5.4 dev: true - /@changesets/changelog-git@0.1.14: - resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} + /@changesets/changelog-git@0.2.0: + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} dependencies: - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 dev: true - /@changesets/cli@2.26.2: - resolution: {integrity: sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==} + /@changesets/cli@2.27.1: + resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} hasBin: true dependencies: '@babel/runtime': 7.23.2 - '@changesets/apply-release-plan': 6.1.4 - '@changesets/assemble-release-plan': 5.2.4 - '@changesets/changelog-git': 0.1.14 - '@changesets/config': 2.3.1 - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.6 - '@changesets/get-release-plan': 3.0.17 - '@changesets/git': 2.0.0 - '@changesets/logger': 0.0.5 - '@changesets/pre': 1.0.14 - '@changesets/read': 0.5.9 - '@changesets/types': 5.2.1 - '@changesets/write': 0.2.3 + '@changesets/apply-release-plan': 7.0.0 + '@changesets/assemble-release-plan': 6.0.0 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.0 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/get-release-plan': 4.0.0 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 + '@changesets/write': 0.3.0 '@manypkg/get-packages': 1.1.3 - '@types/is-ci': 3.0.4 '@types/semver': 7.5.4 ansi-colors: 4.1.3 chalk: 2.4.2 + ci-info: 3.9.0 enquirer: 2.4.1 external-editor: 3.1.0 fs-extra: 7.0.1 human-id: 1.0.2 - is-ci: 3.0.1 meow: 6.1.1 outdent: 0.5.0 p-limit: 2.3.0 @@ -1432,28 +1519,28 @@ packages: tty-table: 4.2.3 dev: true - /@changesets/config@2.3.1: - resolution: {integrity: sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==} + /@changesets/config@3.0.0: + resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} dependencies: - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.6 - '@changesets/logger': 0.0.5 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/logger': 0.1.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.5 dev: true - /@changesets/errors@0.1.4: - resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} + /@changesets/errors@0.2.0: + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} dependencies: extendable-error: 0.1.7 dev: true - /@changesets/get-dependents-graph@1.3.6: - resolution: {integrity: sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==} + /@changesets/get-dependents-graph@2.0.0: + resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} dependencies: - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 chalk: 2.4.2 fs-extra: 7.0.1 @@ -1469,65 +1556,65 @@ packages: - encoding dev: true - /@changesets/get-release-plan@3.0.17: - resolution: {integrity: sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==} + /@changesets/get-release-plan@4.0.0: + resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} dependencies: '@babel/runtime': 7.23.2 - '@changesets/assemble-release-plan': 5.2.4 - '@changesets/config': 2.3.1 - '@changesets/pre': 1.0.14 - '@changesets/read': 0.5.9 - '@changesets/types': 5.2.1 + '@changesets/assemble-release-plan': 6.0.0 + '@changesets/config': 3.0.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 dev: true - /@changesets/get-version-range-type@0.3.2: - resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} + /@changesets/get-version-range-type@0.4.0: + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} dev: true - /@changesets/git@2.0.0: - resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} + /@changesets/git@3.0.0: + resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} dependencies: '@babel/runtime': 7.23.2 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 micromatch: 4.0.5 spawndamnit: 2.0.0 dev: true - /@changesets/logger@0.0.5: - resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} + /@changesets/logger@0.1.0: + resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} dependencies: chalk: 2.4.2 dev: true - /@changesets/parse@0.3.16: - resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} + /@changesets/parse@0.4.0: + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} dependencies: - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 js-yaml: 3.14.1 dev: true - /@changesets/pre@1.0.14: - resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} + /@changesets/pre@2.0.0: + resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} dependencies: '@babel/runtime': 7.23.2 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 dev: true - /@changesets/read@0.5.9: - resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} + /@changesets/read@0.6.0: + resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} dependencies: '@babel/runtime': 7.23.2 - '@changesets/git': 2.0.0 - '@changesets/logger': 0.0.5 - '@changesets/parse': 0.3.16 - '@changesets/types': 5.2.1 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 @@ -1541,11 +1628,15 @@ packages: resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} dev: true - /@changesets/write@0.2.3: - resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} + /@changesets/types@6.0.0: + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + dev: true + + /@changesets/write@0.3.0: + resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} dependencies: '@babel/runtime': 7.23.2 - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.8 @@ -1749,13 +1840,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.52.0 + eslint: 8.54.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1781,8 +1872,8 @@ packages: - supports-color dev: true - /@eslint/js@8.52.0: - resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} + /@eslint/js@8.54.0: + resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1905,7 +1996,7 @@ packages: fastq: 1.15.0 dev: true - /@rollup/plugin-babel@6.0.4(@babel/core@7.23.2)(rollup@3.29.4): + /@rollup/plugin-babel@6.0.4(@babel/core@7.23.5)(rollup@3.29.4): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1918,7 +2009,7 @@ packages: rollup: optional: true dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-module-imports': 7.22.15 '@rollup/pluginutils': 5.0.5(rollup@3.29.4) rollup: 3.29.4 @@ -2100,12 +2191,6 @@ packages: '@types/node': 20.8.10 dev: true - /@types/is-ci@3.0.4: - resolution: {integrity: sha512-AkCYCmwlXeuH89DagDCzvCAyltI2v9lh3U3DqSg/GrBYoReAaWwxfXCqMx9UV5MajLZ4ZFwZzV4cABGIxk2XRw==} - dependencies: - ci-info: 3.9.0 - dev: true - /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true @@ -2140,19 +2225,19 @@ packages: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: true - /@types/sdp-transform@2.4.8: - resolution: {integrity: sha512-mmsb0R0IARu7/H4wWbPq7yPC9K2hXNIECJ/8y+CM9/2LA6axlr0TKLko4BEt4k5MK7SmGm+pvNs1u01OmIM77g==} + /@types/sdp-transform@2.4.9: + resolution: {integrity: sha512-bVr+/OoZZy7wrHlNcEAAa6PAgKA4BoXPYVN2EijMC5WnGgQ4ZEuixmKnVs2roiAvr7RhIFVH17QD27cojgIZCg==} dev: true /@types/semver@7.5.4: resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} dev: true - /@types/ua-parser-js@0.7.38: - resolution: {integrity: sha512-59CA5oavBEWSNLtS/BChj9xntiWMsIf9IytjxmBo9OuZEYuRzRf3K1ARzFPlXTOz5Zm2wXI38AP9RlLqDYMToQ==} + /@types/ua-parser-js@0.7.39: + resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==} dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.52.0)(typescript@5.2.2): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.3.2): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2164,23 +2249,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.3.2) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@5.3.2) debug: 4.3.4 - eslint: 8.52.0 + eslint: 8.54.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare-lite: 1.4.0 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 + tsutils: 3.21.0(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.52.0)(typescript@5.2.2): + /@typescript-eslint/parser@5.62.0(eslint@8.54.0)(typescript@5.3.2): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2192,10 +2277,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) debug: 4.3.4 - eslint: 8.52.0 - typescript: 5.2.2 + eslint: 8.54.0 + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true @@ -2208,7 +2293,7 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.52.0)(typescript@5.2.2): + /@typescript-eslint/type-utils@5.62.0(eslint@8.54.0)(typescript@5.3.2): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2218,12 +2303,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@5.3.2) debug: 4.3.4 - eslint: 8.52.0 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 + eslint: 8.54.0 + tsutils: 3.21.0(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true @@ -2233,7 +2318,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.2.2): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.2): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2248,25 +2333,25 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 + tsutils: 3.21.0(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.52.0)(typescript@5.2.2): + /@typescript-eslint/utils@5.62.0(eslint@8.54.0)(typescript@5.3.2): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.4 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - eslint: 8.52.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) + eslint: 8.54.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -2659,38 +2744,38 @@ packages: engines: {node: '>= 0.4'} dev: true - /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.2): + /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.5): resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.23.2 - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.2): + /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.5): resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) core-js-compat: 3.33.2 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.2): + /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.5): resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) transitivePeerDependencies: - supports-color dev: true @@ -3148,7 +3233,7 @@ packages: dependencies: semver: 7.5.4 shelljs: 0.8.5 - typescript: 5.4.0-dev.20231130 + typescript: 5.4.0-dev.20231201 dev: true /electron-to-chromium@1.4.577: @@ -3308,7 +3393,7 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.0)(eslint@8.52.0): + /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.0)(eslint@8.54.0): resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -3316,14 +3401,14 @@ packages: eslint-plugin-import: ^2.25.2 dependencies: confusing-browser-globals: 1.0.11 - eslint: 8.52.0 - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.52.0) + eslint: 8.54.0 + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0) object.assign: 4.1.4 object.entries: 1.1.7 semver: 6.3.1 dev: true - /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.0)(eslint@8.52.0): + /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.0)(eslint@8.54.0): resolution: {integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.13.0 || ^6.0.0 @@ -3331,20 +3416,20 @@ packages: eslint: ^7.32.0 || ^8.2.0 eslint-plugin-import: ^2.25.3 dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.52.0)(typescript@5.2.2) - eslint: 8.52.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.52.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.52.0) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.3.2) + eslint: 8.54.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.54.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0) dev: true - /eslint-config-prettier@9.0.0(eslint@8.52.0): + /eslint-config-prettier@9.0.0(eslint@8.54.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.52.0 + eslint: 8.54.0 dev: true /eslint-import-resolver-node@0.3.9: @@ -3357,7 +3442,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3378,15 +3463,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.3.2) debug: 3.2.7 - eslint: 8.52.0 + eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-ecmascript-compat@3.1.0(eslint@8.52.0): + /eslint-plugin-ecmascript-compat@3.1.0(eslint@8.54.0): resolution: {integrity: sha512-4qka2/07hb1O9/zAZEQnuBK07/i166ObKksbS9vxKX5kEsfskS0PBMec/BCdLZsUqaOW+37TgnqWz2b5Jbw8Jg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3394,23 +3479,23 @@ packages: dependencies: '@mdn/browser-compat-data': 5.2.55 browserslist: 4.22.1 - eslint: 8.52.0 - eslint-plugin-es-x: 6.2.1(eslint@8.52.0) + eslint: 8.54.0 + eslint-plugin-es-x: 6.2.1(eslint@8.54.0) lodash: 4.17.21 dev: true - /eslint-plugin-es-x@6.2.1(eslint@8.52.0): + /eslint-plugin-es-x@6.2.1(eslint@8.54.0): resolution: {integrity: sha512-uR34zUhZ9EBoiSD2DdV5kHLpydVEvwWqjteUr9sXRgJknwbKZJZhdJ7uFnaTtd+Nr/2G3ceJHnHXrFhJ67n3Tw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) '@eslint-community/regexpp': 4.10.0 - eslint: 8.52.0 + eslint: 8.54.0 dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.52.0): + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0): resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: @@ -3420,16 +3505,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.3.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.52.0 + eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -3466,15 +3551,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.52.0: - resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} + /eslint@8.54.0: + resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.3 - '@eslint/js': 8.52.0 + '@eslint/js': 8.54.0 '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -3796,8 +3881,8 @@ packages: get-intrinsic: 1.2.2 dev: true - /gh-pages@6.0.0: - resolution: {integrity: sha512-FXZWJRsvP/fK2HJGY+Di6FRNHvqFF6gOIELaopDjXXgjeOYSNURcuYwEO/6bwuq6koP5Lnkvnr5GViXzuOB89g==} + /gh-pages@6.1.0: + resolution: {integrity: sha512-MdXigvqN3I66Y+tAZsQJMzpBWQOI1snD6BYuECmP+GEdryYMMOQvzn4AConk/+qNg/XIuQhB1xNGrl3Rmj1iow==} engines: {node: '>=10'} hasBin: true dependencies: @@ -4115,13 +4200,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - dependencies: - ci-info: 3.9.0 - dev: true - /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: @@ -5183,7 +5261,7 @@ packages: rollup-pluginutils: 2.8.2 dev: true - /rollup-plugin-typescript2@0.36.0(rollup@3.29.4)(typescript@5.2.2): + /rollup-plugin-typescript2@0.36.0(rollup@3.29.4)(typescript@5.3.2): resolution: {integrity: sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==} peerDependencies: rollup: '>=1.26.3' @@ -5195,7 +5273,7 @@ packages: rollup: 3.29.4 semver: 7.5.4 tslib: 2.6.2 - typescript: 5.2.2 + typescript: 5.3.2 dev: true /rollup-pluginutils@2.8.2: @@ -5735,14 +5813,14 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.2.2): + /tsutils@3.21.0(typescript@5.3.2): 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: 5.2.2 + typescript: 5.3.2 dev: true /tty-table@4.2.3: @@ -5835,26 +5913,26 @@ packages: rxjs: 7.8.1 dev: false - /typedoc-plugin-no-inherit@1.4.0(typedoc@0.25.3): + /typedoc-plugin-no-inherit@1.4.0(typedoc@0.25.4): resolution: {integrity: sha512-cAvqQ8X9xh1xztVoDKtF4nYRSBx9XwttN3OBbNNpA0YaJSRM8XvpVVhugq8FoO1HdWjF3aizS0JzdUOMDt0y9g==} peerDependencies: typedoc: '>=0.23.0' dependencies: - typedoc: 0.25.3(typescript@5.2.2) + typedoc: 0.25.4(typescript@5.3.2) dev: true - /typedoc@0.25.3(typescript@5.2.2): - resolution: {integrity: sha512-Ow8Bo7uY1Lwy7GTmphRIMEo6IOZ+yYUyrc8n5KXIZg1svpqhZSWgni2ZrDhe+wLosFS8yswowUzljTAV/3jmWw==} + /typedoc@0.25.4(typescript@5.3.2): + resolution: {integrity: sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==} engines: {node: '>= 16'} hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x dependencies: lunr: 2.3.9 marked: 4.3.0 minimatch: 9.0.3 shiki: 0.14.5 - typescript: 5.2.2 + typescript: 5.3.2 dev: true /typescript@4.5.2: @@ -5863,14 +5941,14 @@ packages: hasBin: true dev: true - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + /typescript@5.3.2: + resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} engines: {node: '>=14.17'} hasBin: true dev: true - /typescript@5.4.0-dev.20231130: - resolution: {integrity: sha512-YDc4V66/MiOKq3LZh7onu6+VNKqQZrvzQEKAbWCjSmlVeK8TYEPYlbTmYFJvKbqDHwrxGBayl3egTG/IzyxZMQ==} + /typescript@5.4.0-dev.20231201: + resolution: {integrity: sha512-v1fwNXyXtvYekwCVTJ/8ZmOdeAiL+AOeECmka/AWWGOvm6TRaWgW9DKrBNmKcKrurYEvYo/X+l6iM902esGS1Q==} engines: {node: '>=14.17'} hasBin: true dev: true From 1b78372aec5fe7c928f9ec9fb6d9ac3e6c0f0c74 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:14:20 -0800 Subject: [PATCH 05/28] Version Packages (#944) Co-authored-by: github-actions[bot] --- .changeset/hot-kangaroos-teach.md | 5 ----- .changeset/proud-drinks-shout.md | 5 ----- .changeset/wild-steaks-switch.md | 5 ----- CHANGELOG.md | 10 ++++++++++ package.json | 2 +- 5 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 .changeset/hot-kangaroos-teach.md delete mode 100644 .changeset/proud-drinks-shout.md delete mode 100644 .changeset/wild-steaks-switch.md diff --git a/.changeset/hot-kangaroos-teach.md b/.changeset/hot-kangaroos-teach.md deleted file mode 100644 index 13765d8951..0000000000 --- a/.changeset/hot-kangaroos-teach.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"livekit-client": patch ---- - -Prevent backup codec publishing when e2ee is enabled diff --git a/.changeset/proud-drinks-shout.md b/.changeset/proud-drinks-shout.md deleted file mode 100644 index 72d592b607..0000000000 --- a/.changeset/proud-drinks-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"livekit-client": patch ---- - -Use enum to track connection state of signal client diff --git a/.changeset/wild-steaks-switch.md b/.changeset/wild-steaks-switch.md deleted file mode 100644 index 58037ec06c..0000000000 --- a/.changeset/wild-steaks-switch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'livekit-client': patch ---- - -Disable VP9 for Safari 15, AV1 for Safari (incomplete support) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04c2325378..b34046450b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 1.15.3 + +### Patch Changes + +- Prevent backup codec publishing when e2ee is enabled - [#943](https://github.com/livekit/client-sdk-js/pull/943) ([@lukasIO](https://github.com/lukasIO)) + +- Use enum to track connection state of signal client - [#949](https://github.com/livekit/client-sdk-js/pull/949) ([@lukasIO](https://github.com/lukasIO)) + +- Disable VP9 for Safari 15, AV1 for Safari (incomplete support) - [#950](https://github.com/livekit/client-sdk-js/pull/950) ([@davidzhao](https://github.com/davidzhao)) + ## 1.15.2 ### Patch Changes diff --git a/package.json b/package.json index e8c92558df..8c275a4a8b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "livekit-client", - "version": "1.15.2", + "version": "1.15.3", "description": "JavaScript/TypeScript client SDK for LiveKit", "main": "./dist/livekit-client.umd.js", "unpkg": "./dist/livekit-client.umd.js", From ef550215903be1f802f04fe5fb3cbaa85f430d4e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:15:12 -0800 Subject: [PATCH 06/28] Version Packages (#944) Co-authored-by: github-actions[bot] From 934d992e2d34601cd7b0b71b81b0bc842961fd38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Dec 2023 15:26:36 +0100 Subject: [PATCH 07/28] Update dependency vite to v4.5.1 [SECURITY] (#956) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 8c275a4a8b..e062917b0b 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "typedoc": "0.25.4", "typedoc-plugin-no-inherit": "1.4.0", "typescript": "5.3.2", - "vite": "4.5.0", + "vite": "4.5.1", "vitest": "^0.34.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4cf95b2711..7464821816 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -137,8 +137,8 @@ devDependencies: specifier: 5.3.2 version: 5.3.2 vite: - specifier: 4.5.0 - version: 4.5.0(@types/node@20.8.10) + specifier: 4.5.1 + version: 4.5.1(@types/node@20.8.10) vitest: specifier: ^0.34.0 version: 0.34.6(jsdom@23.0.1) @@ -3233,7 +3233,7 @@ packages: dependencies: semver: 7.5.4 shelljs: 0.8.5 - typescript: 5.4.0-dev.20231201 + typescript: 5.4.0-dev.20231205 dev: true /electron-to-chromium@1.4.577: @@ -5947,8 +5947,8 @@ packages: hasBin: true dev: true - /typescript@5.4.0-dev.20231201: - resolution: {integrity: sha512-v1fwNXyXtvYekwCVTJ/8ZmOdeAiL+AOeECmka/AWWGOvm6TRaWgW9DKrBNmKcKrurYEvYo/X+l6iM902esGS1Q==} + /typescript@5.4.0-dev.20231205: + resolution: {integrity: sha512-jeYaYMtVCDclulasTrZlhlF9k/Xu88FCpff6+BP3YVNbWefdRy/3nmmrAFVC/TqGSrLhhjSRHBn6bw49b9Jxdw==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -6049,7 +6049,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.5.0(@types/node@20.8.10) + vite: 4.5.1(@types/node@20.8.10) transitivePeerDependencies: - '@types/node' - less @@ -6061,8 +6061,8 @@ packages: - terser dev: true - /vite@4.5.0(@types/node@20.8.10): - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + /vite@4.5.1(@types/node@20.8.10): + resolution: {integrity: sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -6150,7 +6150,7 @@ packages: strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.7.0 - vite: 4.5.0(@types/node@20.8.10) + vite: 4.5.1(@types/node@20.8.10) vite-node: 0.34.6(@types/node@20.8.10) why-is-node-running: 2.2.2 transitivePeerDependencies: From 3e8b46c13890e06be03129f05a39a436ded0debf Mon Sep 17 00:00:00 2001 From: lukasIO Date: Thu, 7 Dec 2023 15:13:49 +0100 Subject: [PATCH 08/28] Improve auto playback handling (#958) * More robust auto playback handling * cleanup * Create twenty-owls-float.md --- .changeset/twenty-owls-float.md | 5 ++ src/room/Room.ts | 24 +++++++--- src/room/track/Track.ts | 82 ++++++++++++++------------------- 3 files changed, 56 insertions(+), 55 deletions(-) create mode 100644 .changeset/twenty-owls-float.md diff --git a/.changeset/twenty-owls-float.md b/.changeset/twenty-owls-float.md new file mode 100644 index 0000000000..e147abd971 --- /dev/null +++ b/.changeset/twenty-owls-float.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Improve auto playback handling diff --git a/src/room/Room.ts b/src/room/Room.ts index d600fdb58b..e65ec9c929 100644 --- a/src/room/Room.ts +++ b/src/room/Room.ts @@ -865,19 +865,29 @@ class Room extends (EventEmitter as new () => TypedEmitter) }; startVideo = async () => { + const elements: HTMLMediaElement[] = []; for (const p of this.participants.values()) { p.videoTracks.forEach((tr) => { tr.track?.attachedElements.forEach((el) => { - el.play().catch((e) => { - if (e.name === 'NotAllowedError') { - log.warn( - 'Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler', - ); - } - }); + if (!elements.includes(el)) { + elements.push(el); + } }); }); } + await Promise.all(elements.map((el) => el.play())) + .then(() => { + this.handleVideoPlaybackStarted(); + }) + .catch((e) => { + if (e.name === 'NotAllowedError') { + this.handleVideoPlaybackFailed(); + } else { + log.warn( + 'Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler', + ); + } + }); }; /** diff --git a/src/room/track/Track.ts b/src/room/track/Track.ts index 10530377c8..c0ca1546d3 100644 --- a/src/room/track/Track.ts +++ b/src/room/track/Track.ts @@ -1,7 +1,7 @@ import { EventEmitter } from 'events'; -import { debounce } from 'ts-debounce'; import type TypedEventEmitter from 'typed-emitter'; import type { SignalClient } from '../../api/SignalClient'; +import log from '../../logger'; import { TrackSource, TrackType } from '../../proto/livekit_models_pb'; import { StreamState as ProtoStreamState } from '../../proto/livekit_rtc_pb'; import { TrackEvent } from '../events'; @@ -113,9 +113,6 @@ export abstract class Track extends (EventEmitter as new () => TypedEventEmitter if (!this.attachedElements.includes(element)) { this.attachedElements.push(element); - // listen to suspend events in order to detect auto playback issues - element.addEventListener('suspend', this.handleElementSuspended); - element.addEventListener('playing', this.handleElementPlay); } // even if we believe it's already attached to the element, it's possible @@ -125,27 +122,38 @@ export abstract class Track extends (EventEmitter as new () => TypedEventEmitter // handle auto playback failures const allMediaStreamTracks = (element.srcObject as MediaStream).getTracks(); - if (allMediaStreamTracks.some((tr) => tr.kind === 'audio')) { - // manually play audio to detect audio playback status - element - .play() - .then(() => { - this.emit(TrackEvent.AudioPlaybackStarted); - }) - .catch((e) => { - // If audio playback isn't allowed make sure we still play back the video - if ( - element && - allMediaStreamTracks.some((tr) => tr.kind === 'video') && - e.name === 'NotAllowedError' - ) { - element.muted = true; - element.play().catch(() => { - // catch for Safari, exceeded options at this point to automatically play the media element - }); - } - }); - } + const hasAudio = allMediaStreamTracks.some((tr) => tr.kind === 'audio'); + + // manually play media to detect auto playback status + element + .play() + .then(() => { + this.emit(hasAudio ? TrackEvent.AudioPlaybackStarted : TrackEvent.VideoPlaybackStarted); + }) + .catch((e) => { + if (e.name === 'NotAllowedError') { + this.emit(hasAudio ? TrackEvent.AudioPlaybackFailed : TrackEvent.VideoPlaybackFailed, e); + } else if (e.name === 'AbortError') { + // commonly triggered by another `play` request, only log for debugging purposes + log.debug( + `${hasAudio ? 'audio' : 'video'} playback aborted, likely due to new play request`, + ); + } else { + log.warn(`could not playback ${hasAudio ? 'audio' : 'video'}`, e); + } + // If audio playback isn't allowed make sure we still play back the video + if ( + hasAudio && + element && + allMediaStreamTracks.some((tr) => tr.kind === 'video') && + e.name === 'NotAllowedError' + ) { + element.muted = true; + element.play().catch(() => { + // catch for Safari, exceeded options at this point to automatically play the media element + }); + } + }); this.emit(TrackEvent.ElementAttached, element); return element; @@ -170,8 +178,6 @@ export abstract class Track extends (EventEmitter as new () => TypedEventEmitter if (idx >= 0) { this.attachedElements.splice(idx, 1); this.recycleElement(element); - element.removeEventListener('suspend', this.handleElementSuspended); - element.removeEventListener('playing', this.handleElementPlay); this.emit(TrackEvent.ElementDetached, element); } return element; @@ -182,8 +188,6 @@ export abstract class Track extends (EventEmitter as new () => TypedEventEmitter detachTrack(this.mediaStreamTrack, elm); detached.push(elm); this.recycleElement(elm); - elm.removeEventListener('suspend', this.handleElementSuspended); - elm.removeEventListener('playing', this.handleElementPlay); this.emit(TrackEvent.ElementDetached, elm); }); @@ -270,24 +274,6 @@ export abstract class Track extends (EventEmitter as new () => TypedEventEmitter document.removeEventListener('visibilitychange', this.appVisibilityChangedListener); } } - - private handleElementSuspended = () => { - this.debouncedPlaybackStateChange(false); - }; - - private handleElementPlay = () => { - this.debouncedPlaybackStateChange(true); - }; - - private debouncedPlaybackStateChange = debounce((allowed: boolean) => { - // we debounce this as Safari triggers both `playing` and `suspend` shortly after one another - // in order not to raise the wrong event, we debounce the call to make sure we only emit the correct status - if (this.kind === Track.Kind.Audio) { - this.emit(allowed ? TrackEvent.AudioPlaybackStarted : TrackEvent.AudioPlaybackFailed); - } else if (this.kind === Track.Kind.Video) { - this.emit(allowed ? TrackEvent.VideoPlaybackStarted : TrackEvent.VideoPlaybackFailed); - } - }, 300); } export function attachToElement(track: MediaStreamTrack, element: HTMLMediaElement) { @@ -340,7 +326,7 @@ export function attachToElement(track: MediaStreamTrack, element: HTMLMediaEleme // when the window is backgrounded before the first frame is drawn // manually calling play here seems to fix that element.play().catch(() => { - /** do nothing, we watch the `suspended` event do deal with these failures */ + /** do nothing */ }); }, 0); } From b411cbe39fb86c0ae6a16ab57bcedaecdf9d23e9 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Thu, 7 Dec 2023 19:08:05 +0100 Subject: [PATCH 09/28] Add isAgent getter on participant (#960) * Add isAgent getter on participant * Create shy-steaks-poke.md --- .changeset/shy-steaks-poke.md | 5 +++++ src/proto/livekit_models_pb.ts | 16 +++++++++++++++- src/proto/livekit_rtc_pb.ts | 2 +- src/room/participant/Participant.ts | 4 ++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 .changeset/shy-steaks-poke.md diff --git a/.changeset/shy-steaks-poke.md b/.changeset/shy-steaks-poke.md new file mode 100644 index 0000000000..dcdb21bd15 --- /dev/null +++ b/.changeset/shy-steaks-poke.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Add isAgent getter on participant diff --git a/src/proto/livekit_models_pb.ts b/src/proto/livekit_models_pb.ts index 3790087c22..def9fd4c45 100644 --- a/src/proto/livekit_models_pb.ts +++ b/src/proto/livekit_models_pb.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v1.3.3 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file livekit_models.proto (package livekit, syntax proto3) /* eslint-disable */ // @ts-nocheck @@ -218,12 +218,18 @@ export enum ConnectionQuality { * @generated from enum value: EXCELLENT = 2; */ EXCELLENT = 2, + + /** + * @generated from enum value: LOST = 3; + */ + LOST = 3, } // Retrieve enum metadata with: proto3.getEnumType(ConnectionQuality) proto3.util.setEnumType(ConnectionQuality, "livekit.ConnectionQuality", [ { no: 0, name: "POOR" }, { no: 1, name: "GOOD" }, { no: 2, name: "EXCELLENT" }, + { no: 3, name: "LOST" }, ]); /** @@ -614,6 +620,13 @@ export class ParticipantPermission extends Message { */ canUpdateMetadata = false; + /** + * indicates that participant is an agent + * + * @generated from field: bool agent = 11; + */ + agent = false; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -629,6 +642,7 @@ export class ParticipantPermission extends Message { { no: 7, name: "hidden", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, { no: 8, name: "recorder", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, { no: 10, name: "can_update_metadata", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 11, name: "agent", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): ParticipantPermission { diff --git a/src/proto/livekit_rtc_pb.ts b/src/proto/livekit_rtc_pb.ts index b57a900b1e..638f35390f 100644 --- a/src/proto/livekit_rtc_pb.ts +++ b/src/proto/livekit_rtc_pb.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v1.3.3 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file livekit_rtc.proto (package livekit, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/src/room/participant/Participant.ts b/src/room/participant/Participant.ts index 600bc19214..e90e306521 100644 --- a/src/room/participant/Participant.ts +++ b/src/room/participant/Participant.ts @@ -77,6 +77,10 @@ export default class Participant extends (EventEmitter as new () => TypedEmitter return this.tracks.size > 0 && Array.from(this.tracks.values()).every((tr) => tr.isEncrypted); } + get isAgent() { + return this.permissions?.agent ?? false; + } + /** @internal */ constructor(sid: string, identity: string, name?: string, metadata?: string) { super(); From 7dd7ff28540d55f77b0d5499b5c3fba04670e693 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Fri, 8 Dec 2023 15:55:21 +0100 Subject: [PATCH 10/28] Add ConnectionQuality.Lost (#961) * Add ConnectionQuality.Lost * Create famous-laws-sell.md * bump protocol --- .changeset/famous-laws-sell.md | 5 +++++ src/room/participant/Participant.ts | 7 +++++++ src/version.ts | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changeset/famous-laws-sell.md diff --git a/.changeset/famous-laws-sell.md b/.changeset/famous-laws-sell.md new file mode 100644 index 0000000000..764b7d13dd --- /dev/null +++ b/.changeset/famous-laws-sell.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Add ConnectionQuality.Lost diff --git a/src/room/participant/Participant.ts b/src/room/participant/Participant.ts index e90e306521..6a7391afa7 100644 --- a/src/room/participant/Participant.ts +++ b/src/room/participant/Participant.ts @@ -21,6 +21,11 @@ export enum ConnectionQuality { Excellent = 'excellent', Good = 'good', Poor = 'poor', + /** + * Indicates that a participant has temporarily (or permanently) lost connection to LiveKit. + * For permanent disconnection a `ParticipantDisconnected` event will be emitted after a timeout + */ + Lost = 'lost', Unknown = 'unknown', } @@ -32,6 +37,8 @@ function qualityFromProto(q: ProtoQuality): ConnectionQuality { return ConnectionQuality.Good; case ProtoQuality.POOR: return ConnectionQuality.Poor; + case ProtoQuality.LOST: + return ConnectionQuality.Lost; default: return ConnectionQuality.Unknown; } diff --git a/src/version.ts b/src/version.ts index 710485c6f4..f2d35f6193 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,4 +1,4 @@ import { version as v } from '../package.json'; export const version = v; -export const protocolVersion = 10; +export const protocolVersion = 11; From e9050b9fff282175a47dcf7b1dd970cf12423231 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:12:21 +0100 Subject: [PATCH 11/28] Version Packages (#959) Co-authored-by: github-actions[bot] --- .changeset/famous-laws-sell.md | 5 ----- .changeset/shy-steaks-poke.md | 5 ----- .changeset/twenty-owls-float.md | 5 ----- CHANGELOG.md | 10 ++++++++++ package.json | 2 +- 5 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 .changeset/famous-laws-sell.md delete mode 100644 .changeset/shy-steaks-poke.md delete mode 100644 .changeset/twenty-owls-float.md diff --git a/.changeset/famous-laws-sell.md b/.changeset/famous-laws-sell.md deleted file mode 100644 index 764b7d13dd..0000000000 --- a/.changeset/famous-laws-sell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"livekit-client": patch ---- - -Add ConnectionQuality.Lost diff --git a/.changeset/shy-steaks-poke.md b/.changeset/shy-steaks-poke.md deleted file mode 100644 index dcdb21bd15..0000000000 --- a/.changeset/shy-steaks-poke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"livekit-client": patch ---- - -Add isAgent getter on participant diff --git a/.changeset/twenty-owls-float.md b/.changeset/twenty-owls-float.md deleted file mode 100644 index e147abd971..0000000000 --- a/.changeset/twenty-owls-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"livekit-client": patch ---- - -Improve auto playback handling diff --git a/CHANGELOG.md b/CHANGELOG.md index b34046450b..b1ada49fbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 1.15.4 + +### Patch Changes + +- Add ConnectionQuality.Lost - [#961](https://github.com/livekit/client-sdk-js/pull/961) ([@lukasIO](https://github.com/lukasIO)) + +- Add isAgent getter on participant - [#960](https://github.com/livekit/client-sdk-js/pull/960) ([@lukasIO](https://github.com/lukasIO)) + +- Improve auto playback handling - [#958](https://github.com/livekit/client-sdk-js/pull/958) ([@lukasIO](https://github.com/lukasIO)) + ## 1.15.3 ### Patch Changes diff --git a/package.json b/package.json index e062917b0b..1f6f775ccb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "livekit-client", - "version": "1.15.3", + "version": "1.15.4", "description": "JavaScript/TypeScript client SDK for LiveKit", "main": "./dist/livekit-client.umd.js", "unpkg": "./dist/livekit-client.umd.js", From 85988c579eb8156bb87a1915a27675af77744f7e Mon Sep 17 00:00:00 2001 From: cnderrauber Date: Fri, 15 Dec 2023 10:30:28 +0800 Subject: [PATCH 12/28] Add receiver video mimeType to receiver stats (#963) * Add mimeType to receiver stats * changset --- .changeset/flat-bananas-obey.md | 5 +++++ src/room/stats.ts | 2 ++ src/room/track/RemoteVideoTrack.ts | 8 ++++++++ 3 files changed, 15 insertions(+) create mode 100644 .changeset/flat-bananas-obey.md diff --git a/.changeset/flat-bananas-obey.md b/.changeset/flat-bananas-obey.md new file mode 100644 index 0000000000..65623f0f51 --- /dev/null +++ b/.changeset/flat-bananas-obey.md @@ -0,0 +1,5 @@ +--- +'livekit-client': patch +--- + +Add receiver video mime type to stats diff --git a/src/room/stats.ts b/src/room/stats.ts index 49d3c434ea..3ceb658419 100644 --- a/src/room/stats.ts +++ b/src/room/stats.ts @@ -106,6 +106,8 @@ export interface VideoReceiverStats extends ReceiverStats { nackCount?: number; decoderImplementation?: string; + + mimeType?: string; } export function computeBitrate( diff --git a/src/room/track/RemoteVideoTrack.ts b/src/room/track/RemoteVideoTrack.ts index ffb2e355d3..9448fe9c17 100644 --- a/src/room/track/RemoteVideoTrack.ts +++ b/src/room/track/RemoteVideoTrack.ts @@ -169,8 +169,11 @@ export default class RemoteVideoTrack extends RemoteTrack { const stats = await this.receiver.getStats(); let receiverStats: VideoReceiverStats | undefined; + let codecID = ''; + let codecs = new Map(); stats.forEach((v) => { if (v.type === 'inbound-rtp') { + codecID = v.codecId; receiverStats = { type: 'video', framesDecoded: v.framesDecoded, @@ -188,8 +191,13 @@ export default class RemoteVideoTrack extends RemoteTrack { bytesReceived: v.bytesReceived, decoderImplementation: v.decoderImplementation, }; + } else if (v.type === 'codec') { + codecs.set(v.id, v); } }); + if (receiverStats && codecID !== '' && codecs.get(codecID)) { + receiverStats.mimeType = codecs.get(codecID).mimeType; + } return receiverStats; } From 0dc45b32d9e9c2ad1df15d81143cd82b5d8f6740 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Fri, 15 Dec 2023 11:39:14 +0100 Subject: [PATCH 13/28] Make sure all client callbacks are set up after reconnect (#966) * Make sure all client callbacks are set up after reconnect * Create honest-fans-laugh.md --- .changeset/honest-fans-laugh.md | 5 +++++ src/room/RTCEngine.ts | 13 +++++++++++++ src/room/events.ts | 3 +++ src/room/participant/LocalParticipant.ts | 10 ++++------ 4 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 .changeset/honest-fans-laugh.md diff --git a/.changeset/honest-fans-laugh.md b/.changeset/honest-fans-laugh.md new file mode 100644 index 0000000000..acf2dbb9d2 --- /dev/null +++ b/.changeset/honest-fans-laugh.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Make sure all signal client callbacks are set up for a reconnect diff --git a/src/room/RTCEngine.ts b/src/room/RTCEngine.ts index 242f7ff8ee..5a6944f939 100644 --- a/src/room/RTCEngine.ts +++ b/src/room/RTCEngine.ts @@ -31,10 +31,12 @@ import { type ReconnectResponse, SignalTarget, type StreamStateUpdate, + SubscribedQualityUpdate, type SubscriptionPermissionUpdate, type SubscriptionResponse, SyncState, type TrackPublishedResponse, + TrackUnpublishedResponse, UpdateSubscription, } from '../proto/livekit_rtc_pb'; import PCTransport, { PCEvents } from './PCTransport'; @@ -441,6 +443,14 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.token = token; }; + this.client.onRemoteMuteChanged = (trackSid: string, muted: boolean) => { + this.emit(EngineEvent.RemoteMute, trackSid, muted); + }; + + this.client.onSubscribedQualityUpdate = (update: SubscribedQualityUpdate) => { + this.emit(EngineEvent.SubscribedQualityUpdate, update); + }; + this.client.onClose = () => { this.handleDisconnect('signal', ReconnectReason.RR_SIGNAL_DISCONNECTED); }; @@ -1320,4 +1330,7 @@ export type EngineEventCallbacks = { streamStateChanged: (update: StreamStateUpdate) => void; subscriptionError: (resp: SubscriptionResponse) => void; subscriptionPermissionUpdate: (update: SubscriptionPermissionUpdate) => void; + subscribedQualityUpdate: (update: SubscribedQualityUpdate) => void; + localTrackUnpublished: (unpublishedResponse: TrackUnpublishedResponse) => void; + remoteMute: (trackSid: string, muted: boolean) => void; }; diff --git a/src/room/events.ts b/src/room/events.ts index 47773c875c..b6edcd3007 100644 --- a/src/room/events.ts +++ b/src/room/events.ts @@ -486,6 +486,9 @@ export enum EngineEvent { ConnectionQualityUpdate = 'connectionQualityUpdate', SubscriptionError = 'subscriptionError', SubscriptionPermissionUpdate = 'subscriptionPermissionUpdate', + RemoteMute = 'remoteMute', + SubscribedQualityUpdate = 'subscribedQualityUpdate', + LocalTrackUnpublished = 'localTrackUnpublished', } export enum TrackEvent { diff --git a/src/room/participant/LocalParticipant.ts b/src/room/participant/LocalParticipant.ts index 938a172d01..8d47518262 100644 --- a/src/room/participant/LocalParticipant.ts +++ b/src/room/participant/LocalParticipant.ts @@ -127,7 +127,7 @@ export default class LocalParticipant extends Participant { */ setupEngine(engine: RTCEngine) { this.engine = engine; - this.engine.client.onRemoteMuteChanged = (trackSid: string, muted: boolean) => { + this.engine.on(EngineEvent.RemoteMute, (trackSid: string, muted: boolean) => { const pub = this.tracks.get(trackSid); if (!pub || !pub.track) { return; @@ -137,11 +137,7 @@ export default class LocalParticipant extends Participant { } else { pub.unmute(); } - }; - - this.engine.client.onSubscribedQualityUpdate = this.handleSubscribedQualityUpdate; - - this.engine.client.onLocalTrackUnpublished = this.handleLocalTrackUnpublished; + }); this.engine .on(EngineEvent.Connected, this.handleReconnected) @@ -149,6 +145,8 @@ export default class LocalParticipant extends Participant { .on(EngineEvent.SignalResumed, this.handleReconnected) .on(EngineEvent.Restarting, this.handleReconnecting) .on(EngineEvent.Resuming, this.handleReconnecting) + .on(EngineEvent.LocalTrackUnpublished, this.handleLocalTrackUnpublished) + .on(EngineEvent.SubscribedQualityUpdate, this.handleSubscribedQualityUpdate) .on(EngineEvent.Disconnected, this.handleDisconnected); } From 0bbfdeda5b57e3954a8d985c359ef25a5be6e9d0 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Wed, 20 Dec 2023 17:18:38 +0100 Subject: [PATCH 14/28] Make sure to apply audio output selection when participant is first created (#968) * make sure to apply audio output selection when participant is first created * Create slow-chicken-agree.md * catch audio output setting in constructor --- .changeset/slow-chicken-agree.md | 5 +++++ example/sample.ts | 4 ++++ src/room/Room.ts | 10 +++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 .changeset/slow-chicken-agree.md diff --git a/.changeset/slow-chicken-agree.md b/.changeset/slow-chicken-agree.md new file mode 100644 index 0000000000..14d041e24f --- /dev/null +++ b/.changeset/slow-chicken-agree.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Make sure to apply audio output selection when participant is first created diff --git a/example/sample.ts b/example/sample.ts index a69ab804cb..2a9911bd17 100644 --- a/example/sample.ts +++ b/example/sample.ts @@ -77,6 +77,7 @@ const appActions = { const cryptoKey = ($('crypto-key')).value; const autoSubscribe = ($('auto-subscribe')).checked; const e2eeEnabled = ($('e2ee')).checked; + const audioOutputId = ($('audio-output')).value; setLogLevel(LogLevel.debug); updateSearchParams(url, token, cryptoKey); @@ -84,6 +85,9 @@ const appActions = { const roomOpts: RoomOptions = { adaptiveStream, dynacast, + audioOutput: { + deviceId: audioOutputId, + }, publishDefaults: { simulcast, videoSimulcastLayers: [VideoPresets.h90, VideoPresets.h216], diff --git a/src/room/Room.ts b/src/room/Room.ts index e65ec9c929..b6779ebd6a 100644 --- a/src/room/Room.ts +++ b/src/room/Room.ts @@ -195,7 +195,10 @@ class Room extends (EventEmitter as new () => TypedEmitter) ); } if (this.options.audioOutput?.deviceId) { - this.switchActiveDevice('audiooutput', unwrapConstraint(this.options.audioOutput.deviceId)); + this.switchActiveDevice( + 'audiooutput', + unwrapConstraint(this.options.audioOutput.deviceId), + ).catch((e) => log.warn(`Could not set audio output: ${e.message}`)); } if (this.options.e2ee) { @@ -1504,6 +1507,11 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (this.options.expWebAudioMix) { participant.setAudioContext(this.audioContext); } + if (this.options.audioOutput?.deviceId) { + participant + .setAudioOutput(this.options.audioOutput) + .catch((e) => log.warn(`Could not set audio output: ${e.message}`)); + } return participant; } From 761711adb4195dc49a0b32e1e4f88726659dac94 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 18:26:24 +0100 Subject: [PATCH 15/28] Version Packages (#964) Co-authored-by: github-actions[bot] --- .changeset/flat-bananas-obey.md | 5 ----- .changeset/honest-fans-laugh.md | 5 ----- .changeset/slow-chicken-agree.md | 5 ----- CHANGELOG.md | 10 ++++++++++ package.json | 2 +- 5 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 .changeset/flat-bananas-obey.md delete mode 100644 .changeset/honest-fans-laugh.md delete mode 100644 .changeset/slow-chicken-agree.md diff --git a/.changeset/flat-bananas-obey.md b/.changeset/flat-bananas-obey.md deleted file mode 100644 index 65623f0f51..0000000000 --- a/.changeset/flat-bananas-obey.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'livekit-client': patch ---- - -Add receiver video mime type to stats diff --git a/.changeset/honest-fans-laugh.md b/.changeset/honest-fans-laugh.md deleted file mode 100644 index acf2dbb9d2..0000000000 --- a/.changeset/honest-fans-laugh.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"livekit-client": patch ---- - -Make sure all signal client callbacks are set up for a reconnect diff --git a/.changeset/slow-chicken-agree.md b/.changeset/slow-chicken-agree.md deleted file mode 100644 index 14d041e24f..0000000000 --- a/.changeset/slow-chicken-agree.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"livekit-client": patch ---- - -Make sure to apply audio output selection when participant is first created diff --git a/CHANGELOG.md b/CHANGELOG.md index b1ada49fbe..39a8e20307 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 1.15.5 + +### Patch Changes + +- Add receiver video mime type to stats - [#963](https://github.com/livekit/client-sdk-js/pull/963) ([@cnderrauber](https://github.com/cnderrauber)) + +- Make sure all signal client callbacks are set up for a reconnect - [#966](https://github.com/livekit/client-sdk-js/pull/966) ([@lukasIO](https://github.com/lukasIO)) + +- Make sure to apply audio output selection when participant is first created - [#968](https://github.com/livekit/client-sdk-js/pull/968) ([@lukasIO](https://github.com/lukasIO)) + ## 1.15.4 ### Patch Changes diff --git a/package.json b/package.json index 1f6f775ccb..561fe67f66 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "livekit-client", - "version": "1.15.4", + "version": "1.15.5", "description": "JavaScript/TypeScript client SDK for LiveKit", "main": "./dist/livekit-client.umd.js", "unpkg": "./dist/livekit-client.umd.js", From fd5220a3fbec7d8977cd09ed2e6cd07600001225 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jan 2024 13:16:43 +0100 Subject: [PATCH 16/28] Update devDependencies (non-major) (#974) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 18 +- pnpm-lock.yaml | 996 +++++++++++++++++++++++++------------------------ 2 files changed, 520 insertions(+), 494 deletions(-) diff --git a/package.json b/package.json index 561fe67f66..1e5c8fd877 100644 --- a/package.json +++ b/package.json @@ -62,14 +62,14 @@ "webrtc-adapter": "^8.1.1" }, "devDependencies": { - "@babel/core": "7.23.5", - "@babel/preset-env": "7.23.5", + "@babel/core": "7.23.7", + "@babel/preset-env": "7.23.7", "@bufbuild/protoc-gen-es": "^1.3.0", "@changesets/cli": "2.27.1", "@livekit/changesets-changelog-github": "^0.0.4", "@rollup/plugin-babel": "6.0.4", "@rollup/plugin-commonjs": "25.0.7", - "@rollup/plugin-json": "6.0.1", + "@rollup/plugin-json": "6.1.0", "@rollup/plugin-node-resolve": "15.2.3", "@rollup/plugin-terser": "^0.4.0", "@size-limit/file": "^8.2.4", @@ -81,12 +81,12 @@ "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", "downlevel-dts": "^0.11.0", - "eslint": "8.54.0", + "eslint": "8.56.0", "eslint-config-airbnb-typescript": "17.1.0", - "eslint-config-prettier": "9.0.0", + "eslint-config-prettier": "9.1.0", "eslint-plugin-ecmascript-compat": "^3.0.0", - "eslint-plugin-import": "2.29.0", - "gh-pages": "6.1.0", + "eslint-plugin-import": "2.29.1", + "gh-pages": "6.1.1", "jsdom": "^23.0.0", "prettier": "^2.8.8", "rollup": "3.29.4", @@ -94,9 +94,9 @@ "rollup-plugin-re": "1.0.7", "rollup-plugin-typescript2": "0.36.0", "size-limit": "^8.2.4", - "typedoc": "0.25.4", + "typedoc": "0.25.6", "typedoc-plugin-no-inherit": "1.4.0", - "typescript": "5.3.2", + "typescript": "5.3.3", "vite": "4.5.1", "vitest": "^0.34.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7464821816..177b838f84 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,11 +32,11 @@ dependencies: devDependencies: '@babel/core': - specifier: 7.23.5 - version: 7.23.5 + specifier: 7.23.7 + version: 7.23.7 '@babel/preset-env': - specifier: 7.23.5 - version: 7.23.5(@babel/core@7.23.5) + specifier: 7.23.7 + version: 7.23.7(@babel/core@7.23.7) '@bufbuild/protoc-gen-es': specifier: ^1.3.0 version: 1.4.2(@bufbuild/protobuf@1.4.2) @@ -48,13 +48,13 @@ devDependencies: version: 0.0.4 '@rollup/plugin-babel': specifier: 6.0.4 - version: 6.0.4(@babel/core@7.23.5)(rollup@3.29.4) + version: 6.0.4(@babel/core@7.23.7)(rollup@3.29.4) '@rollup/plugin-commonjs': specifier: 25.0.7 version: 25.0.7(rollup@3.29.4) '@rollup/plugin-json': - specifier: 6.0.1 - version: 6.0.1(rollup@3.29.4) + specifier: 6.1.0 + version: 6.1.0(rollup@3.29.4) '@rollup/plugin-node-resolve': specifier: 15.2.3 version: 15.2.3(rollup@3.29.4) @@ -81,31 +81,31 @@ devDependencies: version: 0.7.39 '@typescript-eslint/eslint-plugin': specifier: 5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.3.2) + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: 5.62.0 - version: 5.62.0(eslint@8.54.0)(typescript@5.3.2) + version: 5.62.0(eslint@8.56.0)(typescript@5.3.3) downlevel-dts: specifier: ^0.11.0 version: 0.11.0 eslint: - specifier: 8.54.0 - version: 8.54.0 + specifier: 8.56.0 + version: 8.56.0 eslint-config-airbnb-typescript: specifier: 17.1.0 - version: 17.1.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.0)(eslint@8.54.0) + version: 17.1.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) eslint-config-prettier: - specifier: 9.0.0 - version: 9.0.0(eslint@8.54.0) + specifier: 9.1.0 + version: 9.1.0(eslint@8.56.0) eslint-plugin-ecmascript-compat: specifier: ^3.0.0 - version: 3.1.0(eslint@8.54.0) + version: 3.1.0(eslint@8.56.0) eslint-plugin-import: - specifier: 2.29.0 - version: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0) + specifier: 2.29.1 + version: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0) gh-pages: - specifier: 6.1.0 - version: 6.1.0 + specifier: 6.1.1 + version: 6.1.1 jsdom: specifier: ^23.0.0 version: 23.0.1 @@ -123,19 +123,19 @@ devDependencies: version: 1.0.7 rollup-plugin-typescript2: specifier: 0.36.0 - version: 0.36.0(rollup@3.29.4)(typescript@5.3.2) + version: 0.36.0(rollup@3.29.4)(typescript@5.3.3) size-limit: specifier: ^8.2.4 version: 8.2.6 typedoc: - specifier: 0.25.4 - version: 0.25.4(typescript@5.3.2) + specifier: 0.25.6 + version: 0.25.6(typescript@5.3.3) typedoc-plugin-no-inherit: specifier: 1.4.0 - version: 1.4.0(typedoc@0.25.4) + version: 1.4.0(typedoc@0.25.6) typescript: - specifier: 5.3.2 - version: 5.3.2 + specifier: 5.3.3 + version: 5.3.3 vite: specifier: 4.5.1 version: 4.5.1(@types/node@20.8.10) @@ -158,14 +158,6 @@ packages: '@jridgewell/trace-mapping': 0.3.20 dev: true - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 - dev: true - /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -174,30 +166,25 @@ packages: chalk: 2.4.2 dev: true - /@babel/compat-data@7.23.2: - resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/compat-data@7.23.5: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.5: - resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} + /@babel/core@7.23.7: + resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) - '@babel/helpers': 7.23.5 - '@babel/parser': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helpers': 7.23.7 + '@babel/parser': 7.23.6 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.23.5 + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -211,26 +198,26 @@ packages: resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 jsesc: 2.5.2 source-map: 0.5.7 dev: true - /@babel/generator@7.23.0: - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + /@babel/generator@7.23.5: + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 dev: true - /@babel/generator@7.23.5: - resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 @@ -240,64 +227,64 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.2 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.22.1 + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.2 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.5): + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.7): resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.5): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.5): - resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.7): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 lodash.debounce: 4.0.8 @@ -316,37 +303,37 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-member-expression-to-functions@7.23.0: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -358,7 +345,7 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-plugin-utils@7.22.5: @@ -366,25 +353,25 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.5): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -394,26 +381,21 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 - dev: true - - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} + '@babel/types': 7.23.5 dev: true /@babel/helper-string-parser@7.23.4: @@ -426,11 +408,6 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} @@ -442,29 +419,20 @@ packages: dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.22.15 - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true - /@babel/helpers@7.23.5: - resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} + /@babel/helpers@7.23.7: + resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.23.5 + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} @@ -479,7 +447,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/parser@7.23.5: @@ -490,848 +458,857 @@ packages: '@babel/types': 7.23.5 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.5): + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.5): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.7): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.7): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.5): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.5): + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.5): + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.7): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.7): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.7): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.5): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.7): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.7): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.5): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.7): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.5): - resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} + /@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.5): + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.7): resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.5): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.23.5(@babel/core@7.23.5): - resolution: {integrity: sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==} + /@babel/preset-env@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-SY27X/GtTz/L4UryMNJ6p4fH4nsgWbz84y9FE0bQeWJP6O5BhgVCt53CotQKHCOeXJel8VyhlhujhlltKms/CA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.5) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.5) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.5) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.5) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.5) - babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.5) - babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.5) - babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.7) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7) core-js-compat: 3.33.2 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.5): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 esutils: 2.0.3 dev: true @@ -1351,40 +1328,40 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 dev: true /@babel/traverse@7.23.2: resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/traverse@7.23.5: - resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} + /@babel/traverse@7.23.7: + resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.5 + '@babel/generator': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -1399,17 +1376,17 @@ packages: to-fast-properties: 2.0.0 dev: true - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 + '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: true - /@babel/types@7.23.5: - resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.23.4 @@ -1840,13 +1817,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.54.0 + eslint: 8.56.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1855,8 +1832,8 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.3: - resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 @@ -1872,8 +1849,8 @@ packages: - supports-color dev: true - /@eslint/js@8.54.0: - resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1996,7 +1973,7 @@ packages: fastq: 1.15.0 dev: true - /@rollup/plugin-babel@6.0.4(@babel/core@7.23.5)(rollup@3.29.4): + /@rollup/plugin-babel@6.0.4(@babel/core@7.23.7)(rollup@3.29.4): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2009,7 +1986,7 @@ packages: rollup: optional: true dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.7 '@babel/helper-module-imports': 7.22.15 '@rollup/pluginutils': 5.0.5(rollup@3.29.4) rollup: 3.29.4 @@ -2033,8 +2010,8 @@ packages: rollup: 3.29.4 dev: true - /@rollup/plugin-json@6.0.1(rollup@3.29.4): - resolution: {integrity: sha512-RgVfl5hWMkxN1h/uZj8FVESvPuBJ/uf6ly6GTj0GONnkfoBN5KC0MSz+PN2OLDgYXMhtG0mWpTrkiOjoxAIevw==} + /@rollup/plugin-json@6.1.0(rollup@3.29.4): + resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -2042,7 +2019,7 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) rollup: 3.29.4 dev: true @@ -2102,6 +2079,21 @@ packages: rollup: 3.29.4 dev: true + /@rollup/pluginutils@5.1.0(rollup@3.29.4): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 3.29.4 + dev: true + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -2237,7 +2229,7 @@ packages: resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==} dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.3.2): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2249,23 +2241,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.54.0)(typescript@5.3.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.54.0 + eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare-lite: 1.4.0 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.2) - typescript: 5.3.2 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.54.0)(typescript@5.3.2): + /@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2277,10 +2269,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) debug: 4.3.4 - eslint: 8.54.0 - typescript: 5.3.2 + eslint: 8.56.0 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true @@ -2293,7 +2285,7 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.54.0)(typescript@5.3.2): + /@typescript-eslint/type-utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2303,12 +2295,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.54.0 - tsutils: 3.21.0(typescript@5.3.2) - typescript: 5.3.2 + eslint: 8.56.0 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true @@ -2318,7 +2310,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.2): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2333,25 +2325,25 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.2) - typescript: 5.3.2 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.54.0)(typescript@5.3.2): + /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.4 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) - eslint: 8.54.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + eslint: 8.56.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -2744,38 +2736,38 @@ packages: engines: {node: '>= 0.4'} dev: true - /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.5): - resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.7): + resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.5 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.5): - resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.7): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) core-js-compat: 3.33.2 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.5): - resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.7): + resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) transitivePeerDependencies: - supports-color dev: true @@ -2833,6 +2825,17 @@ packages: update-browserslist-db: 1.0.13(browserslist@4.22.1) dev: true + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001572 + electron-to-chromium: 1.4.616 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true @@ -2883,6 +2886,10 @@ packages: resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==} dev: true + /caniuse-lite@1.0.30001572: + resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==} + dev: true + /chai@4.3.10: resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} engines: {node: '>=4'} @@ -3233,13 +3240,17 @@ packages: dependencies: semver: 7.5.4 shelljs: 0.8.5 - typescript: 5.4.0-dev.20231205 + typescript: 5.4.0-dev.20240101 dev: true /electron-to-chromium@1.4.577: resolution: {integrity: sha512-/5xHPH6f00SxhHw6052r+5S1xO7gHNc89hV7tqlvnStvKbSrDqc/u6AlwPvVWWNj+s4/KL6T6y8ih+nOY0qYNA==} dev: true + /electron-to-chromium@1.4.616: + resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} + dev: true + /email-addresses@5.0.0: resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} dev: true @@ -3393,7 +3404,7 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.0)(eslint@8.54.0): + /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1)(eslint@8.56.0): resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -3401,14 +3412,14 @@ packages: eslint-plugin-import: ^2.25.2 dependencies: confusing-browser-globals: 1.0.11 - eslint: 8.54.0 - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0) + eslint: 8.56.0 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0) object.assign: 4.1.4 object.entries: 1.1.7 semver: 6.3.1 dev: true - /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.0)(eslint@8.54.0): + /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): resolution: {integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.13.0 || ^6.0.0 @@ -3416,20 +3427,20 @@ packages: eslint: ^7.32.0 || ^8.2.0 eslint-plugin-import: ^2.25.3 dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.3.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.3.2) - eslint: 8.54.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.54.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0) dev: true - /eslint-config-prettier@9.0.0(eslint@8.54.0): - resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + /eslint-config-prettier@9.1.0(eslint@8.56.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.54.0 + eslint: 8.56.0 dev: true /eslint-import-resolver-node@0.3.9: @@ -3442,7 +3453,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3463,15 +3474,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 - eslint: 8.54.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-ecmascript-compat@3.1.0(eslint@8.54.0): + /eslint-plugin-ecmascript-compat@3.1.0(eslint@8.56.0): resolution: {integrity: sha512-4qka2/07hb1O9/zAZEQnuBK07/i166ObKksbS9vxKX5kEsfskS0PBMec/BCdLZsUqaOW+37TgnqWz2b5Jbw8Jg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3479,24 +3490,24 @@ packages: dependencies: '@mdn/browser-compat-data': 5.2.55 browserslist: 4.22.1 - eslint: 8.54.0 - eslint-plugin-es-x: 6.2.1(eslint@8.54.0) + eslint: 8.56.0 + eslint-plugin-es-x: 6.2.1(eslint@8.56.0) lodash: 4.17.21 dev: true - /eslint-plugin-es-x@6.2.1(eslint@8.54.0): + /eslint-plugin-es-x@6.2.1(eslint@8.56.0): resolution: {integrity: sha512-uR34zUhZ9EBoiSD2DdV5kHLpydVEvwWqjteUr9sXRgJknwbKZJZhdJ7uFnaTtd+Nr/2G3ceJHnHXrFhJ67n3Tw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 - eslint: 8.54.0 + eslint: 8.56.0 dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0): - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -3505,16 +3516,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.54.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -3523,7 +3534,7 @@ packages: object.groupby: 1.0.1 object.values: 1.1.7 semver: 6.3.1 - tsconfig-paths: 3.14.2 + tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -3551,15 +3562,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.54.0: - resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.3 - '@eslint/js': 8.54.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -3881,8 +3892,8 @@ packages: get-intrinsic: 1.2.2 dev: true - /gh-pages@6.1.0: - resolution: {integrity: sha512-MdXigvqN3I66Y+tAZsQJMzpBWQOI1snD6BYuECmP+GEdryYMMOQvzn4AConk/+qNg/XIuQhB1xNGrl3Rmj1iow==} + /gh-pages@6.1.1: + resolution: {integrity: sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==} engines: {node: '>=10'} hasBin: true dependencies: @@ -4763,6 +4774,10 @@ packages: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: true + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -4938,7 +4953,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -5261,7 +5276,7 @@ packages: rollup-pluginutils: 2.8.2 dev: true - /rollup-plugin-typescript2@0.36.0(rollup@3.29.4)(typescript@5.3.2): + /rollup-plugin-typescript2@0.36.0(rollup@3.29.4)(typescript@5.3.3): resolution: {integrity: sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==} peerDependencies: rollup: '>=1.26.3' @@ -5273,7 +5288,7 @@ packages: rollup: 3.29.4 semver: 7.5.4 tslib: 2.6.2 - typescript: 5.3.2 + typescript: 5.3.3 dev: true /rollup-pluginutils@2.8.2: @@ -5448,8 +5463,8 @@ packages: rechoir: 0.6.2 dev: true - /shiki@0.14.5: - resolution: {integrity: sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==} + /shiki@0.14.7: + resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} dependencies: ansi-sequence-parser: 1.1.1 jsonc-parser: 3.2.0 @@ -5797,8 +5812,8 @@ packages: resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==} dev: false - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 @@ -5813,14 +5828,14 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.3.2): + /tsutils@3.21.0(typescript@5.3.3): 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: 5.3.2 + typescript: 5.3.3 dev: true /tty-table@4.2.3: @@ -5913,16 +5928,16 @@ packages: rxjs: 7.8.1 dev: false - /typedoc-plugin-no-inherit@1.4.0(typedoc@0.25.4): + /typedoc-plugin-no-inherit@1.4.0(typedoc@0.25.6): resolution: {integrity: sha512-cAvqQ8X9xh1xztVoDKtF4nYRSBx9XwttN3OBbNNpA0YaJSRM8XvpVVhugq8FoO1HdWjF3aizS0JzdUOMDt0y9g==} peerDependencies: typedoc: '>=0.23.0' dependencies: - typedoc: 0.25.4(typescript@5.3.2) + typedoc: 0.25.6(typescript@5.3.3) dev: true - /typedoc@0.25.4(typescript@5.3.2): - resolution: {integrity: sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==} + /typedoc@0.25.6(typescript@5.3.3): + resolution: {integrity: sha512-1rdionQMpOkpA58qfym1J+YD+ukyA1IEIa4VZahQI2ZORez7dhOvEyUotQL/8rSoMBopdzOS+vAIsORpQO4cTA==} engines: {node: '>= 16'} hasBin: true peerDependencies: @@ -5931,8 +5946,8 @@ packages: lunr: 2.3.9 marked: 4.3.0 minimatch: 9.0.3 - shiki: 0.14.5 - typescript: 5.3.2 + shiki: 0.14.7 + typescript: 5.3.3 dev: true /typescript@4.5.2: @@ -5941,14 +5956,14 @@ packages: hasBin: true dev: true - /typescript@5.3.2: - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true dev: true - /typescript@5.4.0-dev.20231205: - resolution: {integrity: sha512-jeYaYMtVCDclulasTrZlhlF9k/Xu88FCpff6+BP3YVNbWefdRy/3nmmrAFVC/TqGSrLhhjSRHBn6bw49b9Jxdw==} + /typescript@5.4.0-dev.20240101: + resolution: {integrity: sha512-fIfemSahB5H/1Lc+kv3AEaI1UZc2SDtl0Qjk+SkfKRxyS2EdujUWJp62PzPeVflfCxyhpAuAF2M+WIR1Fo/ByA==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -6019,6 +6034,17 @@ packages: picocolors: 1.0.0 dev: true + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: From 212ca5b326a78163e881a3d0fccc285149de4d49 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jan 2024 13:18:07 +0100 Subject: [PATCH 17/28] Update dependency prettier to v3 (#975) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 1e5c8fd877..a944a267b5 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "eslint-plugin-import": "2.29.1", "gh-pages": "6.1.1", "jsdom": "^23.0.0", - "prettier": "^2.8.8", + "prettier": "^3.0.0", "rollup": "3.29.4", "rollup-plugin-delete": "^2.0.0", "rollup-plugin-re": "1.0.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 177b838f84..61370489bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,7 +69,7 @@ devDependencies: version: 8.2.6(size-limit@8.2.6) '@trivago/prettier-plugin-sort-imports': specifier: ^4.1.1 - version: 4.2.1(prettier@2.8.8) + version: 4.2.1(prettier@3.1.1) '@types/events': specifier: ^3.0.0 version: 3.0.3 @@ -110,8 +110,8 @@ devDependencies: specifier: ^23.0.0 version: 23.0.1 prettier: - specifier: ^2.8.8 - version: 2.8.8 + specifier: ^3.0.0 + version: 3.1.1 rollup: specifier: 3.29.4 version: 3.29.4 @@ -2124,7 +2124,7 @@ packages: - webpack-cli dev: true - /@trivago/prettier-plugin-sort-imports@4.2.1(prettier@2.8.8): + /@trivago/prettier-plugin-sort-imports@4.2.1(prettier@3.1.1): resolution: {integrity: sha512-iuy2MPVURGdxILTchHr15VAioItuYBejKfcTmQFlxIuqA7jeaT6ngr5aUIG6S6U096d6a6lJCgaOwlRrPLlOPg==} peerDependencies: '@vue/compiler-sfc': 3.x @@ -2139,7 +2139,7 @@ packages: '@babel/types': 7.17.0 javascript-natural-sort: 0.7.1 lodash: 4.17.21 - prettier: 2.8.8 + prettier: 3.1.1 transitivePeerDependencies: - supports-color dev: true @@ -3240,7 +3240,7 @@ packages: dependencies: semver: 7.5.4 shelljs: 0.8.5 - typescript: 5.4.0-dev.20240101 + typescript: 5.4.0-dev.20240102 dev: true /electron-to-chromium@1.4.577: @@ -5073,6 +5073,12 @@ packages: hasBin: true dev: true + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + engines: {node: '>=14'} + hasBin: true + dev: true + /pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5962,8 +5968,8 @@ packages: hasBin: true dev: true - /typescript@5.4.0-dev.20240101: - resolution: {integrity: sha512-fIfemSahB5H/1Lc+kv3AEaI1UZc2SDtl0Qjk+SkfKRxyS2EdujUWJp62PzPeVflfCxyhpAuAF2M+WIR1Fo/ByA==} + /typescript@5.4.0-dev.20240102: + resolution: {integrity: sha512-2S5NVWoqMlgWUJJCAKS0RG5/XggxCWLPysu/McRM0XS1M3eeekddKMMw0h/xFZV+Afnrc4XgN4KCWV/l6DTxVQ==} engines: {node: '>=14.17'} hasBin: true dev: true From bb7f108e3a6d9b9f0cc8b9b608bfa7637254b700 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jan 2024 13:29:00 +0100 Subject: [PATCH 18/28] Update dependency vitest to v1 (#979) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 595 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 525 insertions(+), 72 deletions(-) diff --git a/package.json b/package.json index a944a267b5..652974ebd3 100644 --- a/package.json +++ b/package.json @@ -98,6 +98,6 @@ "typedoc-plugin-no-inherit": "1.4.0", "typescript": "5.3.3", "vite": "4.5.1", - "vitest": "^0.34.0" + "vitest": "^1.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61370489bc..a18df64ae1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,10 +138,10 @@ devDependencies: version: 5.3.3 vite: specifier: 4.5.1 - version: 4.5.1(@types/node@20.8.10) + version: 4.5.1 vitest: - specifier: ^0.34.0 - version: 0.34.6(jsdom@23.0.1) + specifier: ^1.0.0 + version: 1.1.1(jsdom@23.0.1) packages: @@ -1619,6 +1619,15 @@ packages: prettier: 2.8.8 dev: true + /@esbuild/aix-ppc64@0.19.11: + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -1628,6 +1637,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.19.11: + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -1637,6 +1655,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.19.11: + resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -1646,6 +1673,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.19.11: + resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -1655,6 +1691,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.19.11: + resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -1664,6 +1709,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.19.11: + resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -1673,6 +1727,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.19.11: + resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -1682,6 +1745,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.19.11: + resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -1691,6 +1763,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.19.11: + resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -1700,6 +1781,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.19.11: + resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -1709,6 +1799,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.19.11: + resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -1718,6 +1817,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.19.11: + resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -1727,6 +1835,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.19.11: + resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -1736,6 +1853,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.19.11: + resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -1745,6 +1871,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.19.11: + resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -1754,6 +1889,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.19.11: + resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -1763,6 +1907,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.19.11: + resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -1772,6 +1925,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.19.11: + resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -1781,6 +1943,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.19.11: + resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -1790,6 +1961,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.19.11: + resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -1799,6 +1979,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.19.11: + resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -1808,6 +1997,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.19.11: + resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -1817,6 +2015,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.19.11: + resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2094,6 +2301,110 @@ packages: rollup: 3.29.4 dev: true + /@rollup/rollup-android-arm-eabi@4.9.2: + resolution: {integrity: sha512-RKzxFxBHq9ysZ83fn8Iduv3A283K7zPPYuhL/z9CQuyFrjwpErJx0h4aeb/bnJ+q29GRLgJpY66ceQ/Wcsn3wA==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.9.2: + resolution: {integrity: sha512-yZ+MUbnwf3SHNWQKJyWh88ii2HbuHCFQnAYTeeO1Nb8SyEiWASEi5dQUygt3ClHWtA9My9RQAYkjvrsZ0WK8Xg==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.9.2: + resolution: {integrity: sha512-vqJ/pAUh95FLc/G/3+xPqlSBgilPnauVf2EXOQCZzhZJCXDXt/5A8mH/OzU6iWhb3CNk5hPJrh8pqJUPldN5zw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.9.2: + resolution: {integrity: sha512-otPHsN5LlvedOprd3SdfrRNhOahhVBwJpepVKUN58L0RnC29vOAej1vMEaVU6DadnpjivVsNTM5eNt0CcwTahw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.9.2: + resolution: {integrity: sha512-ewG5yJSp+zYKBYQLbd1CUA7b1lSfIdo9zJShNTyc2ZP1rcPrqyZcNlsHgs7v1zhgfdS+kW0p5frc0aVqhZCiYQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.9.2: + resolution: {integrity: sha512-pL6QtV26W52aCWTG1IuFV3FMPL1m4wbsRG+qijIvgFO/VBsiXJjDPE/uiMdHBAO6YcpV4KvpKtd0v3WFbaxBtg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.9.2: + resolution: {integrity: sha512-On+cc5EpOaTwPSNetHXBuqylDW+765G/oqB9xGmWU3npEhCh8xu0xqHGUA+4xwZLqBbIZNcBlKSIYfkBm6ko7g==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.9.2: + resolution: {integrity: sha512-Wnx/IVMSZ31D/cO9HSsU46FjrPWHqtdF8+0eyZ1zIB5a6hXaZXghUKpRrC4D5DcRTZOjml2oBhXoqfGYyXKipw==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.9.2: + resolution: {integrity: sha512-ym5x1cj4mUAMBummxxRkI4pG5Vht1QMsJexwGP8547TZ0sox9fCLDHw9KCH9c1FO5d9GopvkaJsBIOkTKxksdw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.9.2: + resolution: {integrity: sha512-m0hYELHGXdYx64D6IDDg/1vOJEaiV8f1G/iO+tejvRCJNSwK4jJ15e38JQy5Q6dGkn1M/9KcyEOwqmlZ2kqaZg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.9.2: + resolution: {integrity: sha512-x1CWburlbN5JjG+juenuNa4KdedBdXLjZMp56nHFSHTOsb/MI2DYiGzLtRGHNMyydPGffGId+VgjOMrcltOksA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.9.2: + resolution: {integrity: sha512-VVzCB5yXR1QlfsH1Xw1zdzQ4Pxuzv+CPr5qpElpKhVxlxD3CRdfubAG9mJROl6/dmj5gVYDDWk8sC+j9BI9/kQ==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.9.2: + resolution: {integrity: sha512-SYRedJi+mweatroB+6TTnJYLts0L0bosg531xnQWtklOI6dezEagx4Q0qDyvRdK+qgdA3YZpjjGuPFtxBmddBA==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -2144,16 +2455,6 @@ packages: - supports-color dev: true - /@types/chai-subset@1.3.5: - resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} - dependencies: - '@types/chai': 4.3.9 - dev: true - - /@types/chai@4.3.9: - resolution: {integrity: sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==} - dev: true - /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: @@ -2371,38 +2672,38 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vitest/expect@0.34.6: - resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + /@vitest/expect@1.1.1: + resolution: {integrity: sha512-Qpw01C2Hyb3085jBkOJLQ7HRX0Ncnh2qV4p+xWmmhcIUlMykUF69zsnZ1vPmAjZpomw9+5tWEGOQ0GTfR8U+kA==} dependencies: - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 + '@vitest/spy': 1.1.1 + '@vitest/utils': 1.1.1 chai: 4.3.10 dev: true - /@vitest/runner@0.34.6: - resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + /@vitest/runner@1.1.1: + resolution: {integrity: sha512-8HokyJo1SnSi3uPFKfWm/Oq1qDwLC4QDcVsqpXIXwsRPAg3gIDh8EbZ1ri8cmQkBxdOu62aOF9B4xcqJhvt4xQ==} dependencies: - '@vitest/utils': 0.34.6 - p-limit: 4.0.0 + '@vitest/utils': 1.1.1 + p-limit: 5.0.0 pathe: 1.1.1 dev: true - /@vitest/snapshot@0.34.6: - resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + /@vitest/snapshot@1.1.1: + resolution: {integrity: sha512-WnMHjv4VdHLbFGgCdVVvyRkRPnOKN75JJg+LLTdr6ah7YnL75W+7CTIMdzPEPzaDxA8r5yvSVlc1d8lH3yE28w==} dependencies: magic-string: 0.30.5 pathe: 1.1.1 pretty-format: 29.7.0 dev: true - /@vitest/spy@0.34.6: - resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + /@vitest/spy@1.1.1: + resolution: {integrity: sha512-hDU2KkOTfFp4WFFPWwHFauddwcKuGQ7gF6Un/ZZkCogoAiTMN7/7YKvUDbywPZZ754iCQGjdUmXN3t4k0jm1IQ==} dependencies: tinyspy: 2.2.0 dev: true - /@vitest/utils@0.34.6: - resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + /@vitest/utils@1.1.1: + resolution: {integrity: sha512-E9LedH093vST/JuBSyHLFMpxJKW3dLhe/flUSPFedoyj4wKiFX7Jm8gYLtOIiin59dgrssfmFv0BJ1u8P/LC/A==} dependencies: diff-sequences: 29.6.3 loupe: 2.3.7 @@ -3389,6 +3690,37 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true + /esbuild@0.19.11: + resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.11 + '@esbuild/android-arm': 0.19.11 + '@esbuild/android-arm64': 0.19.11 + '@esbuild/android-x64': 0.19.11 + '@esbuild/darwin-arm64': 0.19.11 + '@esbuild/darwin-x64': 0.19.11 + '@esbuild/freebsd-arm64': 0.19.11 + '@esbuild/freebsd-x64': 0.19.11 + '@esbuild/linux-arm': 0.19.11 + '@esbuild/linux-arm64': 0.19.11 + '@esbuild/linux-ia32': 0.19.11 + '@esbuild/linux-loong64': 0.19.11 + '@esbuild/linux-mips64el': 0.19.11 + '@esbuild/linux-ppc64': 0.19.11 + '@esbuild/linux-riscv64': 0.19.11 + '@esbuild/linux-s390x': 0.19.11 + '@esbuild/linux-x64': 0.19.11 + '@esbuild/netbsd-x64': 0.19.11 + '@esbuild/openbsd-x64': 0.19.11 + '@esbuild/sunos-x64': 0.19.11 + '@esbuild/win32-arm64': 0.19.11 + '@esbuild/win32-ia32': 0.19.11 + '@esbuild/win32-x64': 0.19.11 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -3665,6 +3997,21 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.2.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true @@ -3884,6 +4231,11 @@ packages: hasown: 2.0.0 dev: true + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -4104,6 +4456,11 @@ packages: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4301,6 +4658,11 @@ packages: call-bind: 1.0.5 dev: true + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -4522,9 +4884,12 @@ packages: engines: {node: '>=6.11.5'} dev: true - /local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} + dependencies: + mlly: 1.4.2 + pkg-types: 1.0.3 dev: true /locate-path@5.0.0: @@ -4674,6 +5039,11 @@ packages: mime-db: 1.52.0 dev: true + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -4792,6 +5162,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /npm-run-path@5.2.0: + resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + /nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: true @@ -4862,6 +5239,13 @@ packages: wrappy: 1.0.2 dev: true + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -4904,9 +5288,9 @@ packages: yocto-queue: 0.1.0 dev: true - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} dependencies: yocto-queue: 1.0.0 dev: true @@ -4980,6 +5364,11 @@ packages: engines: {node: '>=8'} dev: true + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true @@ -5052,6 +5441,15 @@ packages: source-map-js: 1.0.2 dev: true + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /preferred-pm@3.1.2: resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} engines: {node: '>=10'} @@ -5311,6 +5709,27 @@ packages: fsevents: 2.3.3 dev: true + /rollup@4.9.2: + resolution: {integrity: sha512-66RB8OtFKUTozmVEh3qyNfH+b+z2RXBVloqO2KCC/pjFaGaHtxP9fVfOQKPSGXg2mElmjmxjW/fZ7iKrEpMH5Q==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.9.2 + '@rollup/rollup-android-arm64': 4.9.2 + '@rollup/rollup-darwin-arm64': 4.9.2 + '@rollup/rollup-darwin-x64': 4.9.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.2 + '@rollup/rollup-linux-arm64-gnu': 4.9.2 + '@rollup/rollup-linux-arm64-musl': 4.9.2 + '@rollup/rollup-linux-riscv64-gnu': 4.9.2 + '@rollup/rollup-linux-x64-gnu': 4.9.2 + '@rollup/rollup-linux-x64-musl': 4.9.2 + '@rollup/rollup-win32-arm64-msvc': 4.9.2 + '@rollup/rollup-win32-ia32-msvc': 4.9.2 + '@rollup/rollup-win32-x64-msvc': 4.9.2 + fsevents: 2.3.3 + dev: true + /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true @@ -5494,6 +5913,11 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + /size-limit@8.2.6: resolution: {integrity: sha512-zpznim/tX/NegjoQuRKgWTF4XiB0cn2qt90uJzxYNTFAqexk4b94DOAkBD3TwhC6c3kw2r0KcnA5upziVMZqDg==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} @@ -5588,8 +6012,8 @@ packages: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true - /std-env@3.4.3: - resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} dev: true /stream-transform@2.1.3: @@ -5644,6 +6068,11 @@ packages: engines: {node: '>=4'} dev: true + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -5752,8 +6181,8 @@ packages: resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} dev: true - /tinypool@0.7.0: - resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + /tinypool@0.8.1: + resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} engines: {node: '>=14.0.0'} dev: true @@ -6071,17 +6500,16 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite-node@0.34.6(@types/node@20.8.10): - resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} - engines: {node: '>=v14.18.0'} + /vite-node@1.1.1: + resolution: {integrity: sha512-2bGE5w4jvym5v8llF6Gu1oBrmImoNSs4WmRVcavnG2me6+8UQntTqLiAMFyiAobp+ZXhj5ZFhI7SmLiFr/jrow==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: cac: 6.7.14 debug: 4.3.4 - mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.5.1(@types/node@20.8.10) + vite: 5.0.10 transitivePeerDependencies: - '@types/node' - less @@ -6093,7 +6521,7 @@ packages: - terser dev: true - /vite@4.5.1(@types/node@20.8.10): + /vite@4.5.1: resolution: {integrity: sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -6121,7 +6549,6 @@ packages: terser: optional: true dependencies: - '@types/node': 20.8.10 esbuild: 0.18.20 postcss: 8.4.31 rollup: 3.29.4 @@ -6129,22 +6556,57 @@ packages: fsevents: 2.3.3 dev: true - /vitest@0.34.6(jsdom@23.0.1): - resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} - engines: {node: '>=v14.18.0'} + /vite@5.0.10: + resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.19.11 + postcss: 8.4.32 + rollup: 4.9.2 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitest@1.1.1(jsdom@23.0.1): + resolution: {integrity: sha512-Ry2qs4UOu/KjpXVfOCfQkTnwSXYGrqTbBZxw6reIYEFjSy1QUARRg5pxiI5BEXy+kBVntxUYNMlq4Co+2vD3fQ==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': ^1.0.0 + '@vitest/ui': ^1.0.0 happy-dom: '*' jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@types/node': + optional: true '@vitest/browser': optional: true '@vitest/ui': @@ -6153,37 +6615,28 @@ packages: optional: true jsdom: optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true dependencies: - '@types/chai': 4.3.9 - '@types/chai-subset': 1.3.5 - '@types/node': 20.8.10 - '@vitest/expect': 0.34.6 - '@vitest/runner': 0.34.6 - '@vitest/snapshot': 0.34.6 - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - acorn: 8.11.2 + '@vitest/expect': 1.1.1 + '@vitest/runner': 1.1.1 + '@vitest/snapshot': 1.1.1 + '@vitest/spy': 1.1.1 + '@vitest/utils': 1.1.1 acorn-walk: 8.3.0 cac: 6.7.14 chai: 4.3.10 debug: 4.3.4 + execa: 8.0.1 jsdom: 23.0.1 - local-pkg: 0.4.3 + local-pkg: 0.5.0 magic-string: 0.30.5 pathe: 1.1.1 picocolors: 1.0.0 - std-env: 3.4.3 + std-env: 3.7.0 strip-literal: 1.3.0 tinybench: 2.5.1 - tinypool: 0.7.0 - vite: 4.5.1(@types/node@20.8.10) - vite-node: 0.34.6(@types/node@20.8.10) + tinypool: 0.8.1 + vite: 5.0.10 + vite-node: 1.1.1 why-is-node-running: 2.2.2 transitivePeerDependencies: - less From cec7586392187c3c4d7ff3cfe458a3cf446d6b66 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jan 2024 13:32:50 +0100 Subject: [PATCH 19/28] Update dependency vite to v5 (#978) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 276 +------------------------------------------------ 2 files changed, 3 insertions(+), 275 deletions(-) diff --git a/package.json b/package.json index 652974ebd3..51ceea7975 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "typedoc": "0.25.6", "typedoc-plugin-no-inherit": "1.4.0", "typescript": "5.3.3", - "vite": "4.5.1", + "vite": "5.0.10", "vitest": "^1.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a18df64ae1..715cbd0c95 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -137,8 +137,8 @@ devDependencies: specifier: 5.3.3 version: 5.3.3 vite: - specifier: 4.5.1 - version: 4.5.1 + specifier: 5.0.10 + version: 5.0.10 vitest: specifier: ^1.0.0 version: 1.1.1(jsdom@23.0.1) @@ -1628,15 +1628,6 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.19.11: resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} engines: {node: '>=12'} @@ -1646,15 +1637,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.19.11: resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} engines: {node: '>=12'} @@ -1664,15 +1646,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.19.11: resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} engines: {node: '>=12'} @@ -1682,15 +1655,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.19.11: resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} engines: {node: '>=12'} @@ -1700,15 +1664,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.19.11: resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} engines: {node: '>=12'} @@ -1718,15 +1673,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.19.11: resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} engines: {node: '>=12'} @@ -1736,15 +1682,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.19.11: resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} engines: {node: '>=12'} @@ -1754,15 +1691,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.19.11: resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} engines: {node: '>=12'} @@ -1772,15 +1700,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.19.11: resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} engines: {node: '>=12'} @@ -1790,15 +1709,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.19.11: resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} engines: {node: '>=12'} @@ -1808,15 +1718,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.19.11: resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} engines: {node: '>=12'} @@ -1826,15 +1727,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.19.11: resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} engines: {node: '>=12'} @@ -1844,15 +1736,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.19.11: resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} engines: {node: '>=12'} @@ -1862,15 +1745,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.19.11: resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} engines: {node: '>=12'} @@ -1880,15 +1754,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.19.11: resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} engines: {node: '>=12'} @@ -1898,15 +1763,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.19.11: resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} engines: {node: '>=12'} @@ -1916,15 +1772,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.19.11: resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} engines: {node: '>=12'} @@ -1934,15 +1781,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.19.11: resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} engines: {node: '>=12'} @@ -1952,15 +1790,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.19.11: resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} engines: {node: '>=12'} @@ -1970,15 +1799,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.19.11: resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} engines: {node: '>=12'} @@ -1988,15 +1808,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.19.11: resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} engines: {node: '>=12'} @@ -2006,15 +1817,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.19.11: resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} engines: {node: '>=12'} @@ -3660,36 +3462,6 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - /esbuild@0.19.11: resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} engines: {node: '>=12'} @@ -5432,15 +5204,6 @@ packages: pathe: 1.1.1 dev: true - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - /postcss@8.4.32: resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} engines: {node: ^10 || ^12 || >=14} @@ -6521,41 +6284,6 @@ packages: - terser dev: true - /vite@4.5.1: - resolution: {integrity: sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - dev: true - /vite@5.0.10: resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} engines: {node: ^18.0.0 || >=20.0.0} From 75b0abd92b5eaa9af2c3a729e81ae981111a4e79 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jan 2024 14:52:19 +0100 Subject: [PATCH 20/28] Update dependency rollup to v4 (#976) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 56 +++++++++++++++++++++++++------------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 51ceea7975..7db749bf5a 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "gh-pages": "6.1.1", "jsdom": "^23.0.0", "prettier": "^3.0.0", - "rollup": "3.29.4", + "rollup": "4.9.2", "rollup-plugin-delete": "^2.0.0", "rollup-plugin-re": "1.0.7", "rollup-plugin-typescript2": "0.36.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 715cbd0c95..3131679194 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,19 +48,19 @@ devDependencies: version: 0.0.4 '@rollup/plugin-babel': specifier: 6.0.4 - version: 6.0.4(@babel/core@7.23.7)(rollup@3.29.4) + version: 6.0.4(@babel/core@7.23.7)(rollup@4.9.2) '@rollup/plugin-commonjs': specifier: 25.0.7 - version: 25.0.7(rollup@3.29.4) + version: 25.0.7(rollup@4.9.2) '@rollup/plugin-json': specifier: 6.1.0 - version: 6.1.0(rollup@3.29.4) + version: 6.1.0(rollup@4.9.2) '@rollup/plugin-node-resolve': specifier: 15.2.3 - version: 15.2.3(rollup@3.29.4) + version: 15.2.3(rollup@4.9.2) '@rollup/plugin-terser': specifier: ^0.4.0 - version: 0.4.4(rollup@3.29.4) + version: 0.4.4(rollup@4.9.2) '@size-limit/file': specifier: ^8.2.4 version: 8.2.6(size-limit@8.2.6) @@ -113,8 +113,8 @@ devDependencies: specifier: ^3.0.0 version: 3.1.1 rollup: - specifier: 3.29.4 - version: 3.29.4 + specifier: 4.9.2 + version: 4.9.2 rollup-plugin-delete: specifier: ^2.0.0 version: 2.0.0 @@ -123,7 +123,7 @@ devDependencies: version: 1.0.7 rollup-plugin-typescript2: specifier: 0.36.0 - version: 0.36.0(rollup@3.29.4)(typescript@5.3.3) + version: 0.36.0(rollup@4.9.2)(typescript@5.3.3) size-limit: specifier: ^8.2.4 version: 8.2.6 @@ -1982,7 +1982,7 @@ packages: fastq: 1.15.0 dev: true - /@rollup/plugin-babel@6.0.4(@babel/core@7.23.7)(rollup@3.29.4): + /@rollup/plugin-babel@6.0.4(@babel/core@7.23.7)(rollup@4.9.2): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1997,11 +1997,11 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-module-imports': 7.22.15 - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) - rollup: 3.29.4 + '@rollup/pluginutils': 5.0.5(rollup@4.9.2) + rollup: 4.9.2 dev: true - /@rollup/plugin-commonjs@25.0.7(rollup@3.29.4): + /@rollup/plugin-commonjs@25.0.7(rollup@4.9.2): resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2010,16 +2010,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@4.9.2) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.5 - rollup: 3.29.4 + rollup: 4.9.2 dev: true - /@rollup/plugin-json@6.1.0(rollup@3.29.4): + /@rollup/plugin-json@6.1.0(rollup@4.9.2): resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2028,11 +2028,11 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@3.29.4) - rollup: 3.29.4 + '@rollup/pluginutils': 5.1.0(rollup@4.9.2) + rollup: 4.9.2 dev: true - /@rollup/plugin-node-resolve@15.2.3(rollup@3.29.4): + /@rollup/plugin-node-resolve@15.2.3(rollup@4.9.2): resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2041,16 +2041,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@4.9.2) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 3.29.4 + rollup: 4.9.2 dev: true - /@rollup/plugin-terser@0.4.4(rollup@3.29.4): + /@rollup/plugin-terser@0.4.4(rollup@4.9.2): resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2059,7 +2059,7 @@ packages: rollup: optional: true dependencies: - rollup: 3.29.4 + rollup: 4.9.2 serialize-javascript: 6.0.1 smob: 1.4.1 terser: 5.24.0 @@ -2073,7 +2073,7 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/pluginutils@5.0.5(rollup@3.29.4): + /@rollup/pluginutils@5.0.5(rollup@4.9.2): resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2085,10 +2085,10 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.29.4 + rollup: 4.9.2 dev: true - /@rollup/pluginutils@5.1.0(rollup@3.29.4): + /@rollup/pluginutils@5.1.0(rollup@4.9.2): resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2100,7 +2100,7 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.29.4 + rollup: 4.9.2 dev: true /@rollup/rollup-android-arm-eabi@4.9.2: @@ -5443,7 +5443,7 @@ packages: rollup-pluginutils: 2.8.2 dev: true - /rollup-plugin-typescript2@0.36.0(rollup@3.29.4)(typescript@5.3.3): + /rollup-plugin-typescript2@0.36.0(rollup@4.9.2)(typescript@5.3.3): resolution: {integrity: sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==} peerDependencies: rollup: '>=1.26.3' @@ -5452,7 +5452,7 @@ packages: '@rollup/pluginutils': 4.2.1 find-cache-dir: 3.3.2 fs-extra: 10.1.0 - rollup: 3.29.4 + rollup: 4.9.2 semver: 7.5.4 tslib: 2.6.2 typescript: 5.3.3 From 8a980dc52952189f6ca3a9127ad73f855e05504e Mon Sep 17 00:00:00 2001 From: lukasIO Date: Thu, 4 Jan 2024 01:29:56 +0100 Subject: [PATCH 21/28] Make sure that processorElement stays muted after attach (#984) * Make sure that processorElement stays muted after attach * Create afraid-humans-visit.md --- .changeset/afraid-humans-visit.md | 5 +++++ src/room/track/LocalTrack.ts | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .changeset/afraid-humans-visit.md diff --git a/.changeset/afraid-humans-visit.md b/.changeset/afraid-humans-visit.md new file mode 100644 index 0000000000..f4fdceb4e8 --- /dev/null +++ b/.changeset/afraid-humans-visit.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Make sure that processorElement stays muted after attach diff --git a/src/room/track/LocalTrack.ts b/src/room/track/LocalTrack.ts index 88aa3e2239..0e5f6f1302 100644 --- a/src/room/track/LocalTrack.ts +++ b/src/room/track/LocalTrack.ts @@ -138,6 +138,8 @@ export default abstract class LocalTrack extends Track { } attachToElement(newTrack, this.processorElement); + // ensure the processorElement itself stays muted + this.processorElement.muted = true; await this.processor.restart({ track: newTrack, kind: this.kind, @@ -415,9 +417,10 @@ export default abstract class LocalTrack extends Track { throw TypeError('cannot set processor on track of unknown kind'); } this.processorElement = this.processorElement ?? document.createElement(this.kind); - this.processorElement.muted = true; attachToElement(this._mediaStreamTrack, this.processorElement); + this.processorElement.muted = true; + this.processorElement .play() .catch((error) => log.error('failed to play processor element', { error })); From 5c0c6f41a17e82fc618521b3835b49585b80fd82 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Thu, 4 Jan 2024 09:23:59 +0100 Subject: [PATCH 22/28] Remove deprecated cjs vite config loading (#982) --- tsconfig.eslint.json | 3 ++- vite.config.js => vite.config.mjs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) rename vite.config.js => vite.config.mjs (96%) diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 6d3e673cc7..5612792b19 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -8,7 +8,8 @@ ".eslintrc.dist.cjs", "jest.config.js", "rollup.config.js", - "rollup.config.worker.js" + "rollup.config.worker.js", + "vite.config.mjs" ], "exclude": ["dist/**"] } diff --git a/vite.config.js b/vite.config.mjs similarity index 96% rename from vite.config.js rename to vite.config.mjs index 2236021fc0..e4644821a9 100644 --- a/vite.config.js +++ b/vite.config.mjs @@ -1,3 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { babel } from '@rollup/plugin-babel'; import dns from 'dns'; import { resolve } from 'path'; From 3f87e22e6d5e7bfe5613eff0a04a22bd12f4dcf1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 4 Jan 2024 12:31:29 +0100 Subject: [PATCH 23/28] Version Packages (#986) Co-authored-by: github-actions[bot] --- .changeset/afraid-humans-visit.md | 5 ----- CHANGELOG.md | 6 ++++++ package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/afraid-humans-visit.md diff --git a/.changeset/afraid-humans-visit.md b/.changeset/afraid-humans-visit.md deleted file mode 100644 index f4fdceb4e8..0000000000 --- a/.changeset/afraid-humans-visit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"livekit-client": patch ---- - -Make sure that processorElement stays muted after attach diff --git a/CHANGELOG.md b/CHANGELOG.md index 39a8e20307..5cab7ca3c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 1.15.6 + +### Patch Changes + +- Make sure that processorElement stays muted after attach - [#984](https://github.com/livekit/client-sdk-js/pull/984) ([@lukasIO](https://github.com/lukasIO)) + ## 1.15.5 ### Patch Changes diff --git a/package.json b/package.json index 7db749bf5a..b007a52785 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "livekit-client", - "version": "1.15.5", + "version": "1.15.6", "description": "JavaScript/TypeScript client SDK for LiveKit", "main": "./dist/livekit-client.umd.js", "unpkg": "./dist/livekit-client.umd.js", From 38283a80bf76307c7942150d09c6db7c7a5314da Mon Sep 17 00:00:00 2001 From: Mpnri <47795908+mpnri@users.noreply.github.com> Date: Thu, 4 Jan 2024 15:04:36 +0330 Subject: [PATCH 24/28] Fix stopping old track in `setMediaStreamTrack` (#980) * Fix stopping old track in setMediaStreamTrack * Create big-turkeys-lay.md --------- Co-authored-by: lukasIO --- .changeset/big-turkeys-lay.md | 5 +++++ src/room/track/LocalTrack.ts | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 .changeset/big-turkeys-lay.md diff --git a/.changeset/big-turkeys-lay.md b/.changeset/big-turkeys-lay.md new file mode 100644 index 0000000000..8e64eda2f8 --- /dev/null +++ b/.changeset/big-turkeys-lay.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Fix stopping old track in `setMediaStreamTrack` diff --git a/src/room/track/LocalTrack.ts b/src/room/track/LocalTrack.ts index 0e5f6f1302..8474d03c25 100644 --- a/src/room/track/LocalTrack.ts +++ b/src/room/track/LocalTrack.ts @@ -112,10 +112,6 @@ export default abstract class LocalTrack extends Track { this._mediaStreamTrack.removeEventListener('ended', this.handleEnded); this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent); this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent); - - if (!this.providedByUser && this._mediaStreamTrack !== newTrack) { - this._mediaStreamTrack.stop(); - } } this.mediaStream = new MediaStream([newTrack]); @@ -150,6 +146,11 @@ export default abstract class LocalTrack extends Track { if (this.sender) { await this.sender.replaceTrack(processedTrack ?? newTrack); } + // if `newTrack` is different from the existing track, stop the + // older track just before replacing it + if (!this.providedByUser && this._mediaStreamTrack !== newTrack) { + this._mediaStreamTrack.stop(); + } this._mediaStreamTrack = newTrack; if (newTrack) { // sync muted state with the enabled state of the newly provided track From 0340d38cd200b44bcf319e8e1eb9bfd19f5a94e7 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Wed, 10 Jan 2024 09:05:30 +0100 Subject: [PATCH 25/28] Add class level configurable logger (#988) --- .changeset/eleven-poets-own.md | 5 + src/api/SignalClient.ts | 64 +++++--- src/index.ts | 3 +- src/logger.ts | 40 ++++- src/options.ts | 2 + src/room/PCTransport.ts | 37 ++++- src/room/PCTransportManager.ts | 38 +++-- src/room/RTCEngine.ts | 105 ++++++++---- src/room/Room.ts | 124 +++++++++++---- src/room/participant/LocalParticipant.ts | 186 ++++++++++++++++------ src/room/participant/Participant.ts | 29 +++- src/room/participant/RemoteParticipant.ts | 38 +++-- src/room/participant/publishUtils.ts | 6 +- src/room/track/LocalAudioTrack.ts | 15 +- src/room/track/LocalTrack.ts | 33 ++-- src/room/track/LocalTrackPublication.ts | 5 +- src/room/track/LocalVideoTrack.ts | 44 +++-- src/room/track/RemoteAudioTrack.ts | 7 +- src/room/track/RemoteTrack.ts | 5 +- src/room/track/RemoteTrackPublication.ts | 34 ++-- src/room/track/RemoteVideoTrack.ts | 9 +- src/room/track/Track.ts | 34 +++- src/room/track/TrackPublication.ts | 21 ++- src/room/track/utils.ts | 21 +++ src/room/types.ts | 5 + 25 files changed, 671 insertions(+), 239 deletions(-) create mode 100644 .changeset/eleven-poets-own.md diff --git a/.changeset/eleven-poets-own.md b/.changeset/eleven-poets-own.md new file mode 100644 index 0000000000..6ab84bea37 --- /dev/null +++ b/.changeset/eleven-poets-own.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Add class level configurable logger diff --git a/src/api/SignalClient.ts b/src/api/SignalClient.ts index 0de10587ae..a01fef45a2 100644 --- a/src/api/SignalClient.ts +++ b/src/api/SignalClient.ts @@ -1,5 +1,5 @@ import { protoInt64 } from '@bufbuild/protobuf'; -import log from '../logger'; +import log, { LoggerNames, getLogger } from '../logger'; import { ClientInfo, DisconnectReason, @@ -39,6 +39,7 @@ import { } from '../proto/livekit_rtc_pb'; import { ConnectionError, ConnectionErrorReason } from '../room/errors'; import CriticalTimers from '../room/timers'; +import type { LoggerOptions } from '../room/types'; import { Mutex, getClientInfo, isReactNative, sleep, toWebsocketUrl } from '../room/utils'; import { AsyncQueue } from '../utils/AsyncQueue'; @@ -172,7 +173,13 @@ export class SignalClient { private connectionLock: Mutex; - constructor(useJSON: boolean = false) { + private log = log; + + private loggerContextCb?: LoggerOptions['loggerContextCb']; + + constructor(useJSON: boolean = false, loggerOptions: LoggerOptions = {}) { + this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.Signal); + this.loggerContextCb = loggerOptions.loggerContextCb; this.useJSON = useJSON; this.requestQueue = new AsyncQueue(); this.queuedRequests = []; @@ -181,6 +188,10 @@ export class SignalClient { this.state = SignalConnectionState.DISCONNECTED; } + private get logContext() { + return this.loggerContextCb?.() ?? {}; + } + async join( url: string, token: string, @@ -202,7 +213,10 @@ export class SignalClient { reason?: ReconnectReason, ): Promise { if (!this.options) { - log.warn('attempted to reconnect without signal options being set, ignoring'); + this.log.warn( + 'attempted to reconnect without signal options being set, ignoring', + this.logContext, + ); return; } this.state = SignalConnectionState.RECONNECTING; @@ -251,7 +265,7 @@ export class SignalClient { abortHandler(); } abortSignal?.addEventListener('abort', abortHandler); - log.debug(`connecting to ${url + params}`); + this.log.debug(`connecting to ${url + params}`, this.logContext); if (this.ws) { await this.close(); } @@ -302,7 +316,10 @@ export class SignalClient { } else if (ev.data instanceof ArrayBuffer) { resp = SignalResponse.fromBinary(new Uint8Array(ev.data)); } else { - log.error(`could not decode websocket message: ${typeof ev.data}`); + this.log.error( + `could not decode websocket message: ${typeof ev.data}`, + this.logContext, + ); return; } @@ -316,7 +333,8 @@ export class SignalClient { this.pingIntervalDuration = resp.message.value.pingInterval; if (this.pingTimeoutDuration && this.pingTimeoutDuration > 0) { - log.debug('ping config', { + this.log.debug('ping config', { + ...this.logContext, timeout: this.pingTimeoutDuration, interval: this.pingIntervalDuration, }); @@ -354,7 +372,7 @@ export class SignalClient { }; this.ws.onclose = (ev: CloseEvent) => { - log.warn(`websocket closed`, { ev }); + this.log.warn(`websocket closed`, { ...this.logContext, reason: ev.reason }); this.handleOnClose(ev.reason); }; } finally { @@ -414,7 +432,7 @@ export class SignalClient { // initial offer after joining sendOffer(offer: RTCSessionDescriptionInit) { - log.debug('sending offer', offer); + this.log.debug('sending offer', { ...this.logContext, offerSdp: offer.sdp }); this.sendRequest({ case: 'offer', value: toProtoSessionDescription(offer), @@ -423,7 +441,7 @@ export class SignalClient { // answer a server-initiated offer sendAnswer(answer: RTCSessionDescriptionInit) { - log.debug('sending answer'); + this.log.debug('sending answer', { ...this.logContext, answerSdp: answer.sdp }); return this.sendRequest({ case: 'answer', value: toProtoSessionDescription(answer), @@ -431,7 +449,7 @@ export class SignalClient { } sendIceCandidate(candidate: RTCIceCandidateInit, target: SignalTarget) { - log.trace('sending ice candidate', candidate); + this.log.trace('sending ice candidate', { ...this.logContext, candidate }); return this.sendRequest({ case: 'trickle', value: new TrickleRequest({ @@ -561,7 +579,10 @@ export class SignalClient { await sleep(this.signalLatency); } if (!this.ws || this.ws.readyState !== this.ws.OPEN) { - log.error(`cannot send signal request before connected, type: ${message?.case}`); + this.log.error( + `cannot send signal request before connected, type: ${message?.case}`, + this.logContext, + ); return; } const req = new SignalRequest({ message }); @@ -573,14 +594,14 @@ export class SignalClient { this.ws.send(req.toBinary()); } } catch (e) { - log.error('error sending signal message', { error: e }); + this.log.error('error sending signal message', { ...this.logContext, error: e }); } } private handleSignalResponse(res: SignalResponse) { const msg = res.message; if (msg == undefined) { - log.debug('received unsupported message'); + this.log.debug('received unsupported message', this.logContext); return; } @@ -658,7 +679,7 @@ export class SignalClient { this.resetPingTimeout(); pingHandled = true; } else { - log.debug('unsupported message', msg); + this.log.debug('unsupported message', { ...this.logContext, msgCase: msg.case }); } if (!pingHandled) { @@ -679,14 +700,14 @@ export class SignalClient { if (this.state === SignalConnectionState.DISCONNECTED) return; const onCloseCallback = this.onClose; await this.close(); - log.debug(`websocket connection closed: ${reason}`); + this.log.debug(`websocket connection closed: ${reason}`, { ...this.logContext, reason }); if (onCloseCallback) { onCloseCallback(reason); } } private handleWSError(ev: Event) { - log.error('websocket error', ev); + this.log.error('websocket error', { ...this.logContext, error: ev }); } /** @@ -696,14 +717,15 @@ export class SignalClient { private resetPingTimeout() { this.clearPingTimeout(); if (!this.pingTimeoutDuration) { - log.warn('ping timeout duration not set'); + this.log.warn('ping timeout duration not set', this.logContext); return; } this.pingTimeout = CriticalTimers.setTimeout(() => { - log.warn( + this.log.warn( `ping timeout triggered. last pong received at: ${new Date( Date.now() - this.pingTimeoutDuration! * 1000, ).toUTCString()}`, + this.logContext, ); this.handleOnClose('ping timeout'); }, this.pingTimeoutDuration * 1000); @@ -722,17 +744,17 @@ export class SignalClient { this.clearPingInterval(); this.resetPingTimeout(); if (!this.pingIntervalDuration) { - log.warn('ping interval duration not set'); + this.log.warn('ping interval duration not set', this.logContext); return; } - log.debug('start ping interval'); + this.log.debug('start ping interval', this.logContext); this.pingInterval = CriticalTimers.setInterval(() => { this.sendPing(); }, this.pingIntervalDuration * 1000); } private clearPingInterval() { - log.debug('clearing ping interval'); + this.log.debug('clearing ping interval', this.logContext); this.clearPingTimeout(); if (this.pingInterval) { CriticalTimers.clearInterval(this.pingInterval); diff --git a/src/index.ts b/src/index.ts index e1798c20f9..df439c0a8a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import { LogLevel, setLogExtension, setLogLevel } from './logger'; +import { LogLevel, getLogger, setLogExtension, setLogLevel } from './logger'; import { DataPacket_Kind, DisconnectReason, VideoQuality } from './proto/livekit_models_pb'; import DefaultReconnectPolicy from './room/DefaultReconnectPolicy'; import Room, { ConnectionState, RoomState } from './room/Room'; @@ -55,6 +55,7 @@ export { supportsVP9, createAudioAnalyser, LogLevel, + getLogger, Room, ConnectionState, RoomState, diff --git a/src/logger.ts b/src/logger.ts index 7f24869475..31b15b2e05 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -9,9 +9,22 @@ export enum LogLevel { silent = 5, } +export enum LoggerNames { + Default = 'livekit', + Room = 'livekit-room', + Participant = 'livekit-participant', + Track = 'livekit-track', + Publication = 'livekit-track-publication', + Engine = 'livekit-engine', + Signal = 'livekit-signal', + PCManager = 'livekit-pc-manager', + PCTransport = 'livekit-pc-transport', + E2EE = 'lk-e2ee', +} + type LogLevelString = keyof typeof LogLevel; -type StructuredLogger = { +export type StructuredLogger = { trace: (msg: string, context?: object) => void; debug: (msg: string, context?: object) => void; info: (msg: string, context?: object) => void; @@ -20,17 +33,28 @@ type StructuredLogger = { setDefaultLevel: (level: log.LogLevelDesc) => void; }; -const livekitLogger = log.getLogger('livekit'); +let livekitLogger = log.getLogger('livekit'); livekitLogger.setDefaultLevel(LogLevel.info); export default livekitLogger as StructuredLogger; -export function setLogLevel(level: LogLevel | LogLevelString, loggerName?: 'livekit' | 'lk-e2ee') { +/** + * @internal + */ +export function getLogger(name: string) { + const logger = log.getLogger(name); + logger.setDefaultLevel(livekitLogger.getLevel()); + return logger as StructuredLogger; +} + +export function setLogLevel(level: LogLevel | LogLevelString, loggerName?: LoggerNames) { if (loggerName) { log.getLogger(loggerName).setLevel(level); } - for (const logger of Object.values(log.getLoggers())) { + for (const logger of Object.entries(log.getLoggers()) + .filter(([logrName]) => logrName.startsWith('livekit')) + .map(([, logr]) => logr)) { logger.setLevel(level); } } @@ -41,10 +65,10 @@ export type LogExtension = (level: LogLevel, msg: string, context?: object) => v * use this to hook into the logging function to allow sending internal livekit logs to third party services * if set, the browser logs will lose their stacktrace information (see https://github.com/pimterry/loglevel#writing-plugins) */ -export function setLogExtension(extension: LogExtension) { - const originalFactory = livekitLogger.methodFactory; +export function setLogExtension(extension: LogExtension, logger = livekitLogger) { + const originalFactory = logger.methodFactory; - livekitLogger.methodFactory = (methodName, configLevel, loggerName) => { + logger.methodFactory = (methodName, configLevel, loggerName) => { const rawMethod = originalFactory(methodName, configLevel, loggerName); const logLevel = LogLevel[methodName as LogLevelString]; @@ -58,7 +82,7 @@ export function setLogExtension(extension: LogExtension) { } }; }; - livekitLogger.setLevel(livekitLogger.getLevel()); // Be sure to call setLevel method in order to apply plugin + logger.setLevel(logger.getLevel()); // Be sure to call setLevel method in order to apply plugin } export const workerLogger = log.getLogger('lk-e2ee') as StructuredLogger; diff --git a/src/options.ts b/src/options.ts index cb0d648744..070764644f 100644 --- a/src/options.ts +++ b/src/options.ts @@ -92,6 +92,8 @@ export interface InternalRoomOptions { * @experimental */ e2ee?: E2EEOptions; + + loggerName?: string; } /** diff --git a/src/room/PCTransport.ts b/src/room/PCTransport.ts index 0cf9d3efcc..0d3d86abfd 100644 --- a/src/room/PCTransport.ts +++ b/src/room/PCTransport.ts @@ -2,8 +2,9 @@ import { EventEmitter } from 'events'; import type { MediaDescription } from 'sdp-transform'; import { parse, write } from 'sdp-transform'; import { debounce } from 'ts-debounce'; -import log from '../logger'; +import log, { LoggerNames, getLogger } from '../logger'; import { NegotiationError, UnexpectedConnectionState } from './errors'; +import type { LoggerOptions } from './types'; import { ddExtensionURI, isChromiumBased, isSVCCodec } from './utils'; /** @internal */ @@ -43,6 +44,10 @@ export default class PCTransport extends EventEmitter { private mediaConstraints: Record; + private log = log; + + private loggerOptions: LoggerOptions; + pendingCandidates: RTCIceCandidateInit[] = []; restartingIce: boolean = false; @@ -71,8 +76,14 @@ export default class PCTransport extends EventEmitter { onTrack?: (ev: RTCTrackEvent) => void; - constructor(config?: RTCConfiguration, mediaConstraints: Record = {}) { + constructor( + config?: RTCConfiguration, + mediaConstraints: Record = {}, + loggerOptions: LoggerOptions = {}, + ) { super(); + this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.PCTransport); + this.loggerOptions = loggerOptions; this.config = config; this.mediaConstraints = mediaConstraints; this._pc = this.createPC(); @@ -112,6 +123,12 @@ export default class PCTransport extends EventEmitter { return pc; } + private get logContext() { + return { + ...this.loggerOptions.loggerContextCb?.(), + }; + } + get isICEConnected(): boolean { return ( this._pc !== null && @@ -229,7 +246,7 @@ export default class PCTransport extends EventEmitter { } if (options?.iceRestart) { - log.debug('restarting ICE'); + this.log.debug('restarting ICE', this.logContext); this.restartingIce = true; } @@ -246,12 +263,12 @@ export default class PCTransport extends EventEmitter { return; } } else if (!this._pc || this._pc.signalingState === 'closed') { - log.warn('could not createOffer with closed peer connection'); + this.log.warn('could not createOffer with closed peer connection', this.logContext); return; } // actually negotiate - log.debug('starting to negotiate'); + this.log.debug('starting to negotiate', this.logContext); const offer = await this.pc.createOffer(options); const sdpParsed = parse(offer.sdp ?? ''); @@ -452,7 +469,10 @@ export default class PCTransport extends EventEmitter { const originalSdp = sd.sdp; sd.sdp = munged; try { - log.debug(`setting munged ${remote ? 'remote' : 'local'} description`); + this.log.debug( + `setting munged ${remote ? 'remote' : 'local'} description`, + this.logContext, + ); if (remote) { await this.pc.setRemoteDescription(sd); } else { @@ -460,7 +480,8 @@ export default class PCTransport extends EventEmitter { } return; } catch (e) { - log.warn(`not able to set ${sd.type}, falling back to unmodified sdp`, { + this.log.warn(`not able to set ${sd.type}, falling back to unmodified sdp`, { + ...this.logContext, error: e, sdp: munged, }); @@ -491,7 +512,7 @@ export default class PCTransport extends EventEmitter { if (!remote && this.pc.remoteDescription) { fields.remoteSdp = this.pc.remoteDescription; } - log.error(`unable to set ${sd.type}`, fields); + this.log.error(`unable to set ${sd.type}`, { ...this.logContext, fields }); throw new NegotiationError(msg); } } diff --git a/src/room/PCTransportManager.ts b/src/room/PCTransportManager.ts index 317957a2bd..df94497af7 100644 --- a/src/room/PCTransportManager.ts +++ b/src/room/PCTransportManager.ts @@ -1,9 +1,10 @@ -import log from '../logger'; +import log, { LoggerNames, getLogger } from '../logger'; import { SignalTarget } from '../proto/livekit_rtc_pb'; import PCTransport, { PCEvents } from './PCTransport'; import { roomConnectOptionDefaults } from './defaults'; import { ConnectionError, ConnectionErrorReason } from './errors'; import CriticalTimers from './timers'; +import type { LoggerOptions } from './types'; import { Mutex, sleep } from './utils'; export enum PCTransportState { @@ -56,12 +57,23 @@ export class PCTransportManager { private connectionLock: Mutex; - constructor(rtcConfig: RTCConfiguration, subscriberPrimary: boolean) { + private log = log; + + private loggerOptions: LoggerOptions; + + constructor( + rtcConfig: RTCConfiguration, + subscriberPrimary: boolean, + loggerOptions: LoggerOptions, + ) { + this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.PCManager); + this.loggerOptions = loggerOptions; + this.isPublisherConnectionRequired = !subscriberPrimary; this.isSubscriberConnectionRequired = subscriberPrimary; const googConstraints = { optional: [{ googDscp: true }] }; - this.publisher = new PCTransport(rtcConfig, googConstraints); - this.subscriber = new PCTransport(rtcConfig); + this.publisher = new PCTransport(rtcConfig, googConstraints, loggerOptions); + this.subscriber = new PCTransport(rtcConfig, loggerOptions); this.publisher.onConnectionStateChange = this.updateState; this.subscriber.onConnectionStateChange = this.updateState; @@ -91,6 +103,12 @@ export class PCTransportManager { this.connectionLock = new Mutex(); } + private get logContext() { + return { + ...this.loggerOptions.loggerContextCb?.(), + }; + } + requirePublisher(require = true) { this.isPublisherConnectionRequired = require; this.updateState(); @@ -123,7 +141,7 @@ export class PCTransportManager { publisher.removeTrack(sender); } } catch (e) { - log.warn('could not removeTrack', { error: e }); + this.log.warn('could not removeTrack', { ...this.logContext, error: e }); } } } @@ -148,7 +166,8 @@ export class PCTransportManager { } async createSubscriberAnswerFromOffer(sd: RTCSessionDescriptionInit) { - log.debug('received server offer', { + this.log.debug('received server offer', { + ...this.logContext, RTCSdpType: sd.type, signalingState: this.subscriber.getSignallingState().toString(), }); @@ -175,7 +194,7 @@ export class PCTransportManager { this.publisher.getConnectionState() !== 'connected' && this.publisher.getConnectionState() !== 'connecting' ) { - log.debug('negotiation required, start negotiating'); + this.log.debug('negotiation required, start negotiating', this.logContext); this.publisher.negotiate(); } await Promise.all( @@ -271,10 +290,11 @@ export class PCTransportManager { } if (previousState !== this.state) { - log.debug( + this.log.debug( `pc state change: from ${PCTransportState[previousState]} to ${ PCTransportState[this.state] }`, + this.logContext, ); this.onStateChange?.( this.state, @@ -296,7 +316,7 @@ export class PCTransportManager { return new Promise(async (resolve, reject) => { const abortHandler = () => { - log.warn('abort transport connection'); + this.log.warn('abort transport connection', this.logContext); CriticalTimers.clearTimeout(connectTimeout); reject( diff --git a/src/room/RTCEngine.ts b/src/room/RTCEngine.ts index 5a6944f939..2bb852696f 100644 --- a/src/room/RTCEngine.ts +++ b/src/room/RTCEngine.ts @@ -7,7 +7,7 @@ import { SignalConnectionState, toProtoSessionDescription, } from '../api/SignalClient'; -import log from '../logger'; +import log, { LoggerNames, getLogger } from '../logger'; import type { InternalRoomOptions } from '../options'; import { ClientConfigSetting, @@ -61,6 +61,7 @@ import type RemoteTrackPublication from './track/RemoteTrackPublication'; import { Track } from './track/Track'; import type { TrackPublishOptions, VideoCodec } from './track/options'; import { getTrackPublicationInfo } from './track/utils'; +import type { LoggerOptions } from './types'; import { Mutex, isVideoCodec, @@ -162,9 +163,18 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit private regionUrlProvider?: RegionUrlProvider; + private log = log; + + private loggerOptions: LoggerOptions; + constructor(private options: InternalRoomOptions) { super(); - this.client = new SignalClient(); + this.log = getLogger(options.loggerName ?? LoggerNames.Engine); + this.loggerOptions = { + loggerName: options.loggerName, + loggerContextCb: () => this.logContext, + }; + this.client = new SignalClient(undefined, this.loggerOptions); this.client.signalLatency = this.options.expSignalLatency; this.reconnectPolicy = this.options.reconnectPolicy; this.registerOnLineListener(); @@ -187,6 +197,15 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.client.onStreamStateUpdate = (update) => this.emit(EngineEvent.StreamStateChanged, update); } + /** @internal */ + get logContext() { + return { + room: this.latestJoinResponse?.room?.name, + roomSid: this.latestJoinResponse?.room?.sid, + identity: this.latestJoinResponse?.participant?.identity, + }; + } + async join( url: string, token: string, @@ -220,8 +239,9 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } catch (e) { if (e instanceof ConnectionError) { if (e.reason === ConnectionErrorReason.ServerUnreachable) { - log.warn( + this.log.warn( `Couldn't connect to server, attempt ${this.joinAttempts} of ${this.maxJoinAttempts}`, + this.logContext, ); if (this.joinAttempts < this.maxJoinAttempts) { return this.join(url, token, opts, abortSignal); @@ -324,7 +344,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.pcManager!.removeTrack(sender); return true; } catch (e: unknown) { - log.warn('failed to remove track', { error: e, method: 'removeTrack' }); + this.log.warn('failed to remove track', { ...this.logContext, error: e }); } return false; } @@ -356,7 +376,11 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit const rtcConfig = this.makeRTCConfiguration(joinResponse); - this.pcManager = new PCTransportManager(rtcConfig, joinResponse.subscriberPrimary); + this.pcManager = new PCTransportManager( + rtcConfig, + joinResponse.subscriberPrimary, + this.loggerOptions, + ); this.emit(EngineEvent.TransportsCreated, this.pcManager.publisher, this.pcManager.subscriber); @@ -370,7 +394,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.pcManager.onDataChannel = this.handleDataChannel; this.pcManager.onStateChange = async (connectionState, publisherState, subscriberState) => { - log.debug(`primary PC state changed ${connectionState}`); + this.log.debug(`primary PC state changed ${connectionState}`, this.logContext); if (connectionState === PCTransportState.CONNECTED) { const shouldEmit = this.pcState === PCState.New; this.pcState = PCState.Connected; @@ -404,9 +428,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit if (!this.pcManager) { return; } - log.debug('received server answer', { - RTCSdpType: sd.type, - }); + this.log.debug('received server answer', { ...this.logContext, RTCSdpType: sd.type }); await this.pcManager.setPublisherAnswer(sd); }; @@ -415,7 +437,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit if (!this.pcManager) { return; } - log.trace('got ICE candidate from peer', { candidate, target }); + this.log.trace('got ICE candidate from peer', { ...this.logContext, candidate, target }); this.pcManager.addIceCandidate(candidate, target); }; @@ -429,9 +451,16 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit }; this.client.onLocalTrackPublished = (res: TrackPublishedResponse) => { - log.debug('received trackPublishedResponse', res); + this.log.debug('received trackPublishedResponse', { + ...this.logContext, + cid: res.cid, + track: res.track?.sid, + }); if (!this.pendingTrackResolvers[res.cid]) { - log.error(`missing track resolver for ${res.cid}`); + this.log.error(`missing track resolver for ${res.cid}`, { + ...this.logContext, + cid: res.cid, + }); return; } const { resolve } = this.pendingTrackResolvers[res.cid]; @@ -464,7 +493,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.emit(EngineEvent.Disconnected, leave?.reason); this.close(); } - log.trace('leave request', { leave }); + this.log.debug('client leave request', { ...this.logContext, reason: leave?.reason }); }; } @@ -472,7 +501,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit const rtcConfig = { ...this.rtcConfig }; if (this.signalOpts?.e2eeEnabled) { - log.debug('E2EE - setting up transports with insertable streams'); + this.log.debug('E2EE - setting up transports with insertable streams', this.logContext); // this makes sure that no data is sent before the transforms are ready // @ts-ignore rtcConfig.encodedInsertableStreams = true; @@ -562,7 +591,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } else { return; } - log.debug(`on data channel ${channel.id}, ${channel.label}`); + this.log.debug(`on data channel ${channel.id}, ${channel.label}`, this.logContext); channel.onmessage = this.handleDataMessage; }; @@ -577,7 +606,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } else if (message.data instanceof Blob) { buffer = await message.data.arrayBuffer(); } else { - log.error('unsupported data type', message.data); + this.log.error('unsupported data type', { ...this.logContext, data: message.data }); return; } const dp = DataPacket.fromBinary(new Uint8Array(buffer)); @@ -598,9 +627,12 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit if (event instanceof ErrorEvent && event.error) { const { error } = event.error; - log.error(`DataChannel error on ${channelKind}: ${event.message}`, error); + this.log.error(`DataChannel error on ${channelKind}: ${event.message}`, { + ...this.logContext, + error, + }); } else { - log.error(`Unknown DataChannel error on ${channelKind}`, event); + this.log.error(`Unknown DataChannel error on ${channelKind}`, { ...this.logContext, event }); } }; @@ -622,7 +654,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } const cap = RTCRtpSender.getCapabilities(kind); if (!cap) return; - log.debug('get capabilities', cap); + this.log.debug('get sender capabilities', { ...this.logContext, cap }); const matched: RTCRtpCodecCapability[] = []; const partialMatched: RTCRtpCodecCapability[] = []; const unmatched: RTCRtpCodecCapability[] = []; @@ -666,7 +698,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit return sender; } if (supportsAddTrack()) { - log.warn('using add-track fallback'); + this.log.warn('using add-track fallback', this.logContext); const sender = await this.createRTCRtpSender(track.mediaStreamTrack); return sender; } @@ -684,7 +716,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit return this.createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings); } if (supportsAddTrack()) { - log.debug('using add-track fallback'); + this.log.debug('using add-track fallback', this.logContext); return this.createRTCRtpSender(track.mediaStreamTrack); } @@ -764,15 +796,16 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit return; } - log.warn(`${connection} disconnected`); + this.log.warn(`${connection} disconnected`, this.logContext); if (this.reconnectAttempts === 0) { // only reset start time on the first try this.reconnectStart = Date.now(); } const disconnect = (duration: number) => { - log.warn( + this.log.warn( `could not recover connection after ${this.reconnectAttempts} attempts, ${duration}ms. giving up`, + this.logContext, ); this.emit(EngineEvent.Disconnected); this.close(); @@ -792,7 +825,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit delay = 0; } - log.debug(`reconnecting in ${delay}ms`); + this.log.debug(`reconnecting in ${delay}ms`, this.logContext); this.clearReconnectTimeout(); if (this.token && this.regionUrlProvider) { @@ -836,7 +869,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.reconnectAttempts += 1; let recoverable = true; if (e instanceof UnexpectedConnectionState) { - log.debug('received unrecoverable error', { error: e }); + this.log.debug('received unrecoverable error', { ...this.logContext, error: e }); // unrecoverable recoverable = false; } else if (!(e instanceof SignalReconnectError)) { @@ -847,10 +880,11 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit if (recoverable) { this.handleDisconnect('reconnect', ReconnectReason.RR_UNKNOWN); } else { - log.info( + this.log.info( `could not recover connection after ${this.reconnectAttempts} attempts, ${ Date.now() - this.reconnectStart }ms. giving up`, + this.logContext, ); this.emit(EngineEvent.Disconnected); await this.close(); @@ -864,7 +898,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit try { return this.reconnectPolicy.nextRetryDelayInMs(context); } catch (e) { - log.warn('encountered error in reconnect policy', { error: e }); + this.log.warn('encountered error in reconnect policy', { ...this.logContext, error: e }); } // error in user code with provided reconnect policy, stop reconnecting @@ -878,7 +912,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit throw new UnexpectedConnectionState('could not reconnect, url or token not saved'); } - log.info(`reconnecting, attempt: ${this.reconnectAttempts}`); + this.log.info(`reconnecting, attempt: ${this.reconnectAttempts}`, this.logContext); this.emit(EngineEvent.Restarting); if (!this.client.isDisconnected) { @@ -890,7 +924,10 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit let joinResponse: JoinResponse; try { if (!this.signalOpts) { - log.warn('attempted connection restart, without signal options present'); + this.log.warn( + 'attempted connection restart, without signal options present', + this.logContext, + ); throw new SignalReconnectError(); } // in case a regionUrl is passed, the region URL takes precedence @@ -937,7 +974,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit throw new UnexpectedConnectionState('publisher and subscriber connections unset'); } - log.info(`resuming signal connection, attempt ${this.reconnectAttempts}`); + this.log.info(`resuming signal connection, attempt ${this.reconnectAttempts}`, this.logContext); this.emit(EngineEvent.Resuming); try { @@ -951,7 +988,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit let message = ''; if (e instanceof Error) { message = e.message; - log.error(e.message); + this.log.error(e.message, this.logContext); } if (e instanceof ConnectionError && e.reason === ConnectionErrorReason.NotAllowed) { throw new UnexpectedConnectionState('could not reconnect, token might be expired'); @@ -990,7 +1027,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit private async waitForPCReconnected() { this.pcState = PCState.Reconnecting; - log.debug('waiting for peer connection to reconnect'); + this.log.debug('waiting for peer connection to reconnect', this.logContext); try { await sleep(minReconnectWait); // FIXME setTimeout again not ideal for a connection critical path if (!this.pcManager) { @@ -1136,7 +1173,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit const handleClosed = () => { abortController.abort(); - log.debug('engine disconnected while negotiation was ongoing'); + this.log.debug('engine disconnected while negotiation was ongoing', this.logContext); resolve(); return; }; @@ -1196,7 +1233,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit /** @internal */ sendSyncState(remoteTracks: RemoteTrackPublication[], localTracks: LocalTrackPublication[]) { if (!this.pcManager) { - log.warn('sync state cannot be sent without peer connection setup'); + this.log.warn('sync state cannot be sent without peer connection setup', this.logContext); return; } const previousAnswer = this.pcManager.subscriber.getLocalDescription(); diff --git a/src/room/Room.ts b/src/room/Room.ts index b6779ebd6a..6ced3e16aa 100644 --- a/src/room/Room.ts +++ b/src/room/Room.ts @@ -4,7 +4,7 @@ import type TypedEmitter from 'typed-emitter'; import 'webrtc-adapter'; import { EncryptionEvent } from '../e2ee'; import { E2EEManager } from '../e2ee/E2eeManager'; -import log from '../logger'; +import log, { LoggerNames, getLogger } from '../logger'; import type { InternalRoomConnectOptions, InternalRoomOptions, @@ -151,6 +151,8 @@ class Room extends (EventEmitter as new () => TypedEmitter) private isVideoPlaybackBlocked: boolean = false; + private log = log; + /** * Creates a new Room, the primary construct for a LiveKit session. * @param options @@ -163,6 +165,8 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.identityToSid = new Map(); this.options = { ...roomOptionDefaults, ...options }; + this.log = getLogger(this.options.loggerName ?? LoggerNames.Room); + this.options.audioCaptureDefaults = { ...audioDefaults, ...options?.audioCaptureDefaults, @@ -198,7 +202,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.switchActiveDevice( 'audiooutput', unwrapConstraint(this.options.audioOutput.deviceId), - ).catch((e) => log.warn(`Could not set audio output: ${e.message}`)); + ).catch((e) => this.log.warn(`Could not set audio output: ${e.message}`, this.logContext)); } if (this.options.e2ee) { @@ -239,6 +243,14 @@ class Room extends (EventEmitter as new () => TypedEmitter) } } + private get logContext() { + return { + room: this.name, + roomSid: this.sid, + identity: this.localParticipant.identity, + }; + } + /** * if the current room has a participant with `recorder: true` in its JWT grant **/ @@ -362,7 +374,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (this.state !== ConnectionState.Disconnected) { return; } - log.debug(`prepareConnection to ${url}`); + this.log.debug(`prepareConnection to ${url}`, this.logContext); try { if (isCloud(new URL(url)) && token) { this.regionUrlProvider = new RegionUrlProvider(url, token); @@ -372,13 +384,13 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (regionUrl && this.state === ConnectionState.Disconnected) { this.regionUrl = regionUrl; await fetch(toHttpUrl(regionUrl), { method: 'HEAD' }); - log.debug(`prepared connection to ${regionUrl}`); + this.log.debug(`prepared connection to ${regionUrl}`, this.logContext); } } else { await fetch(toHttpUrl(url), { method: 'HEAD' }); } } catch (e) { - log.warn('could not prepare connection', { error: e }); + this.log.warn('could not prepare connection', { ...this.logContext, error: e }); } } @@ -388,7 +400,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (this.state === ConnectionState.Connected) { // when the state is reconnecting or connected, this function returns immediately - log.info(`already connected to room ${this.name}`); + this.log.info(`already connected to room ${this.name}`, this.logContext); unlockDisconnect(); return Promise.resolve(); } @@ -413,7 +425,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) // if initial connection fails, this will speed up picking regional url // on subsequent runs this.regionUrlProvider.fetchRegionSettings().catch((e) => { - log.warn('could not fetch region settings', { error: e }); + this.log.warn('could not fetch region settings', { ...this.logContext, error: e }); }); } @@ -460,8 +472,9 @@ class Room extends (EventEmitter as new () => TypedEmitter) } } if (nextUrl) { - log.info( + this.log.info( `Initial connection failed with ConnectionError: ${e.message}. Retrying with another region: ${nextUrl}`, + this.logContext, ); await connectFn(resolve, reject, nextUrl); } else { @@ -517,10 +530,15 @@ class Room extends (EventEmitter as new () => TypedEmitter) serverInfo = { version: joinResponse.serverVersion, region: joinResponse.serverRegion }; } - log.debug( + this.log.debug( `connected to Livekit Server ${Object.entries(serverInfo) .map(([key, value]) => `${key}: ${value}`) .join(', ')}`, + { + room: joinResponse.room?.name, + roomSid: joinResponse.room?.sid, + identity: joinResponse.participant?.identity, + }, ); if (!joinResponse.serverVersion) { @@ -528,7 +546,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) } if (joinResponse.serverVersion === '0.15.1' && this.options.dynacast) { - log.debug('disabling dynacast due to server version'); + this.log.debug('disabling dynacast due to server version', this.logContext); // dynacast has a bug in 0.15.1, so we cannot use it then roomOptions.dynacast = false; } @@ -561,7 +579,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) abortController: AbortController, ) => { if (this.state === ConnectionState.Reconnecting) { - log.info('Reconnection attempt replaced by new connection attempt'); + this.log.info('Reconnection attempt replaced by new connection attempt', this.logContext); // make sure we close and recreate the existing engine in order to get rid of any potentially ongoing reconnection attempts this.recreateEngine(); } else { @@ -608,7 +626,10 @@ class Room extends (EventEmitter as new () => TypedEmitter) resultingError.reason = err.reason; resultingError.status = err.status; } - log.debug(`error trying to establish signal connection`, { error: err }); + this.log.debug(`error trying to establish signal connection`, { + ...this.logContext, + error: err, + }); throw resultingError; } @@ -651,16 +672,18 @@ class Room extends (EventEmitter as new () => TypedEmitter) const unlock = await this.disconnectLock.lock(); try { if (this.state === ConnectionState.Disconnected) { - log.debug('already disconnected'); + this.log.debug('already disconnected', this.logContext); return; } - log.info('disconnect from room', { identity: this.localParticipant.identity }); + this.log.info('disconnect from room', { + ...this.logContext, + }); if ( this.state === ConnectionState.Connecting || this.state === ConnectionState.Reconnecting ) { // try aborting pending connection attempt - log.warn('abort connection attempt'); + this.log.warn('abort connection attempt', this.logContext); this.abortController?.abort(); // in case the abort controller didn't manage to cancel the connection attempt, reject the connect promise explicitly this.connectFuture?.reject?.(new ConnectionError('Client initiated disconnect')); @@ -886,8 +909,9 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (e.name === 'NotAllowedError') { this.handleVideoPlaybackFailed(); } else { - log.warn( + this.log.warn( 'Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler', + this.logContext, ); } }); @@ -1052,7 +1076,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) return; } if (this.state === ConnectionState.Disconnected) { - log.warn('skipping incoming track after Room disconnected'); + this.log.warn('skipping incoming track after Room disconnected', this.logContext); return; } const parts = unpackStreamId(stream.id); @@ -1064,15 +1088,16 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (streamId && streamId.startsWith('TR')) trackId = streamId; if (participantId === this.localParticipant.sid) { - log.warn('tried to create RemoteParticipant for local participant'); + this.log.warn('tried to create RemoteParticipant for local participant', this.logContext); return; } const participant = this.participants.get(participantId) as RemoteParticipant | undefined; if (!participant) { - log.error( + this.log.error( `Tried to add a track for a participant, that's not present. Sid: ${participantId}`, + this.logContext, ); return; } @@ -1107,7 +1132,8 @@ class Room extends (EventEmitter as new () => TypedEmitter) }; private handleSignalRestarted = async (joinResponse: JoinResponse) => { - log.debug(`signal reconnected to server`, { + this.log.debug(`signal reconnected to server, region ${joinResponse.serverRegion}`, { + ...this.logContext, region: joinResponse.serverRegion, }); @@ -1136,12 +1162,14 @@ class Room extends (EventEmitter as new () => TypedEmitter) ) { // we need to restart the track before publishing, often a full reconnect // is necessary because computer had gone to sleep. - log.debug('restarting existing track', { + this.log.debug('restarting existing track', { + ...this.logContext, track: pub.trackSid, }); await track.restartTrack(); } - log.debug('publishing new track', { + this.log.debug('publishing new track', { + ...this.logContext, track: pub.trackSid, }); await this.localParticipant.publishTrack(track, pub.options); @@ -1149,12 +1177,16 @@ class Room extends (EventEmitter as new () => TypedEmitter) }), ); } catch (error) { - log.error('error trying to re-publish tracks after reconnection', { error }); + this.log.error('error trying to re-publish tracks after reconnection', { + ...this.logContext, + error, + }); } try { await this.engine.waitForRestarted(); - log.debug(`fully reconnected to server`, { + this.log.debug(`fully reconnected to server`, { + ...this.logContext, region: joinResponse.serverRegion, }); } catch { @@ -1411,7 +1443,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) }; private handleAudioPlaybackFailed = (e: any) => { - log.warn('could not playback audio', e); + this.log.warn('could not playback audio', { ...this.logContext, error: e }); if (!this.canPlaybackAudio) { return; } @@ -1480,7 +1512,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) try { await this.audioContext.resume(); } catch (e: any) { - log.warn(e); + this.log.warn('Could not resume audio context', { ...this.logContext, error: e }); } } @@ -1502,7 +1534,10 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (info) { participant = RemoteParticipant.fromParticipantInfo(this.engine.client, info); } else { - participant = new RemoteParticipant(this.engine.client, id, '', undefined, undefined); + participant = new RemoteParticipant(this.engine.client, id, '', undefined, undefined, { + loggerContextCb: () => this.logContext, + loggerName: this.options.loggerName, + }); } if (this.options.expWebAudioMix) { participant.setAudioContext(this.audioContext); @@ -1510,7 +1545,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (this.options.audioOutput?.deviceId) { participant .setAudioOutput(this.options.audioOutput) - .catch((e) => log.warn(`Could not set audio output: ${e.message}`)); + .catch((e) => this.log.warn(`Could not set audio output: ${e.message}`, this.logContext)); } return participant; } @@ -1643,7 +1678,10 @@ class Room extends (EventEmitter as new () => TypedEmitter) !this.engine.verifyTransport() ) { consecutiveFailures++; - log.warn('detected connection state mismatch', { numFailures: consecutiveFailures }); + this.log.warn('detected connection state mismatch', { + ...this.logContext, + numFailures: consecutiveFailures, + }); if (consecutiveFailures >= 3) { this.recreateEngine(); this.handleDisconnect( @@ -1799,7 +1837,11 @@ class Room extends (EventEmitter as new () => TypedEmitter) true, true, ), + undefined, + false, + { loggerName: this.options.loggerName, loggerContextCb: () => this.logContext }, ), + { loggerName: this.options.loggerName, loggerContextCb: () => this.logContext }, ); // @ts-ignore this.localParticipant.addTrackPublication(camPub); @@ -1817,7 +1859,12 @@ class Room extends (EventEmitter as new () => TypedEmitter) publishOptions.useRealTracks ? (await navigator.mediaDevices.getUserMedia({ audio: true })).getAudioTracks()[0] : getEmptyAudioStreamTrack(), + undefined, + false, + this.audioContext, + { loggerName: this.options.loggerName, loggerContextCb: () => this.logContext }, ), + { loggerName: this.options.loggerName, loggerContextCb: () => this.logContext }, ); // @ts-ignore this.localParticipant.addTrackPublication(audioPub); @@ -1870,12 +1917,29 @@ class Room extends (EventEmitter as new () => TypedEmitter) ): boolean { // active speaker updates are too spammy if (event !== RoomEvent.ActiveSpeakersChanged) { - log.debug(`room event ${event}`, { event, args }); + // only extract logContext from arguments in order to avoid logging the whole object tree + const minimizedArgs = mapArgs(args).filter((arg: unknown) => arg !== undefined); + this.log.debug(`room event ${event}`, { ...this.logContext, event, args: minimizedArgs }); } return super.emit(event, ...args); } } +function mapArgs(args: unknown[]): any { + return args.map((arg: unknown) => { + if (!arg) { + return; + } + if (Array.isArray(arg)) { + return mapArgs(arg); + } + if (typeof arg === 'object') { + return 'logContext' in arg && arg.logContext; + } + return arg; + }); +} + export default Room; export type RoomEventCallbacks = { diff --git a/src/room/participant/LocalParticipant.ts b/src/room/participant/LocalParticipant.ts index 8d47518262..b9dce84156 100644 --- a/src/room/participant/LocalParticipant.ts +++ b/src/room/participant/LocalParticipant.ts @@ -1,4 +1,3 @@ -import log from '../../logger'; import type { InternalRoomOptions } from '../../options'; import { DataPacket, @@ -35,6 +34,7 @@ import type { import { VideoPresets, isBackupCodec } from '../track/options'; import { constraintsForOptions, + getLogContextFromTrack, mergeDefaultOptions, mimeTypeToVideoCodecString, screenCaptureToDisplayMediaStreamOptions, @@ -86,7 +86,10 @@ export default class LocalParticipant extends Participant { /** @internal */ constructor(sid: string, identity: string, engine: RTCEngine, options: InternalRoomOptions) { - super(sid, identity); + super(sid, identity, undefined, undefined, { + loggerName: options.loggerName, + loggerContextCb: () => this.engine.logContext, + }); this.audioTracks = new Map(); this.videoTracks = new Map(); this.tracks = new Map(); @@ -164,7 +167,7 @@ export default class LocalParticipant extends Participant { private handleDisconnected = () => { if (this.reconnectFuture) { - this.reconnectFuture.promise.catch((e) => log.warn(e)); + this.reconnectFuture.promise.catch((e) => this.log.warn(e.message, this.logContext)); this.reconnectFuture?.reject?.('Got disconnected during reconnection attempt'); this.reconnectFuture = undefined; } @@ -277,7 +280,7 @@ export default class LocalParticipant extends Participant { options?: VideoCaptureOptions | AudioCaptureOptions | ScreenShareCaptureOptions, publishOptions?: TrackPublishOptions, ) { - log.debug('setTrackEnabled', { source, enabled }); + this.log.debug('setTrackEnabled', { ...this.logContext, source, enabled }); let track = this.getTrack(source); if (enabled) { if (track) { @@ -285,7 +288,7 @@ export default class LocalParticipant extends Participant { } else { let localTracks: Array | undefined; if (this.pendingPublishing.has(source)) { - log.info('skipping duplicate published source', { source }); + this.log.info('skipping duplicate published source', { ...this.logContext, source }); // no-op it's already been requested return; } @@ -313,7 +316,10 @@ export default class LocalParticipant extends Participant { } const publishPromises: Array> = []; for (const localTrack of localTracks) { - log.info('publishing track', { localTrack }); + this.log.info('publishing track', { + ...this.logContext, + ...getLogContextFromTrack(localTrack), + }); publishPromises.push(this.publishTrack(localTrack, publishOptions)); } const publishedTracks = await Promise.all(publishPromises); @@ -423,7 +429,10 @@ export default class LocalParticipant extends Participant { if (typeof conOrBool !== 'boolean') { trackConstraints = conOrBool; } - const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints); + const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints, { + loggerName: this.roomOptions.loggerName, + loggerContextCb: () => this.logContext, + }); if (track.kind === Track.Kind.Video) { track.source = Track.Source.Camera; } else if (track.kind === Track.Kind.Audio) { @@ -455,7 +464,10 @@ export default class LocalParticipant extends Participant { if (tracks.length === 0) { throw new TrackInvalidError('no video track found'); } - const screenVideo = new LocalVideoTrack(tracks[0], undefined, false); + const screenVideo = new LocalVideoTrack(tracks[0], undefined, false, { + loggerName: this.roomOptions.loggerName, + loggerContextCb: () => this.logContext, + }); screenVideo.source = Track.Source.ScreenShare; const localTracks: Array = [screenVideo]; if (stream.getAudioTracks().length > 0) { @@ -465,6 +477,7 @@ export default class LocalParticipant extends Participant { undefined, false, this.audioContext, + { loggerName: this.roomOptions.loggerName, loggerContextCb: () => this.logContext }, ); screenAudio.source = Track.Source.ScreenShareAudio; localTracks.push(screenAudio); @@ -513,14 +526,25 @@ export default class LocalParticipant extends Participant { if (track instanceof MediaStreamTrack) { switch (track.kind) { case 'audio': - track = new LocalAudioTrack(track, defaultConstraints, true, this.audioContext); + track = new LocalAudioTrack(track, defaultConstraints, true, this.audioContext, { + loggerName: this.roomOptions.loggerName, + loggerContextCb: () => this.logContext, + }); break; case 'video': - track = new LocalVideoTrack(track, defaultConstraints, true); + track = new LocalVideoTrack(track, defaultConstraints, true, { + loggerName: this.roomOptions.loggerName, + loggerContextCb: () => this.logContext, + }); break; default: throw new TrackInvalidError(`unsupported MediaStreamTrack kind ${track.kind}`); } + } else { + track.updateLoggerOptions({ + loggerName: this.roomOptions.loggerName, + loggerContextCb: () => this.logContext, + }); } if (track instanceof LocalAudioTrack) { @@ -539,7 +563,10 @@ export default class LocalParticipant extends Participant { }); if (existingPublication) { - log.warn('track has already been published, skipping'); + this.log.warn('track has already been published, skipping', { + ...this.logContext, + ...getLogContextFromTrack(existingPublication), + }); return existingPublication; } @@ -556,12 +583,16 @@ export default class LocalParticipant extends Participant { options = {}; } if (options.dtx === undefined) { - log.info( + this.log.info( `Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.`, + { + ...this.logContext, + ...getLogContextFromTrack(track), + }, ); } if (options.red === undefined) { - log.info( + this.log.info( `Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work.`, ); } @@ -575,7 +606,12 @@ export default class LocalParticipant extends Participant { // disable simulcast if e2ee is set on safari if (isSafari() && this.roomOptions.e2ee) { - log.info(`End-to-end encryption is set up, simulcast publishing will be disabled on Safari`); + this.log.info( + `End-to-end encryption is set up, simulcast publishing will be disabled on Safari`, + { + ...this.logContext, + }, + ); opts.simulcast = false; } @@ -599,7 +635,10 @@ export default class LocalParticipant extends Participant { (publishedTrack) => track instanceof LocalTrack && publishedTrack.source === track.source, ); if (existingTrackOfSource && track.source !== Track.Source.Unknown) { - log.info(`publishing a second track with the same source: ${track.source}`); + this.log.info(`publishing a second track with the same source: ${track.source}`, { + ...this.logContext, + ...getLogContextFromTrack(track), + }); } if (opts.stopMicTrackOnMute && track instanceof LocalAudioTrack) { track.stopOnMute = true; @@ -664,7 +703,11 @@ export default class LocalParticipant extends Participant { height: defaultRes.height, }; // log failure - log.error('could not determine track dimensions, using defaults', dims); + this.log.error('could not determine track dimensions, using defaults', { + ...this.logContext, + ...getLogContextFromTrack(track), + dims, + }); } // width and height should be defined for video req.width = dims.width; @@ -748,7 +791,11 @@ export default class LocalParticipant extends Participant { if (primaryCodecMime && track.kind === Track.Kind.Video) { const updatedCodec = mimeTypeToVideoCodecString(primaryCodecMime); if (updatedCodec !== videoCodec) { - log.debug('falling back to server selected codec', { codec: updatedCodec }); + this.log.debug('falling back to server selected codec', { + ...this.logContext, + ...getLogContextFromTrack(track), + codec: updatedCodec, + }); /* @ts-ignore */ opts.videoCodec = updatedCodec; @@ -762,7 +809,10 @@ export default class LocalParticipant extends Participant { } } - const publication = new LocalTrackPublication(track.kind, ti, track); + const publication = new LocalTrackPublication(track.kind, ti, track, { + loggerName: this.roomOptions.loggerName, + loggerContextCb: () => this.logContext, + }); // save options for when it needs to be republished again publication.options = opts; track.sid = ti.sid; @@ -770,7 +820,11 @@ export default class LocalParticipant extends Participant { if (!this.engine.pcManager) { throw new UnexpectedConnectionState('pcManager is not ready'); } - log.debug(`publishing ${track.kind} with encodings`, { encodings, trackInfo: ti }); + this.log.debug(`publishing ${track.kind} with encodings`, { + ...this.logContext, + encodings, + trackInfo: ti, + }); track.sender = await this.engine.createSender(track, opts, encodings); @@ -863,8 +917,12 @@ export default class LocalParticipant extends Participant { const encodings = computeTrackBackupEncodings(track, videoCodec, opts); if (!encodings) { - log.info( + this.log.info( `backup codec has been disabled, ignoring request to add additional codec for track`, + { + ...this.logContext, + ...getLogContextFromTrack(track), + }, ); return; } @@ -897,7 +955,11 @@ export default class LocalParticipant extends Participant { await this.engine.createSimulcastSender(track, simulcastTrack, opts, encodings); await this.engine.negotiate(); - log.debug(`published ${videoCodec} for track ${track.sid}`, { encodings, trackInfo: ti }); + this.log.debug(`published ${videoCodec} for track ${track.sid}`, { + ...this.logContext, + encodings, + trackInfo: ti, + }); } async unpublishTrack( @@ -907,12 +969,17 @@ export default class LocalParticipant extends Participant { // look through all published tracks to find the right ones const publication = this.getPublicationForTrack(track); - log.debug('unpublishing track', { track, method: 'unpublishTrack' }); + const pubLogContext = publication ? getLogContextFromTrack(publication) : undefined; + + this.log.debug('unpublishing track', { + ...this.logContext, + ...pubLogContext, + }); if (!publication || !publication.track) { - log.warn('track was not unpublished because no publication was found', { - track, - method: 'unpublishTrack', + this.log.warn('track was not unpublished because no publication was found', { + ...this.logContext, + ...pubLogContext, }); return undefined; } @@ -965,7 +1032,11 @@ export default class LocalParticipant extends Participant { track.simulcastCodecs.clear(); } } catch (e) { - log.warn('failed to unpublish track', { error: e, method: 'unpublishTrack' }); + this.log.warn('failed to unpublish track', { + ...this.logContext, + ...pubLogContext, + error: e, + }); } } @@ -1023,7 +1094,8 @@ export default class LocalParticipant extends Participant { ) { // generally we need to restart the track before publishing, often a full reconnect // is necessary because computer had gone to sleep. - log.debug('restarting existing track', { + this.log.debug('restarting existing track', { + ...this.logContext, track: pub.trackSid, }); await track.restartTrack(); @@ -1152,9 +1224,10 @@ export default class LocalParticipant extends Participant { if (pub) { const mutedOnServer = pub.isMuted || (pub.track?.isUpstreamPaused ?? false); if (mutedOnServer !== ti.muted) { - log.debug('updating server mute state after reconcile', { - sid: ti.sid, - muted: mutedOnServer, + this.log.debug('updating server mute state after reconcile', { + ...this.logContext, + ...getLogContextFromTrack(pub), + mutedOnServer, }); this.engine.client.sendMuteTrack(ti.sid, mutedOnServer); } @@ -1164,7 +1237,8 @@ export default class LocalParticipant extends Participant { } private updateTrackSubscriptionPermissions = () => { - log.debug('updating track subscription permissions', { + this.log.debug('updating track subscription permissions', { + ...this.logContext, allParticipantsAllowed: this.allParticipantsAllowedToSubscribe, participantTrackPermissions: this.participantTrackPermissions, }); @@ -1187,7 +1261,10 @@ export default class LocalParticipant extends Participant { } if (!track.sid) { - log.error('could not update mute status for unpublished track', track); + this.log.error('could not update mute status for unpublished track', { + ...this.logContext, + ...getLogContextFromTrack(track), + }); return; } @@ -1195,12 +1272,18 @@ export default class LocalParticipant extends Participant { }; private onTrackUpstreamPaused = (track: LocalTrack) => { - log.debug('upstream paused'); + this.log.debug('upstream paused', { + ...this.logContext, + ...getLogContextFromTrack(track), + }); this.onTrackMuted(track, true); }; private onTrackUpstreamResumed = (track: LocalTrack) => { - log.debug('upstream resumed'); + this.log.debug('upstream resumed', { + ...this.logContext, + ...getLogContextFromTrack(track), + }); this.onTrackMuted(track, track.isMuted); }; @@ -1210,9 +1293,9 @@ export default class LocalParticipant extends Participant { } const pub = this.videoTracks.get(update.trackSid); if (!pub) { - log.warn('received subscribed quality update for unknown track', { - method: 'handleSubscribedQualityUpdate', - sid: update.trackSid, + this.log.warn('received subscribed quality update for unknown track', { + ...this.logContext, + trackSid: update.trackSid, }); return; } @@ -1223,7 +1306,10 @@ export default class LocalParticipant extends Participant { const newCodecs = await pub.videoTrack.setPublishingCodecs(update.subscribedCodecs); for await (const codec of newCodecs) { if (isBackupCodec(codec)) { - log.debug(`publish ${codec} for ${pub.videoTrack.sid}`); + this.log.debug(`publish ${codec} for ${pub.videoTrack.sid}`, { + ...this.logContext, + ...getLogContextFromTrack(pub), + }); await this.publishAdditionalCodecForTrack(pub.videoTrack, codec, pub.options); } } @@ -1235,8 +1321,8 @@ export default class LocalParticipant extends Participant { private handleLocalTrackUnpublished = (unpublished: TrackUnpublishedResponse) => { const track = this.tracks.get(unpublished.trackSid); if (!track) { - log.warn('received unpublished event for unknown track', { - method: 'handleLocalTrackUnpublished', + this.log.warn('received unpublished event for unknown track', { + ...this.logContext, trackSid: unpublished.trackSid, }); return; @@ -1249,8 +1335,9 @@ export default class LocalParticipant extends Participant { track.source === Track.Source.ScreenShare || track.source === Track.Source.ScreenShareAudio ) { - log.debug('unpublishing local track due to TrackEnded', { - track: track.sid, + this.log.debug('unpublishing local track due to TrackEnded', { + ...this.logContext, + ...getLogContextFromTrack(track), }); this.unpublishTrack(track); } else if (track.isUserProvided) { @@ -1265,7 +1352,10 @@ export default class LocalParticipant extends Participant { name: track.source === Track.Source.Camera ? 'camera' : 'microphone', }); if (currentPermissions && currentPermissions.state === 'denied') { - log.warn(`user has revoked access to ${track.source}`); + this.log.warn(`user has revoked access to ${track.source}`, { + ...this.logContext, + ...getLogContextFromTrack(track), + }); // detect granted change after permissions were denied to try and resume then currentPermissions.onchange = () => { @@ -1283,11 +1373,17 @@ export default class LocalParticipant extends Participant { } } if (!track.isMuted) { - log.debug('track ended, attempting to use a different device'); + this.log.debug('track ended, attempting to use a different device', { + ...this.logContext, + ...getLogContextFromTrack(track), + }); await track.restartTrack(); } } catch (e) { - log.warn(`could not restart track, muting instead`); + this.log.warn(`could not restart track, muting instead`, { + ...this.logContext, + ...getLogContextFromTrack(track), + }); await track.mute(); } } diff --git a/src/room/participant/Participant.ts b/src/room/participant/Participant.ts index 6a7391afa7..03356091f6 100644 --- a/src/room/participant/Participant.ts +++ b/src/room/participant/Participant.ts @@ -1,6 +1,6 @@ import { EventEmitter } from 'events'; import type TypedEmitter from 'typed-emitter'; -import log from '../../logger'; +import log, { LoggerNames, StructuredLogger, getLogger } from '../../logger'; import { DataPacket_Kind, ParticipantInfo, @@ -16,6 +16,7 @@ import type RemoteTrack from '../track/RemoteTrack'; import type RemoteTrackPublication from '../track/RemoteTrackPublication'; import { Track } from '../track/Track'; import type { TrackPublication } from '../track/TrackPublication'; +import type { LoggerOptions } from '../types'; export enum ConnectionQuality { Excellent = 'excellent', @@ -80,6 +81,18 @@ export default class Participant extends (EventEmitter as new () => TypedEmitter protected audioContext?: AudioContext; + protected log: StructuredLogger = log; + + protected loggerOptions?: LoggerOptions; + + protected get logContext() { + return { + ...this.loggerOptions?.loggerContextCb?.(), + participantSid: this.sid, + participantId: this.identity, + }; + } + get isEncrypted() { return this.tracks.size > 0 && Array.from(this.tracks.values()).every((tr) => tr.isEncrypted); } @@ -89,8 +102,18 @@ export default class Participant extends (EventEmitter as new () => TypedEmitter } /** @internal */ - constructor(sid: string, identity: string, name?: string, metadata?: string) { + constructor( + sid: string, + identity: string, + name?: string, + metadata?: string, + loggerOptions?: LoggerOptions, + ) { super(); + + this.log = getLogger(loggerOptions?.loggerName ?? LoggerNames.Participant); + this.loggerOptions = loggerOptions; + this.setMaxListeners(100); this.sid = sid; this.identity = identity; @@ -187,7 +210,7 @@ export default class Participant extends (EventEmitter as new () => TypedEmitter } // set this last so setMetadata can detect changes this.participantInfo = info; - log.trace('update participant info', { info }); + this.log.trace('update participant info', { ...this.logContext, info }); return true; } diff --git a/src/room/participant/RemoteParticipant.ts b/src/room/participant/RemoteParticipant.ts index 347263cb61..268e358b1b 100644 --- a/src/room/participant/RemoteParticipant.ts +++ b/src/room/participant/RemoteParticipant.ts @@ -1,5 +1,4 @@ import type { SignalClient } from '../../api/SignalClient'; -import log from '../../logger'; import type { ParticipantInfo, SubscriptionError } from '../../proto/livekit_models_pb'; import type { UpdateSubscription, UpdateTrackSettings } from '../../proto/livekit_rtc_pb'; import { ParticipantEvent, TrackEvent } from '../events'; @@ -11,6 +10,8 @@ import { Track } from '../track/Track'; import type { TrackPublication } from '../track/TrackPublication'; import type { AudioOutputOptions } from '../track/options'; import type { AdaptiveStreamSettings } from '../track/types'; +import { getLogContextFromTrack } from '../track/utils'; +import type { LoggerOptions } from '../types'; import Participant from './Participant'; import type { ParticipantEventCallbacks } from './Participant'; @@ -39,8 +40,9 @@ export default class RemoteParticipant extends Participant { identity?: string, name?: string, metadata?: string, + loggerOptions?: LoggerOptions, ) { - super(sid, identity || '', name, metadata); + super(sid, identity || '', name, metadata, loggerOptions); this.signalClient = signalClient; this.tracks = new Map(); this.audioTracks = new Map(); @@ -53,7 +55,10 @@ export default class RemoteParticipant extends Participant { // register action events publication.on(TrackEvent.UpdateSettings, (settings: UpdateTrackSettings) => { - log.debug('send update settings', settings); + this.log.debug('send update settings', { + ...this.logContext, + ...getLogContextFromTrack(publication), + }); this.signalClient.sendUpdateTrackSettings(settings); }); publication.on(TrackEvent.UpdateSubscription, (sub: UpdateSubscription) => { @@ -159,7 +164,10 @@ export default class RemoteParticipant extends Participant { // yet arrived. Wait a bit longer for it to arrive, or fire an error if (!publication) { if (triesLeft === 0) { - log.error('could not find published track', { participant: this.sid, trackSid: sid }); + this.log.error('could not find published track', { + ...this.logContext, + trackSid: sid, + }); this.emit(ParticipantEvent.TrackSubscriptionFailed, sid); return; } @@ -179,9 +187,9 @@ export default class RemoteParticipant extends Participant { } if (mediaTrack.readyState === 'ended') { - log.error( + this.log.error( 'unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()', - { participant: this.sid, trackSid: sid }, + { ...this.logContext, ...getLogContextFromTrack(publication) }, ); this.emit(ParticipantEvent.TrackSubscriptionFailed, sid); return; @@ -246,6 +254,7 @@ export default class RemoteParticipant extends Participant { kind, ti, this.signalClient.connectOptions?.autoSubscribe, + { loggerContextCb: () => this.logContext, loggerName: this.loggerOptions?.loggerName }, ); publication.updateInfo(ti); newTracks.set(ti.sid, publication); @@ -253,13 +262,12 @@ export default class RemoteParticipant extends Participant { (publishedTrack) => publishedTrack.source === publication?.source, ); if (existingTrackOfSource && publication.source !== Track.Source.Unknown) { - log.debug( + this.log.debug( `received a second track publication for ${this.identity} with the same source: ${publication.source}`, { - oldTrack: existingTrackOfSource, - newTrack: publication, - participant: this, - participantInfo: info, + ...this.logContext, + oldTrack: getLogContextFromTrack(existingTrackOfSource), + newTrack: getLogContextFromTrack(publication), }, ); } @@ -273,9 +281,9 @@ export default class RemoteParticipant extends Participant { // detect removed tracks this.tracks.forEach((publication) => { if (!validTracks.has(publication.trackSid)) { - log.trace('detected removed track on remote participant, unpublishing', { - publication, - participantSid: this.sid, + this.log.trace('detected removed track on remote participant, unpublishing', { + ...this.logContext, + ...getLogContextFromTrack(publication), }); this.unpublishTrack(publication.trackSid, true); } @@ -341,7 +349,7 @@ export default class RemoteParticipant extends Participant { event: E, ...args: Parameters ): boolean { - log.trace('participant event', { participant: this.sid, event, args }); + this.log.trace('participant event', { ...this.logContext, event, args }); return super.emit(event, ...args); } } diff --git a/src/room/participant/publishUtils.ts b/src/room/participant/publishUtils.ts index b65d1ff33a..7116e631ad 100644 --- a/src/room/participant/publishUtils.ts +++ b/src/room/participant/publishUtils.ts @@ -10,18 +10,20 @@ import type { VideoEncoding, } from '../track/options'; import { ScreenSharePresets, VideoPreset, VideoPresets, VideoPresets43 } from '../track/options'; +import type { LoggerOptions } from '../types'; import { getReactNativeOs, isFireFox, isReactNative, isSVCCodec } from '../utils'; /** @internal */ export function mediaTrackToLocalTrack( mediaStreamTrack: MediaStreamTrack, constraints?: MediaTrackConstraints, + loggerOptions?: LoggerOptions, ): LocalVideoTrack | LocalAudioTrack { switch (mediaStreamTrack.kind) { case 'audio': - return new LocalAudioTrack(mediaStreamTrack, constraints, false); + return new LocalAudioTrack(mediaStreamTrack, constraints, false, undefined, loggerOptions); case 'video': - return new LocalVideoTrack(mediaStreamTrack, constraints, false); + return new LocalVideoTrack(mediaStreamTrack, constraints, false, loggerOptions); default: throw new TrackInvalidError(`unsupported track type: ${mediaStreamTrack.kind}`); } diff --git a/src/room/track/LocalAudioTrack.ts b/src/room/track/LocalAudioTrack.ts index 530fb9b54d..f268c0c358 100644 --- a/src/room/track/LocalAudioTrack.ts +++ b/src/room/track/LocalAudioTrack.ts @@ -1,7 +1,7 @@ -import log from '../../logger'; import { TrackEvent } from '../events'; import { computeBitrate, monitorFrequency } from '../stats'; import type { AudioSenderStats } from '../stats'; +import type { LoggerOptions } from '../types'; import { isWeb, unwrapConstraint } from '../utils'; import LocalTrack from './LocalTrack'; import { Track } from './Track'; @@ -28,8 +28,9 @@ export default class LocalAudioTrack extends LocalTrack { constraints?: MediaTrackConstraints, userProvidedTrack = true, audioContext?: AudioContext, + loggerOptions?: LoggerOptions, ) { - super(mediaTrack, Track.Kind.Audio, constraints, userProvidedTrack); + super(mediaTrack, Track.Kind.Audio, constraints, userProvidedTrack, loggerOptions); this.audioContext = audioContext; this.checkForSilence(); } @@ -52,7 +53,7 @@ export default class LocalAudioTrack extends LocalTrack { try { // disabled special handling as it will cause BT headsets to switch communication modes if (this.source === Track.Source.Microphone && this.stopOnMute && !this.isUserProvided) { - log.debug('stopping mic track'); + this.log.debug('stopping mic track', this.logContext); // also stop the track, so that microphone indicator is turned off this._mediaStreamTrack.stop(); } @@ -76,7 +77,7 @@ export default class LocalAudioTrack extends LocalTrack { (this.stopOnMute || this._mediaStreamTrack.readyState === 'ended' || deviceHasChanged) && !this.isUserProvided ) { - log.debug('reacquiring mic track'); + this.log.debug('reacquiring mic track', this.logContext); await this.restartTrack(); } await super.unmute(); @@ -127,7 +128,7 @@ export default class LocalAudioTrack extends LocalTrack { try { stats = await this.getSenderStats(); } catch (e) { - log.error('could not get audio sender stats', { error: e }); + this.log.error('could not get audio sender stats', { ...this.logContext, error: e }); return; } @@ -158,7 +159,7 @@ export default class LocalAudioTrack extends LocalTrack { track: this._mediaStreamTrack, audioContext: this.audioContext, }; - log.debug(`setting up audio processor ${processor.name}`); + this.log.debug(`setting up audio processor ${processor.name}`, this.logContext); await processor.init(processorOptions); this.processor = processor; @@ -207,7 +208,7 @@ export default class LocalAudioTrack extends LocalTrack { const trackIsSilent = await detectSilence(this); if (trackIsSilent) { if (!this.isMuted) { - log.warn('silence detected on local audio track'); + this.log.warn('silence detected on local audio track', this.logContext); } this.emit(TrackEvent.AudioSilenceDetected); } diff --git a/src/room/track/LocalTrack.ts b/src/room/track/LocalTrack.ts index 8474d03c25..1b785cc836 100644 --- a/src/room/track/LocalTrack.ts +++ b/src/room/track/LocalTrack.ts @@ -1,9 +1,9 @@ import { debounce } from 'ts-debounce'; -import log from '../../logger'; import { getBrowser } from '../../utils/browserParser'; import DeviceManager from '../DeviceManager'; import { DeviceUnsupportedError, TrackInvalidError } from '../errors'; import { TrackEvent } from '../events'; +import type { LoggerOptions } from '../types'; import { Mutex, compareVersions, isMobile, sleep } from '../utils'; import { Track, attachToElement, detachTrack } from './Track'; import type { VideoCodec } from './options'; @@ -50,8 +50,9 @@ export default abstract class LocalTrack extends Track { kind: Track.Kind, constraints?: MediaTrackConstraints, userProvidedTrack = false, + loggerOptions?: LoggerOptions, ) { - super(mediaTrack, kind); + super(mediaTrack, kind, loggerOptions); this.reacquireTrack = false; this.providedByUser = userProvidedTrack; this.muteLock = new Mutex(); @@ -128,7 +129,7 @@ export default abstract class LocalTrack extends Track { } let processedTrack: MediaStreamTrack | undefined; if (this.processor && newTrack && this.processorElement) { - log.debug('restarting processor'); + this.log.debug('restarting processor', this.logContext); if (this.kind === 'unknown') { throw TypeError('cannot set processor on track of unknown kind'); } @@ -214,7 +215,7 @@ export default abstract class LocalTrack extends Track { throw new TrackInvalidError('unable to replace an unpublished track'); } - log.debug('replace MediaStreamTrack'); + this.log.debug('replace MediaStreamTrack', this.logContext); await this.setMediaStreamTrack(track); // this must be synced *after* setting mediaStreamTrack above, since it relies // on the previous state in order to cleanup @@ -230,7 +231,7 @@ export default abstract class LocalTrack extends Track { if (!constraints) { constraints = this._constraints; } - log.debug('restarting track with constraints', constraints); + this.log.debug('restarting track with constraints', { ...this.logContext, constraints }); const streamConstraints: MediaStreamConstraints = { audio: false, @@ -258,7 +259,7 @@ export default abstract class LocalTrack extends Track { const mediaStream = await navigator.mediaDevices.getUserMedia(streamConstraints); const newTrack = mediaStream.getTracks()[0]; newTrack.addEventListener('ended', this.handleEnded); - log.debug('re-acquired MediaStreamTrack'); + this.log.debug('re-acquired MediaStreamTrack', this.logContext); await this.setMediaStreamTrack(newTrack); this._constraints = constraints; @@ -268,7 +269,7 @@ export default abstract class LocalTrack extends Track { } protected setTrackMuted(muted: boolean) { - log.debug(`setting ${this.kind} track ${muted ? 'muted' : 'unmuted'}`); + this.log.debug(`setting ${this.kind} track ${muted ? 'muted' : 'unmuted'}`, this.logContext); if (this.isMuted === muted && this._mediaStreamTrack.enabled !== muted) { return; @@ -291,10 +292,10 @@ export default abstract class LocalTrack extends Track { protected async handleAppVisibilityChanged() { await super.handleAppVisibilityChanged(); if (!isMobile()) return; - log.debug(`visibility changed, is in Background: ${this.isInBackground}`); + this.log.debug(`visibility changed, is in Background: ${this.isInBackground}`, this.logContext); if (!this.isInBackground && this.needsReAcquisition && !this.isUserProvided && !this.isMuted) { - log.debug(`track needs to be reacquired, restarting ${this.source}`); + this.log.debug(`track needs to be reacquired, restarting ${this.source}`, this.logContext); await this.restart(); this.reacquireTrack = false; } @@ -302,7 +303,7 @@ export default abstract class LocalTrack extends Track { private handleTrackMuteEvent = () => this.debouncedTrackMuteHandler().catch(() => - log.debug('track mute bounce got cancelled by an unmute event'), + this.log.debug('track mute bounce got cancelled by an unmute event', this.logContext), ); private debouncedTrackMuteHandler = debounce(async () => { @@ -346,7 +347,7 @@ export default abstract class LocalTrack extends Track { return; } if (!this.sender) { - log.warn('unable to pause upstream for an unpublished track'); + this.log.warn('unable to pause upstream for an unpublished track', this.logContext); return; } @@ -370,7 +371,7 @@ export default abstract class LocalTrack extends Track { return; } if (!this.sender) { - log.warn('unable to resume upstream for an unpublished track'); + this.log.warn('unable to resume upstream for an unpublished track', this.logContext); return; } this._isUpstreamPaused = false; @@ -410,7 +411,7 @@ export default abstract class LocalTrack extends Track { async setProcessor(processor: TrackProcessor, showProcessedStreamLocally = true) { const unlock = await this.processorLock.lock(); try { - log.debug('setting up processor'); + this.log.debug('setting up processor', this.logContext); if (this.processor) { await this.stopProcessor(); } @@ -424,7 +425,9 @@ export default abstract class LocalTrack extends Track { this.processorElement .play() - .catch((error) => log.error('failed to play processor element', { error })); + .catch((error) => + this.log.error('failed to play processor element', { ...this.logContext, error }), + ); const processorOptions = { kind: this.kind, @@ -462,7 +465,7 @@ export default abstract class LocalTrack extends Track { async stopProcessor() { if (!this.processor) return; - log.debug('stopping processor'); + this.log.debug('stopping processor', this.logContext); this.processor.processedTrack?.stop(); await this.processor.destroy(); this.processor = undefined; diff --git a/src/room/track/LocalTrackPublication.ts b/src/room/track/LocalTrackPublication.ts index 8ee05687cd..8986700c0b 100644 --- a/src/room/track/LocalTrackPublication.ts +++ b/src/room/track/LocalTrackPublication.ts @@ -1,5 +1,6 @@ import type { TrackInfo } from '../../proto/livekit_models_pb'; import { TrackEvent } from '../events'; +import type { LoggerOptions } from '../types'; import type LocalAudioTrack from './LocalAudioTrack'; import type LocalTrack from './LocalTrack'; import type LocalVideoTrack from './LocalVideoTrack'; @@ -16,8 +17,8 @@ export default class LocalTrackPublication extends TrackPublication { return this.track?.isUpstreamPaused; } - constructor(kind: Track.Kind, ti: TrackInfo, track?: LocalTrack) { - super(kind, ti.sid, ti.name); + constructor(kind: Track.Kind, ti: TrackInfo, track?: LocalTrack, loggerOptions?: LoggerOptions) { + super(kind, ti.sid, ti.name, loggerOptions); this.updateInfo(ti); this.setTrack(track); diff --git a/src/room/track/LocalVideoTrack.ts b/src/room/track/LocalVideoTrack.ts index ed27976be4..227330c269 100644 --- a/src/room/track/LocalVideoTrack.ts +++ b/src/room/track/LocalVideoTrack.ts @@ -1,10 +1,11 @@ import type { SignalClient } from '../../api/SignalClient'; -import log from '../../logger'; +import type { StructuredLogger } from '../../logger'; import { VideoLayer, VideoQuality } from '../../proto/livekit_models_pb'; import { SubscribedCodec, SubscribedQuality } from '../../proto/livekit_rtc_pb'; import { ScalabilityMode } from '../participant/publishUtils'; import type { VideoSenderStats } from '../stats'; import { computeBitrate, monitorFrequency } from '../stats'; +import type { LoggerOptions } from '../types'; import { Mutex, isFireFox, isMobile, isWeb, unwrapConstraint } from '../utils'; import LocalTrack from './LocalTrack'; import { Track } from './Track'; @@ -58,8 +59,9 @@ export default class LocalVideoTrack extends LocalTrack { mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints, userProvidedTrack = true, + loggerOptions?: LoggerOptions, ) { - super(mediaTrack, Track.Kind.Video, constraints, userProvidedTrack); + super(mediaTrack, Track.Kind.Video, constraints, userProvidedTrack, loggerOptions); this.senderLock = new Mutex(); } @@ -117,7 +119,7 @@ export default class LocalVideoTrack extends LocalTrack { const unlock = await this.muteLock.lock(); try { if (this.source === Track.Source.Camera && !this.isUserProvided) { - log.debug('stopping camera track'); + this.log.debug('stopping camera track', this.logContext); // also stop the track, so that camera indicator is turned off this._mediaStreamTrack.stop(); } @@ -132,7 +134,7 @@ export default class LocalVideoTrack extends LocalTrack { const unlock = await this.muteLock.lock(); try { if (this.source === Track.Source.Camera && !this.isUserProvided) { - log.debug('reacquiring camera track'); + this.log.debug('reacquiring camera track', this.logContext); await this.restartTrack(); } await super.unmute(); @@ -202,7 +204,7 @@ export default class LocalVideoTrack extends LocalTrack { }), ); } - log.debug(`setting publishing quality. max quality ${maxQuality}`); + this.log.debug(`setting publishing quality. max quality ${maxQuality}`, this.logContext); this.setPublishingLayers(qualities); } @@ -288,7 +290,8 @@ export default class LocalVideoTrack extends LocalTrack { * been published */ async setPublishingCodecs(codecs: SubscribedCodec[]): Promise { - log.debug('setting publishing codecs', { + this.log.debug('setting publishing codecs', { + ...this.logContext, codecs, currentCodec: this.codec, }); @@ -306,7 +309,10 @@ export default class LocalVideoTrack extends LocalTrack { await this.setPublishingLayers(codec.qualities); } else { const simulcastCodecInfo = this.simulcastCodecs.get(codec.codec as VideoCodec); - log.debug(`try setPublishingCodec for ${codec.codec}`, simulcastCodecInfo); + this.log.debug(`try setPublishingCodec for ${codec.codec}`, { + ...this.logContext, + simulcastCodecInfo, + }); if (!simulcastCodecInfo || !simulcastCodecInfo.sender) { for (const q of codec.qualities) { if (q.enabled) { @@ -315,12 +321,14 @@ export default class LocalVideoTrack extends LocalTrack { } } } else if (simulcastCodecInfo.encodings) { - log.debug(`try setPublishingLayersForSender ${codec.codec}`); + this.log.debug(`try setPublishingLayersForSender ${codec.codec}`, this.logContext); await setPublishingLayersForSender( simulcastCodecInfo.sender, simulcastCodecInfo.encodings!, codec.qualities, this.senderLock, + this.log, + this.logContext, ); } } @@ -333,12 +341,19 @@ export default class LocalVideoTrack extends LocalTrack { * Sets layers that should be publishing */ async setPublishingLayers(qualities: SubscribedQuality[]) { - log.debug('setting publishing layers', qualities); + this.log.debug('setting publishing layers', { ...this.logContext, qualities }); if (!this.sender || !this.encodings) { return; } - await setPublishingLayersForSender(this.sender, this.encodings, qualities, this.senderLock); + await setPublishingLayersForSender( + this.sender, + this.encodings, + qualities, + this.senderLock, + this.log, + this.logContext, + ); } protected monitorSender = async () => { @@ -351,7 +366,7 @@ export default class LocalVideoTrack extends LocalTrack { try { stats = await this.getSenderStats(); } catch (e) { - log.error('could not get audio sender stats', { error: e }); + this.log.error('could not get audio sender stats', { ...this.logContext, error: e }); return; } const statsMap = new Map(stats.map((s) => [s.rid, s])); @@ -382,9 +397,11 @@ async function setPublishingLayersForSender( senderEncodings: RTCRtpEncodingParameters[], qualities: SubscribedQuality[], senderLock: Mutex, + log: StructuredLogger, + logContext: Record, ) { const unlock = await senderLock.lock(); - log.debug('setPublishingLayersForSender', { sender, qualities, senderEncodings }); + log.debug('setPublishingLayersForSender', { ...logContext, sender, qualities, senderEncodings }); try { const params = sender.getParameters(); const { encodings } = params; @@ -458,6 +475,7 @@ async function setPublishingLayersForSender( `setting layer ${subscribedQuality.quality} to ${ encoding.active ? 'enabled' : 'disabled' }`, + logContext, ); // FireFox does not support setting encoding.active to false, so we @@ -481,7 +499,7 @@ async function setPublishingLayersForSender( if (hasChanged) { params.encodings = encodings; - log.debug(`setting encodings`, params.encodings); + log.debug(`setting encodings`, { ...logContext, encodings: params.encodings }); await sender.setParameters(params); } } finally { diff --git a/src/room/track/RemoteAudioTrack.ts b/src/room/track/RemoteAudioTrack.ts index 9bb5ab1a71..4bcf56a205 100644 --- a/src/room/track/RemoteAudioTrack.ts +++ b/src/room/track/RemoteAudioTrack.ts @@ -1,7 +1,7 @@ -import log from '../../logger'; import { TrackEvent } from '../events'; import { computeBitrate } from '../stats'; import type { AudioReceiverStats } from '../stats'; +import type { LoggerOptions } from '../types'; import { isReactNative, supportsSetSinkId } from '../utils'; import RemoteTrack from './RemoteTrack'; import { Track } from './Track'; @@ -28,8 +28,9 @@ export default class RemoteAudioTrack extends RemoteTrack { receiver?: RTCRtpReceiver, audioContext?: AudioContext, audioOutput?: AudioOutputOptions, + loggerOptions?: LoggerOptions, ) { - super(mediaTrack, sid, Track.Kind.Audio, receiver); + super(mediaTrack, sid, Track.Kind.Audio, receiver, loggerOptions); this.audioContext = audioContext; this.webAudioPluginNodes = []; if (audioOutput) { @@ -107,7 +108,7 @@ export default class RemoteAudioTrack extends RemoteTrack { element.setSinkId(this.sinkId); } if (this.audioContext && needsNewWebAudioConnection) { - log.debug('using audio context mapping'); + this.log.debug('using audio context mapping', this.logContext); this.connectWebAudio(this.audioContext, element); element.volume = 0; element.muted = true; diff --git a/src/room/track/RemoteTrack.ts b/src/room/track/RemoteTrack.ts index a491728013..e675f0bc9e 100644 --- a/src/room/track/RemoteTrack.ts +++ b/src/room/track/RemoteTrack.ts @@ -1,5 +1,6 @@ import { TrackEvent } from '../events'; import { monitorFrequency } from '../stats'; +import type { LoggerOptions } from '../types'; import { Track } from './Track'; export default abstract class RemoteTrack extends Track { @@ -11,8 +12,10 @@ export default abstract class RemoteTrack extends Track { sid: string, kind: Track.Kind, receiver?: RTCRtpReceiver, + loggerOptions?: LoggerOptions, ) { - super(mediaTrack, kind); + super(mediaTrack, kind, loggerOptions); + this.sid = sid; this.receiver = receiver; } diff --git a/src/room/track/RemoteTrackPublication.ts b/src/room/track/RemoteTrackPublication.ts index 0455afeea2..719977dcb2 100644 --- a/src/room/track/RemoteTrackPublication.ts +++ b/src/room/track/RemoteTrackPublication.ts @@ -1,4 +1,3 @@ -import log from '../../logger'; import { ParticipantTracks, SubscriptionError, @@ -7,6 +6,7 @@ import { } from '../../proto/livekit_models_pb'; import { UpdateSubscription, UpdateTrackSettings } from '../../proto/livekit_rtc_pb'; import { TrackEvent } from '../events'; +import type { LoggerOptions } from '../types'; import type RemoteTrack from './RemoteTrack'; import RemoteVideoTrack from './RemoteVideoTrack'; import { Track } from './Track'; @@ -31,8 +31,13 @@ export default class RemoteTrackPublication extends TrackPublication { protected subscriptionError?: SubscriptionError; - constructor(kind: Track.Kind, ti: TrackInfo, autoSubscribe: boolean | undefined) { - super(kind, ti.sid, ti.name); + constructor( + kind: Track.Kind, + ti: TrackInfo, + autoSubscribe: boolean | undefined, + loggerOptions?: LoggerOptions, + ) { + super(kind, ti.sid, ti.name, loggerOptions); this.subscribed = autoSubscribe; this.updateInfo(ti); } @@ -252,13 +257,14 @@ export default class RemoteTrackPublication extends TrackPublication { private isManualOperationAllowed(): boolean { if (this.kind === Track.Kind.Video && this.isAdaptiveStream) { - log.warn('adaptive stream is enabled, cannot change video track settings', { - trackSid: this.trackSid, - }); + this.log.warn( + 'adaptive stream is enabled, cannot change video track settings', + this.logContext, + ); return false; } if (!this.isDesired) { - log.warn('cannot update track settings when not subscribed', { trackSid: this.trackSid }); + this.log.warn('cannot update track settings when not subscribed', this.logContext); return false; } return true; @@ -274,17 +280,19 @@ export default class RemoteTrackPublication extends TrackPublication { } protected handleVisibilityChange = (visible: boolean) => { - log.debug(`adaptivestream video visibility ${this.trackSid}, visible=${visible}`, { - trackSid: this.trackSid, - }); + this.log.debug( + `adaptivestream video visibility ${this.trackSid}, visible=${visible}`, + this.logContext, + ); this.disabled = !visible; this.emitTrackUpdate(); }; protected handleVideoDimensionsChange = (dimensions: Track.Dimensions) => { - log.debug(`adaptivestream video dimensions ${dimensions.width}x${dimensions.height}`, { - trackSid: this.trackSid, - }); + this.log.debug( + `adaptivestream video dimensions ${dimensions.width}x${dimensions.height}`, + this.logContext, + ); this.videoDimensions = dimensions; this.emitTrackUpdate(); }; diff --git a/src/room/track/RemoteVideoTrack.ts b/src/room/track/RemoteVideoTrack.ts index 9448fe9c17..efc72cce3a 100644 --- a/src/room/track/RemoteVideoTrack.ts +++ b/src/room/track/RemoteVideoTrack.ts @@ -1,9 +1,9 @@ import { debounce } from 'ts-debounce'; -import log from '../../logger'; import { TrackEvent } from '../events'; import type { VideoReceiverStats } from '../stats'; import { computeBitrate } from '../stats'; import CriticalTimers from '../timers'; +import type { LoggerOptions } from '../types'; import type { ObservableMediaElement } from '../utils'; import { getDevicePixelRatio, getIntersectionObserver, getResizeObserver, isWeb } from '../utils'; import RemoteTrack from './RemoteTrack'; @@ -28,8 +28,9 @@ export default class RemoteVideoTrack extends RemoteTrack { sid: string, receiver?: RTCRtpReceiver, adaptiveStreamSettings?: AdaptiveStreamSettings, + loggerOptions?: LoggerOptions, ) { - super(mediaTrack, sid, Track.Kind.Video, receiver); + super(mediaTrack, sid, Track.Kind.Video, receiver, loggerOptions); this.adaptiveStreamSettings = adaptiveStreamSettings; } @@ -103,7 +104,7 @@ export default class RemoteVideoTrack extends RemoteTrack { this.debouncedHandleResize(); this.updateVisibility(); } else { - log.warn('visibility resize observer not triggered'); + this.log.warn('visibility resize observer not triggered', this.logContext); } } @@ -114,7 +115,7 @@ export default class RemoteVideoTrack extends RemoteTrack { */ stopObservingElementInfo(elementInfo: ElementInfo) { if (!this.isAdaptiveStream) { - log.warn('stopObservingElementInfo ignored'); + this.log.warn('stopObservingElementInfo ignored', this.logContext); return; } const stopElementInfos = this.elementInfos.filter((info) => info === elementInfo); diff --git a/src/room/track/Track.ts b/src/room/track/Track.ts index c0ca1546d3..0648736b5a 100644 --- a/src/room/track/Track.ts +++ b/src/room/track/Track.ts @@ -1,11 +1,13 @@ import { EventEmitter } from 'events'; import type TypedEventEmitter from 'typed-emitter'; import type { SignalClient } from '../../api/SignalClient'; -import log from '../../logger'; +import log, { LoggerNames, StructuredLogger, getLogger } from '../../logger'; import { TrackSource, TrackType } from '../../proto/livekit_models_pb'; import { StreamState as ProtoStreamState } from '../../proto/livekit_rtc_pb'; import { TrackEvent } from '../events'; +import type { LoggerOptions } from '../types'; import { isFireFox, isSafari, isWeb } from '../utils'; +import { getLogContextFromTrack } from './utils'; const BACKGROUND_REACTION_DELAY = 5000; @@ -46,12 +48,23 @@ export abstract class Track extends (EventEmitter as new () => TypedEventEmitter private backgroundTimeout: ReturnType | undefined; + private loggerContextCb: LoggerOptions['loggerContextCb']; + protected _currentBitrate: number = 0; protected monitorInterval?: ReturnType; - protected constructor(mediaTrack: MediaStreamTrack, kind: Track.Kind) { + protected log: StructuredLogger = log; + + protected constructor( + mediaTrack: MediaStreamTrack, + kind: Track.Kind, + loggerOptions: LoggerOptions = {}, + ) { super(); + this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.Track); + this.loggerContextCb = loggerOptions.loggerContextCb; + this.setMaxListeners(100); this.kind = kind; this._mediaStreamTrack = mediaTrack; @@ -59,6 +72,13 @@ export abstract class Track extends (EventEmitter as new () => TypedEventEmitter this.source = Track.Source.Unknown; } + protected get logContext() { + return { + ...this.loggerContextCb?.(), + ...getLogContextFromTrack(this), + }; + } + /** current receive bits per second */ get currentBitrate(): number { return this._currentBitrate; @@ -224,6 +244,16 @@ export abstract class Track extends (EventEmitter as new () => TypedEventEmitter } } + /** @internal */ + updateLoggerOptions(loggerOptions: LoggerOptions) { + if (loggerOptions.loggerName) { + this.log = getLogger(loggerOptions.loggerName); + } + if (loggerOptions.loggerContextCb) { + this.loggerContextCb = loggerOptions.loggerContextCb; + } + } + private recycleElement(element: HTMLMediaElement) { if (element instanceof HTMLAudioElement) { // we only need to re-use a single element diff --git a/src/room/track/TrackPublication.ts b/src/room/track/TrackPublication.ts index 92ab33eba3..5dab2ec688 100644 --- a/src/room/track/TrackPublication.ts +++ b/src/room/track/TrackPublication.ts @@ -1,16 +1,18 @@ import { EventEmitter } from 'events'; import type TypedEventEmitter from 'typed-emitter'; -import log from '../../logger'; +import log, { LoggerNames, getLogger } from '../../logger'; import { Encryption_Type } from '../../proto/livekit_models_pb'; import type { SubscriptionError, TrackInfo } from '../../proto/livekit_models_pb'; import type { UpdateSubscription, UpdateTrackSettings } from '../../proto/livekit_rtc_pb'; import { TrackEvent } from '../events'; +import type { LoggerOptions } from '../types'; import LocalAudioTrack from './LocalAudioTrack'; import LocalVideoTrack from './LocalVideoTrack'; import RemoteAudioTrack from './RemoteAudioTrack'; import type RemoteTrack from './RemoteTrack'; import RemoteVideoTrack from './RemoteVideoTrack'; import { Track } from './Track'; +import { getLogContextFromTrack } from './utils'; export class TrackPublication extends (EventEmitter as new () => TypedEventEmitter) { kind: Track.Kind; @@ -39,8 +41,14 @@ export class TrackPublication extends (EventEmitter as new () => TypedEventEmitt protected encryption: Encryption_Type = Encryption_Type.NONE; - constructor(kind: Track.Kind, id: string, name: string) { + protected log = log; + + private loggerContextCb?: LoggerOptions['loggerContextCb']; + + constructor(kind: Track.Kind, id: string, name: string, loggerOptions?: LoggerOptions) { super(); + this.log = getLogger(loggerOptions?.loggerName ?? LoggerNames.Publication); + this.loggerContextCb = this.loggerContextCb; this.setMaxListeners(100); this.kind = kind; this.trackSid = id; @@ -64,6 +72,13 @@ export class TrackPublication extends (EventEmitter as new () => TypedEventEmitt } } + protected get logContext() { + return { + ...this.loggerContextCb?.(), + ...getLogContextFromTrack(this), + }; + } + get isMuted(): boolean { return this.metadataMuted; } @@ -121,7 +136,7 @@ export class TrackPublication extends (EventEmitter as new () => TypedEventEmitt } this.encryption = info.encryption; this.trackInfo = info; - log.debug('update publication info', { info }); + this.log.debug('update publication info', { ...this.logContext, info }); } } diff --git a/src/room/track/utils.ts b/src/room/track/utils.ts index c17be4fcf0..00c8021475 100644 --- a/src/room/track/utils.ts +++ b/src/room/track/utils.ts @@ -209,3 +209,24 @@ export function getTrackPublicationInfo( }); return infos; } + +export function getLogContextFromTrack(track: Track | TrackPublication): Record { + if (track instanceof Track) { + return { + trackSid: track.sid, + trackSource: track.source, + trackMuted: track.isMuted, + trackEnabled: track.mediaStreamTrack.enabled, + trackKind: track.kind, + }; + } else { + return { + trackSid: track.trackSid, + trackName: track.trackName, + track: track.track ? getLogContextFromTrack(track.track) : undefined, + trackEnabled: track.isEnabled, + trackEncrypted: track.isEncrypted, + trackMimeType: track.mimeType, + }; + } +} diff --git a/src/room/types.ts b/src/room/types.ts index 0dd2064594..befb0454ad 100644 --- a/src/room/types.ts +++ b/src/room/types.ts @@ -41,3 +41,8 @@ export type SimulationScenario = // this can be used to test application behavior when congested or // to disable congestion control entirely (by setting bandwidth to 100Mbps) | 'subscriber-bandwidth'; + +export type LoggerOptions = { + loggerName?: string; + loggerContextCb?: () => Record; +}; From ef228a7f9ffb5da7acd37a9d3970bc7d97f7ebd2 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Wed, 10 Jan 2024 00:13:42 -0800 Subject: [PATCH 26/28] Improve default screen sharing FPS, limiting capturing surface (#972) --- .changeset/little-yaks-shop.md | 5 +++++ example/sample.ts | 2 ++ package.json | 2 +- src/room/participant/LocalParticipant.ts | 24 +++++++++++++++++++++-- src/room/participant/publishUtils.test.ts | 4 ++-- src/room/participant/publishUtils.ts | 5 +++-- src/room/track/create.ts | 7 ++++--- src/room/track/options.ts | 17 +++++++++++----- src/room/track/utils.ts | 3 ++- src/room/utils.ts | 5 +++++ 10 files changed, 58 insertions(+), 16 deletions(-) create mode 100644 .changeset/little-yaks-shop.md diff --git a/.changeset/little-yaks-shop.md b/.changeset/little-yaks-shop.md new file mode 100644 index 0000000000..d3fa56c21b --- /dev/null +++ b/.changeset/little-yaks-shop.md @@ -0,0 +1,5 @@ +--- +'livekit-client': patch +--- + +Default screenshare capture resolution to 1080p diff --git a/example/sample.ts b/example/sample.ts index 2a9911bd17..7a45186fd0 100644 --- a/example/sample.ts +++ b/example/sample.ts @@ -19,6 +19,7 @@ import { RoomConnectOptions, RoomEvent, RoomOptions, + ScreenSharePresets, Track, TrackPublication, VideoCaptureOptions, @@ -95,6 +96,7 @@ const appActions = { dtx: true, red: true, forceStereo: false, + screenShareEncoding: ScreenSharePresets.h1080fps30.encoding, }, videoCaptureDefaults: { resolution: VideoPresets.h720.resolution, diff --git a/package.json b/package.json index b007a52785..29da8b7357 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "build:watch": "rollup --watch --config rollup.config.js", "build-docs": "typedoc", "proto": "protoc --es_out src/proto --es_opt target=ts -I./protocol ./protocol/livekit_rtc.proto ./protocol/livekit_models.proto", - "sample": "vite example -c vite.config.js", + "sample": "vite example -c vite.config.mjs", "lint": "eslint src", "test": "vitest run src", "deploy": "gh-pages -d example/dist", diff --git a/src/room/participant/LocalParticipant.ts b/src/room/participant/LocalParticipant.ts index b9dce84156..33aebd2f93 100644 --- a/src/room/participant/LocalParticipant.ts +++ b/src/room/participant/LocalParticipant.ts @@ -31,7 +31,7 @@ import type { TrackPublishOptions, VideoCaptureOptions, } from '../track/options'; -import { VideoPresets, isBackupCodec } from '../track/options'; +import { ScreenSharePresets, VideoPresets, isBackupCodec } from '../track/options'; import { constraintsForOptions, getLogContextFromTrack, @@ -40,7 +40,16 @@ import { screenCaptureToDisplayMediaStreamOptions, } from '../track/utils'; import type { DataPublishOptions } from '../types'; -import { Future, isFireFox, isSVCCodec, isSafari, isWeb, supportsAV1, supportsVP9 } from '../utils'; +import { + Future, + isFireFox, + isSVCCodec, + isSafari, + isSafari17, + isWeb, + supportsAV1, + supportsVP9, +} from '../utils'; import Participant from './Participant'; import type { ParticipantTrackPermission } from './ParticipantTrackPermission'; import { trackPermissionToProto } from './ParticipantTrackPermission'; @@ -457,6 +466,13 @@ export default class LocalParticipant extends Participant { throw new DeviceUnsupportedError('getDisplayMedia not supported'); } + if (options.resolution === undefined && !isSafari17()) { + // we need to constrain the dimensions, otherwise it could lead to low bitrate + // due to encoding a huge video. Encoding such large surfaces is really expensive + // unfortunately Safari 17 has a but and cannot be constrained by default + options.resolution = ScreenSharePresets.h1080fps30.resolution; + } + const constraints = screenCaptureToDisplayMediaStreamOptions(options); const stream: MediaStream = await navigator.mediaDevices.getDisplayMedia(constraints); @@ -469,6 +485,10 @@ export default class LocalParticipant extends Participant { loggerContextCb: () => this.logContext, }); screenVideo.source = Track.Source.ScreenShare; + if (options.contentHint) { + screenVideo.mediaStreamTrack.contentHint = options.contentHint; + } + const localTracks: Array = [screenVideo]; if (stream.getAudioTracks().length > 0) { this.emit(ParticipantEvent.AudioStreamAcquired); diff --git a/src/room/participant/publishUtils.test.ts b/src/room/participant/publishUtils.test.ts index 602e410fa4..1580084e4e 100644 --- a/src/room/participant/publishUtils.test.ts +++ b/src/room/participant/publishUtils.test.ts @@ -183,7 +183,7 @@ describe('screenShareSimulcastDefaults', () => { ); expect(defaultSimulcastLayers[0].width).toBe(640); expect(defaultSimulcastLayers[0].height).toBe(360); - expect(defaultSimulcastLayers[0].encoding.maxFramerate).toBe(3); - expect(defaultSimulcastLayers[0].encoding.maxBitrate).toBe(150_000); + expect(defaultSimulcastLayers[0].encoding.maxFramerate).toBe(15); + expect(defaultSimulcastLayers[0].encoding.maxBitrate).toBe(375000); }); }); diff --git a/src/room/participant/publishUtils.ts b/src/room/participant/publishUtils.ts index 7116e631ad..9139fb7873 100644 --- a/src/room/participant/publishUtils.ts +++ b/src/room/participant/publishUtils.ts @@ -46,7 +46,7 @@ export const defaultSimulcastPresets43 = [VideoPresets43.h180, VideoPresets43.h3 /* @internal */ export const computeDefaultScreenShareSimulcastPresets = (fromPreset: VideoPreset) => { - const layers = [{ scaleResolutionDownBy: 2, fps: 3 }]; + const layers = [{ scaleResolutionDownBy: 2, fps: fromPreset.encoding.maxFramerate }]; return layers.map( (t) => new VideoPreset( @@ -56,7 +56,8 @@ export const computeDefaultScreenShareSimulcastPresets = (fromPreset: VideoPrese 150_000, Math.floor( fromPreset.encoding.maxBitrate / - (t.scaleResolutionDownBy ** 2 * ((fromPreset.encoding.maxFramerate ?? 30) / t.fps)), + (t.scaleResolutionDownBy ** 2 * + ((fromPreset.encoding.maxFramerate ?? 30) / (t.fps ?? 30))), ), ), t.fps, diff --git a/src/room/track/create.ts b/src/room/track/create.ts index 4d6be2501e..1eaccb68e8 100644 --- a/src/room/track/create.ts +++ b/src/room/track/create.ts @@ -2,17 +2,18 @@ import DeviceManager from '../DeviceManager'; import { audioDefaults, videoDefaults } from '../defaults'; import { DeviceUnsupportedError, TrackInvalidError } from '../errors'; import { mediaTrackToLocalTrack } from '../participant/publishUtils'; +import { isSafari17 } from '../utils'; import LocalAudioTrack from './LocalAudioTrack'; import type LocalTrack from './LocalTrack'; import LocalVideoTrack from './LocalVideoTrack'; import { Track } from './Track'; -import { ScreenSharePresets } from './options'; import type { AudioCaptureOptions, CreateLocalTracksOptions, ScreenShareCaptureOptions, VideoCaptureOptions, } from './options'; +import { ScreenSharePresets } from './options'; import { constraintsForOptions, mergeDefaultOptions, @@ -116,8 +117,8 @@ export async function createLocalScreenTracks( if (options === undefined) { options = {}; } - if (options.resolution === undefined) { - options.resolution = ScreenSharePresets.h1080fps15.resolution; + if (options.resolution === undefined && !isSafari17()) { + options.resolution = ScreenSharePresets.h1080fps30.resolution; } if (navigator.mediaDevices.getDisplayMedia === undefined) { diff --git a/src/room/track/options.ts b/src/room/track/options.ts index f4cbc60b48..cedc75c28e 100644 --- a/src/room/track/options.ts +++ b/src/room/track/options.ts @@ -169,9 +169,10 @@ export interface ScreenShareCaptureOptions { video?: true | { displaySurface?: 'window' | 'browser' | 'monitor' }; /** - * capture resolution, defaults to screen resolution - * NOTE: In Safari 17, specifying any resolution at all would lead to a low-resolution - * capture. https://bugs.webkit.org/show_bug.cgi?id=263015 + * capture resolution, defaults to 1080 for all browsers other than Safari + * On Safari 17, default resolution is not capped, due to a bug, specifying + * any resolution at all would lead to a low-resolution capture. + * https://bugs.webkit.org/show_bug.cgi?id=263015 */ resolution?: VideoResolution; @@ -187,6 +188,9 @@ export interface ScreenShareCaptureOptions { /** specifies whether the browser should include the system audio among the possible audio sources offered to the user */ systemAudio?: 'include' | 'exclude'; + /** specify the type of content, see: https://www.w3.org/TR/mst-content-hint/#video-content-hints */ + contentHint?: 'detail' | 'text' | 'motion'; + /** * Experimental option to control whether the audio playing in a tab will continue to be played out of a user's * local speakers when the tab is captured. @@ -367,9 +371,12 @@ export const VideoPresets43 = { export const ScreenSharePresets = { h360fps3: new VideoPreset(640, 360, 200_000, 3, 'medium'), - h720fps5: new VideoPreset(1280, 720, 400_000, 5, 'medium'), + h360fps15: new VideoPreset(640, 360, 400_000, 15, 'medium'), + h720fps5: new VideoPreset(1280, 720, 800_000, 5, 'medium'), h720fps15: new VideoPreset(1280, 720, 1_500_000, 15, 'medium'), h720fps30: new VideoPreset(1280, 720, 2_000_000, 30, 'medium'), h1080fps15: new VideoPreset(1920, 1080, 2_500_000, 15, 'medium'), - h1080fps30: new VideoPreset(1920, 1080, 4_000_000, 30, 'medium'), + h1080fps30: new VideoPreset(1920, 1080, 5_000_000, 30, 'medium'), + // original resolution, without resizing + original: new VideoPreset(0, 0, 7_000_000, 30, 'medium'), } as const; diff --git a/src/room/track/utils.ts b/src/room/track/utils.ts index 00c8021475..ed7bf6db5f 100644 --- a/src/room/track/utils.ts +++ b/src/room/track/utils.ts @@ -155,7 +155,8 @@ export function screenCaptureToDisplayMediaStreamOptions( options: ScreenShareCaptureOptions, ): DisplayMediaStreamOptions { let videoConstraints: MediaTrackConstraints | boolean = options.video ?? true; - if (options.resolution) { + // treat 0 as uncapped + if (options.resolution && options.resolution.width > 0 && options.resolution.height > 0) { videoConstraints = typeof videoConstraints === 'boolean' ? {} : videoConstraints; if (isSafari()) { videoConstraints = { diff --git a/src/room/utils.ts b/src/room/utils.ts index 228ef72cda..5cd1bb2741 100644 --- a/src/room/utils.ts +++ b/src/room/utils.ts @@ -148,6 +148,11 @@ export function isSafari(): boolean { return getBrowser()?.name === 'Safari'; } +export function isSafari17(): boolean { + const b = getBrowser(); + return b?.name === 'Safari' && b.version.startsWith('17.'); +} + export function isMobile(): boolean { if (!isWeb()) return false; return /Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent); From bc7d407b92d69f24218331cb102daa683761298e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 10:24:57 +0100 Subject: [PATCH 27/28] Version Packages (#987) Co-authored-by: github-actions[bot] --- .changeset/big-turkeys-lay.md | 5 ----- .changeset/eleven-poets-own.md | 5 ----- .changeset/little-yaks-shop.md | 5 ----- CHANGELOG.md | 10 ++++++++++ package.json | 2 +- 5 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 .changeset/big-turkeys-lay.md delete mode 100644 .changeset/eleven-poets-own.md delete mode 100644 .changeset/little-yaks-shop.md diff --git a/.changeset/big-turkeys-lay.md b/.changeset/big-turkeys-lay.md deleted file mode 100644 index 8e64eda2f8..0000000000 --- a/.changeset/big-turkeys-lay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"livekit-client": patch ---- - -Fix stopping old track in `setMediaStreamTrack` diff --git a/.changeset/eleven-poets-own.md b/.changeset/eleven-poets-own.md deleted file mode 100644 index 6ab84bea37..0000000000 --- a/.changeset/eleven-poets-own.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"livekit-client": patch ---- - -Add class level configurable logger diff --git a/.changeset/little-yaks-shop.md b/.changeset/little-yaks-shop.md deleted file mode 100644 index d3fa56c21b..0000000000 --- a/.changeset/little-yaks-shop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'livekit-client': patch ---- - -Default screenshare capture resolution to 1080p diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cab7ca3c4..491c79e789 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 1.15.7 + +### Patch Changes + +- Fix stopping old track in `setMediaStreamTrack` - [#980](https://github.com/livekit/client-sdk-js/pull/980) ([@mpnri](https://github.com/mpnri)) + +- Add class level configurable logger - [#988](https://github.com/livekit/client-sdk-js/pull/988) ([@lukasIO](https://github.com/lukasIO)) + +- Default screenshare capture resolution to 1080p - [#972](https://github.com/livekit/client-sdk-js/pull/972) ([@davidzhao](https://github.com/davidzhao)) + ## 1.15.6 ### Patch Changes diff --git a/package.json b/package.json index 29da8b7357..92d88eb492 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "livekit-client", - "version": "1.15.6", + "version": "1.15.7", "description": "JavaScript/TypeScript client SDK for LiveKit", "main": "./dist/livekit-client.umd.js", "unpkg": "./dist/livekit-client.umd.js", From 63e14ad59abd53758535f34566643076b7403589 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Wed, 10 Jan 2024 11:08:00 +0100 Subject: [PATCH 28/28] Change publishData signature (#946) * change publishData signature * Create plenty-sloths-rule.md * rename destination to destinations * fix renaming * rename to destinationIdentities --- .changeset/plenty-sloths-rule.md | 5 ++ src/room/participant/LocalParticipant.ts | 60 ++++-------------------- src/room/types.ts | 15 ++++-- 3 files changed, 24 insertions(+), 56 deletions(-) create mode 100644 .changeset/plenty-sloths-rule.md diff --git a/.changeset/plenty-sloths-rule.md b/.changeset/plenty-sloths-rule.md new file mode 100644 index 0000000000..cc38f7cc3a --- /dev/null +++ b/.changeset/plenty-sloths-rule.md @@ -0,0 +1,5 @@ +--- +"livekit-client": major +--- + +Change publishData signature diff --git a/src/room/participant/LocalParticipant.ts b/src/room/participant/LocalParticipant.ts index 33aebd2f93..be938d9eb4 100644 --- a/src/room/participant/LocalParticipant.ts +++ b/src/room/participant/LocalParticipant.ts @@ -53,7 +53,6 @@ import { import Participant from './Participant'; import type { ParticipantTrackPermission } from './ParticipantTrackPermission'; import { trackPermissionToProto } from './ParticipantTrackPermission'; -import RemoteParticipant from './RemoteParticipant'; import { computeTrackBackupEncodings, computeVideoEncodings, @@ -1130,64 +1129,21 @@ export default class LocalParticipant extends Participant { * participant in the room if the destination field in publishOptions is empty * * @param data Uint8Array of the payload. To send string data, use TextEncoder.encode - * @param kind whether to send this as reliable or lossy. - * For data that you need delivery guarantee (such as chat messages), use Reliable. - * For data that should arrive as quickly as possible, but you are ok with dropped - * packets, use Lossy. - * @param publishOptions optionally specify a `topic` and `destination` + * @param options optionally specify a `reliable`, `topic` and `destination` */ - async publishData( - data: Uint8Array, - kind: DataPacket_Kind, - publishOptions?: DataPublishOptions, - ): Promise; - /** - * Publish a new data payload to the room. Data will be forwarded to each - * participant in the room if the destination argument is empty - * - * @param data Uint8Array of the payload. To send string data, use TextEncoder.encode - * @param kind whether to send this as reliable or lossy. - * For data that you need delivery guarantee (such as chat messages), use Reliable. - * For data that should arrive as quickly as possible, but you are ok with dropped - * packets, use Lossy. - * @param destination the participants who will receive the message - */ - async publishData( - data: Uint8Array, - kind: DataPacket_Kind, - destination?: RemoteParticipant[] | string[], - ): Promise; - - async publishData( - data: Uint8Array, - kind: DataPacket_Kind, - publishOptions: DataPublishOptions | RemoteParticipant[] | string[] = {}, - ) { - const destination = Array.isArray(publishOptions) - ? publishOptions - : publishOptions?.destination; - const destinationSids: string[] = []; - - const topic = !Array.isArray(publishOptions) ? publishOptions.topic : undefined; - - if (destination !== undefined) { - destination.forEach((val: any) => { - if (val instanceof RemoteParticipant) { - destinationSids.push(val.sid); - } else { - destinationSids.push(val); - } - }); - } + async publishData(data: Uint8Array, options: DataPublishOptions = {}): Promise { + const kind = options.reliable ? DataPacket_Kind.RELIABLE : DataPacket_Kind.LOSSY; + const destinationIdentities = options.destinationIdentities; + const topic = options.topic; const packet = new DataPacket({ - kind, + kind: kind, value: { case: 'user', value: new UserPacket({ - participantSid: this.sid, + participantIdentity: this.identity, payload: data, - destinationSids: destinationSids, + destinationIdentities, topic, }), }, diff --git a/src/room/types.ts b/src/room/types.ts index befb0454ad..0a36af9cc9 100644 --- a/src/room/types.ts +++ b/src/room/types.ts @@ -1,5 +1,3 @@ -import type RemoteParticipant from './participant/RemoteParticipant'; - export type SimulationOptions = { publish?: { audio?: boolean; @@ -15,8 +13,17 @@ export type SimulationOptions = { }; export type DataPublishOptions = { - /** the participants who will receive the message, will be sent to every one if empty */ - destination?: RemoteParticipant[] | string[]; + /** + * whether to send this as reliable or lossy. + * For data that you need delivery guarantee (such as chat messages), use Reliable. + * For data that should arrive as quickly as possible, but you are ok with dropped + * packets, use Lossy. + */ + reliable?: boolean; + /** + * the identities of participants who will receive the message, will be sent to every one if empty + */ + destinationIdentities?: string[]; /** the topic under which the message gets published */ topic?: string; };