@naturalcycles/js-lib 14.56.0 → 14.59.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.
@@ -16,6 +16,8 @@ export declare function _chunk<T>(array: readonly T[], size?: number): T[][];
16
16
  /**
17
17
  * Polyfill to Array.flat() with depth=1.
18
18
  * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
19
+ *
20
+ * @deprecated prefer native Array.flat(), it's supported since iOS 12
19
21
  */
20
22
  export declare function _flatten<T>(arrays: T[][]): T[];
21
23
  /**
@@ -25,6 +27,8 @@ export declare function _flatten<T>(arrays: T[][]): T[];
25
27
  * @return Returns the new flattened array.
26
28
  *
27
29
  * Based on: https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_flattendeep
30
+ *
31
+ * @deprecated prefer native Array.flat(), it's supported since iOS 12
28
32
  */
29
33
  export declare function _flattenDeep<T>(arr: RecursiveArray<T>): T[];
30
34
  /**
@@ -22,6 +22,8 @@ exports._chunk = _chunk;
22
22
  /**
23
23
  * Polyfill to Array.flat() with depth=1.
24
24
  * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
25
+ *
26
+ * @deprecated prefer native Array.flat(), it's supported since iOS 12
25
27
  */
26
28
  function _flatten(arrays) {
27
29
  // to flat single level array
@@ -35,6 +37,8 @@ exports._flatten = _flatten;
35
37
  * @return Returns the new flattened array.
36
38
  *
37
39
  * Based on: https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_flattendeep
40
+ *
41
+ * @deprecated prefer native Array.flat(), it's supported since iOS 12
38
42
  */
39
43
  function _flattenDeep(arr) {
40
44
  return Array.isArray(arr)
@@ -19,6 +19,7 @@ class AppError extends Error {
19
19
  });
20
20
  Object.defineProperty(this, 'data', {
21
21
  value: data,
22
+ writable: true,
22
23
  configurable: true,
23
24
  enumerable: false,
24
25
  });
@@ -28,6 +29,7 @@ class AppError extends Error {
28
29
  else {
29
30
  Object.defineProperty(this, 'stack', {
30
31
  value: new Error().stack,
32
+ writable: true,
31
33
  configurable: true,
32
34
  });
33
35
  }
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, _defineLazyProps, _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';
@@ -53,5 +54,6 @@ import { Class, ConditionalExcept, ConditionalPick, Merge, Promisable, PromiseVa
53
54
  import { AsyncMapper, AsyncPredicate, BaseDBEntity, CreatedUpdated, CreatedUpdatedId, ObjectWithId, AnyObjectWithId, Saved, Unsaved, BatchResult, InstanceId, IsoDate, IsoDateTime, KeyValueTuple, Mapper, ObjectMapper, ObjectPredicate, Predicate, PromiseMap, AnyObject, AnyFunction, Reviver, SavedDBEntity, StringMap, UnixTimestamp, ValueOf, ValuesOf, _noop, _objectKeys, _passNothingPredicate, _passthroughMapper, _passthroughPredicate, _passUndefinedMapper, _stringMapEntries, _stringMapValues } from './types';
54
55
  import { _gb, _hb, _kb, _mb } from './unit/size.util';
55
56
  import { is } from './vendor/is';
56
- 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, };
57
+ import { CommonLogLevel, CommonLogFunction, CommonLogger, SimpleLogger, createSimpleLogger, noopLogger } from './log/commonLogger';
58
+ 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, CommonLogLevel, CommonLogFunction, CommonLogger, SimpleLogger, };
59
+ 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, _defineLazyProps, _lazyValue, createSimpleLogger, noopLogger, };
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.noopLogger = exports.createSimpleLogger = exports._lazyValue = exports._defineLazyProps = 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,10 @@ 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, "_defineLazyProps", { enumerable: true, get: function () { return lazy_1._defineLazyProps; } });
32
+ Object.defineProperty(exports, "_lazyValue", { enumerable: true, get: function () { return lazy_1._lazyValue; } });
29
33
  const url_util_1 = require("./string/url.util");
30
34
  Object.defineProperty(exports, "_parseQueryString", { enumerable: true, get: function () { return url_util_1._parseQueryString; } });
31
35
  const range_1 = require("./array/range");
@@ -207,3 +211,6 @@ Object.defineProperty(exports, "_kb", { enumerable: true, get: function () { ret
207
211
  Object.defineProperty(exports, "_mb", { enumerable: true, get: function () { return size_util_1._mb; } });
208
212
  const is_1 = require("./vendor/is");
209
213
  Object.defineProperty(exports, "is", { enumerable: true, get: function () { return is_1.is; } });
214
+ const commonLogger_1 = require("./log/commonLogger");
215
+ Object.defineProperty(exports, "createSimpleLogger", { enumerable: true, get: function () { return commonLogger_1.createSimpleLogger; } });
216
+ Object.defineProperty(exports, "noopLogger", { enumerable: true, get: function () { return commonLogger_1.noopLogger; } });
package/dist/lazy.d.ts ADDED
@@ -0,0 +1,30 @@
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;
27
+ /**
28
+ * Like _defineLazyProperty, but allows to define multiple props at once.
29
+ */
30
+ export declare function _defineLazyProps<OBJ extends AnyObject>(obj: OBJ, props: Partial<Record<keyof OBJ, AnyFunction>>): OBJ;
package/dist/lazy.js ADDED
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports._defineLazyProps = 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;
56
+ /**
57
+ * Like _defineLazyProperty, but allows to define multiple props at once.
58
+ */
59
+ function _defineLazyProps(obj, props) {
60
+ Object.entries(props).forEach(([k, fn]) => _defineLazyProperty(obj, k, fn));
61
+ return obj;
62
+ }
63
+ exports._defineLazyProps = _defineLazyProps;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * These levels follow console.* naming,
3
+ * so you can use console[level] safely.
4
+ *
5
+ * `log` is considered default level.
6
+ *
7
+ * For simplicity - only these 3 levels are kept.
8
+ *
9
+ * @experimental
10
+ */
11
+ export declare type CommonLogLevel = 'log' | 'warn' | 'error';
12
+ /**
13
+ * Function that takes any number of arguments and logs them all.
14
+ * It is expected that logged arguments are separated by "space", like console.log does.
15
+ *
16
+ * @experimental
17
+ */
18
+ export declare type CommonLogFunction = (...args: any[]) => void;
19
+ /**
20
+ * Interface is inspired/compatible with `console.*`
21
+ * So, `console` is a valid CommonLogger implementation as-is.
22
+ *
23
+ * @experimental
24
+ */
25
+ export interface CommonLogger {
26
+ log: CommonLogFunction;
27
+ warn: CommonLogFunction;
28
+ error: CommonLogFunction;
29
+ }
30
+ /**
31
+ * Same as CommonLogger, but also is a "convenience function" itself.
32
+ * So you can do `logger('hey')` which is the same as `logger.log('hey')`
33
+ *
34
+ * @experimental
35
+ */
36
+ export interface SimpleLogger extends CommonLogFunction, CommonLogger {
37
+ }
38
+ /**
39
+ * Creates a SimpleLogger from CommonLogger.
40
+ *
41
+ * @experimental
42
+ */
43
+ export declare function createSimpleLogger(logger: CommonLogger): SimpleLogger;
44
+ /**
45
+ * SimpleLogger that does nothing (noop).
46
+ *
47
+ * @experimental
48
+ */
49
+ export declare const noopLogger: SimpleLogger;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.noopLogger = exports.createSimpleLogger = void 0;
4
+ /**
5
+ * Creates a SimpleLogger from CommonLogger.
6
+ *
7
+ * @experimental
8
+ */
9
+ function createSimpleLogger(logger) {
10
+ return Object.assign(((...args) => logger.log(...args)), {
11
+ log: (...args) => logger.log(...args),
12
+ warn: (...args) => logger.warn(...args),
13
+ error: (...args) => logger.error(...args),
14
+ });
15
+ }
16
+ exports.createSimpleLogger = createSimpleLogger;
17
+ const noop = () => { };
18
+ /**
19
+ * SimpleLogger that does nothing (noop).
20
+ *
21
+ * @experimental
22
+ */
23
+ exports.noopLogger = createSimpleLogger({
24
+ log: noop,
25
+ warn: noop,
26
+ error: noop,
27
+ });
@@ -30,6 +30,7 @@ class AggregatedError extends Error {
30
30
  else {
31
31
  Object.defineProperty(this, 'stack', {
32
32
  value: new Error().stack,
33
+ writable: true,
33
34
  configurable: true,
34
35
  });
35
36
  }
@@ -18,6 +18,8 @@ export function _chunk(array, size = 1) {
18
18
  /**
19
19
  * Polyfill to Array.flat() with depth=1.
20
20
  * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
21
+ *
22
+ * @deprecated prefer native Array.flat(), it's supported since iOS 12
21
23
  */
22
24
  export function _flatten(arrays) {
23
25
  // to flat single level array
@@ -30,6 +32,8 @@ export function _flatten(arrays) {
30
32
  * @return Returns the new flattened array.
31
33
  *
32
34
  * Based on: https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_flattendeep
35
+ *
36
+ * @deprecated prefer native Array.flat(), it's supported since iOS 12
33
37
  */
34
38
  export function _flattenDeep(arr) {
35
39
  return Array.isArray(arr)
@@ -16,6 +16,7 @@ export class AppError extends Error {
16
16
  });
17
17
  Object.defineProperty(this, 'data', {
18
18
  value: data,
19
+ writable: true,
19
20
  configurable: true,
20
21
  enumerable: false,
21
22
  });
@@ -25,6 +26,7 @@ export class AppError extends Error {
25
26
  else {
26
27
  Object.defineProperty(this, 'stack', {
27
28
  value: new Error().stack,
29
+ writable: true,
28
30
  configurable: true,
29
31
  });
30
32
  }
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, _defineLazyProps, _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,5 @@ 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
+ import { createSimpleLogger, noopLogger, } from './log/commonLogger';
54
+ 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, _defineLazyProps, _lazyValue, createSimpleLogger, noopLogger, };
@@ -0,0 +1,57 @@
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
+ }
51
+ /**
52
+ * Like _defineLazyProperty, but allows to define multiple props at once.
53
+ */
54
+ export function _defineLazyProps(obj, props) {
55
+ Object.entries(props).forEach(([k, fn]) => _defineLazyProperty(obj, k, fn));
56
+ return obj;
57
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Creates a SimpleLogger from CommonLogger.
3
+ *
4
+ * @experimental
5
+ */
6
+ export function createSimpleLogger(logger) {
7
+ return Object.assign(((...args) => logger.log(...args)), {
8
+ log: (...args) => logger.log(...args),
9
+ warn: (...args) => logger.warn(...args),
10
+ error: (...args) => logger.error(...args),
11
+ });
12
+ }
13
+ const noop = () => { };
14
+ /**
15
+ * SimpleLogger that does nothing (noop).
16
+ *
17
+ * @experimental
18
+ */
19
+ export const noopLogger = createSimpleLogger({
20
+ log: noop,
21
+ warn: noop,
22
+ error: noop,
23
+ });
@@ -27,6 +27,7 @@ export class AggregatedError extends Error {
27
27
  else {
28
28
  Object.defineProperty(this, 'stack', {
29
29
  value: new Error().stack,
30
+ writable: true,
30
31
  configurable: true,
31
32
  });
32
33
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturalcycles/js-lib",
3
- "version": "14.56.0",
3
+ "version": "14.59.0",
4
4
  "scripts": {
5
5
  "prepare": "husky install",
6
6
  "build-prod": "build-prod-esm-cjs",
@@ -22,6 +22,8 @@ export function _chunk<T>(array: readonly T[], size = 1): T[][] {
22
22
  /**
23
23
  * Polyfill to Array.flat() with depth=1.
24
24
  * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
25
+ *
26
+ * @deprecated prefer native Array.flat(), it's supported since iOS 12
25
27
  */
26
28
  export function _flatten<T>(arrays: T[][]): T[] {
27
29
  // to flat single level array
@@ -35,6 +37,8 @@ export function _flatten<T>(arrays: T[][]): T[] {
35
37
  * @return Returns the new flattened array.
36
38
  *
37
39
  * Based on: https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_flattendeep
40
+ *
41
+ * @deprecated prefer native Array.flat(), it's supported since iOS 12
38
42
  */
39
43
  export function _flattenDeep<T>(arr: RecursiveArray<T>): T[] {
40
44
  return Array.isArray(arr)
@@ -22,6 +22,7 @@ export class AppError<DATA_TYPE extends ErrorData = ErrorData> extends Error {
22
22
 
23
23
  Object.defineProperty(this, 'data', {
24
24
  value: data,
25
+ writable: true,
25
26
  configurable: true,
26
27
  enumerable: false,
27
28
  })
@@ -31,6 +32,7 @@ export class AppError<DATA_TYPE extends ErrorData = ErrorData> extends Error {
31
32
  } else {
32
33
  Object.defineProperty(this, 'stack', {
33
34
  value: new Error().stack, // eslint-disable-line unicorn/error-message
35
+ writable: true,
34
36
  configurable: true,
35
37
  })
36
38
  }
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, _defineLazyProps, _lazyValue } from './lazy'
24
25
  import { _parseQueryString } from './string/url.util'
25
26
  import { _range } from './array/range'
26
27
  import {
@@ -223,6 +224,14 @@ import {
223
224
  } from './types'
224
225
  import { _gb, _hb, _kb, _mb } from './unit/size.util'
225
226
  import { is } from './vendor/is'
227
+ import {
228
+ CommonLogLevel,
229
+ CommonLogFunction,
230
+ CommonLogger,
231
+ SimpleLogger,
232
+ createSimpleLogger,
233
+ noopLogger,
234
+ } from './log/commonLogger'
226
235
 
227
236
  export type {
228
237
  MemoCache,
@@ -294,6 +303,10 @@ export type {
294
303
  JsonSchemaArray,
295
304
  JsonSchemaTuple,
296
305
  JsonSchemaBuilder,
306
+ CommonLogLevel,
307
+ CommonLogFunction,
308
+ CommonLogger,
309
+ SimpleLogger,
297
310
  }
298
311
 
299
312
  export {
@@ -449,4 +462,9 @@ export {
449
462
  JSON_SCHEMA_ORDER,
450
463
  generateJsonSchemaFromData,
451
464
  _parseQueryString,
465
+ _defineLazyProperty,
466
+ _defineLazyProps,
467
+ _lazyValue,
468
+ createSimpleLogger,
469
+ noopLogger,
452
470
  }
package/src/lazy.ts ADDED
@@ -0,0 +1,73 @@
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
+ }
63
+
64
+ /**
65
+ * Like _defineLazyProperty, but allows to define multiple props at once.
66
+ */
67
+ export function _defineLazyProps<OBJ extends AnyObject>(
68
+ obj: OBJ,
69
+ props: Partial<Record<keyof OBJ, AnyFunction>>,
70
+ ): OBJ {
71
+ Object.entries(props).forEach(([k, fn]) => _defineLazyProperty(obj, k, fn!))
72
+ return obj
73
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * These levels follow console.* naming,
3
+ * so you can use console[level] safely.
4
+ *
5
+ * `log` is considered default level.
6
+ *
7
+ * For simplicity - only these 3 levels are kept.
8
+ *
9
+ * @experimental
10
+ */
11
+ export type CommonLogLevel = 'log' | 'warn' | 'error'
12
+
13
+ /**
14
+ * Function that takes any number of arguments and logs them all.
15
+ * It is expected that logged arguments are separated by "space", like console.log does.
16
+ *
17
+ * @experimental
18
+ */
19
+ export type CommonLogFunction = (...args: any[]) => void
20
+
21
+ /**
22
+ * Interface is inspired/compatible with `console.*`
23
+ * So, `console` is a valid CommonLogger implementation as-is.
24
+ *
25
+ * @experimental
26
+ */
27
+ export interface CommonLogger {
28
+ log: CommonLogFunction
29
+ warn: CommonLogFunction
30
+ error: CommonLogFunction
31
+ }
32
+
33
+ /**
34
+ * Same as CommonLogger, but also is a "convenience function" itself.
35
+ * So you can do `logger('hey')` which is the same as `logger.log('hey')`
36
+ *
37
+ * @experimental
38
+ */
39
+ export interface SimpleLogger extends CommonLogFunction, CommonLogger {}
40
+
41
+ /**
42
+ * Creates a SimpleLogger from CommonLogger.
43
+ *
44
+ * @experimental
45
+ */
46
+ export function createSimpleLogger(logger: CommonLogger): SimpleLogger {
47
+ return Object.assign(((...args: any[]) => logger.log(...args)) as any, {
48
+ log: (...args: any[]) => logger.log(...args),
49
+ warn: (...args: any[]) => logger.warn(...args),
50
+ error: (...args: any[]) => logger.error(...args),
51
+ })
52
+ }
53
+
54
+ const noop = () => {}
55
+
56
+ /**
57
+ * SimpleLogger that does nothing (noop).
58
+ *
59
+ * @experimental
60
+ */
61
+ export const noopLogger: SimpleLogger = createSimpleLogger({
62
+ log: noop,
63
+ warn: noop,
64
+ error: noop,
65
+ })
@@ -33,6 +33,7 @@ export class AggregatedError<RESULT = any> extends Error {
33
33
  } else {
34
34
  Object.defineProperty(this, 'stack', {
35
35
  value: new Error().stack, // eslint-disable-line unicorn/error-message
36
+ writable: true,
36
37
  configurable: true,
37
38
  })
38
39
  }