diff --git a/.github/workflows/check-pr.yml b/.github/workflows/check-pr.yml index 65150ebd..1673181c 100644 --- a/.github/workflows/check-pr.yml +++ b/.github/workflows/check-pr.yml @@ -29,4 +29,4 @@ jobs: - run: pnpm lint - run: pnpm build - run: npx tsc - working-directory: ./p2p-media-loader-demo + working-directory: ./demo diff --git a/.gitignore b/.gitignore index c733dd9e..8d108250 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ pnpm-debug.log* lerna-debug.log* node_modules -/p2p-media-loader-demo/dist +/demo/dist /packages/*/dist /packages/*/lib /packages/*/build diff --git a/p2p-media-loader-demo/.eslintrc.cjs b/demo/.eslintrc.cjs similarity index 100% rename from p2p-media-loader-demo/.eslintrc.cjs rename to demo/.eslintrc.cjs diff --git a/p2p-media-loader-demo/.prettierignore b/demo/.prettierignore similarity index 100% rename from p2p-media-loader-demo/.prettierignore rename to demo/.prettierignore diff --git a/p2p-media-loader-demo/README.md b/demo/README.md similarity index 100% rename from p2p-media-loader-demo/README.md rename to demo/README.md diff --git a/p2p-media-loader-demo/index.html b/demo/index.html similarity index 100% rename from p2p-media-loader-demo/index.html rename to demo/index.html diff --git a/p2p-media-loader-demo/package.json b/demo/package.json similarity index 91% rename from p2p-media-loader-demo/package.json rename to demo/package.json index 39b8e15f..b9eaeeff 100644 --- a/p2p-media-loader-demo/package.json +++ b/demo/package.json @@ -21,11 +21,11 @@ }, "devDependencies": { "@types/dplayer": "^1.25.5", - "@types/react": "^18.2.45", + "@types/react": "^18.2.47", "@types/react-dom": "^18.2.18", "@vitejs/plugin-react": "^4.2.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", - "vite-plugin-node-polyfills": "^0.18.0" + "vite-plugin-node-polyfills": "^0.19.0" } } diff --git a/p2p-media-loader-demo/src/App.tsx b/demo/src/App.tsx similarity index 99% rename from p2p-media-loader-demo/src/App.tsx rename to demo/src/App.tsx index e3c6b214..4864a29a 100644 --- a/p2p-media-loader-demo/src/App.tsx +++ b/demo/src/App.tsx @@ -133,7 +133,7 @@ function App() { const initHlsDPlayer = (url: string) => { if (!hlsEngine.current) return; - const engine = hlsEngine.current!; + const engine = hlsEngine.current; const player = new DPlayer({ container: containerRef.current, video: { diff --git a/p2p-media-loader-demo/src/declarations.d.ts b/demo/src/declarations.d.ts similarity index 100% rename from p2p-media-loader-demo/src/declarations.d.ts rename to demo/src/declarations.d.ts diff --git a/p2p-media-loader-demo/src/global.d.ts b/demo/src/global.d.ts similarity index 100% rename from p2p-media-loader-demo/src/global.d.ts rename to demo/src/global.d.ts diff --git a/p2p-media-loader-demo/src/main.tsx b/demo/src/main.tsx similarity index 100% rename from p2p-media-loader-demo/src/main.tsx rename to demo/src/main.tsx diff --git a/p2p-media-loader-demo/src/vite-env.d.ts b/demo/src/vite-env.d.ts similarity index 100% rename from p2p-media-loader-demo/src/vite-env.d.ts rename to demo/src/vite-env.d.ts diff --git a/p2p-media-loader-demo/tsconfig.json b/demo/tsconfig.json similarity index 100% rename from p2p-media-loader-demo/tsconfig.json rename to demo/tsconfig.json diff --git a/p2p-media-loader-demo/tsconfig.node.json b/demo/tsconfig.node.json similarity index 100% rename from p2p-media-loader-demo/tsconfig.node.json rename to demo/tsconfig.node.json diff --git a/p2p-media-loader-demo/vite.config.ts b/demo/vite.config.ts similarity index 84% rename from p2p-media-loader-demo/vite.config.ts rename to demo/vite.config.ts index d00bebd0..0831c3c4 100644 --- a/p2p-media-loader-demo/vite.config.ts +++ b/demo/vite.config.ts @@ -3,5 +3,6 @@ import react from "@vitejs/plugin-react"; import { nodePolyfills } from "vite-plugin-node-polyfills"; export default defineConfig({ + server: { open: true, host: true }, plugins: [nodePolyfills(), react()], }); diff --git a/package.json b/package.json index a63eb716..3f234c04 100644 --- a/package.json +++ b/package.json @@ -15,14 +15,14 @@ }, "devDependencies": { "@types/debug": "^4.1.12", - "@typescript-eslint/eslint-plugin": "^6.15.0", - "@typescript-eslint/parser": "^6.15.0", + "@typescript-eslint/eslint-plugin": "^6.18.1", + "@typescript-eslint/parser": "^6.18.1", "eslint": "^8.56.0", - "eslint-plugin-prettier": "^5.1.2", + "eslint-plugin-prettier": "^5.1.3", "prettier": "^3.1.1", "rimraf": "^5.0.5", "typescript": "^5.3.3", - "vite": "^5.0.10" + "vite": "^5.0.11" }, "dependencies": { "debug": "^4.3.4" diff --git a/packages/p2p-media-loader-core/src/bandwidth-calculator.ts b/packages/p2p-media-loader-core/src/bandwidth-calculator.ts index d5657ce0..c8cc5e54 100644 --- a/packages/p2p-media-loader-core/src/bandwidth-calculator.ts +++ b/packages/p2p-media-loader-core/src/bandwidth-calculator.ts @@ -1,15 +1,17 @@ -const CLEAR_THRESHOLD_MS = 3000; - export class BandwidthCalculator { private simultaneousLoadingsCount = 0; private readonly bytes: number[] = []; + private readonly loadingOnlyTimestamps: number[] = []; private readonly timestamps: number[] = []; private noLoadingsTotalTime = 0; private allLoadingsStoppedTimestamp = 0; + constructor(private readonly clearThresholdMs = 10000) {} + addBytes(bytesLength: number, now = performance.now()) { this.bytes.push(bytesLength); - this.timestamps.push(now - this.noLoadingsTotalTime); + this.loadingOnlyTimestamps.push(now - this.noLoadingsTotalTime); + this.timestamps.push(now); } startLoading(now = performance.now()) { @@ -28,17 +30,26 @@ export class BandwidthCalculator { this.allLoadingsStoppedTimestamp = now; } - getBandwidthForLastNSeconds(seconds: number) { - if (!this.timestamps.length) return 0; + getBandwidthLoadingOnly( + seconds: number, + ignoreThresholdTimestamp = Number.NEGATIVE_INFINITY + ) { + if (!this.loadingOnlyTimestamps.length) return 0; const milliseconds = seconds * 1000; - const lastItemTimestamp = this.timestamps[this.timestamps.length - 1]; + const lastItemTimestamp = + this.loadingOnlyTimestamps[this.loadingOnlyTimestamps.length - 1]; let lastCountedTimestamp = lastItemTimestamp; const threshold = lastItemTimestamp - milliseconds; let totalBytes = 0; for (let i = this.bytes.length - 1; i >= 0; i--) { - const timestamp = this.timestamps[i]; - if (timestamp < threshold) break; + const timestamp = this.loadingOnlyTimestamps[i]; + if ( + timestamp < threshold || + this.timestamps[i] < ignoreThresholdTimestamp + ) { + break; + } lastCountedTimestamp = timestamp; totalBytes += this.bytes[i]; } @@ -46,18 +57,41 @@ export class BandwidthCalculator { return (totalBytes * 8000) / (lastItemTimestamp - lastCountedTimestamp); } + getBandwidth( + seconds: number, + ignoreThresholdTimestamp = Number.NEGATIVE_INFINITY, + now = performance.now() + ) { + if (!this.timestamps.length) return 0; + const milliseconds = seconds * 1000; + const threshold = now - milliseconds; + let lastCountedTimestamp = now; + let totalBytes = 0; + + for (let i = this.bytes.length - 1; i >= 0; i--) { + const timestamp = this.timestamps[i]; + if (timestamp < threshold || timestamp < ignoreThresholdTimestamp) break; + lastCountedTimestamp = timestamp; + totalBytes += this.bytes[i]; + } + + return (totalBytes * 8000) / (now - lastCountedTimestamp); + } + clearStale() { - if (!this.timestamps.length) return; + if (!this.loadingOnlyTimestamps.length) return; const threshold = - this.timestamps[this.timestamps.length - 1] - CLEAR_THRESHOLD_MS; + this.loadingOnlyTimestamps[this.loadingOnlyTimestamps.length - 1] - + this.clearThresholdMs; let samplesToRemove = 0; - for (const timestamp of this.timestamps) { + for (const timestamp of this.loadingOnlyTimestamps) { if (timestamp > threshold) break; samplesToRemove++; } this.bytes.splice(0, samplesToRemove); + this.loadingOnlyTimestamps.splice(0, samplesToRemove); this.timestamps.splice(0, samplesToRemove); } } diff --git a/packages/p2p-media-loader-core/src/core.ts b/packages/p2p-media-loader-core/src/core.ts index 0ad32550..80a12ecf 100644 --- a/packages/p2p-media-loader-core/src/core.ts +++ b/packages/p2p-media-loader-core/src/core.ts @@ -6,9 +6,10 @@ import { Settings, SegmentBase, CoreEventHandlers, + BandwidthCalculators, + StreamDetails, } from "./types"; import * as StreamUtils from "./utils/stream"; -import { LinkedMap } from "./linked-map"; import { BandwidthCalculator } from "./bandwidth-calculator"; import { EngineCallbacks } from "./requests/engine-request"; import { SegmentsMemoryStorage } from "./segments-storage"; @@ -31,10 +32,17 @@ export class Core { httpErrorRetries: 3, p2pErrorRetries: 3, }; - private readonly bandwidthCalculator = new BandwidthCalculator(); + private readonly bandwidthCalculators: BandwidthCalculators = { + all: new BandwidthCalculator(), + http: new BandwidthCalculator(), + }; private segmentStorage?: SegmentsMemoryStorage; private mainStreamLoader?: HybridLoader; private secondaryStreamLoader?: HybridLoader; + private streamDetails: StreamDetails = { + isLive: false, + activeLevelBitrate: 0, + }; constructor(private readonly eventHandlers?: CoreEventHandlers) {} @@ -58,7 +66,7 @@ export class Core { if (this.streams.has(stream.localId)) return; this.streams.set(stream.localId, { ...stream, - segments: new LinkedMap(), + segments: new Map(), }); } @@ -72,7 +80,7 @@ export class Core { addSegments?.forEach((s) => { const segment = { ...s, stream }; - stream.segments.addToEnd(segment.localId, segment); + stream.segments.set(segment.localId, segment); }); removeSegmentIds?.forEach((id) => stream.segments.delete(id)); this.mainStreamLoader?.updateStream(stream); @@ -105,6 +113,18 @@ export class Core { this.secondaryStreamLoader?.updatePlayback(position, rate); } + setActiveLevelBitrate(bitrate: number) { + if (bitrate !== this.streamDetails.activeLevelBitrate) { + this.streamDetails.activeLevelBitrate = bitrate; + this.mainStreamLoader?.notifyLevelChanged(); + this.secondaryStreamLoader?.notifyLevelChanged(); + } + } + + setIsLive(isLive: boolean) { + this.streamDetails.isLive = isLive; + } + destroy(): void { this.streams.clear(); this.mainStreamLoader?.destroy(); @@ -114,6 +134,7 @@ export class Core { this.secondaryStreamLoader = undefined; this.segmentStorage = undefined; this.manifestResponseUrl = undefined; + this.streamDetails = { isLive: false, activeLevelBitrate: 0 }; } private identifySegment(segmentId: string): Segment { @@ -143,8 +164,9 @@ export class Core { return new HybridLoader( manifestResponseUrl, segment, + this.streamDetails as Required, this.settings, - this.bandwidthCalculator, + this.bandwidthCalculators, this.segmentStorage, this.eventHandlers ); diff --git a/packages/p2p-media-loader-core/src/hybrid-loader.ts b/packages/p2p-media-loader-core/src/hybrid-loader.ts index 22f6518b..44876783 100644 --- a/packages/p2p-media-loader-core/src/hybrid-loader.ts +++ b/packages/p2p-media-loader-core/src/hybrid-loader.ts @@ -1,8 +1,13 @@ import { Segment, StreamWithSegments } from "./index"; import { HttpRequestExecutor } from "./http-loader"; import { SegmentsMemoryStorage } from "./segments-storage"; -import { Settings, CoreEventHandlers, Playback } from "./types"; -import { BandwidthCalculator } from "./bandwidth-calculator"; +import { + Settings, + CoreEventHandlers, + Playback, + BandwidthCalculators, + StreamDetails, +} from "./types"; import { P2PLoadersContainer } from "./p2p/loaders-container"; import { RequestsContainer } from "./requests/request-container"; import { EngineRequest, EngineCallbacks } from "./requests/engine-request"; @@ -11,37 +16,38 @@ import * as LoggerUtils from "./utils/logger"; import * as StreamUtils from "./utils/stream"; import * as Utils from "./utils/utils"; import debug from "debug"; +import { QueueItem } from "./utils/queue"; const FAILED_ATTEMPTS_CLEAR_INTERVAL = 60000; export class HybridLoader { private readonly requests: RequestsContainer; + private engineRequest?: EngineRequest; private readonly p2pLoaders: P2PLoadersContainer; - private storageCleanUpIntervalId?: number; - private lastRequestedSegment: Readonly; private readonly playback: Playback; - private lastQueueProcessingTimeStamp?: number; private readonly segmentAvgDuration: number; - private randomHttpDownloadInterval!: number; private readonly logger: debug.Debugger; + private storageCleanUpIntervalId?: number; + private levelChangedTimestamp?: number; + private lastQueueProcessingTimeStamp?: number; + private randomHttpDownloadInterval?: number; private isProcessQueueMicrotaskCreated = false; - private readonly engineRequests = new Map(); constructor( private streamManifestUrl: string, - requestedSegment: Segment, + private lastRequestedSegment: Readonly, + private readonly streamDetails: Required>, private readonly settings: Settings, - private readonly bandwidthCalculator: BandwidthCalculator, + private readonly bandwidthCalculators: BandwidthCalculators, private readonly segmentStorage: SegmentsMemoryStorage, private readonly eventHandlers?: Pick ) { - this.lastRequestedSegment = requestedSegment; - const activeStream = requestedSegment.stream; - this.playback = { position: requestedSegment.startTime, rate: 1 }; + const activeStream = this.lastRequestedSegment.stream; + this.playback = { position: this.lastRequestedSegment.startTime, rate: 1 }; this.segmentAvgDuration = StreamUtils.getSegmentAvgDuration(activeStream); this.requests = new RequestsContainer( this.requestProcessQueueMicrotask, - this.bandwidthCalculator, + this.bandwidthCalculators, this.playback, this.settings ); @@ -59,7 +65,7 @@ export class HybridLoader { }); this.p2pLoaders = new P2PLoadersContainer( this.streamManifestUrl, - requestedSegment.stream, + this.lastRequestedSegment.stream, this.requests, this.segmentStorage, this.settings @@ -96,11 +102,11 @@ export class HybridLoader { if (data) { engineRequest.resolve( data, - this.bandwidthCalculator.getBandwidthForLastNSeconds(3) + this.bandwidthCalculators.all.getBandwidthLoadingOnly(3) ); } } else { - this.engineRequests.set(segment, engineRequest); + this.engineRequest = engineRequest; } this.requestProcessQueueMicrotask(); } @@ -127,13 +133,19 @@ export class HybridLoader { }); }; - private processRequests(queueSegmentIds: Set) { + private processRequests( + queueSegmentIds: Set, + queueDownloadRatio: number + ) { const { stream } = this.lastRequestedSegment; const { httpErrorRetries } = this.settings; const now = performance.now(); for (const request of this.requests.items()) { const { type, status, segment, isHandledByProcessQueue } = request; - const engineRequest = this.engineRequests.get(segment); + const engineRequest = + this.engineRequest?.segment === segment + ? this.engineRequest + : undefined; switch (status) { case "loading": @@ -148,11 +160,13 @@ export class HybridLoader { if (type === "http") { this.p2pLoaders.currentLoader.broadcastAnnouncement(); } - engineRequest?.resolve( - request.data, - this.bandwidthCalculator.getBandwidthForLastNSeconds(3) - ); - this.engineRequests.delete(segment); + if (engineRequest) { + engineRequest.resolve( + request.data, + this.getBandwidth(queueDownloadRatio) + ); + this.engineRequest = undefined; + } this.requests.remove(request); void this.segmentStorage.storeSegment(request.segment, request.data); this.eventHandlers?.onSegmentLoaded?.(request.data.byteLength, type); @@ -169,8 +183,8 @@ export class HybridLoader { request.failedAttempts.httpAttemptsCount >= httpErrorRetries && engineRequest ) { + this.engineRequest = undefined; engineRequest.reject(); - this.engineRequests.delete(segment); } break; @@ -195,18 +209,8 @@ export class HybridLoader { } private processQueue() { - const { queue, queueSegmentIds } = QueueUtils.generateQueue({ - lastRequestedSegment: this.lastRequestedSegment, - playback: this.playback, - settings: this.settings, - skipSegment: (segment) => { - return ( - this.requests.get(segment)?.status === "succeed" || - this.segmentStorage.hasSegment(segment) - ); - }, - }); - this.processRequests(queueSegmentIds); + const { queue, queueSegmentIds, queueDownloadRatio } = this.generateQueue(); + this.processRequests(queueSegmentIds, queueDownloadRatio); const { simultaneousHttpDownloads, @@ -214,19 +218,22 @@ export class HybridLoader { httpErrorRetries, } = this.settings; - for (const engineRequest of this.engineRequests.values()) { - if (this.requests.executingHttpCount >= simultaneousHttpDownloads) break; - const request = this.requests.get(engineRequest.segment); + if ( + this.engineRequest?.shouldBeStartedImmediately && + this.engineRequest.status === "pending" && + this.requests.executingHttpCount < simultaneousHttpDownloads + ) { + const { engineRequest } = this; + const { segment } = engineRequest; + const request = this.requests.get(segment); if ( - !queueSegmentIds.has(engineRequest.segment.localId) && - engineRequest.status === "pending" && - (!request || - request.status === "not-started" || - (request.status === "failed" && - request.failedAttempts.httpAttemptsCount < - this.settings.httpErrorRetries)) + !request || + request.status === "not-started" || + (request.status === "failed" && + request.failedAttempts.httpAttemptsCount < + this.settings.httpErrorRetries) ) { - void this.loadThroughHttp(engineRequest.segment); + void this.loadThroughHttp(segment); } } @@ -275,7 +282,6 @@ export class HybridLoader { ) { void this.loadThroughP2P(segment); } - break; } if (statuses.isP2PDownloadable) { if (request?.status === "loading") continue; @@ -285,6 +291,7 @@ export class HybridLoader { } if ( + this.p2pLoaders.currentLoader.isSegmentLoadedBySomeone(segment) && this.abortLastP2PLoadingInQueueAfterItem(queue, segment) && this.requests.executingP2PCount < simultaneousP2PDownloads ) { @@ -297,17 +304,13 @@ export class HybridLoader { // api method for engines abortSegmentRequest(segmentLocalId: string) { - for (const engineRequest of this.engineRequests.values()) { - if (segmentLocalId === engineRequest.segment.localId) { - engineRequest.abort(); - this.engineRequests.delete(engineRequest.segment); - this.logger( - "abort: ", - LoggerUtils.getSegmentString(engineRequest.segment) - ); - break; - } - } + if (this.engineRequest?.segment.localId !== segmentLocalId) return; + this.engineRequest.abort(); + this.logger( + "abort: ", + LoggerUtils.getSegmentString(this.engineRequest.segment) + ); + this.engineRequest = undefined; } private async loadThroughHttp(segment: Segment) { @@ -324,36 +327,47 @@ export class HybridLoader { const { simultaneousHttpDownloads, httpErrorRetries } = this.settings; const p2pLoader = this.p2pLoaders.currentLoader; const connectedPeersAmount = p2pLoader.connectedPeersAmount; + if ( this.requests.executingHttpCount >= simultaneousHttpDownloads || !connectedPeersAmount ) { return; } - const { queue } = QueueUtils.generateQueue({ - lastRequestedSegment: this.lastRequestedSegment, - playback: this.playback, - settings: this.settings, - skipSegment: (segment, statuses) => { - const request = this.requests.get(segment); - return ( - !statuses.isHttpDownloadable || - this.segmentStorage.hasSegment(segment) || - request?.type !== undefined || - (request?.failedAttempts.httpAttemptsCount ?? 0) >= - httpErrorRetries || - p2pLoader.isLoadingOrLoadedBySomeone(segment) - ); - }, - }); - if (!queue.length) return; + + const segmentsToLoad: Segment[] = []; + for (const { segment, statuses } of QueueUtils.generateQueue( + this.lastRequestedSegment, + this.playback, + this.settings + )) { + if ( + !statuses.isHttpDownloadable || + p2pLoader.isSegmentLoadingOrLoadedBySomeone(segment) || + this.segmentStorage.hasSegment(segment) + ) { + continue; + } + const request = this.requests.get(segment); + if ( + request && + (request.status === "loading" || + request.status === "succeed" || + (request.failedAttempts.httpAttemptsCount ?? 0) >= httpErrorRetries) + ) { + continue; + } + segmentsToLoad.push(segment); + } + + if (!segmentsToLoad.length) return; const peersAmount = connectedPeersAmount + 1; - const probability = Math.min(queue.length / peersAmount, 1); + const probability = Math.min(segmentsToLoad.length / peersAmount, 1); const shouldLoad = Math.random() < probability; if (!shouldLoad) return; - const item = Utils.getRandomItem(queue); - void this.loadThroughHttp(item.segment); + const segment = Utils.getRandomItem(segmentsToLoad); + void this.loadThroughHttp(segment); } private abortLastHttpLoadingInQueueAfterItem( @@ -386,6 +400,71 @@ export class HybridLoader { return false; } + private generateQueue() { + const queue: QueueItem[] = []; + const queueSegmentIds = new Set(); + let maxPossibleLength = 0; + let alreadyLoadedAmount = 0; + for (const item of QueueUtils.generateQueue( + this.lastRequestedSegment, + this.playback, + this.settings + )) { + maxPossibleLength++; + const { segment } = item; + if ( + this.segmentStorage.hasSegment(segment) || + this.requests.get(segment)?.status === "succeed" + ) { + alreadyLoadedAmount++; + continue; + } + queue.push(item); + queueSegmentIds.add(segment.localId); + } + + return { + queue, + queueSegmentIds, + maxPossibleLength, + alreadyLoadedAmount, + queueDownloadRatio: + maxPossibleLength !== 0 ? alreadyLoadedAmount / maxPossibleLength : 0, + }; + } + + private getBandwidth(queueDownloadRatio: number) { + const { http, all } = this.bandwidthCalculators; + const { activeLevelBitrate } = this.streamDetails; + if (this.streamDetails.activeLevelBitrate === 0) { + return all.getBandwidthLoadingOnly(3); + } + const { levelChangedTimestamp } = this; + + const bandwidth = Math.max( + all.getBandwidth(30, levelChangedTimestamp), + all.getBandwidth(60, levelChangedTimestamp), + all.getBandwidth(90, levelChangedTimestamp) + ); + if (queueDownloadRatio >= 0.8 || bandwidth >= activeLevelBitrate * 0.9) { + return Math.max( + all.getBandwidthLoadingOnly(1), + all.getBandwidthLoadingOnly(3), + all.getBandwidthLoadingOnly(5) + ); + } + const httpRealBandwidth = Math.max( + http.getBandwidthLoadingOnly(1), + http.getBandwidthLoadingOnly(3), + http.getBandwidthLoadingOnly(5) + ); + return Math.max(bandwidth, httpRealBandwidth); + } + + notifyLevelChanged() { + this.levelChangedTimestamp = performance.now(); + } + updatePlayback(position: number, rate: number) { const isRateChanged = this.playback.rate !== rate; const isPositionChanged = this.playback.position !== position; @@ -400,6 +479,7 @@ export class HybridLoader { if (isRateChanged && rate !== 0) this.playback.rate = rate; if (isPositionSignificantlyChanged) { this.logger("position significantly changed"); + this.engineRequest?.markAsShouldBeStartedImmediately(); } void this.requestProcessQueueMicrotask(isPositionSignificantlyChanged); } diff --git a/packages/p2p-media-loader-core/src/linked-map.ts b/packages/p2p-media-loader-core/src/linked-map.ts deleted file mode 100644 index 78ee364d..00000000 --- a/packages/p2p-media-loader-core/src/linked-map.ts +++ /dev/null @@ -1,78 +0,0 @@ -type LinkedObject = { - item: [K, V]; - prev?: LinkedObject; - next?: LinkedObject; -}; - -export class LinkedMap { - private readonly map = new Map>(); - private _first?: LinkedObject; - private _last?: LinkedObject; - - get size() { - return this.map.size; - } - - get(key: K): V | undefined { - return this.map.get(key)?.item[1]; - } - - has(key: K): boolean { - return this.map.has(key); - } - - addToEnd(key: K, value: V) { - const item: LinkedObject = { item: [key, value] }; - if (this._last) { - this._last.next = item; - item.prev = this._last; - } - this._last = item; - if (!this._first) this._first = item; - this.map.set(key, item); - } - - delete(key: K) { - if (!this.map.size) return; - const value = this.map.get(key); - if (!value) return; - - const { next, prev } = value; - if (this._first?.item[0] === key) this._first = next; - if (this._last?.item[0] === key) this._last = prev; - if (prev) prev.next = next; - if (next) next.prev = prev; - this.map.delete(key); - } - - *values(key?: K) { - let value = key ? this.map.get(key) : this._first; - if (value === undefined) return; - while (value?.item !== undefined) { - yield value.item[1]; - value = value.next; - } - } - - *valuesBackwards(key?: K) { - let value = key ? this.map.get(key) : this._last; - if (value === undefined) return; - while (value?.item !== undefined) { - yield value.item[1]; - value = value.prev; - } - } - - *keys(): Generator { - let value = this._first; - if (value === undefined) return; - while (value?.item !== undefined) { - yield value.item[0]; - value = value.next; - } - } - - getNextTo(key: K): [K, V] | undefined { - return this.map.get(key)?.next?.item; - } -} diff --git a/packages/p2p-media-loader-core/src/p2p/loader.ts b/packages/p2p-media-loader-core/src/p2p/loader.ts index f08b01cf..92c9ab84 100644 --- a/packages/p2p-media-loader-core/src/p2p/loader.ts +++ b/packages/p2p-media-loader-core/src/p2p/loader.ts @@ -58,13 +58,20 @@ export class P2PLoader { peer.downloadSegment(request); } - isLoadingOrLoadedBySomeone(segment: Segment): boolean { + isSegmentLoadingOrLoadedBySomeone(segment: Segment): boolean { for (const peer of this.trackerClient.peers()) { if (peer.getSegmentStatus(segment)) return true; } return false; } + isSegmentLoadedBySomeone(segment: Segment): boolean { + for (const peer of this.trackerClient.peers()) { + if (peer.getSegmentStatus(segment) === "loaded") return true; + } + return false; + } + get connectedPeersAmount() { let count = 0; // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/packages/p2p-media-loader-core/src/p2p/tracker-client.ts b/packages/p2p-media-loader-core/src/p2p/tracker-client.ts index 6f862655..9f42dc48 100644 --- a/packages/p2p-media-loader-core/src/p2p/tracker-client.ts +++ b/packages/p2p-media-loader-core/src/p2p/tracker-client.ts @@ -42,16 +42,14 @@ export class P2PTrackerClient { port: 6881, announce: [ // "wss://tracker.novage.com.ua", + "wss://tracker.webtorrent.dev", + "wss://tracker.files.fm:7073/announce", "wss://tracker.openwebtorrent.com", ], rtcConfig: { iceServers: [ - { - urls: [ - "stun:stun.l.google.com:19302", - "stun:global.stun.twilio.com:3478", - ], - }, + { urls: "stun:stun.l.google.com:19302" }, + { urls: "stun:global.stun.twilio.com:3478" }, ], }, }); diff --git a/packages/p2p-media-loader-core/src/requests/engine-request.ts b/packages/p2p-media-loader-core/src/requests/engine-request.ts index 57b276fb..ba269dc4 100644 --- a/packages/p2p-media-loader-core/src/requests/engine-request.ts +++ b/packages/p2p-media-loader-core/src/requests/engine-request.ts @@ -7,6 +7,7 @@ export type EngineCallbacks = { export class EngineRequest { private _status: "pending" | "succeed" | "failed" | "aborted" = "pending"; + private _shouldBeStartedImmediately = false; constructor( readonly segment: Segment, @@ -17,28 +18,30 @@ export class EngineRequest { return this._status; } + get shouldBeStartedImmediately() { + return this._shouldBeStartedImmediately; + } + resolve(data: ArrayBuffer, bandwidth: number) { - this.throwErrorIfNotPending(); + if (this._status !== "pending") return; this._status = "succeed"; this.engineCallbacks.onSuccess({ data, bandwidth }); } reject() { - this.throwErrorIfNotPending(); + if (this._status !== "pending") return; this._status = "failed"; this.engineCallbacks.onError(new CoreRequestError("failed")); } abort() { - this.throwErrorIfNotPending(); + if (this._status !== "pending") return; this._status = "aborted"; this.engineCallbacks.onError(new CoreRequestError("aborted")); } - private throwErrorIfNotPending() { - if (this._status !== "pending") { - throw new Error("Engine request has been already settled."); - } + markAsShouldBeStartedImmediately() { + this._shouldBeStartedImmediately = true; } } diff --git a/packages/p2p-media-loader-core/src/requests/request-container.ts b/packages/p2p-media-loader-core/src/requests/request-container.ts index bc0edca2..8168c865 100644 --- a/packages/p2p-media-loader-core/src/requests/request-container.ts +++ b/packages/p2p-media-loader-core/src/requests/request-container.ts @@ -1,5 +1,4 @@ -import { Segment, Settings, Playback } from "../types"; -import { BandwidthCalculator } from "../bandwidth-calculator"; +import { Segment, Settings, Playback, BandwidthCalculators } from "../types"; import { Request } from "./request"; export class RequestsContainer { @@ -7,7 +6,7 @@ export class RequestsContainer { constructor( private readonly requestProcessQueueCallback: () => void, - private readonly bandwidthCalculator: BandwidthCalculator, + private readonly bandwidthCalculators: BandwidthCalculators, private readonly playback: Playback, private readonly settings: Settings ) {} @@ -38,7 +37,7 @@ export class RequestsContainer { request = new Request( segment, this.requestProcessQueueCallback, - this.bandwidthCalculator, + this.bandwidthCalculators, this.playback, this.settings ); diff --git a/packages/p2p-media-loader-core/src/requests/request.ts b/packages/p2p-media-loader-core/src/requests/request.ts index bfc14d4c..a8a22a17 100644 --- a/packages/p2p-media-loader-core/src/requests/request.ts +++ b/packages/p2p-media-loader-core/src/requests/request.ts @@ -1,5 +1,4 @@ -import { Segment, Playback } from "../types"; -import { BandwidthCalculator } from "../bandwidth-calculator"; +import { Segment, Playback, BandwidthCalculators } from "../types"; import * as StreamUtils from "../utils/stream"; import * as Utils from "../utils/utils"; import * as LoggerUtils from "../utils/logger"; @@ -67,7 +66,7 @@ export class Request { constructor( readonly segment: Segment, private readonly requestProcessQueueCallback: () => void, - private readonly bandwidthCalculator: BandwidthCalculator, + private readonly bandwidthCalculators: BandwidthCalculators, private readonly playback: Playback, private readonly settings: StreamUtils.PlaybackTimeWindowsSettings ) { @@ -160,7 +159,8 @@ export class Request { loadedBytes: 0, startTimestamp: performance.now(), }; - this.bandwidthCalculator.startLoading(); + this.manageBandwidthCalculatorsState("start"); + const { notReceivingBytesTimeoutMs, abort } = controls; this._abortRequestCallback = abort; @@ -194,9 +194,8 @@ export class Request { ); this._abortRequestCallback?.(new RequestError("abort")); this._abortRequestCallback = undefined; - this.currentAttempt = undefined; + this.manageBandwidthCalculatorsState("stop"); this.notReceivingBytesTimeout.clear(); - this.bandwidthCalculator.stopLoading(); } private abortOnTimeout = () => { @@ -213,7 +212,7 @@ export class Request { error, }); this.notReceivingBytesTimeout.clear(); - this.bandwidthCalculator.stopLoading(); + this.manageBandwidthCalculatorsState("stop"); this.requestProcessQueueCallback(); }; @@ -228,7 +227,7 @@ export class Request { error, }); this.notReceivingBytesTimeout.clear(); - this.bandwidthCalculator.stopLoading(); + this.manageBandwidthCalculatorsState("stop"); this.requestProcessQueueCallback(); }; @@ -236,7 +235,7 @@ export class Request { this.throwErrorIfNotLoadingStatus(); if (!this.currentAttempt) return; - this.bandwidthCalculator.stopLoading(); + this.manageBandwidthCalculatorsState("stop"); this.notReceivingBytesTimeout.clear(); this.finalData = Utils.joinChunks(this.bytes); this.setStatus("succeed"); @@ -253,11 +252,15 @@ export class Request { if (!this.currentAttempt || !this.progress) return; this.notReceivingBytesTimeout.restart(); - this.bandwidthCalculator.addBytes(chunk.length); + const byteLength = chunk.byteLength; + const { all: allBC, http: httpBC } = this.bandwidthCalculators; + allBC.addBytes(byteLength); + if (this.currentAttempt.type === "http") httpBC.addBytes(byteLength); + this.bytes.push(chunk); this.progress.lastLoadedChunkTimestamp = performance.now(); - this.progress.loadedBytes += chunk.length; - this._loadedBytes += chunk.length; + this.progress.loadedBytes += byteLength; + this._loadedBytes += byteLength; }; private firstBytesReceived = () => { @@ -277,6 +280,13 @@ export class Request { this._logger.color = ""; } + private manageBandwidthCalculatorsState(state: "start" | "stop") { + const { all, http } = this.bandwidthCalculators; + const method = state === "start" ? "startLoading" : "stopLoading"; + if (this.currentAttempt?.type === "http") http[method](); + all[method](); + } + static getRequestItemId(segment: Segment) { return segment.localId; } diff --git a/packages/p2p-media-loader-core/src/types.d.ts b/packages/p2p-media-loader-core/src/types.d.ts index 1f00f738..67b3ec8e 100644 --- a/packages/p2p-media-loader-core/src/types.d.ts +++ b/packages/p2p-media-loader-core/src/types.d.ts @@ -1,5 +1,5 @@ -import { LinkedMap } from "./linked-map"; import { RequestAttempt } from "./requests/request"; +import { BandwidthCalculator } from "./bandwidth-calculator"; export type StreamType = "main" | "secondary"; @@ -24,23 +24,15 @@ export type Stream = { readonly index: number; }; -export type ReadonlyLinkedMap = Pick< - LinkedMap, - "has" | "keys" | "values" | "valuesBackwards" | "size" ->; - export type StreamWithSegments< TStream extends Stream = Stream, - TMap extends ReadonlyLinkedMap = LinkedMap< - string, - Segment - >, + TMap extends ReadonlyMap = Map, > = TStream & { readonly segments: TMap; }; export type StreamWithReadonlySegments = - StreamWithSegments>; + StreamWithSegments>; export type SegmentResponse = { data: ArrayBuffer; @@ -71,3 +63,13 @@ export type Playback = { position: number; rate: number; }; + +export type BandwidthCalculators = Readonly<{ + all: BandwidthCalculator; + http: BandwidthCalculator; +}>; + +export type StreamDetails = { + isLive: boolean; + activeLevelBitrate: number; +}; diff --git a/packages/p2p-media-loader-core/src/utils/queue.ts b/packages/p2p-media-loader-core/src/utils/queue.ts index bda5a1fe..e8e7cc3d 100644 --- a/packages/p2p-media-loader-core/src/utils/queue.ts +++ b/packages/p2p-media-loader-core/src/utils/queue.ts @@ -7,47 +7,59 @@ import { export type QueueItem = { segment: Segment; statuses: SegmentPlaybackStatuses }; -export function generateQueue({ - lastRequestedSegment, - playback, - settings, - skipSegment, -}: { - lastRequestedSegment: Readonly; - playback: Readonly; - skipSegment: (segment: Segment, statuses: SegmentPlaybackStatuses) => boolean; - settings: PlaybackTimeWindowsSettings; -}): { queue: QueueItem[]; queueSegmentIds: Set } { +export function* generateQueue( + lastRequestedSegment: Readonly, + playback: Readonly, + settings: PlaybackTimeWindowsSettings +): Generator { const { localId: requestedSegmentId, stream } = lastRequestedSegment; - const queue: QueueItem[] = []; - const queueSegmentIds = new Set(); + const requestedSegment = stream.segments.get(requestedSegmentId); + if (!requestedSegment) return; - const { segments } = stream; - const isNextNotActual = (segmentId: string) => { - const next = segments.getNextTo(segmentId)?.[1]; - if (!next) return true; - const statuses = getSegmentPlaybackStatuses(next, playback, settings); - return isNotActualStatuses(statuses); - }; + const queueSegments = stream.segments.values(); - let i = 0; - for (const segment of segments.values(requestedSegmentId)) { - const statuses = getSegmentPlaybackStatuses(segment, playback, settings); - const isNotActual = isNotActualStatuses(statuses); - if (isNotActual && (i !== 0 || isNextNotActual(requestedSegmentId))) break; - i++; - if (skipSegment(segment, statuses)) continue; - - if (isNotActual) statuses.isHighDemand = true; - queue.push({ segment, statuses }); - queueSegmentIds.add(segment.localId); + let first: Segment | undefined; + + while (first !== requestedSegment) { + first = queueSegments.next().value; + } + + if (!first) return; // should never happen + + const firstStatuses = getSegmentPlaybackStatuses(first, playback, settings); + if (isNotActualStatuses(firstStatuses)) { + // for cases when engine requests segment that is a little bit + // earlier than current playhead position + // it could happen when playhead position is significantly changed by user + const second = queueSegments.next().value; + if (!second) return; + const secondStatuses = getSegmentPlaybackStatuses( + second, + playback, + settings + ); + + if (isNotActualStatuses(secondStatuses)) return; + firstStatuses.isHighDemand = true; + yield { segment: first, statuses: firstStatuses }; + yield { segment: second, statuses: secondStatuses }; + } else { + yield { segment: first, statuses: firstStatuses }; } - return { queue, queueSegmentIds }; + for (const segment of queueSegments) { + const statuses = getSegmentPlaybackStatuses(segment, playback, settings); + if (isNotActualStatuses(statuses)) break; + yield { segment, statuses }; + } } function isNotActualStatuses(statuses: SegmentPlaybackStatuses) { - const { isHighDemand, isHttpDownloadable, isP2PDownloadable } = statuses; + const { + isHighDemand = false, + isHttpDownloadable = false, + isP2PDownloadable = false, + } = statuses; return !isHighDemand && !isHttpDownloadable && !isP2PDownloadable; } diff --git a/packages/p2p-media-loader-core/src/utils/stream.ts b/packages/p2p-media-loader-core/src/utils/stream.ts index 2266c381..24c78768 100644 --- a/packages/p2p-media-loader-core/src/utils/stream.ts +++ b/packages/p2p-media-loader-core/src/utils/stream.ts @@ -7,9 +7,9 @@ import { } from "../types"; export type SegmentPlaybackStatuses = { - isHighDemand: boolean; - isHttpDownloadable: boolean; - isP2PDownloadable: boolean; + isHighDemand?: boolean; + isHttpDownloadable?: boolean; + isP2PDownloadable?: boolean; }; export type PlaybackTimeWindowsSettings = Pick< @@ -66,17 +66,13 @@ export function isSegmentActualInPlayback( segment: Readonly, playback: Playback, timeWindowsSettings: PlaybackTimeWindowsSettings -) { - const statuses = getSegmentPlaybackStatuses( - segment, - playback, - timeWindowsSettings - ); - return ( - statuses.isHighDemand || - statuses.isHttpDownloadable || - statuses.isP2PDownloadable - ); +): boolean { + const { + isHighDemand = false, + isHttpDownloadable = false, + isP2PDownloadable = false, + } = getSegmentPlaybackStatuses(segment, playback, timeWindowsSettings); + return isHighDemand || isHttpDownloadable || isP2PDownloadable; } export function getSegmentPlaybackStatuses( @@ -90,23 +86,18 @@ export function getSegmentPlaybackStatuses( p2pDownloadTimeWindow, } = timeWindowsSettings; - return { - isHighDemand: isSegmentInTimeWindow( - segment, - playback, - highDemandTimeWindow - ), - isHttpDownloadable: isSegmentInTimeWindow( - segment, - playback, - httpDownloadTimeWindow - ), - isP2PDownloadable: isSegmentInTimeWindow( - segment, - playback, - p2pDownloadTimeWindow - ), - }; + const statuses: SegmentPlaybackStatuses = {}; + if (isSegmentInTimeWindow(segment, playback, highDemandTimeWindow)) { + statuses.isHighDemand = true; + } + if (isSegmentInTimeWindow(segment, playback, httpDownloadTimeWindow)) { + statuses.isHttpDownloadable = true; + } + if (isSegmentInTimeWindow(segment, playback, p2pDownloadTimeWindow)) { + statuses.isP2PDownloadable = true; + } + + return statuses; } function isSegmentInTimeWindow( diff --git a/packages/p2p-media-loader-hlsjs/package.json b/packages/p2p-media-loader-hlsjs/package.json index 99c31160..2ef54d95 100644 --- a/packages/p2p-media-loader-hlsjs/package.json +++ b/packages/p2p-media-loader-hlsjs/package.json @@ -28,7 +28,7 @@ "type-check": "npx tsc --noEmit" }, "dependencies": { - "hls.js": "^1.4.14", + "hls.js": "^1.5.0", "p2p-media-loader-core": "workspace:*" } } diff --git a/packages/p2p-media-loader-hlsjs/src/engine.ts b/packages/p2p-media-loader-hlsjs/src/engine.ts index 35984759..2b1f48f6 100644 --- a/packages/p2p-media-loader-hlsjs/src/engine.ts +++ b/packages/p2p-media-loader-hlsjs/src/engine.ts @@ -3,6 +3,7 @@ import type { AudioTrackLoadedData, LevelUpdatedData, ManifestLoadedData, + LevelSwitchingData, } from "hls.js"; import type { HlsConfig, Events } from "hls.js"; import { FragmentLoaderBase } from "./fragment-loader"; @@ -56,6 +57,10 @@ export class Engine { "hlsManifestLoaded" as Events.MANIFEST_LOADED, this.handleManifestLoaded ); + hls[method]( + "hlsLevelSwitching" as Events.LEVEL_SWITCHING, + this.handleLevelSwitching + ); hls[method]( "hlsLevelUpdated" as Events.LEVEL_UPDATED, this.handleLevelUpdated @@ -105,10 +110,15 @@ export class Engine { this.segmentManager.processMasterManifest(data); }; + private handleLevelSwitching = (event: string, data: LevelSwitchingData) => { + if (data.bitrate) this.core.setActiveLevelBitrate(data.bitrate); + }; + private handleLevelUpdated = ( event: string, data: LevelUpdatedData | AudioTrackLoadedData ) => { + this.core.setIsLive(data.details.live); this.segmentManager.updatePlaylist(data); }; diff --git a/packages/p2p-media-loader-shaka/package.json b/packages/p2p-media-loader-shaka/package.json index d0c13538..2abbe79d 100644 --- a/packages/p2p-media-loader-shaka/package.json +++ b/packages/p2p-media-loader-shaka/package.json @@ -29,6 +29,6 @@ }, "dependencies": { "p2p-media-loader-core": "workspace:*", - "shaka-player": "^4.7.1" + "shaka-player": "^4.7.3" } } diff --git a/packages/p2p-media-loader-shaka/src/engine.ts b/packages/p2p-media-loader-shaka/src/engine.ts index a9b44fac..4adbfa17 100644 --- a/packages/p2p-media-loader-shaka/src/engine.ts +++ b/packages/p2p-media-loader-shaka/src/engine.ts @@ -52,6 +52,7 @@ export class Engine { if (networkingEngine) { if (type === "register") { const p2pml: P2PMLShakaData = { + player: this.player, shaka: this.shaka, core: this.core, streamInfo: this.streamInfo, @@ -74,9 +75,23 @@ export class Engine { player[method]("loaded", this.handlePlayerLoaded); player[method]("loading", this.destroyCurrentStreamContext); player[method]("unloading", this.handlePlayerUnloading); + player[method]("adaptation", this.onVariantChanged); + player[method]("variantchanged", this.onVariantChanged); + }; + + private onVariantChanged = () => { + if (!this.player) return; + const activeTrack = this.player + .getVariantTracks() + .find((track) => track.active); + + if (!activeTrack) return; + this.core.setActiveLevelBitrate(activeTrack.bandwidth); }; private handlePlayerLoaded = () => { + if (!this.player) return; + this.core.setIsLive(this.player.isLive()); this.updateMediaElementEventHandlers("register"); }; diff --git a/packages/p2p-media-loader-shaka/src/manifest-parser-decorator.ts b/packages/p2p-media-loader-shaka/src/manifest-parser-decorator.ts index e457cead..e921456f 100644 --- a/packages/p2p-media-loader-shaka/src/manifest-parser-decorator.ts +++ b/packages/p2p-media-loader-shaka/src/manifest-parser-decorator.ts @@ -12,6 +12,7 @@ export class ManifestParserDecorator implements shaka.extern.ManifestParser { private readonly debug = Debug("p2pml-shaka:manifest-parser"); private readonly isHls: boolean; private segmentManager?: SegmentManager; + private player?: shaka.Player; constructor( shaka: Readonly, @@ -35,6 +36,7 @@ export class ManifestParserDecorator implements shaka.extern.ManifestParser { private setP2PMediaLoaderData(p2pml?: P2PMLShakaData) { if (!p2pml) return; this.segmentManager = p2pml.segmentManager; + this.player = p2pml.player; p2pml.streamInfo.protocol = this.isHls ? "hls" : "dash"; } @@ -103,12 +105,13 @@ export class ManifestParserDecorator implements shaka.extern.ManifestParser { } } - private hookSegmentIndex(stream: shaka.extern.Stream): void { + private hookSegmentIndex(stream: HookedStream): void { const { segmentManager } = this; if (!segmentManager) return; const substituteSegmentIndexGet = ( - segmentIndex: shaka.media.SegmentIndex + segmentIndex: shaka.media.SegmentIndex, + callFromCreateSegmentIndexMethod = false ) => { let prevReference: shaka.media.SegmentReference | null = null; let prevFirstItemReference: shaka.media.SegmentReference; @@ -117,7 +120,12 @@ export class ManifestParserDecorator implements shaka.extern.ManifestParser { const originalGet = segmentIndex.get; const customGet = (position: number) => { const reference = originalGet.call(segmentIndex, position); - if (reference === prevReference) return reference; + if ( + reference === prevReference || + (!this.player?.isLive() && stream.isSegmentIndexAlreadyRead) + ) { + return reference; + } prevReference = reference; segmentIndex.get = originalGet; @@ -137,12 +145,20 @@ export class ManifestParserDecorator implements shaka.extern.ManifestParser { // Segment index have been updated segmentManager.updateStreamSegments(stream, references); + stream.isSegmentIndexAlreadyRead = true; this.debug(`Stream ${stream.id} is updated`); } catch (err) { // This catch is intentionally left blank. // [...segmentIndex] throws an error when segmentIndex inner array is empty } finally { - segmentIndex.get = customGet; + // do not set custom get again is segment index is already read and stream is VOD + if ( + !stream.isSegmentIndexAlreadyRead || + !!this.player?.isLive() || + !callFromCreateSegmentIndexMethod + ) { + segmentIndex.get = customGet; + } } return reference; }; @@ -159,7 +175,7 @@ export class ManifestParserDecorator implements shaka.extern.ManifestParser { stream.createSegmentIndex = async () => { const result = await createSegmentIndexOriginal.call(stream); if (!stream.segmentIndex) return result; - substituteSegmentIndexGet(stream.segmentIndex); + substituteSegmentIndexGet(stream.segmentIndex, true); return result; }; } diff --git a/packages/p2p-media-loader-shaka/src/segment-manager.ts b/packages/p2p-media-loader-shaka/src/segment-manager.ts index ba8f6dfe..999c584c 100644 --- a/packages/p2p-media-loader-shaka/src/segment-manager.ts +++ b/packages/p2p-media-loader-shaka/src/segment-manager.ts @@ -5,7 +5,6 @@ import { StreamWithReadonlySegments, SegmentBase, StreamType, - ReadonlyLinkedMap, } from "p2p-media-loader-core"; // The minimum time interval (in seconds) between segments to assign unique IDs. @@ -143,7 +142,7 @@ function* itemsBackwards(items: T[]) { } function* nSegmentsBackwards( - segments: ReadonlyLinkedMap, + segments: ReadonlyMap, amount: number ) { let i = 0; diff --git a/packages/p2p-media-loader-shaka/src/types.d.ts b/packages/p2p-media-loader-shaka/src/types.d.ts index f7cf270d..fc8b8561 100644 --- a/packages/p2p-media-loader-shaka/src/types.d.ts +++ b/packages/p2p-media-loader-shaka/src/types.d.ts @@ -11,6 +11,7 @@ export type StreamInfo = { type HookedStream = shaka.extern.Stream & { streamUrl?: string; mediaSequenceTimeMap?: Map; + isSegmentIndexAlreadyRead?: boolean; }; export type Stream = CoreStream & { @@ -20,6 +21,7 @@ export type Stream = CoreStream & { export type Shaka = typeof window.shaka; type P2PMLShakaData = { + player: Shaka.Player; core: Core; shaka: Shaka; streamInfo: StreamInfo; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 052e89e3..298007ef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,8 @@ -lockfileVersion: '6.0' +lockfileVersion: '6.1' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false importers: @@ -12,17 +16,17 @@ importers: specifier: ^4.1.12 version: 4.1.12 '@typescript-eslint/eslint-plugin': - specifier: ^6.15.0 - version: 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: ^6.18.1 + version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: ^6.15.0 - version: 6.15.0(eslint@8.56.0)(typescript@5.3.3) + specifier: ^6.18.1 + version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: specifier: ^8.56.0 version: 8.56.0 eslint-plugin-prettier: - specifier: ^5.1.2 - version: 5.1.2(eslint@8.56.0)(prettier@3.1.1) + specifier: ^5.1.3 + version: 5.1.3(eslint@8.56.0)(prettier@3.1.1) prettier: specifier: ^3.1.1 version: 3.1.1 @@ -33,10 +37,10 @@ importers: specifier: ^5.3.3 version: 5.3.3 vite: - specifier: ^5.0.10 - version: 5.0.10 + specifier: ^5.0.11 + version: 5.0.11 - p2p-media-loader-demo: + demo: dependencies: dplayer: specifier: ^1.27.1 @@ -61,14 +65,14 @@ importers: specifier: ^1.25.5 version: 1.25.5 '@types/react': - specifier: ^18.2.45 - version: 18.2.45 + specifier: ^18.2.47 + version: 18.2.47 '@types/react-dom': specifier: ^18.2.18 version: 18.2.18 '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.0.10) + version: 4.2.1(vite@5.0.11) eslint-plugin-react-hooks: specifier: ^4.6.0 version: 4.6.0(eslint@8.56.0) @@ -76,8 +80,8 @@ importers: specifier: ^0.4.5 version: 0.4.5(eslint@8.56.0) vite-plugin-node-polyfills: - specifier: ^0.18.0 - version: 0.18.0(vite@5.0.10) + specifier: ^0.19.0 + version: 0.19.0(vite@5.0.11) packages/p2p-media-loader-core: dependencies: @@ -91,8 +95,8 @@ importers: packages/p2p-media-loader-hlsjs: dependencies: hls.js: - specifier: ^1.4.14 - version: 1.4.14 + specifier: ^1.5.0 + version: 1.5.0 p2p-media-loader-core: specifier: workspace:* version: link:../p2p-media-loader-core @@ -103,8 +107,8 @@ importers: specifier: workspace:* version: link:../p2p-media-loader-core shaka-player: - specifier: ^4.7.1 - version: 4.7.1 + specifier: ^4.7.3 + version: 4.7.3 packages: @@ -118,7 +122,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.20 dev: true /@babel/code-frame@7.23.5: @@ -134,19 +138,19 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.6: - resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} + /@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.6 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helpers': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helpers': 7.23.8 '@babel/parser': 7.23.6 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 + '@babel/traverse': 7.23.7 '@babel/types': 7.23.6 convert-source-map: 2.0.0 debug: 4.3.4 @@ -163,7 +167,7 @@ packages: dependencies: '@babel/types': 7.23.6 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 dev: true @@ -205,13 +209,13 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): + /@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.6 + '@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 @@ -238,11 +242,6 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - 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'} @@ -253,22 +252,17 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} - 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/helpers@7.23.6: - resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} + /@babel/helpers@7.23.8: + resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 + '@babel/traverse': 7.23.7 '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color @@ -283,14 +277,6 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.22.5: - resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/parser@7.23.6: resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} @@ -299,31 +285,31 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/runtime@7.22.5: - resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==} + /@babel/runtime@7.23.8: + resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.11 + regenerator-runtime: 0.14.1 dev: false /@babel/template@7.22.15: @@ -335,8 +321,8 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/traverse@7.23.6: - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + /@babel/traverse@7.23.7: + resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 @@ -353,15 +339,6 @@ packages: - supports-color dev: true - /@babel/types@7.22.5: - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 - dev: true - /@babel/types@7.23.6: resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} @@ -371,8 +348,8 @@ packages: to-fast-properties: 2.0.0 dev: true - /@esbuild/aix-ppc64@0.19.10: - resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==} + /@esbuild/aix-ppc64@0.19.11: + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -380,8 +357,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.10: - resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==} + /@esbuild/android-arm64@0.19.11: + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -389,8 +366,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.10: - resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==} + /@esbuild/android-arm@0.19.11: + resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -398,8 +375,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.10: - resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==} + /@esbuild/android-x64@0.19.11: + resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -407,8 +384,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.10: - resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==} + /@esbuild/darwin-arm64@0.19.11: + resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -416,8 +393,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.10: - resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==} + /@esbuild/darwin-x64@0.19.11: + resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -425,8 +402,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.10: - resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==} + /@esbuild/freebsd-arm64@0.19.11: + resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -434,8 +411,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.10: - resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==} + /@esbuild/freebsd-x64@0.19.11: + resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -443,8 +420,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.10: - resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==} + /@esbuild/linux-arm64@0.19.11: + resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -452,8 +429,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.10: - resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==} + /@esbuild/linux-arm@0.19.11: + resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -461,8 +438,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.10: - resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==} + /@esbuild/linux-ia32@0.19.11: + resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -470,8 +447,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.10: - resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==} + /@esbuild/linux-loong64@0.19.11: + resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -479,8 +456,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.10: - resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==} + /@esbuild/linux-mips64el@0.19.11: + resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -488,8 +465,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.10: - resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==} + /@esbuild/linux-ppc64@0.19.11: + resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -497,8 +474,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.10: - resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==} + /@esbuild/linux-riscv64@0.19.11: + resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -506,8 +483,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.10: - resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==} + /@esbuild/linux-s390x@0.19.11: + resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -515,8 +492,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.10: - resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==} + /@esbuild/linux-x64@0.19.11: + resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -524,8 +501,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.10: - resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==} + /@esbuild/netbsd-x64@0.19.11: + resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -533,8 +510,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.10: - resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==} + /@esbuild/openbsd-x64@0.19.11: + resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -542,8 +519,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.10: - resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==} + /@esbuild/sunos-x64@0.19.11: + resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -551,8 +528,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.10: - resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==} + /@esbuild/win32-arm64@0.19.11: + resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -560,8 +537,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.10: - resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==} + /@esbuild/win32-ia32@0.19.11: + resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -569,8 +546,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.10: - resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==} + /@esbuild/win32-x64@0.19.11: + resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -653,11 +630,11 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.20 dev: true - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true @@ -666,19 +643,15 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true - /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@nodelib/fs.scandir@2.1.5: @@ -699,7 +672,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.16.0 dev: true /@pkgjs/parseargs@0.11.0: @@ -709,16 +682,9 @@ packages: dev: true optional: true - /@pkgr/utils@2.4.2: - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + /@pkgr/core@0.1.0: + resolution: {integrity: sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 dev: true /@rollup/plugin-inject@5.0.5: @@ -730,123 +696,123 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.4 + '@rollup/pluginutils': 5.1.0 estree-walker: 2.0.2 magic-string: 0.30.5 dev: true - /@rollup/pluginutils@5.0.4: - resolution: {integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==} + /@rollup/pluginutils@5.1.0: + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true dependencies: - '@types/estree': 1.0.2 + '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.9.1: - resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==} + /@rollup/rollup-android-arm-eabi@4.9.4: + resolution: {integrity: sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.9.1: - resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==} + /@rollup/rollup-android-arm64@4.9.4: + resolution: {integrity: sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.9.1: - resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==} + /@rollup/rollup-darwin-arm64@4.9.4: + resolution: {integrity: sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.9.1: - resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==} + /@rollup/rollup-darwin-x64@4.9.4: + resolution: {integrity: sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.9.1: - resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==} + /@rollup/rollup-linux-arm-gnueabihf@4.9.4: + resolution: {integrity: sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.9.1: - resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==} + /@rollup/rollup-linux-arm64-gnu@4.9.4: + resolution: {integrity: sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.9.1: - resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==} + /@rollup/rollup-linux-arm64-musl@4.9.4: + resolution: {integrity: sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.9.1: - resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==} + /@rollup/rollup-linux-riscv64-gnu@4.9.4: + resolution: {integrity: sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.9.1: - resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==} + /@rollup/rollup-linux-x64-gnu@4.9.4: + resolution: {integrity: sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.9.1: - resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==} + /@rollup/rollup-linux-x64-musl@4.9.4: + resolution: {integrity: sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.9.1: - resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==} + /@rollup/rollup-win32-arm64-msvc@4.9.4: + resolution: {integrity: sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.9.1: - resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==} + /@rollup/rollup-win32-ia32-msvc@4.9.4: + resolution: {integrity: sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.9.1: - resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==} + /@rollup/rollup-win32-x64-msvc@4.9.4: + resolution: {integrity: sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==} cpu: [x64] os: [win32] requiresBuild: true @@ -860,7 +826,7 @@ packages: err-code: 3.0.1 get-browser-rtc: 1.1.0 queue-microtask: 1.2.3 - streamx: 2.15.1 + streamx: 2.15.6 uint8-util: 2.2.4 transitivePeerDependencies: - supports-color @@ -871,9 +837,9 @@ packages: dependencies: debug: 4.3.4 queue-microtask: 1.2.3 - streamx: 2.15.1 + streamx: 2.15.6 uint8-util: 2.2.4 - ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -883,82 +849,82 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.4 + '@types/babel__traverse': 7.20.5 dev: true /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.23.6 dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 dev: true - /@types/babel__traverse@7.20.4: - resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} + /@types/babel__traverse@7.20.5: + resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.23.6 dev: true /@types/debug@4.1.12: resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: - '@types/ms': 0.7.31 + '@types/ms': 0.7.34 dev: true /@types/dplayer@1.25.5: resolution: {integrity: sha512-p/7O94dHDo0Irn2KWIqFE+fBCA4DS7QL3jfCOjCUPBAOgppyyTjmNZjKEfiJa1M3n1oVQqG7xnPwhiIuCqOzkQ==} dev: true - /@types/estree@1.0.2: - resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true - /@types/ms@0.7.31: - resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true - /@types/prop-types@15.7.5: - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} dev: true /@types/react-dom@18.2.18: resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} dependencies: - '@types/react': 18.2.45 + '@types/react': 18.2.47 dev: true - /@types/react@18.2.45: - resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} + /@types/react@18.2.47: + resolution: {integrity: sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==} dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 - csstype: 3.1.2 + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 + csstype: 3.1.3 dev: true - /@types/scheduler@0.16.3: - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} dev: true - /@types/semver@7.5.0: - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@typescript-eslint/eslint-plugin@6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==} + /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -969,11 +935,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.15.0 - '@typescript-eslint/type-utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.15.0 + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/type-utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 @@ -986,8 +952,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.15.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==} + /@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -996,10 +962,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.15.0 - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.15.0 + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 @@ -1007,16 +973,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.15.0: - resolution: {integrity: sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==} + /@typescript-eslint/scope-manager@6.18.1: + resolution: {integrity: sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/visitor-keys': 6.15.0 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/visitor-keys': 6.18.1 dev: true - /@typescript-eslint/type-utils@6.15.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==} + /@typescript-eslint/type-utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1025,8 +991,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -1035,13 +1001,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.15.0: - resolution: {integrity: sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==} + /@typescript-eslint/types@6.18.1: + resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.15.0(typescript@5.3.3): - resolution: {integrity: sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==} + /@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3): + resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1049,11 +1015,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/visitor-keys': 6.15.0 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 + minimatch: 9.0.3 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 @@ -1061,18 +1028,18 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.15.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==} + /@typescript-eslint/utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.15.0 - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -1080,11 +1047,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.15.0: - resolution: {integrity: sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==} + /@typescript-eslint/visitor-keys@6.18.1: + resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.15.0 + '@typescript-eslint/types': 6.18.1 eslint-visitor-keys: 3.4.3 dev: true @@ -1092,18 +1059,18 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vitejs/plugin-react@4.2.1(vite@5.0.10): + /@vitejs/plugin-react@4.2.1(vite@5.0.11): resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.0.10 + vite: 5.0.11 transitivePeerDependencies: - supports-color dev: true @@ -1115,16 +1082,16 @@ packages: event-target-shim: 5.0.1 dev: false - /acorn-jsx@5.3.2(acorn@8.11.2): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.2 + acorn: 8.11.3 dev: true - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -1193,10 +1160,10 @@ packages: /assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 is-nan: 1.3.2 object-is: 1.1.5 - object.assign: 4.1.4 + object.assign: 4.1.5 util: 0.12.5 dev: true @@ -1212,7 +1179,7 @@ packages: /axios@1.2.3(debug@4.3.4): resolution: {integrity: sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==} dependencies: - follow-redirects: 1.15.2(debug@4.3.4) + follow-redirects: 1.15.4(debug@4.3.4) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -1243,11 +1210,6 @@ packages: uint8-util: 2.2.4 dev: false - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - dev: true - /bittorrent-peerid@1.3.6: resolution: {integrity: sha512-VyLcUjVMEOdSpHaCG/7odvCdLbAB1y3l9A2V6WIje24uV7FkJPrQrH/RrlFmKxP89pFVDEnE+YlHaFujlFIZsg==} dev: false @@ -1278,7 +1240,7 @@ packages: string2compact: 2.0.1 uint8-util: 2.2.4 unordered-array-remove: 1.0.2 - ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: bufferutil: 4.0.8 utf-8-validate: 5.0.10 @@ -1294,13 +1256,6 @@ packages: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} dev: true - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.52 - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -1328,7 +1283,7 @@ packages: /browser-resolve@2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} dependencies: - resolve: 1.22.6 + resolve: 1.22.8 dev: true /browserify-aes@1.2.0: @@ -1366,8 +1321,9 @@ packages: randombytes: 2.1.0 dev: true - /browserify-sign@4.2.1: - resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} + /browserify-sign@4.2.2: + resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==} + engines: {node: '>= 4'} dependencies: bn.js: 5.2.1 browserify-rsa: 4.1.0 @@ -1391,8 +1347,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001571 - electron-to-chromium: 1.4.616 + caniuse-lite: 1.0.30001576 + electron-to-chromium: 1.4.626 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -1413,25 +1369,19 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.6.1 + node-gyp-build: 4.8.0 dev: false /builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} dev: true - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: - run-applescript: 5.0.0 - dev: true - - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 dev: true /callsites@3.1.0: @@ -1439,8 +1389,8 @@ packages: engines: {node: '>=6'} dev: true - /caniuse-lite@1.0.30001571: - resolution: {integrity: sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==} + /caniuse-lite@1.0.30001576: + resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} dev: true /chalk@2.4.2: @@ -1581,7 +1531,7 @@ packages: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: browserify-cipher: 1.0.1 - browserify-sign: 4.2.1 + browserify-sign: 4.2.2 create-ecdh: 4.0.4 create-hash: 1.2.0 create-hmac: 1.1.7 @@ -1593,8 +1543,8 @@ packages: randomfill: 1.0.4 dev: true - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true /data-uri-to-buffer@4.0.1: @@ -1617,44 +1567,21 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - dev: true - - /define-data-property@1.1.0: - resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 gopd: 1.0.1 - has-property-descriptors: 1.0.0 - dev: true - - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} + has-property-descriptors: 1.0.1 dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.0 - has-property-descriptors: 1.0.0 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 dev: true @@ -1696,8 +1623,8 @@ packages: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} dev: false - /domain-browser@4.22.0: - resolution: {integrity: sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==} + /domain-browser@4.23.0: + resolution: {integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==} engines: {node: '>=10'} dev: true @@ -1715,8 +1642,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.616: - resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} + /electron-to-chromium@1.4.626: + resolution: {integrity: sha512-f7/be56VjRRQk+Ric6PmIrEtPcIqsn3tElyAu9Sh6egha2VLJ82qwkcOdcnT06W+Pb6RUulV1ckzrGbKzVcTHg==} dev: true /elliptic@6.5.4: @@ -1747,35 +1674,35 @@ packages: resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} dev: false - /esbuild@0.19.10: - resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==} + /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.10 - '@esbuild/android-arm': 0.19.10 - '@esbuild/android-arm64': 0.19.10 - '@esbuild/android-x64': 0.19.10 - '@esbuild/darwin-arm64': 0.19.10 - '@esbuild/darwin-x64': 0.19.10 - '@esbuild/freebsd-arm64': 0.19.10 - '@esbuild/freebsd-x64': 0.19.10 - '@esbuild/linux-arm': 0.19.10 - '@esbuild/linux-arm64': 0.19.10 - '@esbuild/linux-ia32': 0.19.10 - '@esbuild/linux-loong64': 0.19.10 - '@esbuild/linux-mips64el': 0.19.10 - '@esbuild/linux-ppc64': 0.19.10 - '@esbuild/linux-riscv64': 0.19.10 - '@esbuild/linux-s390x': 0.19.10 - '@esbuild/linux-x64': 0.19.10 - '@esbuild/netbsd-x64': 0.19.10 - '@esbuild/openbsd-x64': 0.19.10 - '@esbuild/sunos-x64': 0.19.10 - '@esbuild/win32-arm64': 0.19.10 - '@esbuild/win32-ia32': 0.19.10 - '@esbuild/win32-x64': 0.19.10 + '@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: @@ -1793,8 +1720,8 @@ packages: engines: {node: '>=10'} dev: true - /eslint-plugin-prettier@5.1.2(eslint@8.56.0)(prettier@3.1.1): - resolution: {integrity: sha512-dhlpWc9vOwohcWmClFcA+HjlvUpuyynYs0Rf+L/P6/0iQE6vlHW9l5bkfzN62/Stm9fbq8ku46qzde76T1xlSg==} + /eslint-plugin-prettier@5.1.3(eslint@8.56.0)(prettier@3.1.1): + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -1810,7 +1737,7 @@ packages: eslint: 8.56.0 prettier: 3.1.1 prettier-linter-helpers: 1.0.0 - synckit: 0.8.6 + synckit: 0.8.8 dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): @@ -1894,8 +1821,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true @@ -1944,36 +1871,6 @@ packages: safe-buffer: 5.2.1 dev: true - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.2.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - dev: true - /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -2005,8 +1902,8 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + /fastq@1.16.0: + resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} dependencies: reusify: 1.0.4 dev: true @@ -2016,14 +1913,14 @@ packages: engines: {node: ^12.20 || >= 14.13} dependencies: node-domexception: 1.0.0 - web-streams-polyfill: 3.2.1 + web-streams-polyfill: 3.3.2 dev: false /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.0.4 + flat-cache: 3.2.0 dev: true /fill-range@7.0.1: @@ -2041,20 +1938,21 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.7 + flatted: 3.2.9 + keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true - /follow-redirects@1.15.2(debug@4.3.4): - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + /follow-redirects@1.15.4(debug@4.3.4): + resolution: {integrity: sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -2076,7 +1974,7 @@ packages: engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 - signal-exit: 4.0.2 + signal-exit: 4.1.0 dev: true /form-data@4.0.0: @@ -2107,8 +2005,8 @@ packages: dev: true optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true /gensync@1.0.0-beta.2: @@ -2120,18 +2018,13 @@ packages: resolution: {integrity: sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==} dev: false - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: - function-bind: 1.1.1 - has: 1.0.3 + function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + hasown: 2.0.0 dev: true /glob-parent@5.1.2: @@ -2155,8 +2048,8 @@ packages: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 - minimatch: 9.0.1 - minipass: 6.0.2 + minimatch: 9.0.3 + minipass: 7.0.4 path-scurry: 1.10.1 dev: true @@ -2205,7 +2098,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 dev: true /graphemer@1.4.0: @@ -2222,10 +2115,10 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 dev: true /has-proto@1.0.1: @@ -2245,13 +2138,6 @@ packages: has-symbols: 1.0.3 dev: true - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} @@ -2268,8 +2154,15 @@ packages: minimalistic-assert: 1.0.1 dev: true - /hls.js@1.4.14: - resolution: {integrity: sha512-UppQjyvPVclg+6t2KY/Rv03h0+bA5u6zwqVoz4LAC/L0fgYmIaCD7ZCrwe8WI1Gv01be1XL0QFsRbSdIHV/Wbw==} + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /hls.js@1.5.0: + resolution: {integrity: sha512-V7jzv1c/G38kZcg6BVgimVj5g/bVMebHRrIrln6R773mIRBDnp+/knp4ntThk3T1Ztjat9n2x3Ak3BPu5wKeYA==} dev: false /hmac-drbg@1.0.1: @@ -2284,16 +2177,6 @@ packages: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true - /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true @@ -2343,7 +2226,7 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true @@ -2352,22 +2235,10 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - has: 1.0.3 - dev: true - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true + hasown: 2.0.0 dev: true /is-extglob@2.1.1: @@ -2394,19 +2265,11 @@ packages: is-extglob: 2.1.1 dev: true - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - /is-nan@1.3.2: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 dev: true @@ -2420,28 +2283,11 @@ packages: engines: {node: '>=8'} dev: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - 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-typed-array@1.1.12: resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.11 - dev: true - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 + which-typed-array: 1.1.13 dev: true /isexe@2.0.0: @@ -2478,6 +2324,10 @@ packages: hasBin: true dev: true + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true @@ -2492,6 +2342,12 @@ packages: hasBin: true dev: true + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -2518,6 +2374,11 @@ packages: js-tokens: 4.0.0 dev: false + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} + engines: {node: 14 || >=16.14} + dev: true + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -2531,11 +2392,6 @@ packages: yallist: 4.0.0 dev: true - /lru-cache@9.1.2: - resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} - engines: {node: 14 || >=16.14} - dev: true - /lru@3.1.0: resolution: {integrity: sha512-5OUtoiVIGU4VXBOshidmtOsvBIvcQR6FD/RzWSvaeHyxCGB+PCUCu+52lqMfdc0h/2CLvHhZS4TwUmMQrrMbBQ==} engines: {node: '>= 0.4.0'} @@ -2558,10 +2414,6 @@ packages: safe-buffer: 5.2.1 dev: true - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2595,16 +2447,6 @@ packages: mime-db: 1.52.0 dev: false - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true - - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true - /min-document@2.19.0: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} dependencies: @@ -2625,8 +2467,8 @@ packages: brace-expansion: 1.1.11 dev: true - /minimatch@9.0.1: - resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -2636,8 +2478,8 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: false - /minipass@6.0.2: - resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} dev: true @@ -2649,7 +2491,7 @@ packages: engines: {node: '>=8', npm: '>=5'} hasBin: true dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.23.8 global: 4.4.0 dev: false @@ -2681,10 +2523,9 @@ packages: formdata-polyfill: 4.0.10 dev: false - /node-gyp-build@4.6.1: - resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==} + /node-gyp-build@4.8.0: + resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} hasBin: true - requiresBuild: true dev: false /node-releases@2.0.14: @@ -2703,7 +2544,7 @@ packages: constants-browserify: 1.0.0 create-require: 1.1.1 crypto-browserify: 3.12.0 - domain-browser: 4.22.0 + domain-browser: 4.23.0 events: 3.3.0 https-browserify: 1.0.0 isomorphic-timers-promises: 1.0.1 @@ -2724,29 +2565,15 @@ packages: vm-browserify: 1.1.2 dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - 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 - - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true /object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 dev: true @@ -2755,11 +2582,11 @@ packages: engines: {node: '>= 0.4'} dev: true - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -2770,30 +2597,6 @@ packages: dependencies: wrappy: 1.0.2 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - 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 - - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 - dev: true - /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -2864,11 +2667,6 @@ 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 @@ -2877,8 +2675,8 @@ packages: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 9.1.2 - minipass: 6.0.2 + lru-cache: 10.1.0 + minipass: 7.0.4 dev: true /path-type@4.0.0: @@ -2913,8 +2711,8 @@ packages: find-up: 5.0.0 dev: true - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -2967,8 +2765,8 @@ packages: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true @@ -3039,8 +2837,8 @@ packages: util-deprecate: 1.0.2 dev: true - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: false /resolve-from@4.0.0: @@ -3048,11 +2846,11 @@ packages: engines: {node: '>=4'} dev: true - /resolve@1.22.6: - resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -3084,34 +2882,29 @@ packages: inherits: 2.0.4 dev: true - /rollup@4.9.1: - resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==} + /rollup@4.9.4: + resolution: {integrity: sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + dependencies: + '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.9.1 - '@rollup/rollup-android-arm64': 4.9.1 - '@rollup/rollup-darwin-arm64': 4.9.1 - '@rollup/rollup-darwin-x64': 4.9.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.9.1 - '@rollup/rollup-linux-arm64-gnu': 4.9.1 - '@rollup/rollup-linux-arm64-musl': 4.9.1 - '@rollup/rollup-linux-riscv64-gnu': 4.9.1 - '@rollup/rollup-linux-x64-gnu': 4.9.1 - '@rollup/rollup-linux-x64-musl': 4.9.1 - '@rollup/rollup-win32-arm64-msvc': 4.9.1 - '@rollup/rollup-win32-ia32-msvc': 4.9.1 - '@rollup/rollup-win32-x64-msvc': 4.9.1 + '@rollup/rollup-android-arm-eabi': 4.9.4 + '@rollup/rollup-android-arm64': 4.9.4 + '@rollup/rollup-darwin-arm64': 4.9.4 + '@rollup/rollup-darwin-x64': 4.9.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.4 + '@rollup/rollup-linux-arm64-gnu': 4.9.4 + '@rollup/rollup-linux-arm64-musl': 4.9.4 + '@rollup/rollup-linux-riscv64-gnu': 4.9.4 + '@rollup/rollup-linux-x64-gnu': 4.9.4 + '@rollup/rollup-linux-x64-musl': 4.9.4 + '@rollup/rollup-win32-arm64-msvc': 4.9.4 + '@rollup/rollup-win32-ia32-msvc': 4.9.4 + '@rollup/rollup-win32-x64-msvc': 4.9.4 fsevents: 2.3.3 dev: true - /run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} - dependencies: - execa: 5.1.1 - dev: true - /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -3148,6 +2941,16 @@ packages: lru-cache: 6.0.0 dev: true + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: true @@ -3160,8 +2963,8 @@ packages: safe-buffer: 5.2.1 dev: true - /shaka-player@4.7.1: - resolution: {integrity: sha512-UrCQ6jLOCpKTRvjEyNILiYFIfdgyOyijkhZUERamV/ldMEn5O0r9YDXviK/rTTJRNA53HpM/q8T0zBmq6oK33g==} + /shaka-player@4.7.3: + resolution: {integrity: sha512-bE/2+8rZpC8Ll2A+QMIQnHyg2LrDju3Kp2c+HjSW4ashjSvSqvkKGybATDgOoPSd45dxXn5wQr/sl6X7FqN2hA==} engines: {node: '>=14'} dependencies: eme-encryption-scheme-polyfill: 2.1.1 @@ -3182,17 +2985,13 @@ packages: /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - - /signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} dev: true @@ -3235,8 +3034,8 @@ packages: xtend: 4.0.2 dev: true - /streamx@2.15.1: - resolution: {integrity: sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==} + /streamx@2.15.6: + resolution: {integrity: sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==} dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 @@ -3288,16 +3087,6 @@ packages: ansi-regex: 6.0.1 dev: true - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true - /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -3322,11 +3111,11 @@ packages: engines: {node: '>= 0.4'} dev: true - /synckit@0.8.6: - resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} + /synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/utils': 2.4.2 + '@pkgr/core': 0.1.0 tslib: 2.6.2 dev: true @@ -3341,11 +3130,6 @@ packages: setimmediate: 1.0.5 dev: true - /titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - dev: true - /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -3403,11 +3187,6 @@ packages: resolution: {integrity: sha512-45YsfD6svkgaCBNyvD+dFHm4qFX9g3wRSIVgWVPtm2OCnphvPxzJoe20ATsiNpNJrmzHifnxm+BN5F7gFT/4gw==} dev: false - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -3422,7 +3201,7 @@ packages: /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /url@0.11.3: @@ -3437,7 +3216,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.6.1 + node-gyp-build: 4.8.0 dev: false /util-deprecate@1.0.2: @@ -3451,23 +3230,23 @@ packages: is-arguments: 1.1.1 is-generator-function: 1.0.10 is-typed-array: 1.1.12 - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 dev: true - /vite-plugin-node-polyfills@0.18.0(vite@5.0.10): - resolution: {integrity: sha512-zkdLD3gpOhLFyxYRMJ5apk0RcODhomuS3XQgExowiX8naoc251JfcP3toqnfDlMdF0xuPYahre/H38xAcq8ApA==} + /vite-plugin-node-polyfills@0.19.0(vite@5.0.11): + resolution: {integrity: sha512-AhdVxAmVnd1doUlIRGUGV6ZRPfB9BvIwDF10oCOmL742IsvsFIAV4tSMxSfu5e0Px0QeJLgWVOSbtHIvblzqMw==} peerDependencies: vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 dependencies: '@rollup/plugin-inject': 5.0.5 node-stdlib-browser: 1.2.0 - vite: 5.0.10 + vite: 5.0.11 transitivePeerDependencies: - rollup dev: true - /vite@5.0.10: - resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} + /vite@5.0.11: + resolution: {integrity: sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -3494,9 +3273,9 @@ packages: terser: optional: true dependencies: - esbuild: 0.19.10 - postcss: 8.4.32 - rollup: 4.9.1 + esbuild: 0.19.11 + postcss: 8.4.33 + rollup: 4.9.4 optionalDependencies: fsevents: 2.3.3 dev: true @@ -3505,17 +3284,17 @@ packages: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true - /web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + /web-streams-polyfill@3.3.2: + resolution: {integrity: sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==} engines: {node: '>= 8'} dev: false - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 @@ -3550,8 +3329,8 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /ws@8.14.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + /ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -3583,7 +3362,3 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 92a0fff2..7bcbe5cf 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,3 @@ packages: - - 'packages/*' - - 'p2p-media-loader-demo' + - "packages/*" + - "demo"