From 296336535f6d23c586c7e83edf0420b58cbf011a Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 14 Oct 2022 21:34:35 +0200 Subject: Fix modals, add wp.mapMangledModule --- src/utils/proxyLazy.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/utils/proxyLazy.ts (limited to 'src/utils/proxyLazy.ts') diff --git a/src/utils/proxyLazy.ts b/src/utils/proxyLazy.ts new file mode 100644 index 0000000..0912403 --- /dev/null +++ b/src/utils/proxyLazy.ts @@ -0,0 +1,25 @@ +import { makeLazy } from "./misc"; + +/** + * 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 + * @param factory lazy factory + * @returns Proxy + * + * Note that the example below exists already as an api, see {@link lazyWebpack} + * @example const mod = proxyLazy(makeLazy(() => findByProps("blah"))); console.log(mod.blah); + */ +export function proxyLazy(factory: () => T): T { + const lazy = makeLazy(factory); + + return new Proxy(() => null, { + 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), + deleteProperty: (_, prop) => delete lazy()[prop], + defineProperty: (_, property, attributes) => !!Object.defineProperty(lazy(), property, attributes) + }) as any as T; +} -- cgit