@naturalcycles/js-lib 14.42.1 → 14.46.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.
Files changed (139) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/index.d.ts +3 -1
  3. package/dist/index.js +7 -3
  4. package/dist/json-schema/from-data/generateJsonSchemaFromData.d.ts +7 -0
  5. package/dist/json-schema/from-data/generateJsonSchemaFromData.js +90 -0
  6. package/dist/json-schema/jsonSchema.model.d.ts +7 -0
  7. package/dist/json-schema/jsonSchemaBuilder.d.ts +3 -0
  8. package/dist/json-schema/jsonSchemaBuilder.js +9 -0
  9. package/dist/string/stringifyAny.d.ts +1 -1
  10. package/dist/string/stringifyAny.js +1 -1
  11. package/dist/typeFest.d.ts +16 -0
  12. package/dist/vendor/is.d.ts +224 -0
  13. package/dist/vendor/is.js +466 -0
  14. package/dist-esm/array/array.util.js +0 -1
  15. package/dist-esm/array/range.js +0 -1
  16. package/dist-esm/decorators/createPromiseDecorator.js +0 -1
  17. package/dist-esm/decorators/debounce.decorator.js +0 -1
  18. package/dist-esm/decorators/debounce.js +0 -1
  19. package/dist-esm/decorators/decorator.util.js +0 -1
  20. package/dist-esm/decorators/logMethod.decorator.js +0 -1
  21. package/dist-esm/decorators/memo.decorator.js +0 -1
  22. package/dist-esm/decorators/memo.util.js +0 -1
  23. package/dist-esm/decorators/memoFn.js +0 -1
  24. package/dist-esm/decorators/memoSimple.decorator.js +0 -1
  25. package/dist-esm/decorators/retry.decorator.js +0 -1
  26. package/dist-esm/decorators/timeout.decorator.js +0 -1
  27. package/dist-esm/error/app.error.js +0 -1
  28. package/dist-esm/error/assert.js +0 -1
  29. package/dist-esm/error/error.model.js +0 -1
  30. package/dist-esm/error/error.util.js +0 -1
  31. package/dist-esm/error/errorMode.js +0 -1
  32. package/dist-esm/error/http.error.js +0 -1
  33. package/dist-esm/error/try.js +0 -1
  34. package/dist-esm/error/tryCatch.js +0 -1
  35. package/dist-esm/index.js +3 -2
  36. package/dist-esm/json-schema/from-data/generateJsonSchemaFromData.js +86 -0
  37. package/dist-esm/json-schema/jsonSchema.cnst.js +0 -1
  38. package/dist-esm/json-schema/jsonSchema.model.js +0 -1
  39. package/dist-esm/json-schema/jsonSchema.util.js +0 -1
  40. package/dist-esm/json-schema/jsonSchemaBuilder.js +9 -1
  41. package/dist-esm/json-schema/jsonSchemas.js +0 -1
  42. package/dist-esm/lodash.types.js +0 -1
  43. package/dist-esm/math/math.util.js +0 -1
  44. package/dist-esm/math/sma.js +0 -1
  45. package/dist-esm/number/createDeterministicRandom.js +0 -1
  46. package/dist-esm/number/number.util.js +0 -1
  47. package/dist-esm/object/deepEquals.js +0 -1
  48. package/dist-esm/object/object.util.js +0 -1
  49. package/dist-esm/object/sortObject.js +0 -1
  50. package/dist-esm/object/sortObjectDeep.js +0 -1
  51. package/dist-esm/promise/AggregatedError.js +0 -1
  52. package/dist-esm/promise/pBatch.js +0 -1
  53. package/dist-esm/promise/pDefer.js +0 -1
  54. package/dist-esm/promise/pDelay.js +0 -1
  55. package/dist-esm/promise/pFilter.js +0 -1
  56. package/dist-esm/promise/pHang.js +0 -1
  57. package/dist-esm/promise/pMap.js +0 -1
  58. package/dist-esm/promise/pProps.js +0 -1
  59. package/dist-esm/promise/pRetry.js +0 -1
  60. package/dist-esm/promise/pState.js +0 -1
  61. package/dist-esm/promise/pTimeout.js +0 -1
  62. package/dist-esm/promise/pTuple.js +0 -1
  63. package/dist-esm/string/case.js +0 -1
  64. package/dist-esm/string/json.util.js +0 -1
  65. package/dist-esm/string/lodash/unicodeWords.js +0 -1
  66. package/dist-esm/string/lodash/words.js +0 -1
  67. package/dist-esm/string/string.util.js +0 -1
  68. package/dist-esm/string/stringifyAny.js +1 -2
  69. package/dist-esm/time/time.util.js +0 -1
  70. package/dist-esm/typeFest.js +0 -1
  71. package/dist-esm/types.js +0 -1
  72. package/dist-esm/unit/size.util.js +0 -1
  73. package/dist-esm/vendor/is.js +463 -0
  74. package/package.json +2 -1
  75. package/src/index.ts +4 -0
  76. package/src/json-schema/from-data/generateJsonSchemaFromData.ts +120 -0
  77. package/src/json-schema/jsonSchema.model.ts +8 -0
  78. package/src/json-schema/jsonSchemaBuilder.ts +16 -10
  79. package/src/string/stringifyAny.ts +2 -2
  80. package/src/typeFest.ts +30 -0
  81. package/src/vendor/is.ts +837 -0
  82. package/dist-esm/array/array.util.js.map +0 -1
  83. package/dist-esm/array/range.js.map +0 -1
  84. package/dist-esm/decorators/createPromiseDecorator.js.map +0 -1
  85. package/dist-esm/decorators/debounce.decorator.js.map +0 -1
  86. package/dist-esm/decorators/debounce.js.map +0 -1
  87. package/dist-esm/decorators/decorator.util.js.map +0 -1
  88. package/dist-esm/decorators/logMethod.decorator.js.map +0 -1
  89. package/dist-esm/decorators/memo.decorator.js.map +0 -1
  90. package/dist-esm/decorators/memo.util.js.map +0 -1
  91. package/dist-esm/decorators/memoFn.js.map +0 -1
  92. package/dist-esm/decorators/memoSimple.decorator.js.map +0 -1
  93. package/dist-esm/decorators/retry.decorator.js.map +0 -1
  94. package/dist-esm/decorators/timeout.decorator.js.map +0 -1
  95. package/dist-esm/error/app.error.js.map +0 -1
  96. package/dist-esm/error/assert.js.map +0 -1
  97. package/dist-esm/error/error.model.js.map +0 -1
  98. package/dist-esm/error/error.util.js.map +0 -1
  99. package/dist-esm/error/errorMode.js.map +0 -1
  100. package/dist-esm/error/http.error.js.map +0 -1
  101. package/dist-esm/error/try.js.map +0 -1
  102. package/dist-esm/error/tryCatch.js.map +0 -1
  103. package/dist-esm/index.js.map +0 -1
  104. package/dist-esm/json-schema/jsonSchema.cnst.js.map +0 -1
  105. package/dist-esm/json-schema/jsonSchema.model.js.map +0 -1
  106. package/dist-esm/json-schema/jsonSchema.util.js.map +0 -1
  107. package/dist-esm/json-schema/jsonSchemaBuilder.js.map +0 -1
  108. package/dist-esm/json-schema/jsonSchemas.js.map +0 -1
  109. package/dist-esm/lodash.types.js.map +0 -1
  110. package/dist-esm/math/math.util.js.map +0 -1
  111. package/dist-esm/math/sma.js.map +0 -1
  112. package/dist-esm/number/createDeterministicRandom.js.map +0 -1
  113. package/dist-esm/number/number.util.js.map +0 -1
  114. package/dist-esm/object/deepEquals.js.map +0 -1
  115. package/dist-esm/object/object.util.js.map +0 -1
  116. package/dist-esm/object/sortObject.js.map +0 -1
  117. package/dist-esm/object/sortObjectDeep.js.map +0 -1
  118. package/dist-esm/promise/AggregatedError.js.map +0 -1
  119. package/dist-esm/promise/pBatch.js.map +0 -1
  120. package/dist-esm/promise/pDefer.js.map +0 -1
  121. package/dist-esm/promise/pDelay.js.map +0 -1
  122. package/dist-esm/promise/pFilter.js.map +0 -1
  123. package/dist-esm/promise/pHang.js.map +0 -1
  124. package/dist-esm/promise/pMap.js.map +0 -1
  125. package/dist-esm/promise/pProps.js.map +0 -1
  126. package/dist-esm/promise/pRetry.js.map +0 -1
  127. package/dist-esm/promise/pState.js.map +0 -1
  128. package/dist-esm/promise/pTimeout.js.map +0 -1
  129. package/dist-esm/promise/pTuple.js.map +0 -1
  130. package/dist-esm/string/case.js.map +0 -1
  131. package/dist-esm/string/json.util.js.map +0 -1
  132. package/dist-esm/string/lodash/unicodeWords.js.map +0 -1
  133. package/dist-esm/string/lodash/words.js.map +0 -1
  134. package/dist-esm/string/string.util.js.map +0 -1
  135. package/dist-esm/string/stringifyAny.js.map +0 -1
  136. package/dist-esm/time/time.util.js.map +0 -1
  137. package/dist-esm/typeFest.js.map +0 -1
  138. package/dist-esm/types.js.map +0 -1
  139. package/dist-esm/unit/size.util.js.map +0 -1
@@ -0,0 +1,86 @@
1
+ import { _stringMapEntries, _uniq, } from '../..';
2
+ /**
3
+ * Each row must be an object (current limitation).
4
+ *
5
+ * `additionalProperties` is set to `true`, cause it's safer.
6
+ */
7
+ export function generateJsonSchemaFromData(rows) {
8
+ return objectToJsonSchema(rows);
9
+ }
10
+ function objectToJsonSchema(rows) {
11
+ const typesByKey = {};
12
+ rows.forEach(r => {
13
+ Object.keys(r).forEach(key => {
14
+ typesByKey[key] || (typesByKey[key] = new Set());
15
+ typesByKey[key].add(getTypeOfValue(r[key]));
16
+ });
17
+ });
18
+ const s = {
19
+ type: 'object',
20
+ properties: {},
21
+ required: [],
22
+ additionalProperties: true,
23
+ };
24
+ _stringMapEntries(typesByKey).forEach(([key, types]) => {
25
+ const schema = mergeTypes([...types], rows.map(r => r[key]));
26
+ if (!schema)
27
+ return;
28
+ s.properties[key] = schema;
29
+ });
30
+ // console.log(typesByKey)
31
+ return s;
32
+ }
33
+ function mergeTypes(types, samples) {
34
+ // skip "undefined" types
35
+ types = types.filter(t => t !== 'undefined');
36
+ if (!types.length)
37
+ return undefined;
38
+ if (types.length > 1) {
39
+ // oneOf
40
+ const s = {
41
+ oneOf: types.map(type => mergeTypes([type], samples)),
42
+ };
43
+ return s;
44
+ }
45
+ const type = types[0];
46
+ if (type === 'null') {
47
+ return {
48
+ type: 'null',
49
+ };
50
+ }
51
+ if (type === 'boolean') {
52
+ return {
53
+ type: 'boolean',
54
+ };
55
+ }
56
+ if (type === 'string') {
57
+ return {
58
+ type: 'string',
59
+ };
60
+ }
61
+ if (type === 'number') {
62
+ return {
63
+ type: 'number',
64
+ };
65
+ }
66
+ if (type === 'object') {
67
+ return objectToJsonSchema(samples.filter((r) => r && typeof r === 'object'));
68
+ }
69
+ if (type === 'array') {
70
+ // possible feature: detect if it's a tuple
71
+ // currently assume no-tuple
72
+ const items = samples.filter(r => Array.isArray(r)).flat(1);
73
+ const itemTypes = _uniq(items.map(i => getTypeOfValue(i)));
74
+ return {
75
+ type: 'array',
76
+ items: mergeTypes(itemTypes, items),
77
+ };
78
+ }
79
+ }
80
+ function getTypeOfValue(v) {
81
+ if (v === null)
82
+ return 'null';
83
+ if (Array.isArray(v))
84
+ return 'array';
85
+ return typeof v;
86
+ }
@@ -36,4 +36,3 @@ export const JSON_SCHEMA_ORDER = [
36
36
  'maximum',
37
37
  'exclusiveMaximum',
38
38
  ];
39
- //# sourceMappingURL=jsonSchema.cnst.js.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=jsonSchema.model.js.map
@@ -26,4 +26,3 @@ export function mergeJsonSchemaObjects(s1, s2) {
26
26
  // `additionalProperties` remains the same
27
27
  return _filterNullishValues(s1, true);
28
28
  }
29
- //# sourceMappingURL=jsonSchema.util.js.map
@@ -32,6 +32,11 @@ export const jsonSchema = {
32
32
  type: 'boolean',
33
33
  });
34
34
  },
35
+ buffer() {
36
+ return new JsonSchemaAnyBuilder({
37
+ instanceof: 'Buffer',
38
+ });
39
+ },
35
40
  // number types
36
41
  number() {
37
42
  return new JsonSchemaNumberBuilder();
@@ -124,6 +129,10 @@ export class JsonSchemaAnyBuilder {
124
129
  Object.assign(this.schema, { allOf: schemas });
125
130
  return this;
126
131
  }
132
+ instanceof(of) {
133
+ this.schema.instanceof = of;
134
+ return this;
135
+ }
127
136
  optional(optional = true) {
128
137
  if (optional) {
129
138
  this.schema.optionalField = true;
@@ -340,4 +349,3 @@ export class JsonSchemaTupleBuilder extends JsonSchemaAnyBuilder {
340
349
  });
341
350
  }
342
351
  }
343
- //# sourceMappingURL=jsonSchemaBuilder.js.map
@@ -9,4 +9,3 @@ export const savedDBEntityJsonSchema = jsonSchema.object({
9
9
  created: jsonSchema.unixTimestamp(),
10
10
  updated: jsonSchema.unixTimestamp(),
11
11
  });
12
- //# sourceMappingURL=jsonSchemas.js.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=lodash.types.js.map
@@ -51,4 +51,3 @@ export function _percentile(values, pc) {
51
51
  export function _median(values) {
52
52
  return _percentile(values, 50);
53
53
  }
54
- //# sourceMappingURL=math.util.js.map
@@ -29,4 +29,3 @@ export class SimpleMovingAverage {
29
29
  : 0);
30
30
  }
31
31
  }
32
- //# sourceMappingURL=sma.js.map
@@ -18,4 +18,3 @@ export function _createDeterministicRandom() {
18
18
  return (seed & 0xfffffff) / 0x10000000;
19
19
  };
20
20
  }
21
- //# sourceMappingURL=createDeterministicRandom.js.map
@@ -73,4 +73,3 @@ export function _round(n, precisionUnit) {
73
73
  const v = Math.floor(n) + Math.round((n % 1) / precisionUnit) * precisionUnit;
74
74
  return Number(v.toFixed(String(precisionUnit).length - 2)); // '0.
75
75
  }
76
- //# sourceMappingURL=number.util.js.map
@@ -54,4 +54,3 @@ export function _deepEquals(a, b) {
54
54
  }
55
55
  return a !== a && b !== b;
56
56
  }
57
- //# sourceMappingURL=deepEquals.js.map
@@ -379,4 +379,3 @@ export function _has(obj, path) {
379
379
  const v = _get(obj, path);
380
380
  return v !== undefined && v !== null;
381
381
  }
382
- //# sourceMappingURL=object.util.js.map
@@ -16,4 +16,3 @@ export function _sortObject(obj, keyOrder) {
16
16
  });
17
17
  return r;
18
18
  }
19
- //# sourceMappingURL=sortObject.js.map
@@ -19,4 +19,3 @@ export function _sortObjectDeep(o) {
19
19
  }
20
20
  return o;
21
21
  }
22
- //# sourceMappingURL=sortObjectDeep.js.map
@@ -34,4 +34,3 @@ export class AggregatedError extends Error {
34
34
  }
35
35
  }
36
36
  }
37
- //# sourceMappingURL=AggregatedError.js.map
@@ -21,4 +21,3 @@ export async function pBatch(iterable, mapper, opt) {
21
21
  };
22
22
  }
23
23
  }
24
- //# sourceMappingURL=pBatch.js.map
@@ -12,4 +12,3 @@ export function pDefer() {
12
12
  promise.reject = reject;
13
13
  return promise;
14
14
  }
15
- //# sourceMappingURL=pDefer.js.map
@@ -1,4 +1,3 @@
1
1
  export async function pDelay(ms = 0, value) {
2
2
  return new Promise(resolve => setTimeout(() => resolve(value), ms));
3
3
  }
4
- //# sourceMappingURL=pDelay.js.map
@@ -3,4 +3,3 @@ export async function pFilter(iterable, filterFn, opt) {
3
3
  const values = await pMap(iterable, async (item, index) => await Promise.all([filterFn(item, index), item]), opt);
4
4
  return values.filter(value => Boolean(value[0])).map(value => value[1]);
5
5
  }
6
- //# sourceMappingURL=pFilter.js.map
@@ -4,4 +4,3 @@
4
4
  export async function pHang() {
5
5
  return new Promise(() => void 0);
6
6
  }
7
- //# sourceMappingURL=pHang.js.map
@@ -90,4 +90,3 @@ export async function pMap(iterable, mapper, opt = {}) {
90
90
  }
91
91
  });
92
92
  }
93
- //# sourceMappingURL=pMap.js.map
@@ -21,4 +21,3 @@ export async function pProps(input, opt) {
21
21
  });
22
22
  return r;
23
23
  }
24
- //# sourceMappingURL=pProps.js.map
@@ -53,4 +53,3 @@ export function pRetry(fn, opt = {}) {
53
53
  });
54
54
  };
55
55
  }
56
- //# sourceMappingURL=pRetry.js.map
@@ -12,4 +12,3 @@ export async function pState(p) {
12
12
  return v === UNIQUE_VALUE ? 'pending' : 'resolved';
13
13
  }, () => 'rejected');
14
14
  }
15
- //# sourceMappingURL=pState.js.map
@@ -37,4 +37,3 @@ export function pTimeout(fn, opt) {
37
37
  });
38
38
  };
39
39
  }
40
- //# sourceMappingURL=pTimeout.js.map
@@ -11,4 +11,3 @@ export async function pTuple(promise) {
11
11
  return [err, undefined];
12
12
  });
13
13
  }
14
- //# sourceMappingURL=pTuple.js.map
@@ -13,4 +13,3 @@ export function _snakeCase(s) {
13
13
  export function _kebabCase(s) {
14
14
  return words(s.replace(/['\u2019]/g, '')).reduce((result, word, index) => result + (index ? '-' : '') + word.toLowerCase(), '');
15
15
  }
16
- //# sourceMappingURL=case.js.map
@@ -11,4 +11,3 @@ export function _jsonParseIfPossible(obj, reviver) {
11
11
  }
12
12
  return obj;
13
13
  }
14
- //# sourceMappingURL=json.util.js.map
@@ -66,4 +66,3 @@ const reUnicodeWords = new RegExp([
66
66
  export function unicodeWords(s) {
67
67
  return s.match(reUnicodeWords);
68
68
  }
69
- //# sourceMappingURL=unicodeWords.js.map
@@ -28,4 +28,3 @@ export function words(s, pattern) {
28
28
  }
29
29
  return s.match(pattern) || [];
30
30
  }
31
- //# sourceMappingURL=words.js.map
@@ -88,4 +88,3 @@ export function _replaceAll(s, find, replaceWith) {
88
88
  export function _nl2br(s) {
89
89
  return s.replace(/\n/g, '<br>\n');
90
90
  }
91
- //# sourceMappingURL=string.util.js.map
@@ -91,10 +91,9 @@ export function _stringifyAny(obj, opt = {}) {
91
91
  if (s === undefined)
92
92
  return 'undefined';
93
93
  // Handle maxLen
94
- const { maxLen = 1000 } = opt;
94
+ const { maxLen = 10000 } = opt;
95
95
  if (maxLen && s.length > maxLen) {
96
96
  s = s.slice(0, maxLen) + `... ${Math.ceil(s.length / 1024)} KB message truncated`;
97
97
  }
98
98
  return s;
99
99
  }
100
- //# sourceMappingURL=stringifyAny.js.map
@@ -36,4 +36,3 @@ export function _ms(millis) {
36
36
  // >= 24h
37
37
  return `${Math.round(hrs + min / 60)}h`;
38
38
  }
39
- //# sourceMappingURL=time.util.js.map
@@ -1,4 +1,3 @@
1
1
  /* eslint-disable */
2
2
  /* tslint:disable */
3
3
  export {};
4
- //# sourceMappingURL=typeFest.js.map
package/dist-esm/types.js CHANGED
@@ -29,4 +29,3 @@ export function _stringMapEntries(m) {
29
29
  export function _objectKeys(obj) {
30
30
  return Object.keys(obj);
31
31
  }
32
- //# sourceMappingURL=types.js.map
@@ -19,4 +19,3 @@ export function _hb(b = 0) {
19
19
  return `${Math.round(b / 1024 / 1024)} Mb`;
20
20
  return `${Math.round(b / 1024 / 1024 / 1024)} Gb`;
21
21
  }
22
- //# sourceMappingURL=size.util.js.map