From b18656df5210a95da520844fc85612f329f24f31 Mon Sep 17 00:00:00 2001 From: Guy Balaam Date: Thu, 18 Dec 2025 10:41:17 +0000 Subject: [PATCH 01/12] Adding media manager and cypress test framework --- package.json | 2 +- packages/javascript/.gitignore | 1 + packages/javascript/assets/440.wav | Bin 0 -> 1764042 bytes packages/javascript/cypress.config.ts | 25 + .../javascript/cypress/component/Audio.cy.ts | 30 + .../cypress/component/Playback.cy.ts | 63 + .../javascript/cypress/component/Volume.cy.ts | 27 + .../cypress/e2e/generate-test-video.cy.ts | 21 + .../javascript/cypress/e2e/test-video.html | 115 ++ .../javascript/cypress/fixtures/example.json | 5 + packages/javascript/cypress/fixtures/out.mp4 | Bin 0 -> 38018 bytes packages/javascript/cypress/mount.ts | 14 + .../javascript/cypress/support/commands.ts | 37 + .../cypress/support/component-index.html | 12 + .../javascript/cypress/support/component.ts | 36 + packages/javascript/cypress/support/e2e.ts | 17 + packages/javascript/cypress/tsconfig.json | 10 + packages/javascript/package.json | 11 +- packages/javascript/scripts/generate-video.js | 25 + packages/javascript/src/MediaManager.ts | 58 + packages/javascript/src/StableMediaPlayer.ts | 132 ++ packages/javascript/vite.config.ts | 1 + packages/react/package.json | 2 +- packages/timesync/package.json | 2 +- packages/vite-plugin/package.json | 2 +- yarn.lock | 1271 ++++++++++++++++- 26 files changed, 1896 insertions(+), 23 deletions(-) create mode 100644 packages/javascript/assets/440.wav create mode 100644 packages/javascript/cypress.config.ts create mode 100644 packages/javascript/cypress/component/Audio.cy.ts create mode 100644 packages/javascript/cypress/component/Playback.cy.ts create mode 100644 packages/javascript/cypress/component/Volume.cy.ts create mode 100644 packages/javascript/cypress/e2e/generate-test-video.cy.ts create mode 100644 packages/javascript/cypress/e2e/test-video.html create mode 100644 packages/javascript/cypress/fixtures/example.json create mode 100644 packages/javascript/cypress/fixtures/out.mp4 create mode 100644 packages/javascript/cypress/mount.ts create mode 100644 packages/javascript/cypress/support/commands.ts create mode 100644 packages/javascript/cypress/support/component-index.html create mode 100644 packages/javascript/cypress/support/component.ts create mode 100644 packages/javascript/cypress/support/e2e.ts create mode 100644 packages/javascript/cypress/tsconfig.json create mode 100644 packages/javascript/scripts/generate-video.js create mode 100644 packages/javascript/src/MediaManager.ts create mode 100644 packages/javascript/src/StableMediaPlayer.ts create mode 100644 packages/javascript/vite.config.ts diff --git a/package.json b/package.json index 047bcd2..b6933ca 100644 --- a/package.json +++ b/package.json @@ -22,4 +22,4 @@ "vite": "^7.2.0", "ws": "^8.18.3" } -} \ No newline at end of file +} diff --git a/packages/javascript/.gitignore b/packages/javascript/.gitignore index 94b95d1..8e7e28a 100644 --- a/packages/javascript/.gitignore +++ b/packages/javascript/.gitignore @@ -2,3 +2,4 @@ node_modules dist yarn-error.log docs +cypress/screenshots \ No newline at end of file diff --git a/packages/javascript/assets/440.wav b/packages/javascript/assets/440.wav new file mode 100644 index 0000000000000000000000000000000000000000..d5882d633f17e5d53947386f5d893967c70f9b0b GIT binary patch literal 1764042 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 Ab^rhX literal 0 HcmV?d00001 diff --git a/packages/javascript/cypress.config.ts b/packages/javascript/cypress.config.ts new file mode 100644 index 0000000..cf63a32 --- /dev/null +++ b/packages/javascript/cypress.config.ts @@ -0,0 +1,25 @@ +import { defineConfig } from 'cypress'; + +export default defineConfig({ + component: { + devServer: { + framework: 'react', + bundler: 'vite', + }, + }, + + viewportHeight: 720, + viewportWidth: 1280, + + e2e: { + setupNodeEvents(on) { + // This is required to log progress to the terminal whilst generating frames + on('task', { + log(message) { + console.log(message); + return null; + }, + }); + }, + }, +}); diff --git a/packages/javascript/cypress/component/Audio.cy.ts b/packages/javascript/cypress/component/Audio.cy.ts new file mode 100644 index 0000000..12ca0dc --- /dev/null +++ b/packages/javascript/cypress/component/Audio.cy.ts @@ -0,0 +1,30 @@ +import { MediaManager } from '../../src/MediaManager'; + +describe('Audio sync tests', () => { + it('sounds okay', () => { + const manager1 = new MediaManager([ + { + id: '1', + url: 'cypress/fixtures/test.mp3', + startTime: Date.now(), + endTime: Date.now() + 60_000, + loop: false, + volume: 1, + }, + ]); + const manager2 = new MediaManager([ + { + id: '1', + url: 'cypress/fixtures/test.mp3', + startTime: Date.now(), + endTime: Date.now() + 60_000, + loop: false, + volume: 1, + }, + ]); + const parent = document.createElement('div'); + parent.appendChild(manager1.element); + parent.appendChild(manager2.element); + cy.mount(parent); + }); +}); diff --git a/packages/javascript/cypress/component/Playback.cy.ts b/packages/javascript/cypress/component/Playback.cy.ts new file mode 100644 index 0000000..0558ff4 --- /dev/null +++ b/packages/javascript/cypress/component/Playback.cy.ts @@ -0,0 +1,63 @@ +import { MediaManager } from '../../src/MediaManager'; + +describe('Playback tests', () => { + it('can buffer without playing', () => { + const manager = new MediaManager([ + { + id: '1', + url: 'cypress/fixtures/out.mp4', + startTime: Date.now() + 60_000, + endTime: Date.now() + 70_000, + loop: false, + volume: 0, + }, + ]); + cy.mount(manager.element); + + // Video element is meant to start in 1 minute + cy.get('video').should('have.prop', 'paused', true); + cy.get('video').should('have.prop', 'currentTime', 0); + }); + + it('recovers from a pause', () => { + const manager = new MediaManager([ + { + id: '1', + url: 'cypress/fixtures/out.mp4', + startTime: Date.now(), + endTime: Date.now() + 1000, + loop: true, + volume: 0, + }, + ]); + cy.mount(manager.element); + + cy.get('video').should('have.prop', 'paused', false); + cy.get('video').invoke('trigger', 'pause'); + cy.get('video').should('have.prop', 'paused', true); + + cy.wait(1000); + + cy.get('video').should('have.prop', 'paused', false); + }); + + it('recovers from a seek', () => { + const manager = new MediaManager([ + { + id: '1', + url: 'cypress/fixtures/out.mp4', + startTime: Date.now(), + endTime: Date.now() + 100000, + loop: true, + volume: 0, + }, + ]); + cy.mount(manager.element); + + cy.get('video').invoke('prop', 'currentTime', 10); + + cy.wait(500); + + cy.get('video').invoke('prop', 'currentTime').should('be.lessThan', 5); + }); +}); diff --git a/packages/javascript/cypress/component/Volume.cy.ts b/packages/javascript/cypress/component/Volume.cy.ts new file mode 100644 index 0000000..d5af745 --- /dev/null +++ b/packages/javascript/cypress/component/Volume.cy.ts @@ -0,0 +1,27 @@ +import { MediaManager } from '../../src/MediaManager'; + +const INITIAL_VOLUME = 0; +const CHANGED_VOLUME = 1; + +describe('Volume tests', () => { + it('resets volume', () => { + const manager = new MediaManager([ + { + id: '1', + url: 'cypress/fixtures/out.mp4', + startTime: Date.now(), + endTime: Date.now() + 1000, + loop: true, + volume: INITIAL_VOLUME, + }, + ]); + cy.mount(manager.element); + + cy.get('video').invoke('prop', 'volume', CHANGED_VOLUME); + cy.get('video').should('have.prop', 'volume', CHANGED_VOLUME); + + cy.wait(1000); + + cy.get('video').should('have.prop', 'volume', INITIAL_VOLUME); + }); +}); diff --git a/packages/javascript/cypress/e2e/generate-test-video.cy.ts b/packages/javascript/cypress/e2e/generate-test-video.cy.ts new file mode 100644 index 0000000..5330673 --- /dev/null +++ b/packages/javascript/cypress/e2e/generate-test-video.cy.ts @@ -0,0 +1,21 @@ +const LOOP_DURATION = 2_000; +const FPS = 60; +const TOTAL_LOOPS = 2; +const TOTAL_FRAMES = Math.floor(LOOP_DURATION * (FPS / 1000) * TOTAL_LOOPS); + +describe('template spec', () => { + it('testing', { baseUrl: null }, () => { + const frameDuration = 1000 / FPS; + let frame = 0; + let ms = 0; + + while (frame < TOTAL_FRAMES) { + cy.task('log', `[frame: ${frame + 1}/${TOTAL_FRAMES}] [ms: ${ms.toFixed(2)}/${TOTAL_LOOPS * LOOP_DURATION}]`); + cy.visit(`cypress/e2e/test-video.html?loopDurationMs=${LOOP_DURATION}¤tMs=${ms}`); + cy.screenshot(`${frame}`, { capture: 'viewport', overwrite: true }); + // Set up for next iteration + frame++; + ms = frame * frameDuration; + } + }); +}); diff --git a/packages/javascript/cypress/e2e/test-video.html b/packages/javascript/cypress/e2e/test-video.html new file mode 100644 index 0000000..b7c793f --- /dev/null +++ b/packages/javascript/cypress/e2e/test-video.html @@ -0,0 +1,115 @@ + + + + + + + +
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/packages/javascript/cypress/fixtures/example.json b/packages/javascript/cypress/fixtures/example.json new file mode 100644 index 0000000..02e4254 --- /dev/null +++ b/packages/javascript/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/packages/javascript/cypress/fixtures/out.mp4 b/packages/javascript/cypress/fixtures/out.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..291227ba64c4e248960f2553a511191a46d4958b GIT binary patch literal 38018 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 ROfi@Un8QS170d&~{|^(pZ215H literal 0 HcmV?d00001 diff --git a/packages/javascript/cypress/mount.ts b/packages/javascript/cypress/mount.ts new file mode 100644 index 0000000..8d089a9 --- /dev/null +++ b/packages/javascript/cypress/mount.ts @@ -0,0 +1,14 @@ +import { getContainerEl, setupHooks } from '@cypress/mount-utils'; + +export function mount(element: HTMLElement): Cypress.Chainable { + const container = getContainerEl(); + + // clean up each time we mount a new component + container.innerHTML = ''; + // mount component + container.append(element); + // initialize internal pre/post test hooks + setupHooks(); + + return cy.wrap(element, { log: false }); +} diff --git a/packages/javascript/cypress/support/commands.ts b/packages/javascript/cypress/support/commands.ts new file mode 100644 index 0000000..698b01a --- /dev/null +++ b/packages/javascript/cypress/support/commands.ts @@ -0,0 +1,37 @@ +/// +// *********************************************** +// This example commands.ts shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) +// +// declare global { +// namespace Cypress { +// interface Chainable { +// login(email: string, password: string): Chainable +// drag(subject: string, options?: Partial): Chainable +// dismiss(subject: string, options?: Partial): Chainable +// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable +// } +// } +// } \ No newline at end of file diff --git a/packages/javascript/cypress/support/component-index.html b/packages/javascript/cypress/support/component-index.html new file mode 100644 index 0000000..ac6e79f --- /dev/null +++ b/packages/javascript/cypress/support/component-index.html @@ -0,0 +1,12 @@ + + + + + + + Components App + + +
+ + \ No newline at end of file diff --git a/packages/javascript/cypress/support/component.ts b/packages/javascript/cypress/support/component.ts new file mode 100644 index 0000000..4ec8287 --- /dev/null +++ b/packages/javascript/cypress/support/component.ts @@ -0,0 +1,36 @@ +/* eslint-disable @typescript-eslint/no-namespace */ +// *********************************************************** +// This example support/component.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import { mount } from '../mount'; +import './commands'; + +// Augment the Cypress namespace to include type definitions for +// your custom command. +// Alternatively, can be defined in cypress/support/component.d.ts +// with a at the top of your spec. +declare global { + namespace Cypress { + interface Chainable { + mount: typeof mount; + } + } +} + +Cypress.Commands.add('mount', mount); + +// Example use: +// cy.mount() diff --git a/packages/javascript/cypress/support/e2e.ts b/packages/javascript/cypress/support/e2e.ts new file mode 100644 index 0000000..e66558e --- /dev/null +++ b/packages/javascript/cypress/support/e2e.ts @@ -0,0 +1,17 @@ +// *********************************************************** +// This example support/e2e.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; diff --git a/packages/javascript/cypress/tsconfig.json b/packages/javascript/cypress/tsconfig.json new file mode 100644 index 0000000..479d839 --- /dev/null +++ b/packages/javascript/cypress/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["es5", "dom"], + "sourceMap": true, + "types": ["cypress", "node"], + "jsx": "react" + }, + "include": ["**/*.ts"] +} \ No newline at end of file diff --git a/packages/javascript/package.json b/packages/javascript/package.json index 152c641..33b8f47 100644 --- a/packages/javascript/package.json +++ b/packages/javascript/package.json @@ -31,7 +31,10 @@ "watch-build": "tsc -w", "build-docs": "typedoc --out ../../docs/javascript --name @clockworkdog/cogs-client src/index.ts", "release": "yarn npm publish --access public", - "prerelease": "yarn npm publish --access public --tag=next" + "prerelease": "yarn npm publish --access public --tag=next", + "cy:open": "cypress open", + "cy:run": "cypress run --component", + "cy:generate": "cypress run --e2e" }, "dependencies": { "@clockworkdog/timesync": "workspace:^", @@ -40,19 +43,23 @@ "zod": "^4.1.13" }, "devDependencies": { + "@cypress/mount-utils": "^4.1.2", "@eslint/js": "^9.17.0", "@types/howler": "2.2.12", "@types/jsdom": "^27", "@types/node": "^22.10.2", + "cypress": "^14.5.4", "eslint": "^9.17.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "jsdom": "^27.1.0", "prettier": "^3.4.2", + "react": "^19.1.1", + "react-dom": "^19.1.1", "typedoc": "^0.27.5", "typescript": "~5.7.2", "typescript-eslint": "^8.18.1", "vite": "^7.1.12", "vitest": "^4.0.6" } -} \ No newline at end of file +} diff --git a/packages/javascript/scripts/generate-video.js b/packages/javascript/scripts/generate-video.js new file mode 100644 index 0000000..78f7a78 --- /dev/null +++ b/packages/javascript/scripts/generate-video.js @@ -0,0 +1,25 @@ +import { spawn } from 'node:child_process'; +const ffmpeg = 'ffmpeg'; + +const child = spawn(ffmpeg, [ + // Set the input framerate + '-framerate', + '60', + // Specify the input files + '-i', + 'packages/javascript/cypress/screenshots/generate-test-video.cy.ts/%d.png', + // Set the output framerate + '-r', + '60', + // idk? + '-c:v', + 'libx264', + '-pix_fmt', + 'yuv420p', + 'out.mp4', +]); + +child.on('error', () => { + console.error('Failed to generate video'); + process.exit(1); +}); diff --git a/packages/javascript/src/MediaManager.ts b/packages/javascript/src/MediaManager.ts new file mode 100644 index 0000000..1cdaf6a --- /dev/null +++ b/packages/javascript/src/MediaManager.ts @@ -0,0 +1,58 @@ +import { getMediaTagName, StableMediaPlayer } from './StableMediaPlayer'; + +export interface MediaState { + id: string; + url: string; + startTime: number; + endTime: number; + volume: number; + loop: boolean; +} + +export class MediaManager { + private currentMediaState: MediaState[] = []; + + private _element: HTMLDivElement = document.createElement('div'); + public get element() { + return this._element; + } + + constructor(testStates?: MediaState[]) { + this.init(testStates); + } + + async init(testStates?: MediaState[]) { + const medias = testStates ?? (await this.fetchCurrentMedia()); + medias.forEach((media) => { + this.createMediaPlayer(media); + }); + } + + /** + * This will be called at initialization. + * This could be polled or COGS could emit events + */ + async fetchCurrentMedia(): Promise { + return [ + { + id: '1', + url: 'cypress/fixtures/test_720p_h264.mov', + startTime: Date.now(), + endTime: Date.now() + 1000, + loop: true, + volume: 1, + }, + ]; + } + + createMediaPlayer(state: MediaState) { + const tagName = getMediaTagName(state.url); + + if (tagName === 'img') { + return; + } + + const stable = new StableMediaPlayer(state); + this._element.replaceChildren(...[stable.element]); + } +} diff --git a/packages/javascript/src/StableMediaPlayer.ts b/packages/javascript/src/StableMediaPlayer.ts new file mode 100644 index 0000000..ec82e48 --- /dev/null +++ b/packages/javascript/src/StableMediaPlayer.ts @@ -0,0 +1,132 @@ +import { MediaState } from './MediaManager'; + +// Common media extensions +// https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types/Common_types +const SUPPORTED_IMAGE_EXTENSIONS = new Set(['apng', 'avif', 'bmp', 'gif', 'ico', 'jpeg', 'jpg', 'png', 'svg', 'tif', 'tiff', 'webp']); +const SUPPORTED_AUDIO_EXTENSIONS = new Set(['aac', 'mp3']); +const SUPPORTED_VIDEO_EXTENSIONS = new Set(['avi', 'mp4', 'mpeg', 'mov', 'ogv']); + +export const getMediaTagName = (filename: string): 'audio' | 'img' | 'video' => { + const extension = filename.split('.').pop(); + if (extension === undefined) { + throw new Error(`Unknown extension of ${filename}`); + } + if (SUPPORTED_VIDEO_EXTENSIONS.has(extension)) { + return 'video'; + } + if (SUPPORTED_AUDIO_EXTENSIONS.has(extension)) { + return 'audio'; + } + if (SUPPORTED_IMAGE_EXTENSIONS.has(extension)) { + return 'img'; + } + throw new Error(`Unknown extension: ${extension}`); +}; + +const CHECK_MEDIA_POLL_MS = 1_000; +const TARGET_SYNC_THRESHOLD_MS = 10; // If we're closer than this we're good enough +const MAX_SYNC_THRESHOLD_MS = 1_000; // If we're further away than this, we'll seek instead +const MAX_PLAYBACK_RATE_ADJUSTMENT = 0.2; + +export class StableMediaPlayer { + private _abort = new AbortController(); + private _state: MediaState; + private _element: HTMLMediaElement; + private defaultPlaybackRate = 1; // TODO: Calculate from manifest, and check with video duration + + constructor(state: MediaState) { + const tagName = getMediaTagName(state.url); + if (tagName === 'img') { + throw new Error('Cannot construct StableMediaPlayer for images'); + } + this._state = state; + this._element = document.createElement(tagName); + this.stabilize(); + } + + public get element() { + return this._element; + } + public get abort() { + return this._abort; + } + public set state(newValue: MediaState) { + this._state = this.state; + } + + private async seekTo(time: number) { + const seekPromise = new Promise((res) => { + this._element.addEventListener('seeked', res, { once: true, passive: true }); + }); + this._element.currentTime = time / 1000; + await seekPromise; + } + + private async stabilize() { + this._element.src = this._state.url; + this._element.volume = this._state.volume; + this._element.loop = this._state.loop; + + while (!this._abort.signal.aborted) { + const { startTime, endTime, volume, loop } = this._state; + const now = Date.now(); + + // Has volume changed? + if (this.element.volume !== volume) { + console.warn(`Media ${this._state.id} has changed volume`); + this.element.volume = volume; + } + + // Does the media loop? + if (this.element.loop !== loop) { + console.warn(`Media ${this._state.id} has changed loop`); + this._element.loop = loop; + } + + // Should the media be playing? + if (now >= startTime && this._element.paused) { + this._element.play().catch(console.warn); + } + + // Has media exhausted? + if (now > endTime && !loop) { + this.element.remove(); + this._abort.abort(); + continue; + } + + // Is the media queued? + if (now < startTime) { + this.element.pause(); + continue; + } + + const targetTime = now - startTime; + const currentTime = this.element.currentTime * 1000; + const deltaTime = currentTime - targetTime; + const deltaTimeAbs = Math.abs(deltaTime); + + // Are we at the correct time? + switch (true) { + case deltaTimeAbs <= TARGET_SYNC_THRESHOLD_MS: + this._element.playbackRate = this.defaultPlaybackRate; + break; + case deltaTimeAbs > TARGET_SYNC_THRESHOLD_MS && deltaTimeAbs <= MAX_SYNC_THRESHOLD_MS: { + const playbackRateAdjustment = (deltaTime / MAX_SYNC_THRESHOLD_MS) * MAX_PLAYBACK_RATE_ADJUSTMENT; + this._element.playbackRate = this.defaultPlaybackRate - playbackRateAdjustment; + break; + } + case deltaTimeAbs > MAX_SYNC_THRESHOLD_MS: { + this.seekTo(targetTime); + break; + } + default: + this._element.playbackRate = this.defaultPlaybackRate; + console.warn(`Unknown time error: ${deltaTime}`); + } + console.log(deltaTime, this._element.playbackRate); + + await new Promise((res) => setTimeout(res, CHECK_MEDIA_POLL_MS)); + } + } +} diff --git a/packages/javascript/vite.config.ts b/packages/javascript/vite.config.ts new file mode 100644 index 0000000..ff8b4c5 --- /dev/null +++ b/packages/javascript/vite.config.ts @@ -0,0 +1 @@ +export default {}; diff --git a/packages/react/package.json b/packages/react/package.json index 9586b7b..e0b85af 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -50,4 +50,4 @@ "typescript": "~5.7.2", "typescript-eslint": "^8.18.1" } -} \ No newline at end of file +} diff --git a/packages/timesync/package.json b/packages/timesync/package.json index 24d01c7..ff8b6a5 100644 --- a/packages/timesync/package.json +++ b/packages/timesync/package.json @@ -34,4 +34,4 @@ "typescript-eslint": "^8.18.1", "vitest": "^4.0.6" } -} \ No newline at end of file +} diff --git a/packages/vite-plugin/package.json b/packages/vite-plugin/package.json index 1dff315..06afb91 100644 --- a/packages/vite-plugin/package.json +++ b/packages/vite-plugin/package.json @@ -54,4 +54,4 @@ "typescript-eslint": "^8.35.1", "vite": "^6.0.0" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index ec16552..bee3826 100644 --- a/yarn.lock +++ b/yarn.lock @@ -75,16 +75,20 @@ __metadata: resolution: "@clockworkdog/cogs-client@workspace:packages/javascript" dependencies: "@clockworkdog/timesync": "workspace:^" + "@cypress/mount-utils": "npm:^4.1.2" "@eslint/js": "npm:^9.17.0" "@types/howler": "npm:2.2.12" "@types/jsdom": "npm:^27" "@types/node": "npm:^22.10.2" + cypress: "npm:^14.5.4" eslint: "npm:^9.17.0" eslint-config-prettier: "npm:^9.1.0" eslint-plugin-prettier: "npm:^5.2.1" howler: "clockwork-dog/howler.js#fix-looping-clips" jsdom: "npm:^27.1.0" prettier: "npm:^3.4.2" + react: "npm:^19.1.1" + react-dom: "npm:^19.1.1" reconnecting-websocket: "npm:^4.4.0" typedoc: "npm:^0.27.5" typescript: "npm:~5.7.2" @@ -163,6 +167,49 @@ __metadata: languageName: node linkType: hard +"@cypress/mount-utils@npm:^4.1.2": + version: 4.1.2 + resolution: "@cypress/mount-utils@npm:4.1.2" + checksum: 10c0/1c64c3dac4ea25b59487c927c4632161ef8c347735f2812febe7964c4b12c2784791d0ec4d096dc98f5063c445bed8367536aee60fc9d0ecba1fd86ae32087db + languageName: node + linkType: hard + +"@cypress/request@npm:^3.0.9": + version: 3.0.9 + resolution: "@cypress/request@npm:3.0.9" + dependencies: + aws-sign2: "npm:~0.7.0" + aws4: "npm:^1.8.0" + caseless: "npm:~0.12.0" + combined-stream: "npm:~1.0.6" + extend: "npm:~3.0.2" + forever-agent: "npm:~0.6.1" + form-data: "npm:~4.0.4" + http-signature: "npm:~1.4.0" + is-typedarray: "npm:~1.0.0" + isstream: "npm:~0.1.2" + json-stringify-safe: "npm:~5.0.1" + mime-types: "npm:~2.1.19" + performance-now: "npm:^2.1.0" + qs: "npm:6.14.0" + safe-buffer: "npm:^5.1.2" + tough-cookie: "npm:^5.0.0" + tunnel-agent: "npm:^0.6.0" + uuid: "npm:^8.3.2" + checksum: 10c0/9ebcd3f3d49706e730671bcb0bb86488fe23a2079f12d44b6c762777118fc0286b5ce5c73fb6cacf0ae291fa89a7562ca8a2b43a2486e26906fd84a386ed6967 + languageName: node + linkType: hard + +"@cypress/xvfb@npm:^1.2.4": + version: 1.2.4 + resolution: "@cypress/xvfb@npm:1.2.4" + dependencies: + debug: "npm:^3.1.0" + lodash.once: "npm:^4.1.1" + checksum: 10c0/1bf6224b244f6093033d77f04f6bef719280542656de063cf8ac3f38957b62aa633e6918af0b9673a8bf0123b42a850db51d9729a3ae3da885ac179bc7fc1d26 + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.25.6": version: 0.25.6 resolution: "@esbuild/aix-ppc64@npm:0.25.6" @@ -974,6 +1021,20 @@ __metadata: languageName: node linkType: hard +"@types/sinonjs__fake-timers@npm:8.1.1": + version: 8.1.1 + resolution: "@types/sinonjs__fake-timers@npm:8.1.1" + checksum: 10c0/e2e6c425a548177c0930c2f9b82d3951956c9701b9ebf59623d5ad2c3229c523d3c0d598e79fe7392a239657abd3dbe3676be0650ce438bcd1199ee3b617a4d7 + languageName: node + linkType: hard + +"@types/sizzle@npm:^2.3.2": + version: 2.3.10 + resolution: "@types/sizzle@npm:2.3.10" + checksum: 10c0/d43ec1cd0b5e1f66b1abeaf359608853629cd3d6b8dc8b3b40b85a5ee2ce149a4485ccd7eee5c58b5a2814d384f5a951f1dab5d49041ad83457270cb2bc66fe7 + languageName: node + linkType: hard + "@types/tough-cookie@npm:*": version: 4.0.5 resolution: "@types/tough-cookie@npm:4.0.5" @@ -997,6 +1058,15 @@ __metadata: languageName: node linkType: hard +"@types/yauzl@npm:^2.9.1": + version: 2.10.3 + resolution: "@types/yauzl@npm:2.10.3" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/f1b7c1b99fef9f2fe7f1985ef7426d0cebe48cd031f1780fcdc7451eec7e31ac97028f16f50121a59bcf53086a1fc8c856fd5b7d3e00970e43d92ae27d6b43dc + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:8.18.1": version: 8.18.1 resolution: "@typescript-eslint/eslint-plugin@npm:8.18.1" @@ -1366,6 +1436,16 @@ __metadata: languageName: node linkType: hard +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + "ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -1378,6 +1458,22 @@ __metadata: languageName: node linkType: hard +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.3.0": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -1415,6 +1511,13 @@ __metadata: languageName: node linkType: hard +"arch@npm:^2.2.0": + version: 2.2.0 + resolution: "arch@npm:2.2.0" + checksum: 10c0/4ceaf8d8207817c216ebc4469742052cb0a097bc45d9b7fcd60b7507220da545a28562ab5bdd4dfe87921bb56371a0805da4e10d704e01f93a15f83240f1284c + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -1512,6 +1615,22 @@ __metadata: languageName: node linkType: hard +"asn1@npm:~0.2.3": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: "npm:~2.1.0" + checksum: 10c0/00c8a06c37e548762306bcb1488388d2f76c74c36f70c803f0c081a01d3bdf26090fc088cd812afc5e56a6d49e33765d451a5f8a68ab9c2b087eba65d2e980e0 + languageName: node + linkType: hard + +"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": + version: 1.0.0 + resolution: "assert-plus@npm:1.0.0" + checksum: 10c0/b194b9d50c3a8f872ee85ab110784911e696a4d49f7ee6fc5fb63216dedbefd2c55999c70cb2eaeb4cf4a0e0338b44e9ace3627117b5bf0d42460e9132f21b91 + languageName: node + linkType: hard + "assertion-error@npm:^2.0.1": version: 2.0.1 resolution: "assertion-error@npm:2.0.1" @@ -1519,6 +1638,34 @@ __metadata: languageName: node linkType: hard +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 10c0/f63d439cc383db1b9c5c6080d1e240bd14dae745f15d11ec5da863e182bbeca70df6c8191cffef5deba0b566ef98834610a68be79ac6379c95eeb26e1b310e25 + languageName: node + linkType: hard + +"async@npm:^3.2.0": + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -1528,6 +1675,20 @@ __metadata: languageName: node linkType: hard +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: 10c0/021d2cc5547d4d9ef1633e0332e746a6f447997758b8b68d6fb33f290986872d2bff5f0c37d5832f41a7229361f093cd81c40898d96ed153493c0fb5cd8575d2 + languageName: node + linkType: hard + +"aws4@npm:^1.8.0": + version: 1.13.2 + resolution: "aws4@npm:1.13.2" + checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -1535,6 +1696,22 @@ __metadata: languageName: node linkType: hard +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"bcrypt-pbkdf@npm:^1.0.0": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: "npm:^0.14.3" + checksum: 10c0/ddfe85230b32df25aeebfdccfbc61d3bc493ace49c884c9c68575de1f5dcf733a5d7de9def3b0f318b786616b8d85bad50a28b1da1750c43e0012c93badcc148 + languageName: node + linkType: hard + "bidi-js@npm:^1.0.3": version: 1.0.3 resolution: "bidi-js@npm:1.0.3" @@ -1544,6 +1721,20 @@ __metadata: languageName: node linkType: hard +"blob-util@npm:^2.0.2": + version: 2.0.2 + resolution: "blob-util@npm:2.0.2" + checksum: 10c0/ed82d587827e5c86be122301a7c250f8364963e9582f72a826255bfbd32f8d69cc10169413d666667bb1c4fc8061329ae89d176ffe46fee8f32080af944ccddc + languageName: node + linkType: hard + +"bluebird@npm:^3.7.2": + version: 3.7.2 + resolution: "bluebird@npm:3.7.2" + checksum: 10c0/680de03adc54ff925eaa6c7bb9a47a0690e8b5de60f4792604aae8ed618c65e6b63a7893b57ca924beaf53eee69c5af4f8314148c08124c550fe1df1add897d2 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -1572,6 +1763,23 @@ __metadata: languageName: node linkType: hard +"buffer-crc32@npm:~0.2.3": + version: 0.2.13 + resolution: "buffer-crc32@npm:0.2.13" + checksum: 10c0/cb0a8ddf5cf4f766466db63279e47761eb825693eeba6a5a95ee4ec8cb8f81ede70aa7f9d8aeec083e781d47154290eb5d4d26b3f7a465ec57fb9e7d59c47150 + languageName: node + linkType: hard + +"buffer@npm:^5.7.1": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + "bundle-require@npm:^5.1.0": version: 5.1.0 resolution: "bundle-require@npm:5.1.0" @@ -1610,6 +1818,13 @@ __metadata: languageName: node linkType: hard +"cachedir@npm:^2.3.0": + version: 2.4.0 + resolution: "cachedir@npm:2.4.0" + checksum: 10c0/76bff9009f2c446cd3777a4aede99af634a89670a67012b8041f65e951d3d36cefe8940341ea80c72219ee9913fa1f6146824cd9dfe9874a4bded728af7e6d76 + languageName: node + linkType: hard + "call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": version: 1.0.1 resolution: "call-bind-apply-helpers@npm:1.0.1" @@ -1649,6 +1864,13 @@ __metadata: languageName: node linkType: hard +"caseless@npm:~0.12.0": + version: 0.12.0 + resolution: "caseless@npm:0.12.0" + checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 + languageName: node + linkType: hard + "chai@npm:^6.0.1": version: 6.2.0 resolution: "chai@npm:6.2.0" @@ -1656,7 +1878,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -1666,6 +1888,13 @@ __metadata: languageName: node linkType: hard +"check-more-types@npm:^2.24.0": + version: 2.24.0 + resolution: "check-more-types@npm:2.24.0" + checksum: 10c0/93fda2c32eb5f6cd1161a84a2f4107c0e00b40a851748516791dd9a0992b91bdf504e3bf6bf7673ce603ae620042e11ed4084d16d6d92b36818abc9c2e725520 + languageName: node + linkType: hard + "chokidar@npm:^4.0.3": version: 4.0.3 resolution: "chokidar@npm:4.0.3" @@ -1682,6 +1911,52 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^4.1.0": + version: 4.3.1 + resolution: "ci-info@npm:4.3.1" + checksum: 10c0/7dd82000f514d76ddfe7775e4cb0d66e5c638f5fa0e2a3be29557e898da0d32ac04f231217d414d07fb968b1fbc6d980ee17ddde0d2c516f23da9cfff608f6c1 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: "npm:^3.1.0" + checksum: 10c0/92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 + languageName: node + linkType: hard + +"cli-table3@npm:0.6.1": + version: 0.6.1 + resolution: "cli-table3@npm:0.6.1" + dependencies: + colors: "npm:1.4.0" + string-width: "npm:^4.2.0" + dependenciesMeta: + colors: + optional: true + checksum: 10c0/19ab1bb14bd11b3ca3557ce5ad37ef73e489ea814b99f803171e6ac0a3f2ae5fffb6dbc8864e33cdcf2a3644ebc31b488b8e624fd74af44a1c77cc365c143db4 + languageName: node + linkType: hard + +"cli-truncate@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-truncate@npm:2.1.0" + dependencies: + slice-ansi: "npm:^3.0.0" + string-width: "npm:^4.2.0" + checksum: 10c0/dfaa3df675bcef7a3254773de768712b590250420345a4c7ac151f041a4bacb4c25864b1377bee54a39b5925a030c00eabf014e312e3a4ac130952ed3b3879e9 + languageName: node + linkType: hard + "cogs-sdk@workspace:.": version: 0.0.0-use.local resolution: "cogs-sdk@workspace:." @@ -1708,6 +1983,29 @@ __metadata: languageName: node linkType: hard +"colorette@npm:^2.0.16": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"colors@npm:1.4.0": + version: 1.4.0 + resolution: "colors@npm:1.4.0" + checksum: 10c0/9af357c019da3c5a098a301cf64e3799d27549d8f185d86f79af23069e4f4303110d115da98483519331f6fb71c8568d5688fa1c6523600044fd4a54e97c4efb + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + "commander@npm:^4.0.0": version: 4.1.1 resolution: "commander@npm:4.1.1" @@ -1715,6 +2013,20 @@ __metadata: languageName: node linkType: hard +"commander@npm:^6.2.1": + version: 6.2.1 + resolution: "commander@npm:6.2.1" + checksum: 10c0/85748abd9d18c8bc88febed58b98f66b7c591d9b5017cad459565761d7b29ca13b7783ea2ee5ce84bf235897333706c4ce29adf1ce15c8252780e7000e2ce9ea + languageName: node + linkType: hard + +"common-tags@npm:^1.8.0": + version: 1.8.2 + resolution: "common-tags@npm:1.8.2" + checksum: 10c0/23efe47ff0a1a7c91489271b3a1e1d2a171c12ec7f9b35b29b2fce51270124aff0ec890087e2bc2182c1cb746e232ab7561aaafe05f1e7452aea733d2bfe3f63 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -1736,6 +2048,13 @@ __metadata: languageName: node linkType: hard +"core-util-is@npm:1.0.2": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 10c0/980a37a93956d0de8a828ce508f9b9e3317039d68922ca79995421944146700e4aaf490a6dbfebcb1c5292a7184600c7710b957d724be1e37b8254c6bc0fe246 + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" @@ -1775,6 +2094,69 @@ __metadata: languageName: node linkType: hard +"cypress@npm:^14.5.4": + version: 14.5.4 + resolution: "cypress@npm:14.5.4" + dependencies: + "@cypress/request": "npm:^3.0.9" + "@cypress/xvfb": "npm:^1.2.4" + "@types/sinonjs__fake-timers": "npm:8.1.1" + "@types/sizzle": "npm:^2.3.2" + arch: "npm:^2.2.0" + blob-util: "npm:^2.0.2" + bluebird: "npm:^3.7.2" + buffer: "npm:^5.7.1" + cachedir: "npm:^2.3.0" + chalk: "npm:^4.1.0" + check-more-types: "npm:^2.24.0" + ci-info: "npm:^4.1.0" + cli-cursor: "npm:^3.1.0" + cli-table3: "npm:0.6.1" + commander: "npm:^6.2.1" + common-tags: "npm:^1.8.0" + dayjs: "npm:^1.10.4" + debug: "npm:^4.3.4" + enquirer: "npm:^2.3.6" + eventemitter2: "npm:6.4.7" + execa: "npm:4.1.0" + executable: "npm:^4.1.1" + extract-zip: "npm:2.0.1" + figures: "npm:^3.2.0" + fs-extra: "npm:^9.1.0" + getos: "npm:^3.2.1" + hasha: "npm:5.2.2" + is-installed-globally: "npm:~0.4.0" + lazy-ass: "npm:^1.6.0" + listr2: "npm:^3.8.3" + lodash: "npm:^4.17.21" + log-symbols: "npm:^4.0.0" + minimist: "npm:^1.2.8" + ospath: "npm:^1.2.2" + pretty-bytes: "npm:^5.6.0" + process: "npm:^0.11.10" + proxy-from-env: "npm:1.0.0" + request-progress: "npm:^3.0.0" + semver: "npm:^7.7.1" + supports-color: "npm:^8.1.1" + tmp: "npm:~0.2.3" + tree-kill: "npm:1.2.2" + untildify: "npm:^4.0.0" + yauzl: "npm:^2.10.0" + bin: + cypress: bin/cypress + checksum: 10c0/e4ded8f0ae8a6c56ac9ee615fc62d4b5c6543634035edaa5d5cbd67d6cd45457eef02a67ac90d0aa6f4fbfe25663513f782a6351f9305fd572e89a3ef587d3ab + languageName: node + linkType: hard + +"dashdash@npm:^1.12.0": + version: 1.14.1 + resolution: "dashdash@npm:1.14.1" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/64589a15c5bd01fa41ff7007e0f2c6552c5ef2028075daa16b188a3721f4ba001841bf306dfc2eee6e2e6e7f76b38f5f17fb21fa847504192290ffa9e150118a + languageName: node + linkType: hard + "data-urls@npm:^6.0.0": version: 6.0.0 resolution: "data-urls@npm:6.0.0" @@ -1818,6 +2200,13 @@ __metadata: languageName: node linkType: hard +"dayjs@npm:^1.10.4": + version: 1.11.19 + resolution: "dayjs@npm:1.11.19" + checksum: 10c0/7d8a6074a343f821f81ea284d700bd34ea6c7abbe8d93bce7aba818948957c1b7f56131702e5e890a5622cdfc05dcebe8aed0b8313bdc6838a594d7846b0b000 + languageName: node + linkType: hard + "debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": version: 4.4.0 resolution: "debug@npm:4.4.0" @@ -1830,27 +2219,36 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.4.0": - version: 4.4.1 - resolution: "debug@npm:4.4.1" +"debug@npm:^3.1.0": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"debug@npm:^4.1.1, debug@npm:^4.4.3": + version: 4.4.3 + resolution: "debug@npm:4.4.3" dependencies: ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 + checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 languageName: node linkType: hard -"debug@npm:^4.4.3": - version: 4.4.3 - resolution: "debug@npm:4.4.3" +"debug@npm:^4.4.0": + version: 4.4.1 + resolution: "debug@npm:4.4.1" dependencies: ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 + checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 languageName: node linkType: hard @@ -1890,6 +2288,13 @@ __metadata: languageName: node linkType: hard +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -1917,6 +2322,16 @@ __metadata: languageName: node linkType: hard +"ecc-jsbn@npm:~0.1.1": + version: 0.1.2 + resolution: "ecc-jsbn@npm:0.1.2" + dependencies: + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.1.0" + checksum: 10c0/6cf168bae1e2dad2e46561d9af9cbabfbf5ff592176ad4e9f0f41eaaf5fe5e10bb58147fe0a804de62b1ee9dad42c28810c88d652b21b6013c47ba8efa274ca1 + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -1940,6 +2355,25 @@ __metadata: languageName: node linkType: hard +"end-of-stream@npm:^1.1.0": + version: 1.4.5 + resolution: "end-of-stream@npm:1.4.5" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/b0701c92a10b89afb1cb45bf54a5292c6f008d744eb4382fa559d54775ff31617d1d7bc3ef617575f552e24fad2c7c1a1835948c66b3f3a4be0a6c1f35c883d8 + languageName: node + linkType: hard + +"enquirer@npm:^2.3.6": + version: 2.4.1 + resolution: "enquirer@npm:2.4.1" + dependencies: + ansi-colors: "npm:^4.1.1" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/43850479d7a51d36a9c924b518dcdc6373b5a8ae3401097d336b7b7e258324749d0ad37a1fcaa5706f04799baa05585cd7af19ebdf7667673e7694435fcea918 + languageName: node + linkType: hard + "entities@npm:^4.4.0": version: 4.5.0 resolution: "entities@npm:4.5.0" @@ -2088,6 +2522,18 @@ __metadata: languageName: node linkType: hard +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + "es-shim-unscopables@npm:^1.0.2": version: 1.0.2 resolution: "es-shim-unscopables@npm:1.0.2" @@ -2197,6 +2643,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -2506,6 +2959,39 @@ __metadata: languageName: node linkType: hard +"eventemitter2@npm:6.4.7": + version: 6.4.7 + resolution: "eventemitter2@npm:6.4.7" + checksum: 10c0/35d8e9d51b919114eb072d33786274e1475db50efe00960c24c088ce4f76c07a826ccc927602724928efb3d8f09a7d8dd1fa79e410875118c0e9846959287f34 + languageName: node + linkType: hard + +"execa@npm:4.1.0": + version: 4.1.0 + resolution: "execa@npm:4.1.0" + dependencies: + cross-spawn: "npm:^7.0.0" + get-stream: "npm:^5.0.0" + human-signals: "npm:^1.1.1" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.0" + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/02211601bb1c52710260edcc68fb84c3c030dc68bafc697c90ada3c52cc31375337de8c24826015b8382a58d63569ffd203b79c94fef217d65503e3e8d2c52ba + languageName: node + linkType: hard + +"executable@npm:^4.1.1": + version: 4.1.1 + resolution: "executable@npm:4.1.1" + dependencies: + pify: "npm:^2.2.0" + checksum: 10c0/c3cc5d2d2e3cdb1b7d7b0639ebd5566d113d7ada21cfa07f5226d55ba2a210320116720e07570ed5659ef2ec516bc00c8f0488dac75d112fd324ef25c2100173 + languageName: node + linkType: hard + "expect-type@npm:^1.2.2": version: 1.2.2 resolution: "expect-type@npm:1.2.2" @@ -2520,6 +3006,44 @@ __metadata: languageName: node linkType: hard +"extend@npm:~3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 + languageName: node + linkType: hard + +"extract-zip@npm:2.0.1": + version: 2.0.1 + resolution: "extract-zip@npm:2.0.1" + dependencies: + "@types/yauzl": "npm:^2.9.1" + debug: "npm:^4.1.1" + get-stream: "npm:^5.1.0" + yauzl: "npm:^2.10.0" + dependenciesMeta: + "@types/yauzl": + optional: true + bin: + extract-zip: cli.js + checksum: 10c0/9afbd46854aa15a857ae0341a63a92743a7b89c8779102c3b4ffc207516b2019337353962309f85c66ee3d9092202a83cdc26dbf449a11981272038443974aee + languageName: node + linkType: hard + +"extsprintf@npm:1.3.0": + version: 1.3.0 + resolution: "extsprintf@npm:1.3.0" + checksum: 10c0/f75114a8388f0cbce68e277b6495dc3930db4dde1611072e4a140c24e204affd77320d004b947a132e9a3b97b8253017b2b62dce661975fb0adced707abf1ab5 + languageName: node + linkType: hard + +"extsprintf@npm:^1.2.0": + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: 10c0/e10e2769985d0e9b6c7199b053a9957589d02e84de42832c295798cb422a025e6d4a92e0259c1fb4d07090f5bfde6b55fd9f880ac5855bd61d775f8ab75a7ab0 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -2570,6 +3094,15 @@ __metadata: languageName: node linkType: hard +"fd-slicer@npm:~1.1.0": + version: 1.1.0 + resolution: "fd-slicer@npm:1.1.0" + dependencies: + pend: "npm:~1.2.0" + checksum: 10c0/304dd70270298e3ffe3bcc05e6f7ade2511acc278bc52d025f8918b48b6aa3b77f10361bddfadfe2a28163f7af7adbdce96f4d22c31b2f648ba2901f0c5fc20e + languageName: node + linkType: hard + "fdir@npm:^6.4.4": version: 6.4.6 resolution: "fdir@npm:6.4.6" @@ -2594,6 +3127,15 @@ __metadata: languageName: node linkType: hard +"figures@npm:^3.2.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 + languageName: node + linkType: hard + "file-entry-cache@npm:^8.0.0": version: 8.0.0 resolution: "file-entry-cache@npm:8.0.0" @@ -2669,6 +3211,38 @@ __metadata: languageName: node linkType: hard +"forever-agent@npm:~0.6.1": + version: 0.6.1 + resolution: "forever-agent@npm:0.6.1" + checksum: 10c0/364f7f5f7d93ab661455351ce116a67877b66f59aca199559a999bd39e3cfadbfbfacc10415a915255e2210b30c23febe9aec3ca16bf2d1ff11c935a1000e24c + languageName: node + linkType: hard + +"form-data@npm:~4.0.4": + version: 4.0.4 + resolution: "form-data@npm:4.0.4" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" + mime-types: "npm:^2.1.12" + checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 + languageName: node + linkType: hard + +"fs-extra@npm:^9.1.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: "npm:^1.0.0" + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 + languageName: node + linkType: hard + "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -2742,6 +3316,15 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: "npm:^3.0.0" + checksum: 10c0/43797ffd815fbb26685bf188c8cfebecb8af87b3925091dd7b9a9c915993293d78e3c9e1bce125928ff92f2d0796f3889b92b5ec6d58d1041b574682132e0a80 + languageName: node + linkType: hard + "get-symbol-description@npm:^1.0.2": version: 1.0.2 resolution: "get-symbol-description@npm:1.0.2" @@ -2753,6 +3336,24 @@ __metadata: languageName: node linkType: hard +"getos@npm:^3.2.1": + version: 3.2.1 + resolution: "getos@npm:3.2.1" + dependencies: + async: "npm:^3.2.0" + checksum: 10c0/21556fca1da4dfc8f1707261b4f9ff19b9e9bfefa76478249d2abddba3cd014bd6c5360634add1590b27e0b27d422e8f997dddaa0234aae1fa4c54f33f82e841 + languageName: node + linkType: hard + +"getpass@npm:^0.1.1": + version: 0.1.7 + resolution: "getpass@npm:0.1.7" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/c13f8530ecf16fc509f3fa5cd8dd2129ffa5d0c7ccdf5728b6022d52954c2d24be3706b4cdf15333eec52f1fbb43feb70a01dabc639d1d10071e371da8aaa52f + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -2787,6 +3388,15 @@ __metadata: languageName: node linkType: hard +"global-dirs@npm:^3.0.0": + version: 3.0.1 + resolution: "global-dirs@npm:3.0.1" + dependencies: + ini: "npm:2.0.0" + checksum: 10c0/ef65e2241a47ff978f7006a641302bc7f4c03dfb98783d42bf7224c136e3a06df046e70ee3a010cf30214114755e46c9eb5eb1513838812fbbe0d92b14c25080 + languageName: node + linkType: hard + "globals@npm:^14.0.0": version: 14.0.0 resolution: "globals@npm:14.0.0" @@ -2825,7 +3435,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -2887,6 +3497,16 @@ __metadata: languageName: node linkType: hard +"hasha@npm:5.2.2": + version: 5.2.2 + resolution: "hasha@npm:5.2.2" + dependencies: + is-stream: "npm:^2.0.0" + type-fest: "npm:^0.8.0" + checksum: 10c0/9d10d4e665a37beea6e18ba3a0c0399a05b26e505c5ff2fe9115b64fedb3ca95f68c89cf15b08ee4d09fd3064b5e1bfc8e8247353c7aa6b7388471d0f86dca74 + languageName: node + linkType: hard + "hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -2929,6 +3549,17 @@ __metadata: languageName: node linkType: hard +"http-signature@npm:~1.4.0": + version: 1.4.0 + resolution: "http-signature@npm:1.4.0" + dependencies: + assert-plus: "npm:^1.0.0" + jsprim: "npm:^2.0.2" + sshpk: "npm:^1.18.0" + checksum: 10c0/b9806f5a9ed82a146589837d175c43b596b1cc8c9431665e83d47c152aa8a4629dd1b1e050f8f56e7f17f62cf97b58e888775093310441ddee5f105f28646b2b + languageName: node + linkType: hard + "https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6": version: 7.0.6 resolution: "https-proxy-agent@npm:7.0.6" @@ -2939,6 +3570,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^1.1.1": + version: 1.1.1 + resolution: "human-signals@npm:1.1.1" + checksum: 10c0/18810ed239a7a5e23fb6c32d0fd4be75d7cd337a07ad59b8dbf0794cb0761e6e628349ee04c409e605fe55344716eab5d0a47a62ba2a2d0d367c89a2b4247b1e + languageName: node + linkType: hard + "iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -2948,6 +3586,13 @@ __metadata: languageName: node linkType: hard +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + "ignore@npm:^5.2.0, ignore@npm:^5.3.1": version: 5.3.2 resolution: "ignore@npm:5.3.2" @@ -2979,6 +3624,20 @@ __metadata: languageName: node linkType: hard +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"ini@npm:2.0.0": + version: 2.0.0 + resolution: "ini@npm:2.0.0" + checksum: 10c0/2e0c8f386369139029da87819438b20a1ff3fe58372d93fb1a86e9d9344125ace3a806b8ec4eb160a46e64cbc422fe68251869441676af49b7fc441af2389c25 + languageName: node + linkType: hard + "internal-slot@npm:^1.0.7, internal-slot@npm:^1.1.0": version: 1.1.0 resolution: "internal-slot@npm:1.1.0" @@ -3117,6 +3776,16 @@ __metadata: languageName: node linkType: hard +"is-installed-globally@npm:~0.4.0": + version: 0.4.0 + resolution: "is-installed-globally@npm:0.4.0" + dependencies: + global-dirs: "npm:^3.0.0" + is-path-inside: "npm:^3.0.2" + checksum: 10c0/f3e6220ee5824b845c9ed0d4b42c24272701f1f9926936e30c0e676254ca5b34d1b92c6205cae11b283776f9529212c0cdabb20ec280a6451677d6493ca9c22d + languageName: node + linkType: hard + "is-map@npm:^2.0.3": version: 2.0.3 resolution: "is-map@npm:2.0.3" @@ -3148,6 +3817,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^3.0.2": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + "is-potential-custom-element-name@npm:^1.0.1": version: 1.0.1 resolution: "is-potential-custom-element-name@npm:1.0.1" @@ -3183,6 +3859,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + "is-string@npm:^1.0.7, is-string@npm:^1.1.1": version: 1.1.1 resolution: "is-string@npm:1.1.1" @@ -3213,6 +3896,20 @@ __metadata: languageName: node linkType: hard +"is-typedarray@npm:~1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: 10c0/00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 + languageName: node + linkType: hard + "is-weakmap@npm:^2.0.2": version: 2.0.2 resolution: "is-weakmap@npm:2.0.2" @@ -3260,6 +3957,13 @@ __metadata: languageName: node linkType: hard +"isstream@npm:~0.1.2": + version: 0.1.2 + resolution: "isstream@npm:0.1.2" + checksum: 10c0/a6686a878735ca0a48e0d674dd6d8ad31aedfaf70f07920da16ceadc7577b46d67179a60b313f2e6860cb097a2c2eb3cbd0b89e921ae89199a59a17c3273d66f + languageName: node + linkType: hard + "iterator.prototype@npm:^1.1.3": version: 1.1.4 resolution: "iterator.prototype@npm:1.1.4" @@ -3319,6 +4023,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:~0.1.0": + version: 0.1.1 + resolution: "jsbn@npm:0.1.1" + checksum: 10c0/e046e05c59ff880ee4ef68902dbdcb6d2f3c5d60c357d4d68647dc23add556c31c0e5f41bdb7e69e793dd63468bd9e085da3636341048ef577b18f5b713877c0 + languageName: node + linkType: hard + "jsdom@npm:^27.1.0": version: 27.1.0 resolution: "jsdom@npm:27.1.0" @@ -3366,6 +4077,13 @@ __metadata: languageName: node linkType: hard +"json-schema@npm:0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 + languageName: node + linkType: hard + "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -3373,6 +4091,38 @@ __metadata: languageName: node linkType: hard +"json-stringify-safe@npm:~5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.2.0 + resolution: "jsonfile@npm:6.2.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d + languageName: node + linkType: hard + +"jsprim@npm:^2.0.2": + version: 2.0.2 + resolution: "jsprim@npm:2.0.2" + dependencies: + assert-plus: "npm:1.0.0" + extsprintf: "npm:1.3.0" + json-schema: "npm:0.4.0" + verror: "npm:1.10.0" + checksum: 10c0/677be2d41df536c92c6d0114a492ef197084018cfbb1a3e10b1fa1aad889564b2e3a7baa6af7949cc2d73678f42368b0be165a26bd4e4de6883a30dd6a24e98d + languageName: node + linkType: hard + "jsx-ast-utils@npm:^2.4.1 || ^3.0.0": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" @@ -3394,6 +4144,13 @@ __metadata: languageName: node linkType: hard +"lazy-ass@npm:^1.6.0": + version: 1.6.0 + resolution: "lazy-ass@npm:1.6.0" + checksum: 10c0/4af6cb9a333fbc811268c745f9173fba0f99ecb817cc9c0fae5dbf986b797b730ff525504128f6623b91aba32b02124553a34b0d14de3762b637b74d7233f3bd + languageName: node + linkType: hard + "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -3427,6 +4184,27 @@ __metadata: languageName: node linkType: hard +"listr2@npm:^3.8.3": + version: 3.14.0 + resolution: "listr2@npm:3.14.0" + dependencies: + cli-truncate: "npm:^2.1.0" + colorette: "npm:^2.0.16" + log-update: "npm:^4.0.0" + p-map: "npm:^4.0.0" + rfdc: "npm:^1.3.0" + rxjs: "npm:^7.5.1" + through: "npm:^2.3.8" + wrap-ansi: "npm:^7.0.0" + peerDependencies: + enquirer: ">= 2.3.0 < 3" + peerDependenciesMeta: + enquirer: + optional: true + checksum: 10c0/8301703876ad6bf50cd769e9c1169c2aa435951d69d4f54fc202a13c1b6006a9b3afbcf9842440eb22f08beec4d311d365e31d4ed2e0fcabf198d8085b06a421 + languageName: node + linkType: hard + "load-tsconfig@npm:^0.2.3": version: 0.2.5 resolution: "load-tsconfig@npm:0.2.5" @@ -3450,6 +4228,13 @@ __metadata: languageName: node linkType: hard +"lodash.once@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.once@npm:4.1.1" + checksum: 10c0/46a9a0a66c45dd812fcc016e46605d85ad599fe87d71a02f6736220554b52ffbe82e79a483ad40f52a8a95755b0d1077fba259da8bfb6694a7abbf4a48f1fc04 + languageName: node + linkType: hard + "lodash.sortby@npm:^4.7.0": version: 4.7.0 resolution: "lodash.sortby@npm:4.7.0" @@ -3457,6 +4242,35 @@ __metadata: languageName: node linkType: hard +"lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"log-symbols@npm:^4.0.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: "npm:^4.1.0" + is-unicode-supported: "npm:^0.1.0" + checksum: 10c0/67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 + languageName: node + linkType: hard + +"log-update@npm:^4.0.0": + version: 4.0.0 + resolution: "log-update@npm:4.0.0" + dependencies: + ansi-escapes: "npm:^4.3.0" + cli-cursor: "npm:^3.1.0" + slice-ansi: "npm:^4.0.0" + wrap-ansi: "npm:^6.2.0" + checksum: 10c0/18b299e230432a156f2535660776406d15ba8bb7817dd3eaadd58004b363756d4ecaabcd658f9949f90b62ea7d3354423be3fdeb7a201ab951ec0e8d6139af86 + languageName: node + linkType: hard + "loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -3563,6 +4377,13 @@ __metadata: languageName: node linkType: hard +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + "merge2@npm:^1.3.0": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -3580,6 +4401,29 @@ __metadata: languageName: node linkType: hard +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + "minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -3598,6 +4442,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:^1.2.8": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" @@ -3696,7 +4547,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.1.3": +"ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -3768,6 +4619,15 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^4.0.0": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: "npm:^3.0.0" + checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac + languageName: node + linkType: hard + "object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -3835,6 +4695,24 @@ __metadata: languageName: node linkType: hard +"once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -3849,6 +4727,13 @@ __metadata: languageName: node linkType: hard +"ospath@npm:^1.2.2": + version: 1.2.2 + resolution: "ospath@npm:1.2.2" + checksum: 10c0/e485a6ca91964f786163408b093860bf26a9d9704d83ec39ccf463b9f11ea712b780b23b73d1f64536de62c5f66244dd94ed83fc9ffe3c1564dd1eed5cdae923 + languageName: node + linkType: hard + "p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" @@ -3867,6 +4752,15 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + "p-map@npm:^7.0.2": version: 7.0.3 resolution: "p-map@npm:7.0.3" @@ -3915,7 +4809,7 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^3.1.0": +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c @@ -3946,6 +4840,20 @@ __metadata: languageName: node linkType: hard +"pend@npm:~1.2.0": + version: 1.2.0 + resolution: "pend@npm:1.2.0" + checksum: 10c0/8a87e63f7a4afcfb0f9f77b39bb92374afc723418b9cb716ee4257689224171002e07768eeade4ecd0e86f1fa3d8f022994219fb45634f2dbd78c6803e452458 + languageName: node + linkType: hard + +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 + languageName: node + linkType: hard + "picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -3974,6 +4882,13 @@ __metadata: languageName: node linkType: hard +"pify@npm:^2.2.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc + languageName: node + linkType: hard + "pirates@npm:^4.0.1": version: 4.0.7 resolution: "pirates@npm:4.0.7" @@ -4067,6 +4982,13 @@ __metadata: languageName: node linkType: hard +"pretty-bytes@npm:^5.6.0": + version: 5.6.0 + resolution: "pretty-bytes@npm:5.6.0" + checksum: 10c0/f69f494dcc1adda98dbe0e4a36d301e8be8ff99bfde7a637b2ee2820e7cb583b0fc0f3a63b0e3752c01501185a5cf38602c7be60da41bdf84ef5b70e89c370f3 + languageName: node + linkType: hard + "proc-log@npm:^5.0.0": version: 5.0.0 resolution: "proc-log@npm:5.0.0" @@ -4074,6 +4996,13 @@ __metadata: languageName: node linkType: hard +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 + languageName: node + linkType: hard + "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -4095,6 +5024,23 @@ __metadata: languageName: node linkType: hard +"proxy-from-env@npm:1.0.0": + version: 1.0.0 + resolution: "proxy-from-env@npm:1.0.0" + checksum: 10c0/c64df9b21f7f820dc882cd6f7f81671840acd28b9688ee3e3e6af47a56ec7f0edcabe5bc96b32b26218b35eeff377bcc27ac27f89b6b21401003e187ff13256f + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.3 + resolution: "pump@npm:3.0.3" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/ada5cdf1d813065bbc99aa2c393b8f6beee73b5de2890a8754c9f488d7323ffd2ca5f5a0943b48934e3fcbd97637d0337369c3c631aeb9614915db629f1c75c9 + languageName: node + linkType: hard + "punycode.js@npm:^2.3.1": version: 2.3.1 resolution: "punycode.js@npm:2.3.1" @@ -4109,6 +5055,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:6.14.0": + version: 6.14.0 + resolution: "qs@npm:6.14.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -4116,6 +5071,17 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^19.1.1": + version: 19.2.0 + resolution: "react-dom@npm:19.2.0" + dependencies: + scheduler: "npm:^0.27.0" + peerDependencies: + react: ^19.2.0 + checksum: 10c0/fa2cae05248d01288e91523b590ce4e7635b1e13f1344e225f850d722a8da037bf0782f63b1c1d46353334e0c696909b82e582f8cad607948fde6f7646cc18d9 + languageName: node + linkType: hard + "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -4123,6 +5089,13 @@ __metadata: languageName: node linkType: hard +"react@npm:^19.1.1": + version: 19.2.0 + resolution: "react@npm:19.2.0" + checksum: 10c0/1b6d64eacb9324725bfe1e7860cb7a6b8a34bc89a482920765ebff5c10578eb487e6b46b2f0df263bd27a25edbdae2c45e5ea5d81ae61404301c1a7192c38330 + languageName: node + linkType: hard + "readdirp@npm:^4.0.1": version: 4.1.2 resolution: "readdirp@npm:4.1.2" @@ -4165,6 +5138,15 @@ __metadata: languageName: node linkType: hard +"request-progress@npm:^3.0.0": + version: 3.0.0 + resolution: "request-progress@npm:3.0.0" + dependencies: + throttleit: "npm:^1.0.0" + checksum: 10c0/d5dcb7155a738572c8781436f6b418e866066a30eea0f99a9ab26b6f0ed6c13637462bba736357de3899b8d30431ee9202ac956a5f8ccdd0d9d1ed0962000d14 + languageName: node + linkType: hard + "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" @@ -4212,6 +5194,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -4226,6 +5218,13 @@ __metadata: languageName: node linkType: hard +"rfdc@npm:^1.3.0": + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 + languageName: node + linkType: hard + "rimraf@npm:^5.0.5": version: 5.0.10 resolution: "rimraf@npm:5.0.10" @@ -4327,6 +5326,15 @@ __metadata: languageName: node linkType: hard +"rxjs@npm:^7.5.1": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 + languageName: node + linkType: hard + "safe-array-concat@npm:^1.1.2, safe-array-concat@npm:^1.1.3": version: 1.1.3 resolution: "safe-array-concat@npm:1.1.3" @@ -4340,6 +5348,13 @@ __metadata: languageName: node linkType: hard +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + "safe-regex-test@npm:^1.1.0": version: 1.1.0 resolution: "safe-regex-test@npm:1.1.0" @@ -4351,7 +5366,7 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3.0.0": +"safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 @@ -4367,6 +5382,13 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.27.0": + version: 0.27.0 + resolution: "scheduler@npm:0.27.0" + checksum: 10c0/4f03048cb05a3c8fddc45813052251eca00688f413a3cee236d984a161da28db28ba71bd11e7a3dd02f7af84ab28d39fb311431d3b3772fed557945beb00c452 + languageName: node + linkType: hard + "semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -4385,6 +5407,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.7.1": + version: 7.7.3 + resolution: "semver@npm:7.7.3" + bin: + semver: bin/semver.js + checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e + languageName: node + linkType: hard + "set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -4482,6 +5513,13 @@ __metadata: languageName: node linkType: hard +"signal-exit@npm:^3.0.2": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + "signal-exit@npm:^4.0.1": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" @@ -4489,6 +5527,28 @@ __metadata: languageName: node linkType: hard +"slice-ansi@npm:^3.0.0": + version: 3.0.0 + resolution: "slice-ansi@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + astral-regex: "npm:^2.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + checksum: 10c0/88083c9d0ca67d09f8b4c78f68833d69cabbb7236b74df5d741ad572bbf022deaf243fa54009cd434350622a1174ab267710fcc80a214ecc7689797fe00cb27c + languageName: node + linkType: hard + +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + astral-regex: "npm:^2.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + checksum: 10c0/6c25678db1270d4793e0327620f1e0f9f5bea4630123f51e9e399191bc52c87d6e6de53ed33538609e5eacbd1fab769fae00f3705d08d029f02102a540648918 + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -4540,6 +5600,27 @@ __metadata: languageName: node linkType: hard +"sshpk@npm:^1.18.0": + version: 1.18.0 + resolution: "sshpk@npm:1.18.0" + dependencies: + asn1: "npm:~0.2.3" + assert-plus: "npm:^1.0.0" + bcrypt-pbkdf: "npm:^1.0.0" + dashdash: "npm:^1.12.0" + ecc-jsbn: "npm:~0.1.1" + getpass: "npm:^0.1.1" + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.0.2" + tweetnacl: "npm:~0.14.0" + bin: + sshpk-conv: bin/sshpk-conv + sshpk-sign: bin/sshpk-sign + sshpk-verify: bin/sshpk-verify + checksum: 10c0/e516e34fa981cfceef45fd2e947772cc70dbd57523e5c608e2cd73752ba7f8a99a04df7c3ed751588e8d91956b6f16531590b35d3489980d1c54c38bebcd41b1 + languageName: node + linkType: hard + "ssri@npm:^12.0.0": version: 12.0.0 resolution: "ssri@npm:12.0.0" @@ -4563,7 +5644,7 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -4671,6 +5752,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f + languageName: node + linkType: hard + "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -4705,6 +5793,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^8.1.1": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -4770,6 +5867,20 @@ __metadata: languageName: node linkType: hard +"throttleit@npm:^1.0.0": + version: 1.0.1 + resolution: "throttleit@npm:1.0.1" + checksum: 10c0/4d41a1bf467646b1aa7bec0123b78452a0e302d7344f6a67e43e68434f0a02ea3ba44df050a40c69adeb9cae3cbf6b36b38cfe94bcc3c4a8243c9b63e38e059b + languageName: node + linkType: hard + +"through@npm:^2.3.8": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc + languageName: node + linkType: hard + "tinybench@npm:^2.9.0": version: 2.9.0 resolution: "tinybench@npm:2.9.0" @@ -4811,6 +5922,13 @@ __metadata: languageName: node linkType: hard +"tldts-core@npm:^6.1.86": + version: 6.1.86 + resolution: "tldts-core@npm:6.1.86" + checksum: 10c0/8133c29375f3f99f88fce5f4d62f6ecb9532b106f31e5423b27c1eb1b6e711bd41875184a456819ceaed5c8b94f43911b1ad57e25c6eb86e1fc201228ff7e2af + languageName: node + linkType: hard + "tldts-core@npm:^7.0.17": version: 7.0.17 resolution: "tldts-core@npm:7.0.17" @@ -4818,6 +5936,17 @@ __metadata: languageName: node linkType: hard +"tldts@npm:^6.1.32": + version: 6.1.86 + resolution: "tldts@npm:6.1.86" + dependencies: + tldts-core: "npm:^6.1.86" + bin: + tldts: bin/cli.js + checksum: 10c0/27ae7526d9d78cb97b2de3f4d102e0b4321d1ccff0648a7bb0e039ed54acbce86bacdcd9cd3c14310e519b457854e7bafbef1f529f58a1e217a737ced63f0940 + languageName: node + linkType: hard + "tldts@npm:^7.0.5": version: 7.0.17 resolution: "tldts@npm:7.0.17" @@ -4829,6 +5958,13 @@ __metadata: languageName: node linkType: hard +"tmp@npm:~0.2.3": + version: 0.2.5 + resolution: "tmp@npm:0.2.5" + checksum: 10c0/cee5bb7d674bb4ba3ab3f3841c2ca7e46daeb2109eec395c1ec7329a91d52fcb21032b79ac25161a37b2565c4858fefab927af9735926a113ef7bac9091a6e0e + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -4838,6 +5974,15 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:^5.0.0": + version: 5.1.2 + resolution: "tough-cookie@npm:5.1.2" + dependencies: + tldts: "npm:^6.1.32" + checksum: 10c0/5f95023a47de0f30a902bba951664b359725597d8adeabc66a0b93a931c3af801e1e697dae4b8c21a012056c0ea88bd2bf4dfe66b2adcf8e2f42cd9796fe0626 + languageName: node + linkType: hard + "tough-cookie@npm:^6.0.0": version: 6.0.0 resolution: "tough-cookie@npm:6.0.0" @@ -4865,7 +6010,7 @@ __metadata: languageName: node linkType: hard -"tree-kill@npm:^1.2.2": +"tree-kill@npm:1.2.2, tree-kill@npm:^1.2.2": version: 1.2.2 resolution: "tree-kill@npm:1.2.2" bin: @@ -4899,7 +6044,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.6.2": +"tslib@npm:^2.1.0, tslib@npm:^2.6.2": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 @@ -4948,6 +6093,22 @@ __metadata: languageName: node linkType: hard +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + +"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2 + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -4957,6 +6118,20 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-fest@npm:^0.8.0": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" @@ -5146,6 +6321,20 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"untildify@npm:^4.0.0": + version: 4.0.0 + resolution: "untildify@npm:4.0.0" + checksum: 10c0/d758e624c707d49f76f7511d75d09a8eda7f2020d231ec52b67ff4896bcf7013be3f9522d8375f57e586e9a2e827f5641c7e06ee46ab9c435fc2b2b2e9de517a + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -5155,6 +6344,26 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 + languageName: node + linkType: hard + +"verror@npm:1.10.0": + version: 1.10.0 + resolution: "verror@npm:1.10.0" + dependencies: + assert-plus: "npm:^1.0.0" + core-util-is: "npm:1.0.2" + extsprintf: "npm:^1.2.0" + checksum: 10c0/37ccdf8542b5863c525128908ac80f2b476eed36a32cb944de930ca1e2e78584cc435c4b9b4c68d0fc13a47b45ff364b4be43aa74f8804f9050140f660fb660d + languageName: node + linkType: hard + "vite-plugin-cogs-sdk@workspace:packages/vite-plugin": version: 0.0.0-use.local resolution: "vite-plugin-cogs-sdk@workspace:packages/vite-plugin" @@ -5558,7 +6767,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -5569,6 +6778,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + "wrap-ansi@npm:^8.1.0": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" @@ -5580,6 +6800,13 @@ __metadata: languageName: node linkType: hard +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + "ws@npm:^8.18.3": version: 8.18.3 resolution: "ws@npm:8.18.3" @@ -5632,6 +6859,16 @@ __metadata: languageName: node linkType: hard +"yauzl@npm:^2.10.0": + version: 2.10.0 + resolution: "yauzl@npm:2.10.0" + dependencies: + buffer-crc32: "npm:~0.2.3" + fd-slicer: "npm:~1.1.0" + checksum: 10c0/f265002af7541b9ec3589a27f5fb8f11cf348b53cc15e2751272e3c062cd73f3e715bc72d43257de71bbaecae446c3f1b14af7559e8ab0261625375541816422 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" From 5ffe763dbac04f599e471c67d2a62ec31803d2d9 Mon Sep 17 00:00:00 2001 From: Guy Balaam Date: Mon, 22 Dec 2025 09:03:00 +0000 Subject: [PATCH 02/12] WIP --- package.json | 1 + .../javascript/cypress/component/Audio.cy.ts | 30 --- .../cypress/component/Playback.cy.ts | 2 +- .../javascript/cypress/component/Volume.cy.ts | 2 +- packages/javascript/src/MediaManager.ts | 58 ------ .../javascript/src/state-based/ClipManager.ts | 3 + .../src/state-based/ImageManager.ts | 15 ++ .../{ => state-based}/StableMediaPlayer.ts | 76 ++----- .../src/state-based/SurfaceManager.ts | 57 ++++++ yarn.lock | 192 +++++++++++++++++- 10 files changed, 288 insertions(+), 148 deletions(-) delete mode 100644 packages/javascript/cypress/component/Audio.cy.ts delete mode 100644 packages/javascript/src/MediaManager.ts create mode 100644 packages/javascript/src/state-based/ClipManager.ts create mode 100644 packages/javascript/src/state-based/ImageManager.ts rename packages/javascript/src/{ => state-based}/StableMediaPlayer.ts (53%) create mode 100644 packages/javascript/src/state-based/SurfaceManager.ts diff --git a/package.json b/package.json index b6933ca..532c80e 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ }, "devDependencies": { "@types/ws": "^8", + "@vitest/coverage-v8": "^4.0.16", "vite": "^7.2.0", "ws": "^8.18.3" } diff --git a/packages/javascript/cypress/component/Audio.cy.ts b/packages/javascript/cypress/component/Audio.cy.ts deleted file mode 100644 index 12ca0dc..0000000 --- a/packages/javascript/cypress/component/Audio.cy.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { MediaManager } from '../../src/MediaManager'; - -describe('Audio sync tests', () => { - it('sounds okay', () => { - const manager1 = new MediaManager([ - { - id: '1', - url: 'cypress/fixtures/test.mp3', - startTime: Date.now(), - endTime: Date.now() + 60_000, - loop: false, - volume: 1, - }, - ]); - const manager2 = new MediaManager([ - { - id: '1', - url: 'cypress/fixtures/test.mp3', - startTime: Date.now(), - endTime: Date.now() + 60_000, - loop: false, - volume: 1, - }, - ]); - const parent = document.createElement('div'); - parent.appendChild(manager1.element); - parent.appendChild(manager2.element); - cy.mount(parent); - }); -}); diff --git a/packages/javascript/cypress/component/Playback.cy.ts b/packages/javascript/cypress/component/Playback.cy.ts index 0558ff4..80c2a99 100644 --- a/packages/javascript/cypress/component/Playback.cy.ts +++ b/packages/javascript/cypress/component/Playback.cy.ts @@ -1,4 +1,4 @@ -import { MediaManager } from '../../src/MediaManager'; +import { MediaManager } from '../../src/state-based/SurfaceManager'; describe('Playback tests', () => { it('can buffer without playing', () => { diff --git a/packages/javascript/cypress/component/Volume.cy.ts b/packages/javascript/cypress/component/Volume.cy.ts index d5af745..57d5f6f 100644 --- a/packages/javascript/cypress/component/Volume.cy.ts +++ b/packages/javascript/cypress/component/Volume.cy.ts @@ -1,4 +1,4 @@ -import { MediaManager } from '../../src/MediaManager'; +import { MediaManager } from '../../src/state-based/SurfaceManager'; const INITIAL_VOLUME = 0; const CHANGED_VOLUME = 1; diff --git a/packages/javascript/src/MediaManager.ts b/packages/javascript/src/MediaManager.ts deleted file mode 100644 index 1cdaf6a..0000000 --- a/packages/javascript/src/MediaManager.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { getMediaTagName, StableMediaPlayer } from './StableMediaPlayer'; - -export interface MediaState { - id: string; - url: string; - startTime: number; - endTime: number; - volume: number; - loop: boolean; -} - -export class MediaManager { - private currentMediaState: MediaState[] = []; - - private _element: HTMLDivElement = document.createElement('div'); - public get element() { - return this._element; - } - - constructor(testStates?: MediaState[]) { - this.init(testStates); - } - - async init(testStates?: MediaState[]) { - const medias = testStates ?? (await this.fetchCurrentMedia()); - medias.forEach((media) => { - this.createMediaPlayer(media); - }); - } - - /** - * This will be called at initialization. - * This could be polled or COGS could emit events - */ - async fetchCurrentMedia(): Promise { - return [ - { - id: '1', - url: 'cypress/fixtures/test_720p_h264.mov', - startTime: Date.now(), - endTime: Date.now() + 1000, - loop: true, - volume: 1, - }, - ]; - } - - createMediaPlayer(state: MediaState) { - const tagName = getMediaTagName(state.url); - - if (tagName === 'img') { - return; - } - - const stable = new StableMediaPlayer(state); - this._element.replaceChildren(...[stable.element]); - } -} diff --git a/packages/javascript/src/state-based/ClipManager.ts b/packages/javascript/src/state-based/ClipManager.ts new file mode 100644 index 0000000..28b0f5f --- /dev/null +++ b/packages/javascript/src/state-based/ClipManager.ts @@ -0,0 +1,3 @@ +export abstract class ClipManager { + protected abstract destroy(): void; +} diff --git a/packages/javascript/src/state-based/ImageManager.ts b/packages/javascript/src/state-based/ImageManager.ts new file mode 100644 index 0000000..c39e814 --- /dev/null +++ b/packages/javascript/src/state-based/ImageManager.ts @@ -0,0 +1,15 @@ +import { ImageState } from '../types/MediaSchema'; +import { ClipManager } from './ClipManager'; + +export class ImageManager extends ClipManager { + protected destroy(): void { + // do nothing + } + + private _element: HTMLImageElement; + + constructor(state: ImageState) { + super(); + this._element = document.createElement('img'); + } +} diff --git a/packages/javascript/src/StableMediaPlayer.ts b/packages/javascript/src/state-based/StableMediaPlayer.ts similarity index 53% rename from packages/javascript/src/StableMediaPlayer.ts rename to packages/javascript/src/state-based/StableMediaPlayer.ts index ec82e48..3c18a13 100644 --- a/packages/javascript/src/StableMediaPlayer.ts +++ b/packages/javascript/src/state-based/StableMediaPlayer.ts @@ -1,56 +1,28 @@ -import { MediaState } from './MediaManager'; - -// Common media extensions -// https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types/Common_types -const SUPPORTED_IMAGE_EXTENSIONS = new Set(['apng', 'avif', 'bmp', 'gif', 'ico', 'jpeg', 'jpg', 'png', 'svg', 'tif', 'tiff', 'webp']); -const SUPPORTED_AUDIO_EXTENSIONS = new Set(['aac', 'mp3']); -const SUPPORTED_VIDEO_EXTENSIONS = new Set(['avi', 'mp4', 'mpeg', 'mov', 'ogv']); - -export const getMediaTagName = (filename: string): 'audio' | 'img' | 'video' => { - const extension = filename.split('.').pop(); - if (extension === undefined) { - throw new Error(`Unknown extension of ${filename}`); - } - if (SUPPORTED_VIDEO_EXTENSIONS.has(extension)) { - return 'video'; - } - if (SUPPORTED_AUDIO_EXTENSIONS.has(extension)) { - return 'audio'; - } - if (SUPPORTED_IMAGE_EXTENSIONS.has(extension)) { - return 'img'; - } - throw new Error(`Unknown extension: ${extension}`); -}; +import { ClipManager } from './ClipManager'; +import { AudioState, MediaClipState, VideoState } from '../types/MediaSchema'; const CHECK_MEDIA_POLL_MS = 1_000; const TARGET_SYNC_THRESHOLD_MS = 10; // If we're closer than this we're good enough const MAX_SYNC_THRESHOLD_MS = 1_000; // If we're further away than this, we'll seek instead const MAX_PLAYBACK_RATE_ADJUSTMENT = 0.2; -export class StableMediaPlayer { - private _abort = new AbortController(); - private _state: MediaState; +export class StableMediaPlayer extends ClipManager { + protected destroy(): void { + this._abort = true; + } + private _abort = false; + private _state: MediaClipState; private _element: HTMLMediaElement; - private defaultPlaybackRate = 1; // TODO: Calculate from manifest, and check with video duration + private defaultPlaybackRate = 1; - constructor(state: MediaState) { - const tagName = getMediaTagName(state.url); - if (tagName === 'img') { - throw new Error('Cannot construct StableMediaPlayer for images'); - } + constructor(state: AudioState | VideoState) { + super(); this._state = state; - this._element = document.createElement(tagName); + this._element = document.createElement(state.type); this.stabilize(); } - public get element() { - return this._element; - } - public get abort() { - return this._abort; - } - public set state(newValue: MediaState) { + public set state(newValue: MediaClipState) { this._state = this.state; } @@ -63,22 +35,22 @@ export class StableMediaPlayer { } private async stabilize() { - this._element.src = this._state.url; + this._element.src = this._state.file; this._element.volume = this._state.volume; this._element.loop = this._state.loop; - while (!this._abort.signal.aborted) { + while (!this._abort) { const { startTime, endTime, volume, loop } = this._state; const now = Date.now(); // Has volume changed? - if (this.element.volume !== volume) { + if (this._element.volume !== volume) { console.warn(`Media ${this._state.id} has changed volume`); - this.element.volume = volume; + this._element.volume = volume; } // Does the media loop? - if (this.element.loop !== loop) { + if (this._element.loop !== loop) { console.warn(`Media ${this._state.id} has changed loop`); this._element.loop = loop; } @@ -88,21 +60,14 @@ export class StableMediaPlayer { this._element.play().catch(console.warn); } - // Has media exhausted? - if (now > endTime && !loop) { - this.element.remove(); - this._abort.abort(); - continue; - } - // Is the media queued? if (now < startTime) { - this.element.pause(); + this._element.pause(); continue; } const targetTime = now - startTime; - const currentTime = this.element.currentTime * 1000; + const currentTime = this._element.currentTime * 1000; const deltaTime = currentTime - targetTime; const deltaTimeAbs = Math.abs(deltaTime); @@ -124,7 +89,6 @@ export class StableMediaPlayer { this._element.playbackRate = this.defaultPlaybackRate; console.warn(`Unknown time error: ${deltaTime}`); } - console.log(deltaTime, this._element.playbackRate); await new Promise((res) => setTimeout(res, CHECK_MEDIA_POLL_MS)); } diff --git a/packages/javascript/src/state-based/SurfaceManager.ts b/packages/javascript/src/state-based/SurfaceManager.ts new file mode 100644 index 0000000..1c721e8 --- /dev/null +++ b/packages/javascript/src/state-based/SurfaceManager.ts @@ -0,0 +1,57 @@ +import { StableMediaPlayer } from './StableMediaPlayer'; +import { MediaClipState, MediaSurfaceState } from '../types/MediaSchema'; + +const DATA_CLIP_ID = 'data-clip-id'; +type TaggedElement = HTMLElement & { [DATA_CLIP_ID]?: string }; + +export class MediaManager { + private state: MediaSurfaceState = {}; + + private _element: HTMLDivElement = document.createElement('div'); + public get element() { + return this._element; + } + + constructor(testState?: MediaSurfaceState) { + this.state = testState || {}; + this.update(); + } + + async update() { + this.cleanupElements(); + + const currentMediaElements = new Set([...this._element.children].map((child) => (child as TaggedElement)[DATA_CLIP_ID])); + Object.entries(this.state).forEach(([clipId, clip]) => { + if (!currentMediaElements.has(clipId)) { + // Create new media element + } + }); + } + + private cleanupElements() { + for (const childElement of this._element.children) { + const child = childElement as TaggedElement; + const clipId = child[DATA_CLIP_ID]; + // Remove unknown elements + if (!clipId) { + child.remove(); + continue; + } + // Remove stale elements + if (this.state[clipId] === undefined) { + child.remove(); + } + } + } + + createMediaPlayer(clip: MediaClipState) { + const tagName = getMediaTagName(state.url); + + if (tagName === 'img') { + return; + } + + const stable = new StableMediaPlayer(state); + this._element.replaceChildren(...[stable.element]); + } +} diff --git a/yarn.lock b/yarn.lock index bee3826..4c979ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -45,6 +45,48 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 10c0/42aaebed91f739a41f3d80b72752d1f95fd7c72394e8e4bd7cdd88817e0774d80a432451bcba17c2c642c257c483bf1d409dd4548883429ea9493a3bc4ab0847 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/parser@npm:7.28.5" + dependencies: + "@babel/types": "npm:^7.28.5" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/5bbe48bf2c79594ac02b490a41ffde7ef5aa22a9a88ad6bcc78432a6ba8a9d638d531d868bd1f104633f1f6bba9905746e15185b8276a3756c42b765d131b1ef + languageName: node + linkType: hard + +"@babel/types@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/types@npm:7.28.5" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.28.5" + checksum: 10c0/a5a483d2100befbf125793640dec26b90b95fd233a94c19573325898a5ce1e52cdfa96e495c7dcc31b5eca5b66ce3e6d4a0f5a4a62daec271455959f208ab08a + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^1.0.2": + version: 1.0.2 + resolution: "@bcoe/v8-coverage@npm:1.0.2" + checksum: 10c0/1eb1dc93cc17fb7abdcef21a6e7b867d6aa99a7ec88ec8207402b23d9083ab22a8011213f04b2cf26d535f1d22dc26139b7929e6c2134c254bd1e14ba5e678c3 + languageName: node + linkType: hard + "@clockworkdog/cogs-client-react@workspace:packages/react": version: 0.0.0-use.local resolution: "@clockworkdog/cogs-client-react@workspace:packages/react" @@ -661,6 +703,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.31": + version: 0.3.31 + resolution: "@jridgewell/trace-mapping@npm:0.3.31" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/4b30ec8cd56c5fd9a661f088230af01e0c1a3888d11ffb6b47639700f71225be21d1f7e168048d6d4f9449207b978a235c07c8f15c07705685d16dc06280e9d9 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.24": version: 0.3.29 resolution: "@jridgewell/trace-mapping@npm:0.3.29" @@ -1315,6 +1367,31 @@ __metadata: languageName: node linkType: hard +"@vitest/coverage-v8@npm:^4.0.16": + version: 4.0.16 + resolution: "@vitest/coverage-v8@npm:4.0.16" + dependencies: + "@bcoe/v8-coverage": "npm:^1.0.2" + "@vitest/utils": "npm:4.0.16" + ast-v8-to-istanbul: "npm:^0.3.8" + istanbul-lib-coverage: "npm:^3.2.2" + istanbul-lib-report: "npm:^3.0.1" + istanbul-lib-source-maps: "npm:^5.0.6" + istanbul-reports: "npm:^3.2.0" + magicast: "npm:^0.5.1" + obug: "npm:^2.1.1" + std-env: "npm:^3.10.0" + tinyrainbow: "npm:^3.0.3" + peerDependencies: + "@vitest/browser": 4.0.16 + vitest: 4.0.16 + peerDependenciesMeta: + "@vitest/browser": + optional: true + checksum: 10c0/3edd18dc994949d5180a3fbd9c1af4ca4756735e82cffb73b3c0918ad23a4c71521287a205cc61a39b63453448e9bfd207f82b2d472fd757dfbb47987dbe99a8 + languageName: node + linkType: hard + "@vitest/expect@npm:4.0.6": version: 4.0.6 resolution: "@vitest/expect@npm:4.0.6" @@ -1348,6 +1425,15 @@ __metadata: languageName: node linkType: hard +"@vitest/pretty-format@npm:4.0.16": + version: 4.0.16 + resolution: "@vitest/pretty-format@npm:4.0.16" + dependencies: + tinyrainbow: "npm:^3.0.3" + checksum: 10c0/11243e9c2d2d011ae23825c6b7464a4385a4a4efc4ceb28b7854bb9d73491f440b89d12f62c5c9737d26375cf9585b11bc20183d4dea4e983e79d5e162407eb9 + languageName: node + linkType: hard + "@vitest/pretty-format@npm:4.0.6": version: 4.0.6 resolution: "@vitest/pretty-format@npm:4.0.6" @@ -1385,6 +1471,16 @@ __metadata: languageName: node linkType: hard +"@vitest/utils@npm:4.0.16": + version: 4.0.16 + resolution: "@vitest/utils@npm:4.0.16" + dependencies: + "@vitest/pretty-format": "npm:4.0.16" + tinyrainbow: "npm:^3.0.3" + checksum: 10c0/bba35b4e102be03e106ced227809437573aa5c5f64d512301ca8de127dcb91cbedc11a2e823305f8ba82528c909c10510ec8c7e3d92b3d6d1c1aec33e143572a + languageName: node + linkType: hard + "@vitest/utils@npm:4.0.6": version: 4.0.6 resolution: "@vitest/utils@npm:4.0.6" @@ -1638,6 +1734,17 @@ __metadata: languageName: node linkType: hard +"ast-v8-to-istanbul@npm:^0.3.8": + version: 0.3.9 + resolution: "ast-v8-to-istanbul@npm:0.3.9" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.31" + estree-walker: "npm:^3.0.3" + js-tokens: "npm:^9.0.1" + checksum: 10c0/63a70a54e4ad0136cfaee99d468c9d3335f52ec7d3edb25d31ad892bb4e05ea4cd7a4425ff02a937158b01d378388b371352b2e01c884fd450901f887c6970bd + languageName: node + linkType: hard + "astral-regex@npm:^2.0.0": version: 2.0.0 resolution: "astral-regex@npm:2.0.0" @@ -1962,6 +2069,7 @@ __metadata: resolution: "cogs-sdk@workspace:." dependencies: "@types/ws": "npm:^8" + "@vitest/coverage-v8": "npm:^4.0.16" vite: "npm:^7.2.0" ws: "npm:^8.18.3" languageName: unknown @@ -3532,6 +3640,13 @@ __metadata: languageName: node linkType: hard +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -3964,6 +4079,45 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.2": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0, istanbul-lib-report@npm:^3.0.1": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^5.0.6": + version: 5.0.6 + resolution: "istanbul-lib-source-maps@npm:5.0.6" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.23" + debug: "npm:^4.1.1" + istanbul-lib-coverage: "npm:^3.0.0" + checksum: 10c0/ffe75d70b303a3621ee4671554f306e0831b16f39ab7f4ab52e54d356a5d33e534d97563e318f1333a6aae1d42f91ec49c76b6cd3f3fb378addcb5c81da0255f + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-reports@npm:3.2.0" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: 10c0/d596317cfd9c22e1394f22a8d8ba0303d2074fe2e971887b32d870e4b33f8464b10f8ccbe6847808f7db485f084eba09e6c2ed706b3a978e4b52f07085b8f9bc + languageName: node + linkType: hard + "iterator.prototype@npm:^1.1.3": version: 1.1.4 resolution: "iterator.prototype@npm:1.1.4" @@ -4005,6 +4159,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^9.0.1": + version: 9.0.1 + resolution: "js-tokens@npm:9.0.1" + checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e + languageName: node + linkType: hard + "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -4321,6 +4482,26 @@ __metadata: languageName: node linkType: hard +"magicast@npm:^0.5.1": + version: 0.5.1 + resolution: "magicast@npm:0.5.1" + dependencies: + "@babel/parser": "npm:^7.28.5" + "@babel/types": "npm:^7.28.5" + source-map-js: "npm:^1.2.1" + checksum: 10c0/a00bbf3688b9b3e83c10b3bfe3f106cc2ccbf20c4f2dc1c9020a10556dfe0a6a6605a445ee8e86a6e2b484ec519a657b5e405532684f72678c62e4c0d32f962c + languageName: node + linkType: hard + +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 + languageName: node + linkType: hard + "make-fetch-happen@npm:^14.0.3": version: 14.0.3 resolution: "make-fetch-happen@npm:14.0.3" @@ -4695,6 +4876,13 @@ __metadata: languageName: node linkType: hard +"obug@npm:^2.1.1": + version: 2.1.1 + resolution: "obug@npm:2.1.1" + checksum: 10c0/59dccd7de72a047e08f8649e94c1015ec72f94eefb6ddb57fb4812c4b425a813bc7e7cd30c9aca20db3c59abc3c85cc7a62bb656a968741d770f4e8e02bc2e78 + languageName: node + linkType: hard + "once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -5407,7 +5595,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.7.1": +"semver@npm:^7.5.3, semver@npm:^7.7.1": version: 7.7.3 resolution: "semver@npm:7.7.3" bin: @@ -5637,7 +5825,7 @@ __metadata: languageName: node linkType: hard -"std-env@npm:^3.9.0": +"std-env@npm:^3.10.0, std-env@npm:^3.9.0": version: 3.10.0 resolution: "std-env@npm:3.10.0" checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f From e48a35939767863aed15a51fd9e57462272e9716 Mon Sep 17 00:00:00 2001 From: Guy Balaam Date: Thu, 8 Jan 2026 10:10:31 +0000 Subject: [PATCH 03/12] Improving video generation script --- ...cy.ts => generate-test-video-frames.cy.ts} | 3 ++ .../fixtures/{out.mp4 => 2x2s@2560x1440.mp4} | Bin .../javascript/cypress/fixtures/example.json | 5 --- packages/javascript/scripts/generate-video.js | 25 ----------- packages/javascript/scripts/generate-video.ts | 40 ++++++++++++++++++ 5 files changed, 43 insertions(+), 30 deletions(-) rename packages/javascript/cypress/e2e/{generate-test-video.cy.ts => generate-test-video-frames.cy.ts} (86%) rename packages/javascript/cypress/fixtures/{out.mp4 => 2x2s@2560x1440.mp4} (100%) delete mode 100644 packages/javascript/cypress/fixtures/example.json delete mode 100644 packages/javascript/scripts/generate-video.js create mode 100644 packages/javascript/scripts/generate-video.ts diff --git a/packages/javascript/cypress/e2e/generate-test-video.cy.ts b/packages/javascript/cypress/e2e/generate-test-video-frames.cy.ts similarity index 86% rename from packages/javascript/cypress/e2e/generate-test-video.cy.ts rename to packages/javascript/cypress/e2e/generate-test-video-frames.cy.ts index 5330673..e462240 100644 --- a/packages/javascript/cypress/e2e/generate-test-video.cy.ts +++ b/packages/javascript/cypress/e2e/generate-test-video-frames.cy.ts @@ -10,8 +10,11 @@ describe('template spec', () => { let ms = 0; while (frame < TOTAL_FRAMES) { + // Debug log for long running tasks cy.task('log', `[frame: ${frame + 1}/${TOTAL_FRAMES}] [ms: ${ms.toFixed(2)}/${TOTAL_LOOPS * LOOP_DURATION}]`); + // Go to new frame of the video cy.visit(`cypress/e2e/test-video.html?loopDurationMs=${LOOP_DURATION}¤tMs=${ms}`); + // Capture screenshot cy.screenshot(`${frame}`, { capture: 'viewport', overwrite: true }); // Set up for next iteration frame++; diff --git a/packages/javascript/cypress/fixtures/out.mp4 b/packages/javascript/cypress/fixtures/2x2s@2560x1440.mp4 similarity index 100% rename from packages/javascript/cypress/fixtures/out.mp4 rename to packages/javascript/cypress/fixtures/2x2s@2560x1440.mp4 diff --git a/packages/javascript/cypress/fixtures/example.json b/packages/javascript/cypress/fixtures/example.json deleted file mode 100644 index 02e4254..0000000 --- a/packages/javascript/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/packages/javascript/scripts/generate-video.js b/packages/javascript/scripts/generate-video.js deleted file mode 100644 index 78f7a78..0000000 --- a/packages/javascript/scripts/generate-video.js +++ /dev/null @@ -1,25 +0,0 @@ -import { spawn } from 'node:child_process'; -const ffmpeg = 'ffmpeg'; - -const child = spawn(ffmpeg, [ - // Set the input framerate - '-framerate', - '60', - // Specify the input files - '-i', - 'packages/javascript/cypress/screenshots/generate-test-video.cy.ts/%d.png', - // Set the output framerate - '-r', - '60', - // idk? - '-c:v', - 'libx264', - '-pix_fmt', - 'yuv420p', - 'out.mp4', -]); - -child.on('error', () => { - console.error('Failed to generate video'); - process.exit(1); -}); diff --git a/packages/javascript/scripts/generate-video.ts b/packages/javascript/scripts/generate-video.ts new file mode 100644 index 0000000..d922df0 --- /dev/null +++ b/packages/javascript/scripts/generate-video.ts @@ -0,0 +1,40 @@ +import { spawn } from 'node:child_process'; +const ffmpeg = 'ffmpeg'; + +const child = spawn(ffmpeg, [ + // Set the input framerate + '-framerate', + '60', + // Specify the input files + '-i', + 'cypress/screenshots/generate-test-video-frames.cy.ts/%d.png', + // Set the output framerate + '-r', + '60', + // specify the codec + '-c:v', + 'libx264', + // pixel format + '-pix_fmt', + 'yuv420p', + // automatically overwrite + '-y', + // destination + 'out.mp4', +]); + +child.stdout.on('data', (data) => console.log(data.toString())); +child.stderr.on('data', (data) => console.error(data.toString())); + +child.on('error', () => { + console.error('Failed to generate video'); + process.exit(1); +}); + +child.on('close', (code) => { + if (code === 0) { + console.log('Created video'); + } else { + console.error('Failed to create video'); + } +}); From c85a43ff9c49c198eba0d85cbbac77e907942c98 Mon Sep 17 00:00:00 2001 From: Guy Balaam Date: Mon, 12 Jan 2026 11:05:21 +0000 Subject: [PATCH 04/12] Updating cypress tests for new schema --- .../cypress/component/Playback.cy.ts | 67 ++++++----- .../javascript/cypress/component/Volume.cy.ts | 28 +++-- .../cypress/fixtures/5x2s@2560x1440.mp4 | Bin 0 -> 199213 bytes packages/javascript/cypress/mount.ts | 5 + packages/javascript/scripts/generate-video.ts | 9 ++ .../javascript/src/state-based/ClipManager.ts | 51 ++++++++- .../src/state-based/ImageManager.ts | 14 ++- .../src/state-based/StableMediaPlayer.ts | 96 ---------------- .../src/state-based/SurfaceManager.ts | 105 ++++++++++++------ .../src/state-based/VideoManager.ts | 91 +++++++++++++++ tsconfig.json | 6 +- 11 files changed, 292 insertions(+), 180 deletions(-) create mode 100644 packages/javascript/cypress/fixtures/5x2s@2560x1440.mp4 delete mode 100644 packages/javascript/src/state-based/StableMediaPlayer.ts create mode 100644 packages/javascript/src/state-based/VideoManager.ts diff --git a/packages/javascript/cypress/component/Playback.cy.ts b/packages/javascript/cypress/component/Playback.cy.ts index 80c2a99..fe69302 100644 --- a/packages/javascript/cypress/component/Playback.cy.ts +++ b/packages/javascript/cypress/component/Playback.cy.ts @@ -1,17 +1,20 @@ -import { MediaManager } from '../../src/state-based/SurfaceManager'; +import { SurfaceManager } from '../../src/state-based/SurfaceManager'; describe('Playback tests', () => { it('can buffer without playing', () => { - const manager = new MediaManager([ - { - id: '1', - url: 'cypress/fixtures/out.mp4', - startTime: Date.now() + 60_000, - endTime: Date.now() + 70_000, - loop: false, - volume: 0, + const now = Date.now(); + const manager = new SurfaceManager({ + 'clip-id': { + file: 'cypress/fixtures/5x2s@2560x1440.mp4', + type: 'video', + audioOutput: '', + fit: 'cover', + keyframes: [ + [now, { set: { t: 0, rate: 0 } }], // paused at start + [now + 2_000, { set: { t: 0, rate: 0 } }], // play in 2 seconds + ], }, - ]); + }); cy.mount(manager.element); // Video element is meant to start in 1 minute @@ -20,44 +23,52 @@ describe('Playback tests', () => { }); it('recovers from a pause', () => { - const manager = new MediaManager([ - { - id: '1', - url: 'cypress/fixtures/out.mp4', - startTime: Date.now(), - endTime: Date.now() + 1000, - loop: true, - volume: 0, + const now = Date.now(); + const manager = new SurfaceManager({ + 'clip-id': { + file: 'cypress/fixtures/5x2s@2560x1440.mp4', + type: 'video', + audioOutput: '', + fit: 'cover', + keyframes: [[now, { set: { t: 0, rate: 1 } }]], }, - ]); + }); cy.mount(manager.element); + // Allow video to start playing. + // Calling pause() during async play() will throw an error + + cy.log('Interfere with video element'); cy.get('video').should('have.prop', 'paused', false); cy.get('video').invoke('trigger', 'pause'); cy.get('video').should('have.prop', 'paused', true); cy.wait(1000); + cy.log('Video should have recovered'); cy.get('video').should('have.prop', 'paused', false); + cy.get('video').invoke('prop', 'currentTime').should('be.greaterThan', 1.5); }); it('recovers from a seek', () => { - const manager = new MediaManager([ - { - id: '1', - url: 'cypress/fixtures/out.mp4', - startTime: Date.now(), - endTime: Date.now() + 100000, - loop: true, - volume: 0, + const now = Date.now(); + const manager = new SurfaceManager({ + 'clip-id': { + file: 'cypress/fixtures/5x2s@2560x1440.mp4', + type: 'video', + audioOutput: '', + fit: 'cover', + keyframes: [[now, { set: { t: 0, rate: 1 } }]], }, - ]); + }); cy.mount(manager.element); + cy.log('Interfere with video element'); cy.get('video').invoke('prop', 'currentTime', 10); cy.wait(500); + cy.log('Video should have recovered'); cy.get('video').invoke('prop', 'currentTime').should('be.lessThan', 5); }); }); diff --git a/packages/javascript/cypress/component/Volume.cy.ts b/packages/javascript/cypress/component/Volume.cy.ts index 57d5f6f..75387ff 100644 --- a/packages/javascript/cypress/component/Volume.cy.ts +++ b/packages/javascript/cypress/component/Volume.cy.ts @@ -1,20 +1,28 @@ -import { MediaManager } from '../../src/state-based/SurfaceManager'; +import { SurfaceManager } from '../../src/state-based/SurfaceManager'; const INITIAL_VOLUME = 0; const CHANGED_VOLUME = 1; describe('Volume tests', () => { it('resets volume', () => { - const manager = new MediaManager([ - { - id: '1', - url: 'cypress/fixtures/out.mp4', - startTime: Date.now(), - endTime: Date.now() + 1000, - loop: true, - volume: INITIAL_VOLUME, + const now = Date.now(); + const manager = new SurfaceManager({ + 'clip-id': { + type: 'video', + file: 'cypress/fixtures/2x2s@2560x1440.mp4', + audioOutput: '', + fit: 'cover', + keyframes: [ + [now, { set: { t: 0, rate: 1, volume: INITIAL_VOLUME } }], + [now + 2_000, { set: { t: 0, rate: 1 } }], + [now + 2_000, { set: { t: 0, rate: 1 } }], + [now + 4_000, { set: { t: 0, rate: 1 } }], + [now + 6_000, { set: { t: 0, rate: 1 } }], + [now + 8_000, { set: { t: 0, rate: 1 } }], + [now + 10_000, { set: { t: 0, rate: 1 } }], + ], }, - ]); + }); cy.mount(manager.element); cy.get('video').invoke('prop', 'volume', CHANGED_VOLUME); diff --git a/packages/javascript/cypress/fixtures/5x2s@2560x1440.mp4 b/packages/javascript/cypress/fixtures/5x2s@2560x1440.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..e0446439f7028341933de6748281e6c3678255a7 GIT binary patch literal 199213 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 r)M&rR$S}%~9hM { + constructor( + private surfaceElement: HTMLElement, + private clipElement: HTMLElement, + state: T, + ) { + this._state = state; + setTimeout(this.loop); + } + + /** + * This is the delay to be used in the update loop. + * It is intended to be dynamic for each loop. + */ + protected delay = DEFAULT_DELAY; + + protected abstract update(): void; + public abstract destroy(): void; + + get isConnected() { + if (!this.surfaceElement) return false; + if (!this.clipElement) return false; + if (!this.surfaceElement.contains(this.clipElement)) return false; + return true; + } + + protected _state: T; + setState(newState: T) { + this._state = newState; + clearTimeout(this.timeout); + this.loop(); + } + + private timeout: ReturnType | undefined; + private loop = async () => { + if (this.isConnected) { + this.update(); + this.timeout = setTimeout(this.loop, this.delay); + } else { + this.destroy(); + } + }; } diff --git a/packages/javascript/src/state-based/ImageManager.ts b/packages/javascript/src/state-based/ImageManager.ts index c39e814..572a661 100644 --- a/packages/javascript/src/state-based/ImageManager.ts +++ b/packages/javascript/src/state-based/ImageManager.ts @@ -1,15 +1,19 @@ import { ImageState } from '../types/MediaSchema'; import { ClipManager } from './ClipManager'; -export class ImageManager extends ClipManager { - protected destroy(): void { - // do nothing +export class ImageManager extends ClipManager { + protected update(): void { + throw new Error('Method not implemented.'); } private _element: HTMLImageElement; - constructor(state: ImageState) { - super(); + constructor(surfaceElement: HTMLElement, clipElement: HTMLElement, state: ImageState) { + super(surfaceElement, clipElement, state); this._element = document.createElement('img'); } + + destroy(): void { + // do nothing + } } diff --git a/packages/javascript/src/state-based/StableMediaPlayer.ts b/packages/javascript/src/state-based/StableMediaPlayer.ts deleted file mode 100644 index 3c18a13..0000000 --- a/packages/javascript/src/state-based/StableMediaPlayer.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { ClipManager } from './ClipManager'; -import { AudioState, MediaClipState, VideoState } from '../types/MediaSchema'; - -const CHECK_MEDIA_POLL_MS = 1_000; -const TARGET_SYNC_THRESHOLD_MS = 10; // If we're closer than this we're good enough -const MAX_SYNC_THRESHOLD_MS = 1_000; // If we're further away than this, we'll seek instead -const MAX_PLAYBACK_RATE_ADJUSTMENT = 0.2; - -export class StableMediaPlayer extends ClipManager { - protected destroy(): void { - this._abort = true; - } - private _abort = false; - private _state: MediaClipState; - private _element: HTMLMediaElement; - private defaultPlaybackRate = 1; - - constructor(state: AudioState | VideoState) { - super(); - this._state = state; - this._element = document.createElement(state.type); - this.stabilize(); - } - - public set state(newValue: MediaClipState) { - this._state = this.state; - } - - private async seekTo(time: number) { - const seekPromise = new Promise((res) => { - this._element.addEventListener('seeked', res, { once: true, passive: true }); - }); - this._element.currentTime = time / 1000; - await seekPromise; - } - - private async stabilize() { - this._element.src = this._state.file; - this._element.volume = this._state.volume; - this._element.loop = this._state.loop; - - while (!this._abort) { - const { startTime, endTime, volume, loop } = this._state; - const now = Date.now(); - - // Has volume changed? - if (this._element.volume !== volume) { - console.warn(`Media ${this._state.id} has changed volume`); - this._element.volume = volume; - } - - // Does the media loop? - if (this._element.loop !== loop) { - console.warn(`Media ${this._state.id} has changed loop`); - this._element.loop = loop; - } - - // Should the media be playing? - if (now >= startTime && this._element.paused) { - this._element.play().catch(console.warn); - } - - // Is the media queued? - if (now < startTime) { - this._element.pause(); - continue; - } - - const targetTime = now - startTime; - const currentTime = this._element.currentTime * 1000; - const deltaTime = currentTime - targetTime; - const deltaTimeAbs = Math.abs(deltaTime); - - // Are we at the correct time? - switch (true) { - case deltaTimeAbs <= TARGET_SYNC_THRESHOLD_MS: - this._element.playbackRate = this.defaultPlaybackRate; - break; - case deltaTimeAbs > TARGET_SYNC_THRESHOLD_MS && deltaTimeAbs <= MAX_SYNC_THRESHOLD_MS: { - const playbackRateAdjustment = (deltaTime / MAX_SYNC_THRESHOLD_MS) * MAX_PLAYBACK_RATE_ADJUSTMENT; - this._element.playbackRate = this.defaultPlaybackRate - playbackRateAdjustment; - break; - } - case deltaTimeAbs > MAX_SYNC_THRESHOLD_MS: { - this.seekTo(targetTime); - break; - } - default: - this._element.playbackRate = this.defaultPlaybackRate; - console.warn(`Unknown time error: ${deltaTime}`); - } - - await new Promise((res) => setTimeout(res, CHECK_MEDIA_POLL_MS)); - } - } -} diff --git a/packages/javascript/src/state-based/SurfaceManager.ts b/packages/javascript/src/state-based/SurfaceManager.ts index 1c721e8..e564425 100644 --- a/packages/javascript/src/state-based/SurfaceManager.ts +++ b/packages/javascript/src/state-based/SurfaceManager.ts @@ -1,57 +1,90 @@ -import { StableMediaPlayer } from './StableMediaPlayer'; import { MediaClipState, MediaSurfaceState } from '../types/MediaSchema'; +import { ClipManager } from './ClipManager'; +import { ImageManager } from './ImageManager'; +import { VideoManager } from './VideoManager'; const DATA_CLIP_ID = 'data-clip-id'; type TaggedElement = HTMLElement & { [DATA_CLIP_ID]?: string }; -export class MediaManager { - private state: MediaSurfaceState = {}; - - private _element: HTMLDivElement = document.createElement('div'); +/** + * The SurfaceManager will receive state updates and: + * - Ensure that each clip has a parent element + * - Instantiate a ClipManager attached to each respective element + */ +export class SurfaceManager { + private _state: MediaSurfaceState = {}; + public set state(newState: MediaSurfaceState) { + this._state = newState; + this.update(); + } + private _element: HTMLDivElement; public get element() { return this._element; } + private resources: { [clipId: string]: { element: HTMLElement; manager?: ClipManager } } = {}; + constructor(testState?: MediaSurfaceState) { - this.state = testState || {}; + this._element = document.createElement('div'); + this._element.style.width = '100%'; + this._element.style.height = '100%'; + this._element.style.backgroundColor = 'beige'; + + this._state = testState || {}; this.update(); } async update() { - this.cleanupElements(); - - const currentMediaElements = new Set([...this._element.children].map((child) => (child as TaggedElement)[DATA_CLIP_ID])); - Object.entries(this.state).forEach(([clipId, clip]) => { - if (!currentMediaElements.has(clipId)) { - // Create new media element + // Destroy stale managers + Object.entries(this.resources).forEach(([clipId, { element, manager }]) => { + if (!(clipId in this._state)) { + delete this.resources[clipId]; + element.remove(); + manager?.destroy(); } }); - } - - private cleanupElements() { - for (const childElement of this._element.children) { - const child = childElement as TaggedElement; - const clipId = child[DATA_CLIP_ID]; - // Remove unknown elements - if (!clipId) { - child.remove(); - continue; - } - // Remove stale elements - if (this.state[clipId] === undefined) { - child.remove(); - } - } - } - createMediaPlayer(clip: MediaClipState) { - const tagName = getMediaTagName(state.url); + // Create and attach new wrapper elements + const elements = Object.keys(this._state) + .toSorted() + .map((clipId) => { + const resource = this.resources[clipId]; + if (resource) { + return resource.element; + } else { + const element = document.createElement('div') as TaggedElement; + element.setAttribute(DATA_CLIP_ID, clipId); + this.resources[clipId] = { element }; + return element; + } + }); + this._element.replaceChildren(...elements); - if (tagName === 'img') { - return; - } + // Create new managers + Object.keys(this._state) + .toSorted() + .forEach((clipId) => { + const clip = this._state[clipId]!; + const resource = this.resources[clipId]; + if (!resource) { + throw new Error('Failed to create resource'); + } - const stable = new StableMediaPlayer(state); - this._element.replaceChildren(...[stable.element]); + if (!resource.manager) { + switch (clip.type) { + case 'image': + resource.manager = new ImageManager(this._element, resource.element, clip); + break; + case 'audio': + throw new Error('Not implemented: ImageManager'); + break; + case 'video': + resource.manager = new VideoManager(this._element, resource.element, clip); + break; + } + } else { + resource.manager.setState(clip); + } + }); } } diff --git a/packages/javascript/src/state-based/VideoManager.ts b/packages/javascript/src/state-based/VideoManager.ts new file mode 100644 index 0000000..1fb9cca --- /dev/null +++ b/packages/javascript/src/state-based/VideoManager.ts @@ -0,0 +1,91 @@ +import { defaultVideoOptions, VideoState } from '../types/MediaSchema'; +import { getStateAtTime } from '../utils/getStateAtTime'; +import { ClipManager } from './ClipManager'; + +const DEFAULT_VIDEO_POLLING = 1_000; +const TARGET_SYNC_THRESHOLD_MS = 10; // If we're closer than this we're good enough +const MAX_SYNC_THRESHOLD_MS = 1_000; // If we're further away than this, we'll seek instead +const SEEK_LOOKAHEAD_MS = 200; // We won't seek ahead instantly, so lets seek ahead +const MAX_PLAYBACK_RATE_ADJUSTMENT = 0.5; + +export class VideoManager extends ClipManager { + private videoElement?: HTMLVideoElement; + private isSeeking = false; + + constructor(surfaceElement: HTMLElement, clipElement: HTMLElement, state: VideoState) { + super(surfaceElement, clipElement, state); + this.videoElement = document.createElement('video'); + clipElement.replaceChildren(this.videoElement); + } + + private seekTo(time: number) { + if (!this.videoElement) return; + this.videoElement.addEventListener( + 'seeked', + () => { + this.isSeeking = false; + }, + { once: true, passive: true }, + ); + this.videoElement.currentTime = time / 1_000; + } + + protected update(): void { + // Update loop used to poll until seek finished + if (this.isSeeking) return; + if (!this.videoElement) return; + const currentState = getStateAtTime(this._state, Date.now()); + if (!currentState) return; + + this.delay = DEFAULT_VIDEO_POLLING; + const { t, rate, volume } = { ...defaultVideoOptions, ...currentState }; + + // videoElement.src will be a fully qualified URL + if (!this.videoElement.src.endsWith(this._state.file)) { + this.videoElement.src = this._state.file; + } + if (this.videoElement.style.objectFit !== this._state.fit) { + this.videoElement.style.objectFit = this._state.fit; + } + if (this.videoElement.volume !== volume) { + this.videoElement.volume = volume; + } + + // Should the element be playing? + if (this.videoElement.paused && rate > 0) { + this.videoElement.play().catch(() => { + // Do nothing - this will be retried in the next loop + }); + } + + const currentTime = this.videoElement.currentTime * 1000; + const deltaTime = currentTime - t; + const deltaTimeAbs = Math.abs(deltaTime); + switch (true) { + case deltaTimeAbs <= TARGET_SYNC_THRESHOLD_MS: + if (this.videoElement.playbackRate !== rate) { + this.videoElement.playbackRate = rate; + } + break; + case deltaTimeAbs > TARGET_SYNC_THRESHOLD_MS && deltaTimeAbs <= MAX_SYNC_THRESHOLD_MS: { + this.delay = 100; + const playbackRateAdjustment = (deltaTime / MAX_SYNC_THRESHOLD_MS) * MAX_PLAYBACK_RATE_ADJUSTMENT; + this.videoElement.playbackRate = rate - playbackRateAdjustment; + break; + } + case deltaTimeAbs > MAX_SYNC_THRESHOLD_MS: { + // delay to poll until seeked + this.delay = 10; + this.seekTo(t + rate * (SEEK_LOOKAHEAD_MS / 1000)); + break; + } + default: + this.videoElement.playbackRate = rate; + console.warn(`Unknown time error: ${deltaTime}`); + } + } + + destroy(): void { + this.videoElement?.remove(); + } +} diff --git a/tsconfig.json b/tsconfig.json index 8362e33..c21801b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,8 +4,8 @@ "skipLibCheck": true, "declaration": true, // Target es2019 or higher required to use proper import/export statements between packages - "target": "es2020", - "module": "es2020", - "moduleResolution": "bundler", + "target": "es2023", + "module": "es2022", + "moduleResolution": "bundler" } } From fbdea5fbcfadfe4d80fc3a11190143c63c42fc02 Mon Sep 17 00:00:00 2001 From: Guy Balaam Date: Mon, 12 Jan 2026 11:07:17 +0000 Subject: [PATCH 05/12] Running component tests in CI --- package.json | 1 - .../javascript/cypress/support/commands.ts | 2 +- packages/javascript/package.json | 4 +- yarn.lock | 192 +----------------- 4 files changed, 5 insertions(+), 194 deletions(-) diff --git a/package.json b/package.json index 532c80e..b6933ca 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ }, "devDependencies": { "@types/ws": "^8", - "@vitest/coverage-v8": "^4.0.16", "vite": "^7.2.0", "ws": "^8.18.3" } diff --git a/packages/javascript/cypress/support/commands.ts b/packages/javascript/cypress/support/commands.ts index 698b01a..95857ae 100644 --- a/packages/javascript/cypress/support/commands.ts +++ b/packages/javascript/cypress/support/commands.ts @@ -34,4 +34,4 @@ // visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable // } // } -// } \ No newline at end of file +// } diff --git a/packages/javascript/package.json b/packages/javascript/package.json index 33b8f47..b74eef1 100644 --- a/packages/javascript/package.json +++ b/packages/javascript/package.json @@ -22,7 +22,7 @@ "default": "./dist/index.js" }, "scripts": { - "test": "yarn types && yarn lint && vitest", + "test": "yarn types && yarn lint && vitest && yarn cy:run", "types": "tsc --noEmit", "lint": "eslint .", "build": "yarn build:ts && yarn build:browser", @@ -62,4 +62,4 @@ "vite": "^7.1.12", "vitest": "^4.0.6" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 4c979ed..bee3826 100644 --- a/yarn.lock +++ b/yarn.lock @@ -45,48 +45,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/helper-validator-identifier@npm:7.28.5" - checksum: 10c0/42aaebed91f739a41f3d80b72752d1f95fd7c72394e8e4bd7cdd88817e0774d80a432451bcba17c2c642c257c483bf1d409dd4548883429ea9493a3bc4ab0847 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/parser@npm:7.28.5" - dependencies: - "@babel/types": "npm:^7.28.5" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/5bbe48bf2c79594ac02b490a41ffde7ef5aa22a9a88ad6bcc78432a6ba8a9d638d531d868bd1f104633f1f6bba9905746e15185b8276a3756c42b765d131b1ef - languageName: node - linkType: hard - -"@babel/types@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/types@npm:7.28.5" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.28.5" - checksum: 10c0/a5a483d2100befbf125793640dec26b90b95fd233a94c19573325898a5ce1e52cdfa96e495c7dcc31b5eca5b66ce3e6d4a0f5a4a62daec271455959f208ab08a - languageName: node - linkType: hard - -"@bcoe/v8-coverage@npm:^1.0.2": - version: 1.0.2 - resolution: "@bcoe/v8-coverage@npm:1.0.2" - checksum: 10c0/1eb1dc93cc17fb7abdcef21a6e7b867d6aa99a7ec88ec8207402b23d9083ab22a8011213f04b2cf26d535f1d22dc26139b7929e6c2134c254bd1e14ba5e678c3 - languageName: node - linkType: hard - "@clockworkdog/cogs-client-react@workspace:packages/react": version: 0.0.0-use.local resolution: "@clockworkdog/cogs-client-react@workspace:packages/react" @@ -703,16 +661,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.31": - version: 0.3.31 - resolution: "@jridgewell/trace-mapping@npm:0.3.31" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/4b30ec8cd56c5fd9a661f088230af01e0c1a3888d11ffb6b47639700f71225be21d1f7e168048d6d4f9449207b978a235c07c8f15c07705685d16dc06280e9d9 - languageName: node - linkType: hard - "@jridgewell/trace-mapping@npm:^0.3.24": version: 0.3.29 resolution: "@jridgewell/trace-mapping@npm:0.3.29" @@ -1367,31 +1315,6 @@ __metadata: languageName: node linkType: hard -"@vitest/coverage-v8@npm:^4.0.16": - version: 4.0.16 - resolution: "@vitest/coverage-v8@npm:4.0.16" - dependencies: - "@bcoe/v8-coverage": "npm:^1.0.2" - "@vitest/utils": "npm:4.0.16" - ast-v8-to-istanbul: "npm:^0.3.8" - istanbul-lib-coverage: "npm:^3.2.2" - istanbul-lib-report: "npm:^3.0.1" - istanbul-lib-source-maps: "npm:^5.0.6" - istanbul-reports: "npm:^3.2.0" - magicast: "npm:^0.5.1" - obug: "npm:^2.1.1" - std-env: "npm:^3.10.0" - tinyrainbow: "npm:^3.0.3" - peerDependencies: - "@vitest/browser": 4.0.16 - vitest: 4.0.16 - peerDependenciesMeta: - "@vitest/browser": - optional: true - checksum: 10c0/3edd18dc994949d5180a3fbd9c1af4ca4756735e82cffb73b3c0918ad23a4c71521287a205cc61a39b63453448e9bfd207f82b2d472fd757dfbb47987dbe99a8 - languageName: node - linkType: hard - "@vitest/expect@npm:4.0.6": version: 4.0.6 resolution: "@vitest/expect@npm:4.0.6" @@ -1425,15 +1348,6 @@ __metadata: languageName: node linkType: hard -"@vitest/pretty-format@npm:4.0.16": - version: 4.0.16 - resolution: "@vitest/pretty-format@npm:4.0.16" - dependencies: - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/11243e9c2d2d011ae23825c6b7464a4385a4a4efc4ceb28b7854bb9d73491f440b89d12f62c5c9737d26375cf9585b11bc20183d4dea4e983e79d5e162407eb9 - languageName: node - linkType: hard - "@vitest/pretty-format@npm:4.0.6": version: 4.0.6 resolution: "@vitest/pretty-format@npm:4.0.6" @@ -1471,16 +1385,6 @@ __metadata: languageName: node linkType: hard -"@vitest/utils@npm:4.0.16": - version: 4.0.16 - resolution: "@vitest/utils@npm:4.0.16" - dependencies: - "@vitest/pretty-format": "npm:4.0.16" - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/bba35b4e102be03e106ced227809437573aa5c5f64d512301ca8de127dcb91cbedc11a2e823305f8ba82528c909c10510ec8c7e3d92b3d6d1c1aec33e143572a - languageName: node - linkType: hard - "@vitest/utils@npm:4.0.6": version: 4.0.6 resolution: "@vitest/utils@npm:4.0.6" @@ -1734,17 +1638,6 @@ __metadata: languageName: node linkType: hard -"ast-v8-to-istanbul@npm:^0.3.8": - version: 0.3.9 - resolution: "ast-v8-to-istanbul@npm:0.3.9" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.31" - estree-walker: "npm:^3.0.3" - js-tokens: "npm:^9.0.1" - checksum: 10c0/63a70a54e4ad0136cfaee99d468c9d3335f52ec7d3edb25d31ad892bb4e05ea4cd7a4425ff02a937158b01d378388b371352b2e01c884fd450901f887c6970bd - languageName: node - linkType: hard - "astral-regex@npm:^2.0.0": version: 2.0.0 resolution: "astral-regex@npm:2.0.0" @@ -2069,7 +1962,6 @@ __metadata: resolution: "cogs-sdk@workspace:." dependencies: "@types/ws": "npm:^8" - "@vitest/coverage-v8": "npm:^4.0.16" vite: "npm:^7.2.0" ws: "npm:^8.18.3" languageName: unknown @@ -3640,13 +3532,6 @@ __metadata: languageName: node linkType: hard -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 - languageName: node - linkType: hard - "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -4079,45 +3964,6 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.2": - version: 3.2.2 - resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0, istanbul-lib-report@npm:^3.0.1": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: "npm:^3.0.0" - make-dir: "npm:^4.0.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^5.0.6": - version: 5.0.6 - resolution: "istanbul-lib-source-maps@npm:5.0.6" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.23" - debug: "npm:^4.1.1" - istanbul-lib-coverage: "npm:^3.0.0" - checksum: 10c0/ffe75d70b303a3621ee4671554f306e0831b16f39ab7f4ab52e54d356a5d33e534d97563e318f1333a6aae1d42f91ec49c76b6cd3f3fb378addcb5c81da0255f - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-reports@npm:3.2.0" - dependencies: - html-escaper: "npm:^2.0.0" - istanbul-lib-report: "npm:^3.0.0" - checksum: 10c0/d596317cfd9c22e1394f22a8d8ba0303d2074fe2e971887b32d870e4b33f8464b10f8ccbe6847808f7db485f084eba09e6c2ed706b3a978e4b52f07085b8f9bc - languageName: node - linkType: hard - "iterator.prototype@npm:^1.1.3": version: 1.1.4 resolution: "iterator.prototype@npm:1.1.4" @@ -4159,13 +4005,6 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^9.0.1": - version: 9.0.1 - resolution: "js-tokens@npm:9.0.1" - checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e - languageName: node - linkType: hard - "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -4482,26 +4321,6 @@ __metadata: languageName: node linkType: hard -"magicast@npm:^0.5.1": - version: 0.5.1 - resolution: "magicast@npm:0.5.1" - dependencies: - "@babel/parser": "npm:^7.28.5" - "@babel/types": "npm:^7.28.5" - source-map-js: "npm:^1.2.1" - checksum: 10c0/a00bbf3688b9b3e83c10b3bfe3f106cc2ccbf20c4f2dc1c9020a10556dfe0a6a6605a445ee8e86a6e2b484ec519a657b5e405532684f72678c62e4c0d32f962c - languageName: node - linkType: hard - -"make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" - dependencies: - semver: "npm:^7.5.3" - checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 - languageName: node - linkType: hard - "make-fetch-happen@npm:^14.0.3": version: 14.0.3 resolution: "make-fetch-happen@npm:14.0.3" @@ -4876,13 +4695,6 @@ __metadata: languageName: node linkType: hard -"obug@npm:^2.1.1": - version: 2.1.1 - resolution: "obug@npm:2.1.1" - checksum: 10c0/59dccd7de72a047e08f8649e94c1015ec72f94eefb6ddb57fb4812c4b425a813bc7e7cd30c9aca20db3c59abc3c85cc7a62bb656a968741d770f4e8e02bc2e78 - languageName: node - linkType: hard - "once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -5595,7 +5407,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.5.3, semver@npm:^7.7.1": +"semver@npm:^7.7.1": version: 7.7.3 resolution: "semver@npm:7.7.3" bin: @@ -5825,7 +5637,7 @@ __metadata: languageName: node linkType: hard -"std-env@npm:^3.10.0, std-env@npm:^3.9.0": +"std-env@npm:^3.9.0": version: 3.10.0 resolution: "std-env@npm:3.10.0" checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f From 016b7bd8f674d3b809d2aa5d60e273e6babf3b7a Mon Sep 17 00:00:00 2001 From: Guy Balaam Date: Mon, 12 Jan 2026 11:11:37 +0000 Subject: [PATCH 06/12] Removing stale comment --- packages/javascript/cypress/component/Playback.cy.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/javascript/cypress/component/Playback.cy.ts b/packages/javascript/cypress/component/Playback.cy.ts index fe69302..ab3d544 100644 --- a/packages/javascript/cypress/component/Playback.cy.ts +++ b/packages/javascript/cypress/component/Playback.cy.ts @@ -11,13 +11,12 @@ describe('Playback tests', () => { fit: 'cover', keyframes: [ [now, { set: { t: 0, rate: 0 } }], // paused at start - [now + 2_000, { set: { t: 0, rate: 0 } }], // play in 2 seconds + [now + 60_000, { set: { rate: 1 } }], // play in 1 minute ], }, }); cy.mount(manager.element); - // Video element is meant to start in 1 minute cy.get('video').should('have.prop', 'paused', true); cy.get('video').should('have.prop', 'currentTime', 0); }); @@ -35,9 +34,6 @@ describe('Playback tests', () => { }); cy.mount(manager.element); - // Allow video to start playing. - // Calling pause() during async play() will throw an error - cy.log('Interfere with video element'); cy.get('video').should('have.prop', 'paused', false); cy.get('video').invoke('trigger', 'pause'); @@ -64,11 +60,11 @@ describe('Playback tests', () => { cy.mount(manager.element); cy.log('Interfere with video element'); - cy.get('video').invoke('prop', 'currentTime', 10); + cy.get('video').invoke('prop', 'currentTime', 5); cy.wait(500); cy.log('Video should have recovered'); - cy.get('video').invoke('prop', 'currentTime').should('be.lessThan', 5); + cy.get('video').invoke('prop', 'currentTime').should('be.lessThan', 2); }); }); From 7825bba4d167435c3f30a777123c792efc8123b9 Mon Sep 17 00:00:00 2001 From: Guy Balaam Date: Mon, 12 Jan 2026 14:10:32 +0000 Subject: [PATCH 07/12] Improving video seeking stability --- packages/javascript/cypress.config.ts | 1 + .../{Playback.cy.ts => VideoStability.cy.ts} | 34 +++++++++++++++++-- .../src/state-based/VideoManager.ts | 29 ++++++++++++---- 3 files changed, 55 insertions(+), 9 deletions(-) rename packages/javascript/cypress/component/{Playback.cy.ts => VideoStability.cy.ts} (67%) diff --git a/packages/javascript/cypress.config.ts b/packages/javascript/cypress.config.ts index cf63a32..c8e8d88 100644 --- a/packages/javascript/cypress.config.ts +++ b/packages/javascript/cypress.config.ts @@ -1,6 +1,7 @@ import { defineConfig } from 'cypress'; export default defineConfig({ + defaultBrowser: 'electron', component: { devServer: { framework: 'react', diff --git a/packages/javascript/cypress/component/Playback.cy.ts b/packages/javascript/cypress/component/VideoStability.cy.ts similarity index 67% rename from packages/javascript/cypress/component/Playback.cy.ts rename to packages/javascript/cypress/component/VideoStability.cy.ts index ab3d544..fd85da6 100644 --- a/packages/javascript/cypress/component/Playback.cy.ts +++ b/packages/javascript/cypress/component/VideoStability.cy.ts @@ -1,7 +1,7 @@ import { SurfaceManager } from '../../src/state-based/SurfaceManager'; -describe('Playback tests', () => { - it('can buffer without playing', () => { +describe('Video stability tests', () => { + it('can wait without playing', () => { const now = Date.now(); const manager = new SurfaceManager({ 'clip-id': { @@ -46,6 +46,36 @@ describe('Playback tests', () => { cy.get('video').invoke('prop', 'currentTime').should('be.greaterThan', 1.5); }); + it('recovers from a play', () => { + const now = Date.now(); + const manager = new SurfaceManager({ + 'clip-id': { + file: 'cypress/fixtures/5x2s@2560x1440.mp4', + type: 'video', + audioOutput: '', + fit: 'cover', + keyframes: [[now, { set: { t: 1_500, rate: 0 } }]], + }, + }); + cy.mount(manager.element); + + // Wait until video ready + cy.get('video') + .invoke('prop', 'currentTime') + .should(($time) => expect(parseFloat($time)).to.be.closeTo(1.5, 0.1)); + + cy.log('Interfere with video element'); + cy.get('video').invoke('prop', 'playbackRate', 1); + cy.get('video').invoke('trigger', 'play'); + + cy.wait(1000); + + cy.log('Video should have recovered'); + cy.get('video') + .invoke('prop', 'currentTime') + .should(($time) => expect(parseFloat($time)).to.be.closeTo(1.5, 0.1)); + }); + it('recovers from a seek', () => { const now = Date.now(); const manager = new SurfaceManager({ diff --git a/packages/javascript/src/state-based/VideoManager.ts b/packages/javascript/src/state-based/VideoManager.ts index 1fb9cca..97ea886 100644 --- a/packages/javascript/src/state-based/VideoManager.ts +++ b/packages/javascript/src/state-based/VideoManager.ts @@ -16,6 +16,9 @@ export class VideoManager extends ClipManager { super(surfaceElement, clipElement, state); this.videoElement = document.createElement('video'); clipElement.replaceChildren(this.videoElement); + this.videoElement.style.position = 'absolute'; + this.videoElement.style.width = '100%'; + this.videoElement.style.height = '100%'; } private seekTo(time: number) { @@ -61,27 +64,39 @@ export class VideoManager extends ClipManager { const currentTime = this.videoElement.currentTime * 1000; const deltaTime = currentTime - t; const deltaTimeAbs = Math.abs(deltaTime); + this.delay = 100; switch (true) { case deltaTimeAbs <= TARGET_SYNC_THRESHOLD_MS: + // We are on course: + // - The video is within accepted latency of the server time + // - The playback rate is aligned with the server rate if (this.videoElement.playbackRate !== rate) { this.videoElement.playbackRate = rate; } break; - case deltaTimeAbs > TARGET_SYNC_THRESHOLD_MS && deltaTimeAbs <= MAX_SYNC_THRESHOLD_MS: { - this.delay = 100; + case rate > 0 && deltaTimeAbs > TARGET_SYNC_THRESHOLD_MS && deltaTimeAbs <= MAX_SYNC_THRESHOLD_MS: { + // We are close, we can smoothly adjust with playbackRate: + // - The video must be playing + // - We must be close in time to the server time const playbackRateAdjustment = (deltaTime / MAX_SYNC_THRESHOLD_MS) * MAX_PLAYBACK_RATE_ADJUSTMENT; - this.videoElement.playbackRate = rate - playbackRateAdjustment; + const adjustedPlaybackRate = Math.max(0, rate - playbackRateAdjustment); + if (this.videoElement.playbackRate !== adjustedPlaybackRate) { + this.videoElement.playbackRate = adjustedPlaybackRate; + } break; } - case deltaTimeAbs > MAX_SYNC_THRESHOLD_MS: { + default: { + // We cannot smoothly recover: + // - We seek just ahead of server time + if (this.videoElement.playbackRate !== rate) { + this.videoElement.playbackRate = rate; + } + // delay to poll until seeked this.delay = 10; this.seekTo(t + rate * (SEEK_LOOKAHEAD_MS / 1000)); break; } - default: - this.videoElement.playbackRate = rate; - console.warn(`Unknown time error: ${deltaTime}`); } } From 755ffbd39d915765d649cea7a312925ba8e773b0 Mon Sep 17 00:00:00 2001 From: Guy Balaam Date: Mon, 12 Jan 2026 18:40:28 +0000 Subject: [PATCH 08/12] Improving video element resilience --- .../component/UpdatingSurfaceState.cy.ts | 34 ++++++++++++++ .../cypress/component/VideoStability.cy.ts | 45 +++++++++++++++++++ .../javascript/cypress/component/Volume.cy.ts | 35 --------------- .../javascript/src/state-based/ClipManager.ts | 24 +++++++--- .../src/state-based/VideoManager.ts | 25 +++++++++-- 5 files changed, 118 insertions(+), 45 deletions(-) create mode 100644 packages/javascript/cypress/component/UpdatingSurfaceState.cy.ts delete mode 100644 packages/javascript/cypress/component/Volume.cy.ts diff --git a/packages/javascript/cypress/component/UpdatingSurfaceState.cy.ts b/packages/javascript/cypress/component/UpdatingSurfaceState.cy.ts new file mode 100644 index 0000000..05c0823 --- /dev/null +++ b/packages/javascript/cypress/component/UpdatingSurfaceState.cy.ts @@ -0,0 +1,34 @@ +import { SurfaceManager } from '../../src/state-based/SurfaceManager'; + +describe('Updating surface state', () => { + it('adds and removes a video clip', () => { + const manager = new SurfaceManager({}); + cy.mount(manager.element); + + cy.get('video') + .should('not.exist') + .then(() => { + const now = Date.now(); + manager.state = { + 'clip-id': { + file: 'cypress/fixtures/2x2s@2560x1440.mp4', + type: 'video', + audioOutput: '', + fit: 'cover', + keyframes: [ + [now + 100, { set: { t: 0, rate: 1 } }], // play in 100ms + ], + }, + }; + }) + .then(() => { + cy.get('video').should('exist'); + }) + .then(() => { + manager.state = {}; + }) + .then(() => { + cy.get('video').should('not.exist'); + }); + }); +}); diff --git a/packages/javascript/cypress/component/VideoStability.cy.ts b/packages/javascript/cypress/component/VideoStability.cy.ts index fd85da6..2e6ce30 100644 --- a/packages/javascript/cypress/component/VideoStability.cy.ts +++ b/packages/javascript/cypress/component/VideoStability.cy.ts @@ -97,4 +97,49 @@ describe('Video stability tests', () => { cy.log('Video should have recovered'); cy.get('video').invoke('prop', 'currentTime').should('be.lessThan', 2); }); + + it('recovers from volume change', () => { + const INITIAL_VOLUME = 0; + const CHANGED_VOLUME = 1; + const now = Date.now(); + const manager = new SurfaceManager({ + 'clip-id': { + type: 'video', + file: 'cypress/fixtures/5x2s@2560x1440.mp4', + audioOutput: '', + fit: 'cover', + keyframes: [[now, { set: { t: 0, rate: 1, volume: INITIAL_VOLUME } }]], + }, + }); + cy.mount(manager.element); + + cy.get('video').invoke('prop', 'volume', CHANGED_VOLUME); + cy.get('video').should('have.prop', 'volume', CHANGED_VOLUME); + + cy.wait(1000); + + cy.get('video').should('have.prop', 'volume', INITIAL_VOLUME); + }); + + it('recovers from video element deletion', () => { + const now = Date.now(); + const manager = new SurfaceManager({ + 'clip-id': { + type: 'video', + file: 'cypress/fixtures/5x2s@2560x1440.mp4', + audioOutput: '', + fit: 'cover', + keyframes: [[now, { set: { t: 0, rate: 1 } }]], + }, + }); + cy.mount(manager.element); + + cy.get('video').should('exist'); + cy.get('video').invoke('remove'); + cy.get('video').should('not.exist'); + + cy.wait(1000); + + cy.get('video').should('exist'); + }); }); diff --git a/packages/javascript/cypress/component/Volume.cy.ts b/packages/javascript/cypress/component/Volume.cy.ts deleted file mode 100644 index 75387ff..0000000 --- a/packages/javascript/cypress/component/Volume.cy.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { SurfaceManager } from '../../src/state-based/SurfaceManager'; - -const INITIAL_VOLUME = 0; -const CHANGED_VOLUME = 1; - -describe('Volume tests', () => { - it('resets volume', () => { - const now = Date.now(); - const manager = new SurfaceManager({ - 'clip-id': { - type: 'video', - file: 'cypress/fixtures/2x2s@2560x1440.mp4', - audioOutput: '', - fit: 'cover', - keyframes: [ - [now, { set: { t: 0, rate: 1, volume: INITIAL_VOLUME } }], - [now + 2_000, { set: { t: 0, rate: 1 } }], - [now + 2_000, { set: { t: 0, rate: 1 } }], - [now + 4_000, { set: { t: 0, rate: 1 } }], - [now + 6_000, { set: { t: 0, rate: 1 } }], - [now + 8_000, { set: { t: 0, rate: 1 } }], - [now + 10_000, { set: { t: 0, rate: 1 } }], - ], - }, - }); - cy.mount(manager.element); - - cy.get('video').invoke('prop', 'volume', CHANGED_VOLUME); - cy.get('video').should('have.prop', 'volume', CHANGED_VOLUME); - - cy.wait(1000); - - cy.get('video').should('have.prop', 'volume', INITIAL_VOLUME); - }); -}); diff --git a/packages/javascript/src/state-based/ClipManager.ts b/packages/javascript/src/state-based/ClipManager.ts index 28611ba..e92ee7d 100644 --- a/packages/javascript/src/state-based/ClipManager.ts +++ b/packages/javascript/src/state-based/ClipManager.ts @@ -8,10 +8,11 @@ const DEFAULT_DELAY = 1_000; export abstract class ClipManager { constructor( private surfaceElement: HTMLElement, - private clipElement: HTMLElement, + protected clipElement: HTMLElement, state: T, ) { this._state = state; + // Allow the class to be constructed, then call the loop setTimeout(this.loop); } @@ -24,10 +25,21 @@ export abstract class ClipManager { protected abstract update(): void; public abstract destroy(): void; - get isConnected() { - if (!this.surfaceElement) return false; - if (!this.clipElement) return false; - if (!this.surfaceElement.contains(this.clipElement)) return false; + isConnected(element?: HTMLElement) { + if (!this.surfaceElement) { + return false; + } + if (!this.clipElement) { + return false; + } + if (!this.surfaceElement.contains(this.clipElement)) { + return false; + } + + if (element) { + if (this.clipElement.contains(element)) return false; + } + return true; } @@ -40,7 +52,7 @@ export abstract class ClipManager { private timeout: ReturnType | undefined; private loop = async () => { - if (this.isConnected) { + if (this.isConnected()) { this.update(); this.timeout = setTimeout(this.loop, this.delay); } else { diff --git a/packages/javascript/src/state-based/VideoManager.ts b/packages/javascript/src/state-based/VideoManager.ts index 97ea886..4d7b155 100644 --- a/packages/javascript/src/state-based/VideoManager.ts +++ b/packages/javascript/src/state-based/VideoManager.ts @@ -14,13 +14,21 @@ export class VideoManager extends ClipManager { constructor(surfaceElement: HTMLElement, clipElement: HTMLElement, state: VideoState) { super(surfaceElement, clipElement, state); + this.clipElement = clipElement; + } + + updateVideoElement() { this.videoElement = document.createElement('video'); - clipElement.replaceChildren(this.videoElement); + this.clipElement.replaceChildren(this.videoElement); this.videoElement.style.position = 'absolute'; this.videoElement.style.width = '100%'; this.videoElement.style.height = '100%'; } + /** + * Helper function to seek to a specified time. + * Works with the update loop to poll until seeked event has fired. + */ private seekTo(time: number) { if (!this.videoElement) return; this.videoElement.addEventListener( @@ -36,11 +44,20 @@ export class VideoManager extends ClipManager { protected update(): void { // Update loop used to poll until seek finished if (this.isSeeking) return; - if (!this.videoElement) return; + this.delay = DEFAULT_VIDEO_POLLING; + + // Does the
  • -&B&^aaI$y4?JOu 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�hWZ}Rr%YOI6e6S2Tf-j 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 z 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 C8HN@B literal 0 HcmV?d00001 diff --git a/packages/javascript/src/state-based/ClipManager.ts b/packages/javascript/src/state-based/ClipManager.ts index e92ee7d..532e636 100644 --- a/packages/javascript/src/state-based/ClipManager.ts +++ b/packages/javascript/src/state-based/ClipManager.ts @@ -37,7 +37,7 @@ export abstract class ClipManager { } if (element) { - if (this.clipElement.contains(element)) return false; + if (!this.clipElement.contains(element)) return false; } return true; diff --git a/packages/javascript/src/state-based/ImageManager.ts b/packages/javascript/src/state-based/ImageManager.ts index 572a661..7f75ea5 100644 --- a/packages/javascript/src/state-based/ImageManager.ts +++ b/packages/javascript/src/state-based/ImageManager.ts @@ -1,19 +1,52 @@ import { ImageState } from '../types/MediaSchema'; +import { getStateAtTime } from '../utils/getStateAtTime'; import { ClipManager } from './ClipManager'; export class ImageManager extends ClipManager { - protected update(): void { - throw new Error('Method not implemented.'); - } - - private _element: HTMLImageElement; + private imageElement?: HTMLImageElement; constructor(surfaceElement: HTMLElement, clipElement: HTMLElement, state: ImageState) { super(surfaceElement, clipElement, state); - this._element = document.createElement('img'); + this.clipElement = clipElement; + } + + private updateImageElement() { + this.imageElement = document.createElement('img'); + this.clipElement.replaceChildren(this.imageElement); + this.imageElement.style.position = 'absolute'; + this.imageElement.style.height = '100%'; + this.imageElement.style.widows = '100%'; + } + + protected update(): void { + const currentState = getStateAtTime(this._state, Date.now()); + + // Does the element need adding/removing? + if (currentState) { + if (!this.imageElement || !this.isConnected(this.imageElement)) { + this.updateImageElement(); + } + } else { + this.imageElement?.remove(); + this.imageElement = undefined; + } + if (!this.imageElement || !currentState) return; + + // this.imageElement.src will be a fully qualified URL + if (!this.imageElement.src.startsWith(this._state.file)) { + this.imageElement.src = this._state.file; + } + if (this.imageElement.style.objectFit !== this._state.fit) { + this.imageElement.style.objectFit = this._state.fit; + } + + const { opacity } = currentState; + if (typeof opacity === 'string' && opacity !== this.imageElement.style.opacity) { + this.imageElement.style.opacity = opacity; + } } destroy(): void { - // do nothing + this.imageElement?.remove(); } } diff --git a/packages/javascript/src/state-based/SurfaceManager.ts b/packages/javascript/src/state-based/SurfaceManager.ts index e564425..4300552 100644 --- a/packages/javascript/src/state-based/SurfaceManager.ts +++ b/packages/javascript/src/state-based/SurfaceManager.ts @@ -3,7 +3,7 @@ import { ClipManager } from './ClipManager'; import { ImageManager } from './ImageManager'; import { VideoManager } from './VideoManager'; -const DATA_CLIP_ID = 'data-clip-id'; +export const DATA_CLIP_ID = 'data-clip-id'; type TaggedElement = HTMLElement & { [DATA_CLIP_ID]?: string }; /** @@ -13,7 +13,7 @@ type TaggedElement = HTMLElement & { [DATA_CLIP_ID]?: string }; */ export class SurfaceManager { private _state: MediaSurfaceState = {}; - public set state(newState: MediaSurfaceState) { + public setState(newState: MediaSurfaceState) { this._state = newState; this.update(); } @@ -28,7 +28,6 @@ export class SurfaceManager { this._element = document.createElement('div'); this._element.style.width = '100%'; this._element.style.height = '100%'; - this._element.style.backgroundColor = 'beige'; this._state = testState || {}; this.update(); @@ -76,7 +75,7 @@ export class SurfaceManager { resource.manager = new ImageManager(this._element, resource.element, clip); break; case 'audio': - throw new Error('Not implemented: ImageManager'); + throw new Error('Not implemented: AudioManager'); break; case 'video': resource.manager = new VideoManager(this._element, resource.element, clip); diff --git a/packages/javascript/src/state-based/VideoManager.ts b/packages/javascript/src/state-based/VideoManager.ts index 9a66290..cc8bc89 100644 --- a/packages/javascript/src/state-based/VideoManager.ts +++ b/packages/javascript/src/state-based/VideoManager.ts @@ -22,7 +22,7 @@ export class VideoManager extends ClipManager { this.clipElement = clipElement; } - updateVideoElement() { + private updateVideoElement() { this.videoElement = document.createElement('video'); this.clipElement.replaceChildren(this.videoElement); this.videoElement.style.position = 'absolute'; @@ -54,7 +54,7 @@ export class VideoManager extends ClipManager { // Does the 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 { + private audioElement?: HTMLAudioElement; + private isSeeking = false; + + constructor(surfaceElement: HTMLElement, clipElement: HTMLElement, state: AudioState) { + super(surfaceElement, clipElement, state); + this.clipElement = clipElement; + } + + private updateAudioElement() { + this.destroy(); + this.audioElement = document.createElement('audio'); + this.clipElement.replaceChildren(this.audioElement); + } + + /** + * Helper function to seek to a specified time. + * Works with the update loop to poll until seeked event has fired. + */ + private seekTo(time: number) { + if (!this.audioElement) return; + this.audioElement.addEventListener( + 'seeked', + () => { + this.isSeeking = false; + }, + { once: true, passive: true }, + ); + this.audioElement.currentTime = time / 1_000; + } + + protected update(): void { + // Update loop used to poll until seek finished + if (this.isSeeking) return; + this.delay = DEFAULT_AUDIO_POLLING; + + // Does the