31 lines
780 B
TypeScript
31 lines
780 B
TypeScript
const INJECTION = Symbol.for("INJECTION")
|
|
|
|
export function _proxyGetter(
|
|
proto: any,
|
|
key: string,
|
|
resolve: () => any,
|
|
doCache: boolean
|
|
) {
|
|
function getter(this: object) {
|
|
if (doCache && !Reflect.hasMetadata(INJECTION, this, key)) {
|
|
Reflect.defineMetadata(INJECTION, resolve(), this, key)
|
|
}
|
|
if (Reflect.hasMetadata(INJECTION, this, key)) {
|
|
return Reflect.getMetadata(INJECTION, this, key)
|
|
} else {
|
|
return resolve()
|
|
}
|
|
}
|
|
|
|
function setter(this: object, newVal: any) {
|
|
Reflect.defineMetadata(INJECTION, newVal, this, key)
|
|
}
|
|
|
|
Object.defineProperty(proto, key, {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: getter,
|
|
set: setter
|
|
})
|
|
}
|