@naturalcycles/js-lib 14.56.1 → 14.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { _by, _chunk, _countBy, _difference, _dropRightWhile, _dropWhile, _findLast, _flatten, _flattenDeep, _groupBy, _intersection, _last, _mapToObject, _shuffle, _sortBy, _sum, _sumBy, _takeRightWhile, _takeWhile, _uniq, _uniqBy } from './array/array.util';
2
+ import { _defineLazyProperty, _lazyValue } from './lazy';
2
3
  import { _parseQueryString } from './string/url.util';
3
4
  import { _range } from './array/range';
4
5
  import { PromiseDecoratorCfg, PromiseDecoratorResp, _createPromiseDecorator } from './decorators/createPromiseDecorator';
@@ -54,4 +55,4 @@ import { AsyncMapper, AsyncPredicate, BaseDBEntity, CreatedUpdated, CreatedUpdat
54
55
  import { _gb, _hb, _kb, _mb } from './unit/size.util';
55
56
  import { is } from './vendor/is';
56
57
  export type { MemoCache, PromiseDecoratorCfg, PromiseDecoratorResp, ErrorData, ErrorObject, HttpErrorData, HttpErrorResponse, Admin401ErrorData, Admin403ErrorData, StringMap, PromiseMap, AnyObject, AnyFunction, ValuesOf, ValueOf, KeyValueTuple, ObjectMapper, ObjectPredicate, InstanceId, IsoDate, IsoDateTime, Reviver, PMapOptions, Mapper, AsyncMapper, Predicate, AsyncPredicate, BatchResult, DeferredPromise, PRetryOptions, PTimeoutOptions, TryCatchOptions, StringifyAnyOptions, JsonStringifyFunction, Merge, ReadonlyDeep, Promisable, PromiseValue, Simplify, ConditionalPick, ConditionalExcept, Class, UnixTimestamp, BaseDBEntity, SavedDBEntity, Saved, Unsaved, CreatedUpdated, CreatedUpdatedId, ObjectWithId, AnyObjectWithId, JsonSchema, JsonSchemaAny, JsonSchemaOneOf, JsonSchemaAllOf, JsonSchemaAnyOf, JsonSchemaNot, JsonSchemaRef, JsonSchemaConst, JsonSchemaEnum, JsonSchemaString, JsonSchemaNumber, JsonSchemaBoolean, JsonSchemaNull, JsonSchemaRootObject, JsonSchemaObject, JsonSchemaArray, JsonSchemaTuple, JsonSchemaBuilder, };
57
- export { is, _Memo, _memoFn, _LogMethod, _getArgsSignature, _createPromiseDecorator, AppError, HttpError, AssertionError, _isErrorObject, _isHttpErrorObject, _isHttpErrorResponse, _assert, _assertEquals, _assertDeepEquals, _assertIsError, _assertIsString, _assertIsNumber, _assertTypeOf, _randomInt, _randomArrayItem, _createDeterministicRandom, _inRange, _stringMapValues, _stringMapEntries, _objectKeys, _capitalize, _upperFirst, _lowerFirst, _split, _removeWhitespace, _substringBefore, _substringBeforeLast, _substringAfter, _substringAfterLast, _substringBetweenLast, _replaceAll, _nl2br, _truncate, _truncateMiddle, _pick, _omit, _filterFalsyValues, _filterUndefinedValues, _filterNullishValues, _filterEmptyArrays, _filterEmptyValues, _filterObject, _undefinedIfEmpty, _isObject, _isPrimitive, _mapKeys, _mapValues, _mapObject, _objectNullValuesToUndefined, _deepEquals, _deepCopy, _isEmptyObject, _isEmpty, _merge, _deepTrim, _sortObjectDeep, _sortObject, _get, _set, _has, _unset, _mask, _invert, _invertMap, _by, _groupBy, _sortBy, _sortNumbers, _toFixed, _toPrecision, _round, _findLast, _takeWhile, _takeRightWhile, _dropWhile, _dropRightWhile, _countBy, _intersection, _difference, _shuffle, _mapToObject, _findKeyByValue, _anyToError, _anyToErrorObject, _errorToErrorObject, _errorObjectToAppError, _range, _uniq, _uniqBy, _flatten, _flattenDeep, _chunk, SimpleMovingAverage, _average, _averageWeighted, _percentile, _median, _debounce, _throttle, _Debounce, _Throttle, pMap, _passthroughMapper, _passUndefinedMapper, _passthroughPredicate, _passNothingPredicate, _noop, pBatch, ErrorMode, pFilter, pProps, pDelay, pDefer, pHang, pState, AggregatedError, pRetry, pTimeout, pTuple, _Retry, _Timeout, _tryCatch, _TryCatch, _try, pTry, _jsonParseIfPossible, _stringifyAny, _ms, _since, _hb, _gb, _mb, _kb, _snakeCase, _camelCase, _kebabCase, _sum, _sumBy, _clamp, _last, mergeJsonSchemaObjects, jsonSchema, JsonSchemaAnyBuilder, JSON_SCHEMA_ORDER, generateJsonSchemaFromData, _parseQueryString, };
58
+ export { is, _Memo, _memoFn, _LogMethod, _getArgsSignature, _createPromiseDecorator, AppError, HttpError, AssertionError, _isErrorObject, _isHttpErrorObject, _isHttpErrorResponse, _assert, _assertEquals, _assertDeepEquals, _assertIsError, _assertIsString, _assertIsNumber, _assertTypeOf, _randomInt, _randomArrayItem, _createDeterministicRandom, _inRange, _stringMapValues, _stringMapEntries, _objectKeys, _capitalize, _upperFirst, _lowerFirst, _split, _removeWhitespace, _substringBefore, _substringBeforeLast, _substringAfter, _substringAfterLast, _substringBetweenLast, _replaceAll, _nl2br, _truncate, _truncateMiddle, _pick, _omit, _filterFalsyValues, _filterUndefinedValues, _filterNullishValues, _filterEmptyArrays, _filterEmptyValues, _filterObject, _undefinedIfEmpty, _isObject, _isPrimitive, _mapKeys, _mapValues, _mapObject, _objectNullValuesToUndefined, _deepEquals, _deepCopy, _isEmptyObject, _isEmpty, _merge, _deepTrim, _sortObjectDeep, _sortObject, _get, _set, _has, _unset, _mask, _invert, _invertMap, _by, _groupBy, _sortBy, _sortNumbers, _toFixed, _toPrecision, _round, _findLast, _takeWhile, _takeRightWhile, _dropWhile, _dropRightWhile, _countBy, _intersection, _difference, _shuffle, _mapToObject, _findKeyByValue, _anyToError, _anyToErrorObject, _errorToErrorObject, _errorObjectToAppError, _range, _uniq, _uniqBy, _flatten, _flattenDeep, _chunk, SimpleMovingAverage, _average, _averageWeighted, _percentile, _median, _debounce, _throttle, _Debounce, _Throttle, pMap, _passthroughMapper, _passUndefinedMapper, _passthroughPredicate, _passNothingPredicate, _noop, pBatch, ErrorMode, pFilter, pProps, pDelay, pDefer, pHang, pState, AggregatedError, pRetry, pTimeout, pTuple, _Retry, _Timeout, _tryCatch, _TryCatch, _try, pTry, _jsonParseIfPossible, _stringifyAny, _ms, _since, _hb, _gb, _mb, _kb, _snakeCase, _camelCase, _kebabCase, _sum, _sumBy, _clamp, _last, mergeJsonSchemaObjects, jsonSchema, JsonSchemaAnyBuilder, JSON_SCHEMA_ORDER, generateJsonSchemaFromData, _parseQueryString, _defineLazyProperty, _lazyValue, };
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports._isObject = exports._undefinedIfEmpty = exports._filterObject = exports._filterEmptyValues = exports._filterEmptyArrays = exports._filterNullishValues = exports._filterUndefinedValues = exports._filterFalsyValues = exports._omit = exports._pick = exports._truncateMiddle = exports._truncate = exports._nl2br = exports._replaceAll = exports._substringBetweenLast = exports._substringAfterLast = exports._substringAfter = exports._substringBeforeLast = exports._substringBefore = exports._removeWhitespace = exports._split = exports._lowerFirst = exports._upperFirst = exports._capitalize = exports._objectKeys = exports._stringMapEntries = exports._stringMapValues = exports._inRange = exports._createDeterministicRandom = exports._randomArrayItem = exports._randomInt = exports._assertTypeOf = exports._assertIsNumber = exports._assertIsString = exports._assertIsError = exports._assertDeepEquals = exports._assertEquals = exports._assert = exports._isHttpErrorResponse = exports._isHttpErrorObject = exports._isErrorObject = exports.AssertionError = exports.HttpError = exports.AppError = exports._createPromiseDecorator = exports._getArgsSignature = exports._LogMethod = exports._memoFn = exports._Memo = exports.is = void 0;
4
4
  exports._average = exports.SimpleMovingAverage = exports._chunk = exports._flattenDeep = exports._flatten = exports._uniqBy = exports._uniq = exports._range = exports._errorObjectToAppError = exports._errorToErrorObject = exports._anyToErrorObject = exports._anyToError = exports._findKeyByValue = exports._mapToObject = exports._shuffle = exports._difference = exports._intersection = exports._countBy = exports._dropRightWhile = exports._dropWhile = exports._takeRightWhile = exports._takeWhile = exports._findLast = exports._round = exports._toPrecision = exports._toFixed = exports._sortNumbers = exports._sortBy = exports._groupBy = exports._by = exports._invertMap = exports._invert = exports._mask = exports._unset = exports._has = exports._set = exports._get = exports._sortObject = exports._sortObjectDeep = exports._deepTrim = exports._merge = exports._isEmpty = exports._isEmptyObject = exports._deepCopy = exports._deepEquals = exports._objectNullValuesToUndefined = exports._mapObject = exports._mapValues = exports._mapKeys = exports._isPrimitive = void 0;
5
5
  exports.JSON_SCHEMA_ORDER = exports.JsonSchemaAnyBuilder = exports.jsonSchema = exports.mergeJsonSchemaObjects = exports._last = exports._clamp = exports._sumBy = exports._sum = exports._kebabCase = exports._camelCase = exports._snakeCase = exports._kb = exports._mb = exports._gb = exports._hb = exports._since = exports._ms = exports._stringifyAny = exports._jsonParseIfPossible = exports.pTry = exports._try = exports._TryCatch = exports._tryCatch = exports._Timeout = exports._Retry = exports.pTuple = exports.pTimeout = exports.pRetry = exports.AggregatedError = exports.pState = exports.pHang = exports.pDefer = exports.pDelay = exports.pProps = exports.pFilter = exports.ErrorMode = exports.pBatch = exports._noop = exports._passNothingPredicate = exports._passthroughPredicate = exports._passUndefinedMapper = exports._passthroughMapper = exports.pMap = exports._Throttle = exports._Debounce = exports._throttle = exports._debounce = exports._median = exports._percentile = exports._averageWeighted = void 0;
6
- exports._parseQueryString = exports.generateJsonSchemaFromData = void 0;
6
+ exports._lazyValue = exports._defineLazyProperty = exports._parseQueryString = exports.generateJsonSchemaFromData = void 0;
7
7
  const array_util_1 = require("./array/array.util");
8
8
  Object.defineProperty(exports, "_by", { enumerable: true, get: function () { return array_util_1._by; } });
9
9
  Object.defineProperty(exports, "_chunk", { enumerable: true, get: function () { return array_util_1._chunk; } });
@@ -26,6 +26,9 @@ Object.defineProperty(exports, "_takeRightWhile", { enumerable: true, get: funct
26
26
  Object.defineProperty(exports, "_takeWhile", { enumerable: true, get: function () { return array_util_1._takeWhile; } });
27
27
  Object.defineProperty(exports, "_uniq", { enumerable: true, get: function () { return array_util_1._uniq; } });
28
28
  Object.defineProperty(exports, "_uniqBy", { enumerable: true, get: function () { return array_util_1._uniqBy; } });
29
+ const lazy_1 = require("./lazy");
30
+ Object.defineProperty(exports, "_defineLazyProperty", { enumerable: true, get: function () { return lazy_1._defineLazyProperty; } });
31
+ Object.defineProperty(exports, "_lazyValue", { enumerable: true, get: function () { return lazy_1._lazyValue; } });
29
32
  const url_util_1 = require("./string/url.util");
30
33
  Object.defineProperty(exports, "_parseQueryString", { enumerable: true, get: function () { return url_util_1._parseQueryString; } });
31
34
  const range_1 = require("./array/range");
package/dist/lazy.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ import { AnyFunction, AnyObject } from './types';
2
+ /**
3
+ * const value = lazyValue(() => expensiveComputation())
4
+ *
5
+ * value() // calls expensiveComputation() once
6
+ * value() // returns cached result
7
+ * value() // returns cached result
8
+ *
9
+ * Based on: https://github.com/sindresorhus/lazy-value
10
+ */
11
+ export declare function _lazyValue<T extends AnyFunction>(fn: T): T;
12
+ /**
13
+ * interface Obj {
14
+ * v: number
15
+ * }
16
+ *
17
+ * const obj = {} as Obj
18
+ *
19
+ * _defineLazyProperty(obj, 'v', () => expensiveComputation())
20
+ * obj.v // runs expensiveComputation() once
21
+ * obj.v // cached value
22
+ * obj.v // cached value
23
+ *
24
+ * Based on: https://github.com/sindresorhus/define-lazy-prop
25
+ */
26
+ export declare function _defineLazyProperty<OBJ extends AnyObject>(obj: OBJ, propertyName: keyof OBJ, fn: AnyFunction): OBJ;
package/dist/lazy.js ADDED
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports._defineLazyProperty = exports._lazyValue = void 0;
4
+ /**
5
+ * const value = lazyValue(() => expensiveComputation())
6
+ *
7
+ * value() // calls expensiveComputation() once
8
+ * value() // returns cached result
9
+ * value() // returns cached result
10
+ *
11
+ * Based on: https://github.com/sindresorhus/lazy-value
12
+ */
13
+ function _lazyValue(fn) {
14
+ let isCalled = false;
15
+ let result;
16
+ return (() => {
17
+ if (!isCalled) {
18
+ isCalled = true;
19
+ result = fn();
20
+ }
21
+ return result;
22
+ });
23
+ }
24
+ exports._lazyValue = _lazyValue;
25
+ /**
26
+ * interface Obj {
27
+ * v: number
28
+ * }
29
+ *
30
+ * const obj = {} as Obj
31
+ *
32
+ * _defineLazyProperty(obj, 'v', () => expensiveComputation())
33
+ * obj.v // runs expensiveComputation() once
34
+ * obj.v // cached value
35
+ * obj.v // cached value
36
+ *
37
+ * Based on: https://github.com/sindresorhus/define-lazy-prop
38
+ */
39
+ function _defineLazyProperty(obj, propertyName, fn) {
40
+ const define = (value) => Object.defineProperty(obj, propertyName, { value, enumerable: true, writable: true });
41
+ Object.defineProperty(obj, propertyName, {
42
+ configurable: true,
43
+ enumerable: true,
44
+ get() {
45
+ const result = fn();
46
+ define(result);
47
+ return result;
48
+ },
49
+ set(value) {
50
+ define(value);
51
+ },
52
+ });
53
+ return obj;
54
+ }
55
+ exports._defineLazyProperty = _defineLazyProperty;
package/dist-esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { _by, _chunk, _countBy, _difference, _dropRightWhile, _dropWhile, _findLast, _flatten, _flattenDeep, _groupBy, _intersection, _last, _mapToObject, _shuffle, _sortBy, _sum, _sumBy, _takeRightWhile, _takeWhile, _uniq, _uniqBy, } from './array/array.util';
2
+ import { _defineLazyProperty, _lazyValue } from './lazy';
2
3
  import { _parseQueryString } from './string/url.util';
3
4
  import { _range } from './array/range';
4
5
  import { _createPromiseDecorator, } from './decorators/createPromiseDecorator';
@@ -49,4 +50,4 @@ import { _ms, _since } from './time/time.util';
49
50
  import { _noop, _objectKeys, _passNothingPredicate, _passthroughMapper, _passthroughPredicate, _passUndefinedMapper, _stringMapEntries, _stringMapValues, } from './types';
50
51
  import { _gb, _hb, _kb, _mb } from './unit/size.util';
51
52
  import { is } from './vendor/is';
52
- export { is, _Memo, _memoFn, _LogMethod, _getArgsSignature, _createPromiseDecorator, AppError, HttpError, AssertionError, _isErrorObject, _isHttpErrorObject, _isHttpErrorResponse, _assert, _assertEquals, _assertDeepEquals, _assertIsError, _assertIsString, _assertIsNumber, _assertTypeOf, _randomInt, _randomArrayItem, _createDeterministicRandom, _inRange, _stringMapValues, _stringMapEntries, _objectKeys, _capitalize, _upperFirst, _lowerFirst, _split, _removeWhitespace, _substringBefore, _substringBeforeLast, _substringAfter, _substringAfterLast, _substringBetweenLast, _replaceAll, _nl2br, _truncate, _truncateMiddle, _pick, _omit, _filterFalsyValues, _filterUndefinedValues, _filterNullishValues, _filterEmptyArrays, _filterEmptyValues, _filterObject, _undefinedIfEmpty, _isObject, _isPrimitive, _mapKeys, _mapValues, _mapObject, _objectNullValuesToUndefined, _deepEquals, _deepCopy, _isEmptyObject, _isEmpty, _merge, _deepTrim, _sortObjectDeep, _sortObject, _get, _set, _has, _unset, _mask, _invert, _invertMap, _by, _groupBy, _sortBy, _sortNumbers, _toFixed, _toPrecision, _round, _findLast, _takeWhile, _takeRightWhile, _dropWhile, _dropRightWhile, _countBy, _intersection, _difference, _shuffle, _mapToObject, _findKeyByValue, _anyToError, _anyToErrorObject, _errorToErrorObject, _errorObjectToAppError, _range, _uniq, _uniqBy, _flatten, _flattenDeep, _chunk, SimpleMovingAverage, _average, _averageWeighted, _percentile, _median, _debounce, _throttle, _Debounce, _Throttle, pMap, _passthroughMapper, _passUndefinedMapper, _passthroughPredicate, _passNothingPredicate, _noop, pBatch, ErrorMode, pFilter, pProps, pDelay, pDefer, pHang, pState, AggregatedError, pRetry, pTimeout, pTuple, _Retry, _Timeout, _tryCatch, _TryCatch, _try, pTry, _jsonParseIfPossible, _stringifyAny, _ms, _since, _hb, _gb, _mb, _kb, _snakeCase, _camelCase, _kebabCase, _sum, _sumBy, _clamp, _last, mergeJsonSchemaObjects, jsonSchema, JsonSchemaAnyBuilder, JSON_SCHEMA_ORDER, generateJsonSchemaFromData, _parseQueryString, };
53
+ export { is, _Memo, _memoFn, _LogMethod, _getArgsSignature, _createPromiseDecorator, AppError, HttpError, AssertionError, _isErrorObject, _isHttpErrorObject, _isHttpErrorResponse, _assert, _assertEquals, _assertDeepEquals, _assertIsError, _assertIsString, _assertIsNumber, _assertTypeOf, _randomInt, _randomArrayItem, _createDeterministicRandom, _inRange, _stringMapValues, _stringMapEntries, _objectKeys, _capitalize, _upperFirst, _lowerFirst, _split, _removeWhitespace, _substringBefore, _substringBeforeLast, _substringAfter, _substringAfterLast, _substringBetweenLast, _replaceAll, _nl2br, _truncate, _truncateMiddle, _pick, _omit, _filterFalsyValues, _filterUndefinedValues, _filterNullishValues, _filterEmptyArrays, _filterEmptyValues, _filterObject, _undefinedIfEmpty, _isObject, _isPrimitive, _mapKeys, _mapValues, _mapObject, _objectNullValuesToUndefined, _deepEquals, _deepCopy, _isEmptyObject, _isEmpty, _merge, _deepTrim, _sortObjectDeep, _sortObject, _get, _set, _has, _unset, _mask, _invert, _invertMap, _by, _groupBy, _sortBy, _sortNumbers, _toFixed, _toPrecision, _round, _findLast, _takeWhile, _takeRightWhile, _dropWhile, _dropRightWhile, _countBy, _intersection, _difference, _shuffle, _mapToObject, _findKeyByValue, _anyToError, _anyToErrorObject, _errorToErrorObject, _errorObjectToAppError, _range, _uniq, _uniqBy, _flatten, _flattenDeep, _chunk, SimpleMovingAverage, _average, _averageWeighted, _percentile, _median, _debounce, _throttle, _Debounce, _Throttle, pMap, _passthroughMapper, _passUndefinedMapper, _passthroughPredicate, _passNothingPredicate, _noop, pBatch, ErrorMode, pFilter, pProps, pDelay, pDefer, pHang, pState, AggregatedError, pRetry, pTimeout, pTuple, _Retry, _Timeout, _tryCatch, _TryCatch, _try, pTry, _jsonParseIfPossible, _stringifyAny, _ms, _since, _hb, _gb, _mb, _kb, _snakeCase, _camelCase, _kebabCase, _sum, _sumBy, _clamp, _last, mergeJsonSchemaObjects, jsonSchema, JsonSchemaAnyBuilder, JSON_SCHEMA_ORDER, generateJsonSchemaFromData, _parseQueryString, _defineLazyProperty, _lazyValue, };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * const value = lazyValue(() => expensiveComputation())
3
+ *
4
+ * value() // calls expensiveComputation() once
5
+ * value() // returns cached result
6
+ * value() // returns cached result
7
+ *
8
+ * Based on: https://github.com/sindresorhus/lazy-value
9
+ */
10
+ export function _lazyValue(fn) {
11
+ let isCalled = false;
12
+ let result;
13
+ return (() => {
14
+ if (!isCalled) {
15
+ isCalled = true;
16
+ result = fn();
17
+ }
18
+ return result;
19
+ });
20
+ }
21
+ /**
22
+ * interface Obj {
23
+ * v: number
24
+ * }
25
+ *
26
+ * const obj = {} as Obj
27
+ *
28
+ * _defineLazyProperty(obj, 'v', () => expensiveComputation())
29
+ * obj.v // runs expensiveComputation() once
30
+ * obj.v // cached value
31
+ * obj.v // cached value
32
+ *
33
+ * Based on: https://github.com/sindresorhus/define-lazy-prop
34
+ */
35
+ export function _defineLazyProperty(obj, propertyName, fn) {
36
+ const define = (value) => Object.defineProperty(obj, propertyName, { value, enumerable: true, writable: true });
37
+ Object.defineProperty(obj, propertyName, {
38
+ configurable: true,
39
+ enumerable: true,
40
+ get() {
41
+ const result = fn();
42
+ define(result);
43
+ return result;
44
+ },
45
+ set(value) {
46
+ define(value);
47
+ },
48
+ });
49
+ return obj;
50
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturalcycles/js-lib",
3
- "version": "14.56.1",
3
+ "version": "14.57.0",
4
4
  "scripts": {
5
5
  "prepare": "husky install",
6
6
  "build-prod": "build-prod-esm-cjs",
package/src/index.ts CHANGED
@@ -21,6 +21,7 @@ import {
21
21
  _uniq,
22
22
  _uniqBy,
23
23
  } from './array/array.util'
24
+ import { _defineLazyProperty, _lazyValue } from './lazy'
24
25
  import { _parseQueryString } from './string/url.util'
25
26
  import { _range } from './array/range'
26
27
  import {
@@ -449,4 +450,6 @@ export {
449
450
  JSON_SCHEMA_ORDER,
450
451
  generateJsonSchemaFromData,
451
452
  _parseQueryString,
453
+ _defineLazyProperty,
454
+ _lazyValue,
452
455
  }
package/src/lazy.ts ADDED
@@ -0,0 +1,62 @@
1
+ import { AnyFunction, AnyObject } from './types'
2
+
3
+ /**
4
+ * const value = lazyValue(() => expensiveComputation())
5
+ *
6
+ * value() // calls expensiveComputation() once
7
+ * value() // returns cached result
8
+ * value() // returns cached result
9
+ *
10
+ * Based on: https://github.com/sindresorhus/lazy-value
11
+ */
12
+ export function _lazyValue<T extends AnyFunction>(fn: T): T {
13
+ let isCalled = false
14
+ let result: any
15
+
16
+ return (() => {
17
+ if (!isCalled) {
18
+ isCalled = true
19
+ result = fn()
20
+ }
21
+
22
+ return result
23
+ }) as any
24
+ }
25
+
26
+ /**
27
+ * interface Obj {
28
+ * v: number
29
+ * }
30
+ *
31
+ * const obj = {} as Obj
32
+ *
33
+ * _defineLazyProperty(obj, 'v', () => expensiveComputation())
34
+ * obj.v // runs expensiveComputation() once
35
+ * obj.v // cached value
36
+ * obj.v // cached value
37
+ *
38
+ * Based on: https://github.com/sindresorhus/define-lazy-prop
39
+ */
40
+ export function _defineLazyProperty<OBJ extends AnyObject>(
41
+ obj: OBJ,
42
+ propertyName: keyof OBJ,
43
+ fn: AnyFunction,
44
+ ): OBJ {
45
+ const define = (value: any) =>
46
+ Object.defineProperty(obj, propertyName, { value, enumerable: true, writable: true })
47
+
48
+ Object.defineProperty(obj, propertyName, {
49
+ configurable: true,
50
+ enumerable: true,
51
+ get() {
52
+ const result = fn()
53
+ define(result)
54
+ return result
55
+ },
56
+ set(value) {
57
+ define(value)
58
+ },
59
+ })
60
+
61
+ return obj
62
+ }