mirror of
https://github.com/outline/outline.git
synced 2026-06-13 03:14:59 +03:00
091346dfe8
* 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>
41 lines
1.0 KiB
TypeScript
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);
|
|
},
|
|
});
|
|
}
|