UNPKG

lazy-getter

Version:

[![npm version](https://badge.fury.io/js/lazy-getter.svg)](https://badge.fury.io/js/lazy-getter) [![GitHub version](https://badge.fury.io/gh/briandamaged%2Fnode-lazy-getter.svg)](https://badge.fury.io/gh/briandamaged%2Fnode-lazy-getter)

37 lines (27 loc) 734 B
// Wraps a getter and ensures that it only needs // to be evaluated once. function UnboundLazyGetter(name, getter) { function lazyGetter() { const v = getter.apply(this, arguments); delete this[name]; this[name] = v; return v; } return lazyGetter; } // For use w/ ES5 and such function injectLazyGetter(obj, name, getter) { return Object.defineProperty(obj, name, { configurable: true, enumerable: true, get: UnboundLazyGetter(name, getter), }); } // For use w/ decorator syntax function lazyGetter(obj, name, descriptor) { descriptor.get = UnboundLazyGetter(name, descriptor.get); return descriptor; } Object.assign(exports, { UnboundLazyGetter, injectLazyGetter, lazyGetter, });