(creator: (target: T) => T2)
| 537 | } |
| 538 | |
| 539 | export function lazyGetter<T extends object, T2>(creator: (target: T) => T2) { |
| 540 | const key = Symbol(creator.name) |
| 541 | const f = (target: T): T2 => { |
| 542 | let lazy = (target as unknown as Lazy)[LazySymbol] |
| 543 | if (!lazy) { |
| 544 | lazy = {} |
| 545 | Object.defineProperty(target, LazySymbol, { enumerable: false, value: lazy }) |
| 546 | } else if (lazy[key]) { |
| 547 | return lazy[key] |
| 548 | } |
| 549 | const value = creator(target) |
| 550 | lazy[key] = value |
| 551 | return value |
| 552 | } |
| 553 | Object.defineProperty(f, "name", { |
| 554 | enumerable: false, |
| 555 | value: `Lazy<${creator.name}>` |
| 556 | }) |
| 557 | return f |
| 558 | } |
| 559 | |
| 560 | export function exhaustiveMatch<T extends string>() { |
| 561 | return <Out extends Record<T, (t: T) => any>>(handlers: Out) => (t: T): ReturnType<Out[keyof Out]> => handlers[t](t) |
nothing calls this directly
no test coverage detected
searching dependent graphs…