@ark7/lazyload
Version:
@ark7/lazyload delays loading of object creation. Object will not be loaded before accessing its properties.
1 lines • 2.47 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAiFpE","file":"index.d.ts","sourcesContent":["export type LazyLoadFn<T> = (...args: any[]) => T;\n\nexport default function lazyload<T>(fn: LazyLoadFn<T>): LazyLoadFn<T> {\n const fnWrap: LazyLoadFn<T> = function () {\n let calculated = false;\n let val: any;\n\n function getVal() {\n if (!calculated) {\n val = fn.apply(this, arguments);\n calculated = true;\n }\n return val;\n }\n\n const handler = {\n apply(_target: any, thisArg: any, argArray: any[]) {\n const fn = getVal();\n return fn.apply(thisArg, argArray);\n },\n\n construct(_target: any, argArray: any[]) {\n const cls = getVal();\n return new cls(...argArray);\n },\n\n defineProperty(\n _target: any,\n p: string | symbol,\n attributes: PropertyDescriptor,\n ) {\n return Object.defineProperty(getVal(), p, attributes);\n },\n\n deleteProperty(_target: any, p: string | symbol) {\n return Reflect.deleteProperty(getVal(), p);\n },\n\n get(_target: any, prop: string | symbol) {\n return getVal()[prop];\n },\n\n getOwnPropertyDescriptor(\n _target: any,\n p: string | symbol,\n ): PropertyDescriptor | undefined {\n return Object.getOwnPropertyDescriptor(getVal(), p);\n },\n\n getPrototypeOf(_target: any) {\n return Object.getPrototypeOf(getVal());\n },\n\n has(_target: any, p: string | symbol) {\n return Reflect.has(getVal(), p);\n },\n\n isExtensible(_target: any) {\n return Reflect.isExtensible(getVal());\n },\n\n ownKeys(_target: any) {\n return Reflect.ownKeys(getVal());\n },\n\n preventExtensions(_target: any) {\n return Reflect.preventExtensions(getVal());\n },\n\n set(_target: any, p: string | symbol, value: any) {\n getVal()[p] = value;\n return true;\n },\n\n setPrototypeOf(_target: any, v: object | null) {\n return Reflect.setPrototypeOf(getVal(), v);\n },\n };\n\n return new Proxy(function () {}, handler) as T;\n };\n\n return fnWrap;\n}\n"],"sourceRoot":"/Users/yz/workspace/lazyload/src"}