Files
Tom Moor 091346dfe8 chore: Migrate to vitest (#12272)
* wip

* Remove obsolete snapshots

* simplify

* chore(test): Convert mocks to TypeScript and tighten fetch mock types

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Remove unneccessary patches

* Migrate to msw instead of custom fetch mock

* Address PR review comments

- Split chained vi.useFakeTimers().setSystemTime() into separate calls.
- Switch test setup to dynamic imports so EventEmitter.defaultMaxListeners
  assignment runs before module init (static imports were hoisted above it).
- Drop redundant NODE_ENV guard in monkeyPatchSequelizeErrorsForJest; its
  sole caller already gates on env.isTest.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-06 21:10:51 -04:00

41 lines
1.0 KiB
TypeScript

/**
* Create a lazily-loaded object registry. The loader runs only when the
* registry is first accessed.
*
* @param load A function that returns the registry contents.
* @returns A proxy that exposes the lazily-loaded registry.
*/
export function createLazyRegistry<T>(
load: () => Record<string, T>
): Record<string, T> {
let cache: Record<string, T> | undefined;
const getRegistry = () => {
if (cache) {
return cache;
}
cache = load();
return cache;
};
return new Proxy({} as Record<string, T>, {
get(_target, prop: string | symbol) {
if (typeof prop === "symbol") {
return undefined;
}
return getRegistry()[prop];
},
has(_target, prop: string | symbol) {
return typeof prop === "string" && prop in getRegistry();
},
ownKeys() {
return Reflect.ownKeys(getRegistry());
},
getOwnPropertyDescriptor(_target, prop: string | symbol) {
return Reflect.getOwnPropertyDescriptor(getRegistry(), prop);
},
});
}