feat(live-atc): local speech bridge discovery composable

This commit is contained in:
itsrubberduck
2026-07-22 20:27:32 +02:00
parent 990e6059eb
commit 0a51fe68ab
5 changed files with 756 additions and 1 deletions

Binary file not shown.

View File

@@ -0,0 +1,22 @@
import { describe, it, expect, vi, beforeEach } from 'vitest'
import { probeLocalSpeech } from './useLocalSpeechBridge'
describe('probeLocalSpeech', () => {
beforeEach(() => vi.restoreAllMocks())
it('returns the base url of the first ready port', async () => {
vi.stubGlobal('fetch', vi.fn(async (url: string) => {
if (url.includes('8765')) return { ok: true, json: async () => ({ ok: true, ready: false }) } as any
if (url.includes('8766')) return { ok: true, json: async () => ({ ok: true, ready: true }) } as any
throw new Error('refused')
}))
const base = await probeLocalSpeech([8765, 8766, 8767])
expect(base).toBe('http://127.0.0.1:8766')
})
it('returns null when nothing is ready', async () => {
vi.stubGlobal('fetch', vi.fn(async () => { throw new Error('refused') }))
const base = await probeLocalSpeech([8765, 8766])
expect(base).toBeNull()
})
})

View File

@@ -0,0 +1,45 @@
import { ref } from 'vue'
const PORTS = [8765, 8766, 8767, 8768, 8769, 8770]
const HEALTH_TIMEOUT_MS = 1200
const RECHECK_MS = 15_000
export async function probeLocalSpeech(ports: number[] = PORTS): Promise<string | null> {
for (const port of ports) {
const base = `http://127.0.0.1:${port}`
try {
const ctrl = new AbortController()
const timeout = setTimeout(() => ctrl.abort(), HEALTH_TIMEOUT_MS)
const response = await fetch(`${base}/health`, { signal: ctrl.signal })
clearTimeout(timeout)
if (!response.ok) continue
const body = await response.json()
if (body?.ok && body?.ready) return base
} catch {
// Port closed/refused: probe the next one.
}
}
return null
}
const localBase = ref<string | null>(null)
let started = false
export function useLocalSpeechBridge() {
const refresh = async () => {
localBase.value = await probeLocalSpeech()
}
if (typeof window !== 'undefined' && !started) {
started = true
void refresh()
setInterval(() => void refresh(), RECHECK_MS)
}
return {
localBase,
/** Absolute endpoint URL, or null while no ready local Bridge is found. */
localUrl: (path: string) => (localBase.value ? localBase.value + path : null),
refresh,
}
}

View File

@@ -47,6 +47,7 @@
"@types/three": "^0.183.0",
"tsx": "^4.21.0",
"typescript": "^5.9.3",
"vitest": "^4.1.10",
"vue-tsc": "^3.2.4"
}
}

689
yarn.lock
View File

@@ -680,6 +680,16 @@ __metadata:
languageName: node
linkType: hard
"@emnapi/core@npm:1.11.1":
version: 1.11.1
resolution: "@emnapi/core@npm:1.11.1"
dependencies:
"@emnapi/wasi-threads": "npm:1.2.2"
tslib: "npm:^2.4.0"
checksum: 10c0/2c6defdac2d1d26090384655d7d6c9614fa553853b1760597686749e9375dc2aa0dae80a2615b81c254600f5d531d07d8466cde0d331a8caae64b93f3ca5937e
languageName: node
linkType: hard
"@emnapi/core@npm:^1.7.1":
version: 1.8.1
resolution: "@emnapi/core@npm:1.8.1"
@@ -690,6 +700,15 @@ __metadata:
languageName: node
linkType: hard
"@emnapi/runtime@npm:1.11.1":
version: 1.11.1
resolution: "@emnapi/runtime@npm:1.11.1"
dependencies:
tslib: "npm:^2.4.0"
checksum: 10c0/04332fb62076afc440aa23316c04bec42f584ca8b074e5507d08e2b33a47cbe0493b1aadb8f3c1057b64ae1e17f5bde1a7bc37f7facc9d0bc25c18197cbd366f
languageName: node
linkType: hard
"@emnapi/runtime@npm:^1.7.0, @emnapi/runtime@npm:^1.7.1":
version: 1.8.1
resolution: "@emnapi/runtime@npm:1.8.1"
@@ -708,6 +727,15 @@ __metadata:
languageName: node
linkType: hard
"@emnapi/wasi-threads@npm:1.2.2":
version: 1.2.2
resolution: "@emnapi/wasi-threads@npm:1.2.2"
dependencies:
tslib: "npm:^2.4.0"
checksum: 10c0/f0dc8269d6b20ae5a7c7b36e7a6a333452009d461038ef4febb29da2f3f78c1e2b1576d7e8970a5c5789ed3caedc1f80f5b0c2a5373bdaf8d03b20432bb55747
languageName: node
linkType: hard
"@esbuild/aix-ppc64@npm:0.25.12":
version: 0.25.12
resolution: "@esbuild/aix-ppc64@npm:0.25.12"
@@ -1529,6 +1557,18 @@ __metadata:
languageName: node
linkType: hard
"@napi-rs/wasm-runtime@npm:^1.1.6":
version: 1.1.6
resolution: "@napi-rs/wasm-runtime@npm:1.1.6"
dependencies:
"@tybys/wasm-util": "npm:^0.10.3"
peerDependencies:
"@emnapi/core": ^1.7.1
"@emnapi/runtime": ^1.7.1
checksum: 10c0/344518bf3ef65051dda4c00969f293aa4a21ab7dc7822b3f48519b17cd5eaa3f0bc34898d115d50ba59b1817a0cb905d46f7a7223c8249239cd14c28db388e10
languageName: node
linkType: hard
"@nodelib/fs.scandir@npm:2.1.5":
version: 2.1.5
resolution: "@nodelib/fs.scandir@npm:2.1.5"
@@ -2324,6 +2364,13 @@ __metadata:
languageName: node
linkType: hard
"@oxc-project/types@npm:=0.139.0":
version: 0.139.0
resolution: "@oxc-project/types@npm:0.139.0"
checksum: 10c0/ad57d1bee4b972ecf6784183da12ac6865edfff326bd83712fb75262b901868bc2b72d6fb502465a5f0dbaaded2910003f73365caf3821901dad565cc0b7fdf2
languageName: node
linkType: hard
"@oxc-project/types@npm:^0.112.0":
version: 0.112.0
resolution: "@oxc-project/types@npm:0.112.0"
@@ -2680,6 +2727,115 @@ __metadata:
languageName: node
linkType: hard
"@rolldown/binding-android-arm64@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-android-arm64@npm:1.1.5"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@rolldown/binding-darwin-arm64@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-darwin-arm64@npm:1.1.5"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@rolldown/binding-darwin-x64@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-darwin-x64@npm:1.1.5"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@rolldown/binding-freebsd-x64@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-freebsd-x64@npm:1.1.5"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@rolldown/binding-linux-arm-gnueabihf@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.1.5"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@rolldown/binding-linux-arm64-gnu@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.1.5"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@rolldown/binding-linux-arm64-musl@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-linux-arm64-musl@npm:1.1.5"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@rolldown/binding-linux-ppc64-gnu@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.1.5"
conditions: os=linux & cpu=ppc64 & libc=glibc
languageName: node
linkType: hard
"@rolldown/binding-linux-s390x-gnu@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.1.5"
conditions: os=linux & cpu=s390x & libc=glibc
languageName: node
linkType: hard
"@rolldown/binding-linux-x64-gnu@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-linux-x64-gnu@npm:1.1.5"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@rolldown/binding-linux-x64-musl@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-linux-x64-musl@npm:1.1.5"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@rolldown/binding-openharmony-arm64@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-openharmony-arm64@npm:1.1.5"
conditions: os=openharmony & cpu=arm64
languageName: node
linkType: hard
"@rolldown/binding-wasm32-wasi@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-wasm32-wasi@npm:1.1.5"
dependencies:
"@emnapi/core": "npm:1.11.1"
"@emnapi/runtime": "npm:1.11.1"
"@napi-rs/wasm-runtime": "npm:^1.1.6"
conditions: cpu=wasm32
languageName: node
linkType: hard
"@rolldown/binding-win32-arm64-msvc@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.1.5"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@rolldown/binding-win32-x64-msvc@npm:1.1.5":
version: 1.1.5
resolution: "@rolldown/binding-win32-x64-msvc@npm:1.1.5"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@rolldown/pluginutils@npm:1.0.0-rc.2":
version: 1.0.0-rc.2
resolution: "@rolldown/pluginutils@npm:1.0.0-rc.2"
@@ -2687,6 +2843,13 @@ __metadata:
languageName: node
linkType: hard
"@rolldown/pluginutils@npm:^1.0.0":
version: 1.0.1
resolution: "@rolldown/pluginutils@npm:1.0.1"
checksum: 10c0/99d9b06d90196823e4d8c841f258db7a16e5dbba5824a2962b05d907b79f1ba929d56f22dd744fd530936e568c865ee56a719dc31e57e13bc0a8eb4764a8d8dd
languageName: node
linkType: hard
"@rolldown/pluginutils@npm:^1.0.0-rc.2":
version: 1.0.0-rc.4
resolution: "@rolldown/pluginutils@npm:1.0.0-rc.4"
@@ -3017,6 +3180,13 @@ __metadata:
languageName: node
linkType: hard
"@standard-schema/spec@npm:^1.1.0":
version: 1.1.0
resolution: "@standard-schema/spec@npm:1.1.0"
checksum: 10c0/d90f55acde4b2deb983529c87e8025fa693de1a5e8b49ecc6eb84d1fd96328add0e03d7d551442156c7432fd78165b2c26ff561b970a9a881f046abb78d6a526
languageName: node
linkType: hard
"@tweenjs/tween.js@npm:~23.1.3":
version: 23.1.3
resolution: "@tweenjs/tween.js@npm:23.1.3"
@@ -3033,6 +3203,32 @@ __metadata:
languageName: node
linkType: hard
"@tybys/wasm-util@npm:^0.10.3":
version: 0.10.3
resolution: "@tybys/wasm-util@npm:0.10.3"
dependencies:
tslib: "npm:^2.4.0"
checksum: 10c0/fd2bd2a79c6cd8c79ed1cf7a0fa375c64589264c88a27acaf9756d556b453ea222b62a4f68dd2fbb8b3a78b6bab3b1f4fb2431b6afc6aeda8344b53a521a1cd3
languageName: node
linkType: hard
"@types/chai@npm:^5.2.2":
version: 5.2.3
resolution: "@types/chai@npm:5.2.3"
dependencies:
"@types/deep-eql": "npm:*"
assertion-error: "npm:^2.0.1"
checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f
languageName: node
linkType: hard
"@types/deep-eql@npm:*":
version: 4.0.2
resolution: "@types/deep-eql@npm:4.0.2"
checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844
languageName: node
linkType: hard
"@types/estree@npm:*, @types/estree@npm:1.0.8, @types/estree@npm:^1.0.0":
version: 1.0.8
resolution: "@types/estree@npm:1.0.8"
@@ -3507,6 +3703,88 @@ __metadata:
languageName: node
linkType: hard
"@vitest/expect@npm:4.1.10":
version: 4.1.10
resolution: "@vitest/expect@npm:4.1.10"
dependencies:
"@standard-schema/spec": "npm:^1.1.0"
"@types/chai": "npm:^5.2.2"
"@vitest/spy": "npm:4.1.10"
"@vitest/utils": "npm:4.1.10"
chai: "npm:^6.2.2"
tinyrainbow: "npm:^3.1.0"
checksum: 10c0/a817ad0d9bd6a039776a7228d54fb8319c17e4af15917407f5566ac61781a8511f591d302519d6999217399915bc3c0290028189fc73f5c38f80cb01b6f19c8d
languageName: node
linkType: hard
"@vitest/mocker@npm:4.1.10":
version: 4.1.10
resolution: "@vitest/mocker@npm:4.1.10"
dependencies:
"@vitest/spy": "npm:4.1.10"
estree-walker: "npm:^3.0.3"
magic-string: "npm:^0.30.21"
peerDependencies:
msw: ^2.4.9
vite: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
checksum: 10c0/4aa70b0df58681652e2e28093437fb2e8f4d02a6d03f5619abc266ac1c5ae5f43326148061d13ae6e071e0f6cfcf7634659af63644de8ce098a7c98949a3d1ad
languageName: node
linkType: hard
"@vitest/pretty-format@npm:4.1.10":
version: 4.1.10
resolution: "@vitest/pretty-format@npm:4.1.10"
dependencies:
tinyrainbow: "npm:^3.1.0"
checksum: 10c0/1a5daba730ffe23f2000bff484b4b2842f3b178d93663cb487b215516b8d3b62caa3e2bb2a3c63307b61a9fe58fb9bfff38559bc0c5e49d8aa403d6803a1d918
languageName: node
linkType: hard
"@vitest/runner@npm:4.1.10":
version: 4.1.10
resolution: "@vitest/runner@npm:4.1.10"
dependencies:
"@vitest/utils": "npm:4.1.10"
pathe: "npm:^2.0.3"
checksum: 10c0/554b72639de9694271b99be8ae273fe12ec793093ec91cce143816cd1187d40b7138a4d9d4de4f456cfca9567de986825bff97e107c05b9eb4abc130e854286d
languageName: node
linkType: hard
"@vitest/snapshot@npm:4.1.10":
version: 4.1.10
resolution: "@vitest/snapshot@npm:4.1.10"
dependencies:
"@vitest/pretty-format": "npm:4.1.10"
"@vitest/utils": "npm:4.1.10"
magic-string: "npm:^0.30.21"
pathe: "npm:^2.0.3"
checksum: 10c0/e71398725f51af5fd0c07bb4b957d0f987daf9b4c564ac24cb2a4d1afde1a6939f535ac17761a32dcc41b0a1e6d4088af66dc44df89fdebebb92aabed1a92b5f
languageName: node
linkType: hard
"@vitest/spy@npm:4.1.10":
version: 4.1.10
resolution: "@vitest/spy@npm:4.1.10"
checksum: 10c0/e5c08012560af6727fd66741c5cda25560d7c5442103d0c83e4276a9b0dd90b9da6cdf823a461195229a16c6ff87768ce788a68d0fa29dea73ee285618668178
languageName: node
linkType: hard
"@vitest/utils@npm:4.1.10":
version: 4.1.10
resolution: "@vitest/utils@npm:4.1.10"
dependencies:
"@vitest/pretty-format": "npm:4.1.10"
convert-source-map: "npm:^2.0.0"
tinyrainbow: "npm:^3.1.0"
checksum: 10c0/05b0ecec6997ec22fc08377e57dbd8fa37992e05961f3a7a916d98b1ab56d15c2a87dbd83d392b628242bdc156b1705e7fa60a3bf0c54bdb51158c153e05fc5d
languageName: node
linkType: hard
"@volar/language-core@npm:2.4.27":
version: 2.4.27
resolution: "@volar/language-core@npm:2.4.27"
@@ -4108,6 +4386,13 @@ __metadata:
languageName: node
linkType: hard
"assertion-error@npm:^2.0.1":
version: 2.0.1
resolution: "assertion-error@npm:2.0.1"
checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8
languageName: node
linkType: hard
"ast-kit@npm:^2.1.2, ast-kit@npm:^2.1.3":
version: 2.2.0
resolution: "ast-kit@npm:2.2.0"
@@ -4490,6 +4775,13 @@ __metadata:
languageName: node
linkType: hard
"chai@npm:^6.2.2":
version: 6.2.2
resolution: "chai@npm:6.2.2"
checksum: 10c0/e6c69e5f0c11dffe6ea13d0290936ebb68fcc1ad688b8e952e131df6a6d5797d5e860bc55cef1aca2e950c3e1f96daf79e9d5a70fb7dbaab4e46355e2635ed53
languageName: node
linkType: hard
"chalk@npm:^4.1.2":
version: 4.1.2
resolution: "chalk@npm:4.1.2"
@@ -5137,7 +5429,7 @@ __metadata:
languageName: node
linkType: hard
"detect-libc@npm:^2.0.0, detect-libc@npm:^2.1.2":
"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.3, detect-libc@npm:^2.1.2":
version: 2.1.2
resolution: "detect-libc@npm:2.1.2"
checksum: 10c0/acc675c29a5649fa1fb6e255f993b8ee829e510b6b56b0910666949c80c364738833417d0edb5f90e4e46be17228b0f2b66a010513984e18b15deeeac49369c4
@@ -5653,6 +5945,13 @@ __metadata:
languageName: node
linkType: hard
"expect-type@npm:^1.3.0":
version: 1.4.0
resolution: "expect-type@npm:1.4.0"
checksum: 10c0/d40d76b8570695d36587beb3cc28494da2ca3ec8f04e67f5622ed2d372d850e401a9adef19c6835e1a8173903f157c79540b34c7b3fbd7cd8ce726cc903c57b7
languageName: node
linkType: hard
"exponential-backoff@npm:^3.1.1":
version: 3.1.3
resolution: "exponential-backoff@npm:3.1.3"
@@ -6864,6 +7163,126 @@ __metadata:
languageName: node
linkType: hard
"lightningcss-android-arm64@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-android-arm64@npm:1.33.0"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"lightningcss-darwin-arm64@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-darwin-arm64@npm:1.33.0"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"lightningcss-darwin-x64@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-darwin-x64@npm:1.33.0"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"lightningcss-freebsd-x64@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-freebsd-x64@npm:1.33.0"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"lightningcss-linux-arm-gnueabihf@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-linux-arm-gnueabihf@npm:1.33.0"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"lightningcss-linux-arm64-gnu@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-linux-arm64-gnu@npm:1.33.0"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"lightningcss-linux-arm64-musl@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-linux-arm64-musl@npm:1.33.0"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"lightningcss-linux-x64-gnu@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-linux-x64-gnu@npm:1.33.0"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"lightningcss-linux-x64-musl@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-linux-x64-musl@npm:1.33.0"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"lightningcss-win32-arm64-msvc@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-win32-arm64-msvc@npm:1.33.0"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"lightningcss-win32-x64-msvc@npm:1.33.0":
version: 1.33.0
resolution: "lightningcss-win32-x64-msvc@npm:1.33.0"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"lightningcss@npm:^1.32.0":
version: 1.33.0
resolution: "lightningcss@npm:1.33.0"
dependencies:
detect-libc: "npm:^2.0.3"
lightningcss-android-arm64: "npm:1.33.0"
lightningcss-darwin-arm64: "npm:1.33.0"
lightningcss-darwin-x64: "npm:1.33.0"
lightningcss-freebsd-x64: "npm:1.33.0"
lightningcss-linux-arm-gnueabihf: "npm:1.33.0"
lightningcss-linux-arm64-gnu: "npm:1.33.0"
lightningcss-linux-arm64-musl: "npm:1.33.0"
lightningcss-linux-x64-gnu: "npm:1.33.0"
lightningcss-linux-x64-musl: "npm:1.33.0"
lightningcss-win32-arm64-msvc: "npm:1.33.0"
lightningcss-win32-x64-msvc: "npm:1.33.0"
dependenciesMeta:
lightningcss-android-arm64:
optional: true
lightningcss-darwin-arm64:
optional: true
lightningcss-darwin-x64:
optional: true
lightningcss-freebsd-x64:
optional: true
lightningcss-linux-arm-gnueabihf:
optional: true
lightningcss-linux-arm64-gnu:
optional: true
lightningcss-linux-arm64-musl:
optional: true
lightningcss-linux-x64-gnu:
optional: true
lightningcss-linux-x64-musl:
optional: true
lightningcss-win32-arm64-msvc:
optional: true
lightningcss-win32-x64-msvc:
optional: true
checksum: 10c0/ce1f8279fbae636dbf37fa6e7385d5f98ed881d72af3362f24afbd4685e19c1fcdfecf17e5dd77f2ebee3d0c23ade276230d85842d07292229a2cffba8ff20a3
languageName: node
linkType: hard
"lilconfig@npm:^3.1.1, lilconfig@npm:^3.1.3":
version: 3.1.3
resolution: "lilconfig@npm:3.1.3"
@@ -7459,6 +7878,15 @@ __metadata:
languageName: node
linkType: hard
"nanoid@npm:^3.3.16":
version: 3.3.16
resolution: "nanoid@npm:3.3.16"
bin:
nanoid: bin/nanoid.cjs
checksum: 10c0/bbf2dcffe22d2b62d16de2711752070b539c0f644c7916f823ad6521986b2078cbe524f2d6240f58c46e9141ea0c7b87a029e100c0f7f175228cacaf30e41bba
languageName: node
linkType: hard
"nanoid@npm:^5.1.5":
version: 5.1.6
resolution: "nanoid@npm:5.1.6"
@@ -8019,6 +8447,7 @@ __metadata:
three: "npm:^0.183.1"
tsx: "npm:^4.21.0"
typescript: "npm:^5.9.3"
vitest: "npm:^4.1.10"
vue: "npm:^3.5.28"
vue-router: "npm:^5.0.2"
vue-tsc: "npm:^3.2.4"
@@ -8385,6 +8814,13 @@ __metadata:
languageName: node
linkType: hard
"picomatch@npm:^4.0.4, picomatch@npm:^4.0.5":
version: 4.0.5
resolution: "picomatch@npm:4.0.5"
checksum: 10c0/947bc6b6e1ff1e6c5aaf95b107a0839d12802f4f7b867663f67d47accba939ca1cb582cf99dfc30438efa1c4648ac5990967e783e8929c36b03e8440704ef1bd
languageName: node
linkType: hard
"pify@npm:^2.3.0":
version: 2.3.0
resolution: "pify@npm:2.3.0"
@@ -8869,6 +9305,17 @@ __metadata:
languageName: node
linkType: hard
"postcss@npm:^8.5.17":
version: 8.5.22
resolution: "postcss@npm:8.5.22"
dependencies:
nanoid: "npm:^3.3.16"
picocolors: "npm:^1.1.1"
source-map-js: "npm:^1.2.1"
checksum: 10c0/9e143ee457988049d5f187116fd37f2750ae9d8d71cc99eae690b776e549e134b34086cbaa2f0360ecd1729b15d918227bd0fc3a2ffbe341f7212d0827080793
languageName: node
linkType: hard
"pretty-bytes@npm:^7.1.0":
version: 7.1.0
resolution: "pretty-bytes@npm:7.1.0"
@@ -9166,6 +9613,64 @@ __metadata:
languageName: node
linkType: hard
"rolldown@npm:~1.1.5":
version: 1.1.5
resolution: "rolldown@npm:1.1.5"
dependencies:
"@oxc-project/types": "npm:=0.139.0"
"@rolldown/binding-android-arm64": "npm:1.1.5"
"@rolldown/binding-darwin-arm64": "npm:1.1.5"
"@rolldown/binding-darwin-x64": "npm:1.1.5"
"@rolldown/binding-freebsd-x64": "npm:1.1.5"
"@rolldown/binding-linux-arm-gnueabihf": "npm:1.1.5"
"@rolldown/binding-linux-arm64-gnu": "npm:1.1.5"
"@rolldown/binding-linux-arm64-musl": "npm:1.1.5"
"@rolldown/binding-linux-ppc64-gnu": "npm:1.1.5"
"@rolldown/binding-linux-s390x-gnu": "npm:1.1.5"
"@rolldown/binding-linux-x64-gnu": "npm:1.1.5"
"@rolldown/binding-linux-x64-musl": "npm:1.1.5"
"@rolldown/binding-openharmony-arm64": "npm:1.1.5"
"@rolldown/binding-wasm32-wasi": "npm:1.1.5"
"@rolldown/binding-win32-arm64-msvc": "npm:1.1.5"
"@rolldown/binding-win32-x64-msvc": "npm:1.1.5"
"@rolldown/pluginutils": "npm:^1.0.0"
dependenciesMeta:
"@rolldown/binding-android-arm64":
optional: true
"@rolldown/binding-darwin-arm64":
optional: true
"@rolldown/binding-darwin-x64":
optional: true
"@rolldown/binding-freebsd-x64":
optional: true
"@rolldown/binding-linux-arm-gnueabihf":
optional: true
"@rolldown/binding-linux-arm64-gnu":
optional: true
"@rolldown/binding-linux-arm64-musl":
optional: true
"@rolldown/binding-linux-ppc64-gnu":
optional: true
"@rolldown/binding-linux-s390x-gnu":
optional: true
"@rolldown/binding-linux-x64-gnu":
optional: true
"@rolldown/binding-linux-x64-musl":
optional: true
"@rolldown/binding-openharmony-arm64":
optional: true
"@rolldown/binding-wasm32-wasi":
optional: true
"@rolldown/binding-win32-arm64-msvc":
optional: true
"@rolldown/binding-win32-x64-msvc":
optional: true
bin:
rolldown: ./bin/cli.mjs
checksum: 10c0/93072aa9d95882f9fa5cd57fe7db6a48efd6f85a25a32137425052ecca02df653651eed0c33a865c33511681bd6a40691d5c88900b8e95ce1334f4f75ba826ff
languageName: node
linkType: hard
"rollup-plugin-visualizer@npm:^6.0.5":
version: 6.0.5
resolution: "rollup-plugin-visualizer@npm:6.0.5"
@@ -9549,6 +10054,13 @@ __metadata:
languageName: node
linkType: hard
"siginfo@npm:^2.0.0":
version: 2.0.0
resolution: "siginfo@npm:2.0.0"
checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34
languageName: node
linkType: hard
"signal-exit@npm:^3.0.7":
version: 3.0.7
resolution: "signal-exit@npm:3.0.7"
@@ -9719,6 +10231,13 @@ __metadata:
languageName: node
linkType: hard
"stackback@npm:0.0.2":
version: 0.0.2
resolution: "stackback@npm:0.0.2"
checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983
languageName: node
linkType: hard
"standard-as-callback@npm:^2.1.0":
version: 2.1.0
resolution: "standard-as-callback@npm:2.1.0"
@@ -9747,6 +10266,13 @@ __metadata:
languageName: node
linkType: hard
"std-env@npm:^4.0.0-rc.1":
version: 4.2.0
resolution: "std-env@npm:4.2.0"
checksum: 10c0/40ac525ce7b7c556abc332a7376f14356eeb1a7f17f6ff9a003eb9f52326ff1f3745d3e1b43452675b1ec6fcc319f1b1d6f3b0d386cf3f91058479ad883cff69
languageName: node
linkType: hard
"streamx@npm:^2.15.0":
version: 2.23.0
resolution: "streamx@npm:2.23.0"
@@ -10072,6 +10598,13 @@ __metadata:
languageName: node
linkType: hard
"tinybench@npm:^2.9.0":
version: 2.9.0
resolution: "tinybench@npm:2.9.0"
checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c
languageName: node
linkType: hard
"tinyexec@npm:^1.0.1, tinyexec@npm:^1.0.2":
version: 1.0.2
resolution: "tinyexec@npm:1.0.2"
@@ -10089,6 +10622,23 @@ __metadata:
languageName: node
linkType: hard
"tinyglobby@npm:^0.2.17":
version: 0.2.17
resolution: "tinyglobby@npm:0.2.17"
dependencies:
fdir: "npm:^6.5.0"
picomatch: "npm:^4.0.4"
checksum: 10c0/7f7bb0f197c88bc4b20c231e0deca4240ca3bf313a88f5a7fee93a872b84966a4d50220947c0455ad07a60b3b360961c5b7fd979222aeb716a9f99b412002e4c
languageName: node
linkType: hard
"tinyrainbow@npm:^3.1.0":
version: 3.1.0
resolution: "tinyrainbow@npm:3.1.0"
checksum: 10c0/f11cf387a26c5c9255bec141a90ac511b26172981b10c3e50053bc6700ea7d2336edcc4a3a21dbb8412fe7c013477d2ba4d7e4877800f3f8107be5105aad6511
languageName: node
linkType: hard
"to-regex-range@npm:^5.0.1":
version: 5.0.1
resolution: "to-regex-range@npm:5.0.1"
@@ -10785,6 +11335,63 @@ __metadata:
languageName: node
linkType: hard
"vite@npm:^6.0.0 || ^7.0.0 || ^8.0.0":
version: 8.1.5
resolution: "vite@npm:8.1.5"
dependencies:
fsevents: "npm:~2.3.3"
lightningcss: "npm:^1.32.0"
picomatch: "npm:^4.0.5"
postcss: "npm:^8.5.17"
rolldown: "npm:~1.1.5"
tinyglobby: "npm:^0.2.17"
peerDependencies:
"@types/node": ^20.19.0 || >=22.12.0
"@vitejs/devtools": ^0.3.0
esbuild: ^0.27.0 || ^0.28.0
jiti: ">=1.21.0"
less: ^4.0.0
sass: ^1.70.0
sass-embedded: ^1.70.0
stylus: ">=0.54.8"
sugarss: ^5.0.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
dependenciesMeta:
fsevents:
optional: true
peerDependenciesMeta:
"@types/node":
optional: true
"@vitejs/devtools":
optional: true
esbuild:
optional: true
jiti:
optional: true
less:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
tsx:
optional: true
yaml:
optional: true
bin:
vite: bin/vite.js
checksum: 10c0/3231e24dd4394d0bc8b4f0f5d6d6a2eda8737e5053042892b4163564456a03d67f953c4c7498621f9517eebc30a492ea136c728a767a122eb84bf6d7cf60e1e6
languageName: node
linkType: hard
"vite@npm:^7.3.1":
version: 7.3.1
resolution: "vite@npm:7.3.1"
@@ -10840,6 +11447,74 @@ __metadata:
languageName: node
linkType: hard
"vitest@npm:^4.1.10":
version: 4.1.10
resolution: "vitest@npm:4.1.10"
dependencies:
"@vitest/expect": "npm:4.1.10"
"@vitest/mocker": "npm:4.1.10"
"@vitest/pretty-format": "npm:4.1.10"
"@vitest/runner": "npm:4.1.10"
"@vitest/snapshot": "npm:4.1.10"
"@vitest/spy": "npm:4.1.10"
"@vitest/utils": "npm:4.1.10"
es-module-lexer: "npm:^2.0.0"
expect-type: "npm:^1.3.0"
magic-string: "npm:^0.30.21"
obug: "npm:^2.1.1"
pathe: "npm:^2.0.3"
picomatch: "npm:^4.0.3"
std-env: "npm:^4.0.0-rc.1"
tinybench: "npm:^2.9.0"
tinyexec: "npm:^1.0.2"
tinyglobby: "npm:^0.2.15"
tinyrainbow: "npm:^3.1.0"
vite: "npm:^6.0.0 || ^7.0.0 || ^8.0.0"
why-is-node-running: "npm:^2.3.0"
peerDependencies:
"@edge-runtime/vm": "*"
"@opentelemetry/api": ^1.9.0
"@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0
"@vitest/browser-playwright": 4.1.10
"@vitest/browser-preview": 4.1.10
"@vitest/browser-webdriverio": 4.1.10
"@vitest/coverage-istanbul": 4.1.10
"@vitest/coverage-v8": 4.1.10
"@vitest/ui": 4.1.10
happy-dom: "*"
jsdom: "*"
vite: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
"@edge-runtime/vm":
optional: true
"@opentelemetry/api":
optional: true
"@types/node":
optional: true
"@vitest/browser-playwright":
optional: true
"@vitest/browser-preview":
optional: true
"@vitest/browser-webdriverio":
optional: true
"@vitest/coverage-istanbul":
optional: true
"@vitest/coverage-v8":
optional: true
"@vitest/ui":
optional: true
happy-dom:
optional: true
jsdom:
optional: true
vite:
optional: false
bin:
vitest: ./vitest.mjs
checksum: 10c0/ff07294a57f9c62f3b503f7cf88a52ee0753ed26389a49cda430387a3898f39d80af47180b0af19e27acab5bd11ae95706bd4b44ce8befc97d3ae49af6ca4fc1
languageName: node
linkType: hard
"vscode-uri@npm:^3.0.8, vscode-uri@npm:^3.1.0":
version: 3.1.0
resolution: "vscode-uri@npm:3.1.0"
@@ -11109,6 +11784,18 @@ __metadata:
languageName: node
linkType: hard
"why-is-node-running@npm:^2.3.0":
version: 2.3.0
resolution: "why-is-node-running@npm:2.3.0"
dependencies:
siginfo: "npm:^2.0.0"
stackback: "npm:0.0.2"
bin:
why-is-node-running: cli.js
checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054
languageName: node
linkType: hard
"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"