mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-09-30 12:39:42 +02:00
Dead-code sweep via knip. All files below have zero importers and were leftovers from the local-echo overlay exploration or duplicated by files under test/mocks/. Deleted: - test/respawn-test-utils.ts (728-line duplicate of test/mocks/*) - test/input-echo-test.mjs - test/local-echo-*.mjs (7 files) - test/manual/*.mjs (10 files; dir removed) - scripts/remotion/components/TerminalScreen.tsx (unused Remotion demo) Also cleaned stale JSDoc references to the removed respawn-test-utils.ts in test/mocks/mock-session.ts and test/mocks/test-helpers.ts. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
/**
|
|
* Reusable async test helpers.
|
|
*/
|
|
|
|
/** Wait for an EventEmitter to emit a specific event, with timeout */
|
|
export function waitForEvent(
|
|
emitter: { once: (event: string, listener: (...args: unknown[]) => void) => void },
|
|
event: string,
|
|
timeoutMs = 5000
|
|
): Promise<unknown> {
|
|
return new Promise((resolve, reject) => {
|
|
const timer = setTimeout(
|
|
() => reject(new Error(`Timed out waiting for event "${event}" after ${timeoutMs}ms`)),
|
|
timeoutMs
|
|
);
|
|
emitter.once(event, (...args: unknown[]) => {
|
|
clearTimeout(timer);
|
|
resolve(args.length === 1 ? args[0] : args);
|
|
});
|
|
});
|
|
}
|
|
|
|
/** Create a deferred promise with external resolve/reject */
|
|
export function createDeferred<T = void>(): {
|
|
promise: Promise<T>;
|
|
resolve: (value: T) => void;
|
|
reject: (reason?: unknown) => void;
|
|
} {
|
|
let resolve!: (value: T) => void;
|
|
let reject!: (reason?: unknown) => void;
|
|
const promise = new Promise<T>((res, rej) => {
|
|
resolve = res;
|
|
reject = rej;
|
|
});
|
|
return { promise, resolve, reject };
|
|
}
|