import assert from 'node:assert/strict' import { test } from 'node:test' import { createRegenerationQueue } from '../dev-reload.js' const waitFor = async (predicate) => { for (let attempt = 0; attempt < 100; attempt += 1) { if (predicate()) return await new Promise((resolve) => setTimeout(resolve, 5)) } assert.fail('timed out waiting for generation') } test('rapid edits coalesce and only the latest generation reloads', async () => { const pending = [] const events = [] const queue = createRegenerationQueue({ generate: () => new Promise((resolve) => pending.push(resolve)), onSuccess: () => events.push('reload'), onError: () => events.push('error'), delay: 1, }) try { queue.request() queue.request() await waitFor(() => pending.length === 1) queue.request() pending[0]() await waitFor(() => pending.length === 2) assert.deepEqual(events, []) pending[1]() await waitFor(() => events.length === 1) assert.deepEqual(events, ['reload']) } finally { queue.close() } }) test('failed latest generation reports an error without reloading', async () => { const events = [] const queue = createRegenerationQueue({ generate: () => Promise.reject(new Error('broken content')), onSuccess: () => events.push('reload'), onError: (error) => events.push(error.message), delay: 1, }) try { queue.request() await waitFor(() => events.length === 1) assert.deepEqual(events, ['broken content']) } finally { queue.close() } })