@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 +2 -1
- package/dist/index.js +4 -1
- package/dist/lazy.d.ts +26 -0
- package/dist/lazy.js +55 -0
- package/dist-esm/index.js +2 -1
- package/dist-esm/lazy.js +50 -0
- package/package.json +1 -1
- package/src/index.ts +3 -0
- package/src/lazy.ts +62 -0
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, };
|
package/dist-esm/lazy.js
ADDED
|
@@ -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
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
|
+
}
|