diff options
Diffstat (limited to 'src/utils/proxyLazy.ts')
-rw-r--r-- | src/utils/proxyLazy.ts | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/utils/proxyLazy.ts b/src/utils/proxyLazy.ts index 6aa04bf..a5c0835 100644 --- a/src/utils/proxyLazy.ts +++ b/src/utils/proxyLazy.ts @@ -1,5 +1,7 @@ import { makeLazy } from "./misc"; +const ProxyDummy = function () { }; + /** * Wraps the result of {@see makeLazy} in a Proxy you can consume as if it wasn't lazy. * On first property access, the lazy is evaluated @@ -12,14 +14,15 @@ import { makeLazy } from "./misc"; export function proxyLazy<T>(factory: () => T): T { const lazy = makeLazy(factory); - return new Proxy(() => null, { + return new Proxy(ProxyDummy, { get: (_, prop) => lazy()[prop], set: (_, prop, value) => lazy()[prop] = value, has: (_, prop) => prop in lazy(), apply: (_, $this, args) => (lazy() as Function).apply($this, args), ownKeys: () => Reflect.ownKeys(lazy() as object), - construct: (_, args, newTarget) => Reflect.construct(lazy() as Function, args, newTarget), + construct: (_, args) => Reflect.construct(lazy() as Function, args), deleteProperty: (_, prop) => delete lazy()[prop], - defineProperty: (_, property, attributes) => !!Object.defineProperty(lazy(), property, attributes) + defineProperty: (_, property, attributes) => !!Object.defineProperty(lazy(), property, attributes), + getPrototypeOf: () => Object.getPrototypeOf(lazy()) }) as any as T; } |