fix: support concurrent game windows and prepare beta12 GitHub releases

This commit is contained in:
Disy committed 2026-09-25 11:49:41 +08:00
1 parent 91f483b960
commit 1cf67602d8
33 files changed
+681 -293

No files matched your search

@@ -0,0 +1,38 @@
import assert from 'node:assert/strict'
import { test } from 'node:test'
import { isInstanceLaunching, launchOnce } from './instance-launch-state.ts'
test('launches different instances concurrently and coalesces repeated pending clicks', async () => {
let finishA!: (value: string) => void
let starts = 0
const first = launchOnce('a', () => {
starts++
return new Promise<string>((resolve) => {
finishA = resolve
})
})
assert.equal(
launchOnce('a', async () => 'unexpected duplicate'),
first,
)
assert.equal(isInstanceLaunching('a'), true)
assert.equal(isInstanceLaunching('b'), false)
assert.equal(await launchOnce('b', async () => 'b started'), 'b started')
assert.equal(isInstanceLaunching('a'), true)
finishA('a started')
assert.equal(await first, 'a started')
assert.equal(starts, 1)
assert.equal(isInstanceLaunching('a'), false)
assert.equal(await launchOnce('a', async () => 'second window'), 'second window')
})
test('failed launch releases only its own pending state and can retry', async () => {
await assert.rejects(
launchOnce('failed', async () => {
throw new Error('launch failed')
}),
/launch failed/,
)
assert.equal(isInstanceLaunching('failed'), false)
assert.equal(await launchOnce('failed', async () => 'retry'), 'retry')
})