@valkyriestudios/utils 11.3.0 → 11.5.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/README.md CHANGED
@@ -478,9 +478,12 @@ equal(new RegExp(/ab+c/, 'i'), /ab+c/i); // TRUE
478
478
  ```
479
479
 
480
480
  ### function
481
- - **isFunction(val:any)**
481
+ - **isFunction(val:unknown)**
482
482
  Check if a variable is a Function
483
483
 
484
+ - **isAsyncFunction(val:unknown):boolean**
485
+ Check if a variable is an async function
486
+
484
487
  - **noop()**
485
488
  An empty function that can be used in (for example) piping
486
489
 
package/array/dedupe.js CHANGED
@@ -4,14 +4,14 @@ const fnv1A_1 = require("../hash/fnv1A");
4
4
  function dedupe(val) {
5
5
  if (!Array.isArray(val) || val.length === 0)
6
6
  return [];
7
- const map = new Map();
7
+ const set = new Set();
8
8
  const acc = [];
9
9
  let hash;
10
10
  for (const item of val) {
11
11
  hash = (0, fnv1A_1.default)(item);
12
- if (map.has(hash))
12
+ if (set.has(hash))
13
13
  continue;
14
- map.set(hash, true);
14
+ set.add(hash);
15
15
  acc.push(item);
16
16
  }
17
17
  return acc;
package/array/is.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is an array
7
7
  */
8
- export default function isArray(val: any): boolean;
8
+ export default function isArray(val: unknown): boolean;
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is an array with content
7
7
  */
8
- export default function isNotEmptyArray(val: any): boolean;
8
+ export default function isNotEmptyArray(val: unknown): boolean;
package/array/join.d.ts CHANGED
@@ -32,5 +32,5 @@ interface joinOptions {
32
32
  *
33
33
  * @returns Joined array as string
34
34
  */
35
- export default function join(val: any[], opts?: joinOptions): string;
35
+ export default function join(val: unknown[], opts?: joinOptions): string;
36
36
  export {};
package/array/join.js CHANGED
@@ -4,12 +4,12 @@ const round_1 = require("../number/round");
4
4
  function join(val, opts = {}) {
5
5
  if (!Array.isArray(val) || val.length === 0)
6
6
  return '';
7
- const OPTS = Object.assign({
7
+ const OPTS = {
8
8
  delim: ' ',
9
9
  trim: true,
10
10
  valtrim: true,
11
- valround: false,
12
- }, Object.prototype.toString.call(opts) === '[object Object]' ? opts : {});
11
+ ...Object.prototype.toString.call(opts) === '[object Object]' ? opts : {},
12
+ };
13
13
  const filtered = [];
14
14
  for (const el of val) {
15
15
  if (typeof el === 'string' && el.trim().length > 0) {
package/array/mapFn.js CHANGED
@@ -4,9 +4,10 @@ function mapFn(arr, fn, opts = {}) {
4
4
  if ((!Array.isArray(arr) || arr.length === 0) ||
5
5
  typeof fn !== 'function')
6
6
  return {};
7
- const OPTS = Object.assign({
7
+ const OPTS = {
8
8
  merge: false,
9
- }, Object.prototype.toString.call(opts) === '[object Object]' ? opts : {});
9
+ ...Object.prototype.toString.call(opts) === '[object Object]' ? opts : {},
10
+ };
10
11
  const map = {};
11
12
  let hash = false;
12
13
  for (const el of arr) {
@@ -17,7 +18,7 @@ function mapFn(arr, fn, opts = {}) {
17
18
  continue;
18
19
  hash = `${hash}`;
19
20
  if (OPTS.merge === true && map.hasOwnProperty(hash)) {
20
- map[hash] = Object.assign(map[hash], el);
21
+ map[hash] = { ...map[hash], ...el };
21
22
  }
22
23
  else {
23
24
  map[hash] = el;
package/array/mapKey.js CHANGED
@@ -7,16 +7,17 @@ function mapKey(arr, key, opts = {}) {
7
7
  const key_s = key.trim();
8
8
  if (key_s.length === 0)
9
9
  return {};
10
- const OPTS = Object.assign({
10
+ const OPTS = {
11
11
  merge: false,
12
- }, Object.prototype.toString.call(opts) === '[object Object]' ? opts : {});
12
+ ...Object.prototype.toString.call(opts) === '[object Object]' ? opts : {},
13
+ };
13
14
  const map = {};
14
15
  for (const el of arr) {
15
16
  if (Object.prototype.toString.call(el) !== '[object Object]' ||
16
17
  !Object.prototype.hasOwnProperty.call(el, key_s))
17
18
  continue;
18
19
  if (OPTS.merge === true && map.hasOwnProperty(el[key_s])) {
19
- map[el[key_s]] = Object.assign(map[el[key_s]], el);
20
+ map[el[key_s]] = { ...map[el[key_s]], ...el };
20
21
  }
21
22
  else {
22
23
  map[el[key_s]] = el;
@@ -36,5 +36,5 @@ interface mapReturn {
36
36
  *
37
37
  * @returns KV-Map object
38
38
  */
39
- export default function mapPrimitive(arr: any[], opts?: mapOptions): mapReturn;
39
+ export default function mapPrimitive(arr: unknown[], opts?: mapOptions): mapReturn;
40
40
  export {};
@@ -4,18 +4,19 @@ const round_1 = require("../number/round");
4
4
  function mapPrimitive(arr, opts = {}) {
5
5
  if (!Array.isArray(arr) || arr.length === 0)
6
6
  return {};
7
- const OPTS = Object.assign({
7
+ const OPTS = {
8
8
  valtrim: false,
9
9
  valround: false,
10
10
  keyround: false,
11
- }, Object.prototype.toString.call(opts) === '[object Object]' ? opts : {});
11
+ ...Object.prototype.toString.call(opts) === '[object Object]' ? opts : {},
12
+ };
12
13
  const map = {};
13
14
  for (const el of arr) {
14
15
  if (typeof el === 'string' && el.trim().length > 0) {
15
16
  map[el.trim()] = OPTS.valtrim ? el.trim() : el;
16
17
  }
17
- else if (Number.isFinite(el)) {
18
- map[OPTS.keyround === true ? Math.round(el) : el] = OPTS.valround === false
18
+ else if (typeof el === 'number' && Number.isFinite(el)) {
19
+ map[`${OPTS.keyround === true ? Math.round(el) : el}`] = OPTS.valround === false
19
20
  ? el
20
21
  : OPTS.valround === true
21
22
  ? Math.round(el)
@@ -6,4 +6,4 @@
6
6
  *
7
7
  * @param val - Array to shuffle
8
8
  */
9
- export default function shuffle(arr: any[]): void;
9
+ export default function shuffle(arr: unknown[]): void;
package/array/sort.js CHANGED
@@ -69,7 +69,7 @@ function sort(arr, by, dir = 'asc', opts = {}) {
69
69
  nokey_arr.push(el);
70
70
  }
71
71
  else {
72
- prepared_arr.push({ t: by(el), el });
72
+ prepared_arr.push({ t: key, el });
73
73
  }
74
74
  }
75
75
  }
@@ -79,14 +79,23 @@ function sort(arr, by, dir = 'asc', opts = {}) {
79
79
  quickSort(prepared_arr);
80
80
  if (dir === 'desc')
81
81
  prepared_arr.reverse();
82
+ const result = [];
82
83
  if (OPTS.nokey_hide) {
83
- return prepared_arr.map(obj => obj.el);
84
+ for (const obj of prepared_arr)
85
+ result.push(obj.el);
84
86
  }
85
87
  else if (OPTS.nokey_atend) {
86
- return [...prepared_arr.map(obj => obj.el), ...nokey_arr];
88
+ for (const obj of prepared_arr)
89
+ result.push(obj.el);
90
+ for (const el of nokey_arr)
91
+ result.push(el);
87
92
  }
88
93
  else {
89
- return [...nokey_arr, ...prepared_arr.map(obj => obj.el)];
94
+ for (const el of nokey_arr)
95
+ result.push(el);
96
+ for (const obj of prepared_arr)
97
+ result.push(obj.el);
90
98
  }
99
+ return result;
91
100
  }
92
101
  exports.default = sort;
package/boolean/is.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is a boolean
7
7
  */
8
- export default function isBoolean(val: any): boolean;
8
+ export default function isBoolean(val: unknown): boolean;
package/date/is.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is a Date
7
7
  */
8
- export default function isDate(val: any): boolean;
8
+ export default function isDate(val: unknown): boolean;
package/function/is.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is a Function
7
7
  */
8
- export default function isFunction(val: any): boolean;
8
+ export default function isFunction(val: unknown): boolean;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Chceck whether or not a provided value is an async function
3
+ *
4
+ * @param val - Value to verify
5
+ *
6
+ * @returns Whether or not the value is an async function
7
+ */
8
+ export default function isAsyncFunction(val: unknown): boolean;
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function isAsyncFunction(val) {
4
+ return typeof val === 'function' && val.constructor.name === 'AsyncFunction';
5
+ }
6
+ exports.default = isAsyncFunction;
package/hash/fnv1A.d.ts CHANGED
@@ -7,4 +7,4 @@
7
7
  *
8
8
  * @returns FNV1A hash of provided value
9
9
  */
10
- export default function fnv1A(data: any, offset?: number): number;
10
+ export default function fnv1A(data: unknown, offset?: number): number;
package/hash/fnv1A.js CHANGED
@@ -13,7 +13,7 @@ function fnv1A(data, offset = FNV_32) {
13
13
  sanitized = data;
14
14
  }
15
15
  else if (Number.isFinite(data)) {
16
- sanitized = `${data}`;
16
+ sanitized = String(data);
17
17
  }
18
18
  else if (Array.isArray(data) || Object.prototype.toString.call(data) === '[object Object]') {
19
19
  sanitized = JSON.stringify(data);
@@ -22,7 +22,7 @@ function fnv1A(data, offset = FNV_32) {
22
22
  sanitized = data.toString();
23
23
  }
24
24
  else if (data instanceof Date) {
25
- sanitized = `${data.getTime()}`;
25
+ sanitized = String(data.getTime());
26
26
  }
27
27
  else if (Number.isNaN(data) || data === Infinity) {
28
28
  sanitized = REPL_NAN;
@@ -42,7 +42,8 @@ function fnv1A(data, offset = FNV_32) {
42
42
  else {
43
43
  throw new TypeError('An FNV1A Hash could not be calculated for this datatype');
44
44
  }
45
- for (let i = 0; i < sanitized.length; i++) {
45
+ const len = sanitized.length;
46
+ for (let i = 0; i < len; i++) {
46
47
  hash ^= sanitized.charCodeAt(i);
47
48
  hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);
48
49
  }
package/index.d.ts CHANGED
@@ -1,78 +1,81 @@
1
1
  declare module "number/isNumericalNaN" {
2
- export default function isNumericalNaN(val: any): boolean;
2
+ export default function isNumericalNaN(val: unknown): boolean;
3
3
  }
4
4
  declare module "equal" {
5
5
  function equal(a: any, b: any): boolean;
6
6
  export default equal;
7
7
  }
8
8
  declare module "array/isNotEmpty" {
9
- export default function isNotEmptyArray(val: any): boolean;
9
+ export default function isNotEmptyArray(val: unknown): boolean;
10
10
  }
11
11
  declare module "array/is" {
12
- export default function isArray(val: any): boolean;
12
+ export default function isArray(val: unknown): boolean;
13
13
  }
14
14
  declare module "boolean/is" {
15
- export default function isBoolean(val: any): boolean;
15
+ export default function isBoolean(val: unknown): boolean;
16
16
  }
17
17
  declare module "date/is" {
18
- export default function isDate(val: any): boolean;
18
+ export default function isDate(val: unknown): boolean;
19
19
  }
20
20
  declare module "function/is" {
21
- export default function isFunction(val: any): boolean;
21
+ export default function isFunction(val: unknown): boolean;
22
+ }
23
+ declare module "function/isAsync" {
24
+ export default function isAsyncFunction(val: unknown): boolean;
22
25
  }
23
26
  declare module "number/is" {
24
- export default function isNumber(val: any): boolean;
27
+ export default function isNumber(val: unknown): boolean;
25
28
  }
26
29
  declare module "number/isBetween" {
27
- export default function isNumberBetween(val: any, min: number, max: number): boolean;
30
+ export default function isNumberBetween(val: unknown, min: number, max: number): boolean;
28
31
  }
29
32
  declare module "number/isBelow" {
30
- export default function isNumberBelow(val: any, ref: number): boolean;
33
+ export default function isNumberBelow(val: unknown, ref: number): boolean;
31
34
  }
32
35
  declare module "number/isBelowOrEqual" {
33
- export default function isNumberBelowOrEqual(val: any, ref: number): boolean;
36
+ export default function isNumberBelowOrEqual(val: unknown, ref: number): boolean;
34
37
  }
35
38
  declare module "number/isAbove" {
36
- export default function isNumberAbove(val: any, ref: number): boolean;
39
+ export default function isNumberAbove(val: unknown, ref: number): boolean;
37
40
  }
38
41
  declare module "number/isAboveOrEqual" {
39
- export default function isNumberAboveOrEqual(val: any, ref: number): boolean;
42
+ export default function isNumberAboveOrEqual(val: unknown, ref: number): boolean;
40
43
  }
41
44
  declare module "number/isInteger" {
42
- export default function isInteger(val: any): boolean;
45
+ export default function isInteger(val: unknown): boolean;
43
46
  }
44
47
  declare module "number/isIntegerBetween" {
45
- export default function isIntegerBetween(val: any, min: number, max: number): boolean;
48
+ export default function isIntegerBetween(val: unknown, min: number, max: number): boolean;
46
49
  }
47
50
  declare module "number/isIntegerBelow" {
48
- export default function isIntegerBelow(val: any, ref: number): boolean;
51
+ export default function isIntegerBelow(val: unknown, ref: number): boolean;
49
52
  }
50
53
  declare module "number/isIntegerBelowOrEqual" {
51
- export default function isIntegerBelowOrEqual(val: any, ref: number): boolean;
54
+ export default function isIntegerBelowOrEqual(val: unknown, ref: number): boolean;
52
55
  }
53
56
  declare module "number/isIntegerAbove" {
54
- export default function isIntegerAbove(val: any, ref: number): boolean;
57
+ export default function isIntegerAbove(val: unknown, ref: number): boolean;
55
58
  }
56
59
  declare module "number/isIntegerAboveOrEqual" {
57
- export default function isIntegerAboveOrEqual(val: any, ref: number): boolean;
60
+ export default function isIntegerAboveOrEqual(val: unknown, ref: number): boolean;
58
61
  }
59
62
  declare module "regexp/is" {
60
- export default function isRegExp(val: any): boolean;
63
+ export default function isRegExp(val: unknown): boolean;
61
64
  }
62
65
  declare module "object/is" {
63
- export default function isObject(val: any): boolean;
66
+ export default function isObject(val: unknown): boolean;
64
67
  }
65
68
  declare module "object/isNotEmpty" {
66
- export default function isNotEmptyObject(val: any): boolean;
69
+ export default function isNotEmptyObject(val: unknown): boolean;
67
70
  }
68
71
  declare module "string/is" {
69
- export default function isString(val: any): boolean;
72
+ export default function isString(val: unknown): boolean;
70
73
  }
71
74
  declare module "string/isBetween" {
72
- export default function isStringBetween(val: any, min: number, max: number, trimmed?: boolean): boolean;
75
+ export default function isStringBetween(val: unknown, min: number, max: number, trimmed?: boolean): boolean;
73
76
  }
74
77
  declare module "string/isNotEmpty" {
75
- export default function isNotEmptyString(val: any, trimmed?: boolean): boolean;
78
+ export default function isNotEmptyString(val: unknown, trimmed?: boolean): boolean;
76
79
  }
77
80
  declare module "is" {
78
81
  import equal from "equal";
@@ -81,6 +84,7 @@ declare module "is" {
81
84
  import isBoolean from "boolean/is";
82
85
  import isDate from "date/is";
83
86
  import isFunction from "function/is";
87
+ import isAsyncFunction from "function/isAsync";
84
88
  import isNumber from "number/is";
85
89
  import isNumberBetween from "number/isBetween";
86
90
  import isNumberBelow from "number/isBelow";
@@ -106,6 +110,7 @@ declare module "is" {
106
110
  Boolean: typeof isBoolean;
107
111
  Date: typeof isDate;
108
112
  Function: typeof isFunction;
113
+ AsyncFunction: typeof isAsyncFunction;
109
114
  Num: typeof isNumber;
110
115
  NumBetween: typeof isNumberBetween;
111
116
  NumAbove: typeof isNumberAbove;
@@ -152,7 +157,7 @@ declare module "is" {
152
157
  export default Is;
153
158
  }
154
159
  declare module "hash/fnv1A" {
155
- export default function fnv1A(data: any, offset?: number): number;
160
+ export default function fnv1A(data: unknown, offset?: number): number;
156
161
  }
157
162
  declare module "array/dedupe" {
158
163
  export default function dedupe<T>(val: T[]): T[];
@@ -167,7 +172,7 @@ declare module "array/join" {
167
172
  valtrim?: boolean;
168
173
  valround?: number;
169
174
  }
170
- export default function join(val: any[], opts?: joinOptions): string;
175
+ export default function join(val: unknown[], opts?: joinOptions): string;
171
176
  }
172
177
  declare module "array/mapFn" {
173
178
  interface mapOptions {
@@ -206,10 +211,10 @@ declare module "array/mapPrimitive" {
206
211
  interface mapReturn {
207
212
  [key: string]: string | number;
208
213
  }
209
- export default function mapPrimitive(arr: any[], opts?: mapOptions): mapReturn;
214
+ export default function mapPrimitive(arr: unknown[], opts?: mapOptions): mapReturn;
210
215
  }
211
216
  declare module "array/shuffle" {
212
- export default function shuffle(arr: any[]): void;
217
+ export default function shuffle(arr: unknown[]): void;
213
218
  }
214
219
  declare module "array/sort" {
215
220
  interface sortOptions {
package/is.d.ts CHANGED
@@ -4,6 +4,7 @@ import isArray from './array/is';
4
4
  import isBoolean from './boolean/is';
5
5
  import isDate from './date/is';
6
6
  import isFunction from './function/is';
7
+ import isAsyncFunction from './function/isAsync';
7
8
  import isNumber from './number/is';
8
9
  import isNumberBetween from './number/isBetween';
9
10
  import isNumberBelow from './number/isBelow';
@@ -29,6 +30,7 @@ declare const Is: Readonly<{
29
30
  Boolean: typeof isBoolean;
30
31
  Date: typeof isDate;
31
32
  Function: typeof isFunction;
33
+ AsyncFunction: typeof isAsyncFunction;
32
34
  Num: typeof isNumber;
33
35
  NumBetween: typeof isNumberBetween;
34
36
  NumAbove: typeof isNumberAbove;
package/is.js CHANGED
@@ -6,6 +6,7 @@ const is_1 = require("./array/is");
6
6
  const is_2 = require("./boolean/is");
7
7
  const is_3 = require("./date/is");
8
8
  const is_4 = require("./function/is");
9
+ const isAsync_1 = require("./function/isAsync");
9
10
  const is_5 = require("./number/is");
10
11
  const isBetween_1 = require("./number/isBetween");
11
12
  const isBelow_1 = require("./number/isBelow");
@@ -31,6 +32,7 @@ const Is = Object.freeze({
31
32
  Boolean: is_2.default,
32
33
  Date: is_3.default,
33
34
  Function: is_4.default,
35
+ AsyncFunction: isAsync_1.default,
34
36
  Num: is_5.default,
35
37
  NumBetween: isBetween_1.default,
36
38
  NumAbove: isAbove_1.default,
package/number/is.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is a number
7
7
  */
8
- export default function isNumber(val: any): boolean;
8
+ export default function isNumber(val: unknown): boolean;
@@ -6,4 +6,4 @@
6
6
  *
7
7
  * @returns Whether or not the value is above the reference
8
8
  */
9
- export default function isNumberAbove(val: any, ref: number): boolean;
9
+ export default function isNumberAbove(val: unknown, ref: number): boolean;
@@ -6,4 +6,4 @@
6
6
  *
7
7
  * @returns Whether or not the value is above or equal to the reference
8
8
  */
9
- export default function isNumberAboveOrEqual(val: any, ref: number): boolean;
9
+ export default function isNumberAboveOrEqual(val: unknown, ref: number): boolean;
@@ -6,4 +6,4 @@
6
6
  *
7
7
  * @returns Whether or not the value is below the reference
8
8
  */
9
- export default function isNumberBelow(val: any, ref: number): boolean;
9
+ export default function isNumberBelow(val: unknown, ref: number): boolean;
@@ -7,4 +7,4 @@
7
7
  *
8
8
  * @returns Whether or not the value is below or equal to the reference
9
9
  */
10
- export default function isNumberBelowOrEqual(val: any, ref: number): boolean;
10
+ export default function isNumberBelowOrEqual(val: unknown, ref: number): boolean;
@@ -9,4 +9,4 @@
9
9
  *
10
10
  * @returns Whether or not the value is a number between min and max inclusive
11
11
  */
12
- export default function isNumberBetween(val: any, min: number, max: number): boolean;
12
+ export default function isNumberBetween(val: unknown, min: number, max: number): boolean;
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is an integer
7
7
  */
8
- export default function isInteger(val: any): boolean;
8
+ export default function isInteger(val: unknown): boolean;
@@ -6,4 +6,4 @@
6
6
  *
7
7
  * @returns Whether or not the value is above the reference
8
8
  */
9
- export default function isIntegerAbove(val: any, ref: number): boolean;
9
+ export default function isIntegerAbove(val: unknown, ref: number): boolean;
@@ -7,4 +7,4 @@
7
7
  *
8
8
  * @returns Whether or not the value is above or equal to the reference
9
9
  */
10
- export default function isIntegerAboveOrEqual(val: any, ref: number): boolean;
10
+ export default function isIntegerAboveOrEqual(val: unknown, ref: number): boolean;
@@ -6,4 +6,4 @@
6
6
  *
7
7
  * @returns Whether or not the value is below the reference
8
8
  */
9
- export default function isIntegerBelow(val: any, ref: number): boolean;
9
+ export default function isIntegerBelow(val: unknown, ref: number): boolean;
@@ -7,4 +7,4 @@
7
7
  *
8
8
  * @returns Whether or not the value is below or equal to the reference
9
9
  */
10
- export default function isIntegerBelowOrEqual(val: any, ref: number): boolean;
10
+ export default function isIntegerBelowOrEqual(val: unknown, ref: number): boolean;
@@ -9,4 +9,4 @@
9
9
  *
10
10
  * @returns Whether or not the value is an integer between min and max inclusive
11
11
  */
12
- export default function isIntegerBetween(val: any, min: number, max: number): boolean;
12
+ export default function isIntegerBetween(val: unknown, min: number, max: number): boolean;
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is a numerical NaN
7
7
  */
8
- export default function isNumericalNaN(val: any): boolean;
8
+ export default function isNumericalNaN(val: unknown): boolean;
package/object/is.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is an object
7
7
  */
8
- export default function isObject(val: any): boolean;
8
+ export default function isObject(val: unknown): boolean;
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is an object with content
7
7
  */
8
- export default function isNotEmptyObject(val: any): boolean;
8
+ export default function isNotEmptyObject(val: unknown): boolean;
package/object/merge.js CHANGED
@@ -4,17 +4,25 @@ function merge(target, source = {}) {
4
4
  if (Object.prototype.toString.call(target) !== '[object Object]' ||
5
5
  Object.prototype.toString.call(source) !== '[object Object]')
6
6
  throw new TypeError('Please pass a target and object to merge');
7
- return Object.keys(target).reduce((acc, key) => {
8
- if (Object.prototype.toString.call(target[key]) === '[object Object]' &&
9
- !Array.isArray(target[key])) {
10
- acc[key] = source[key] ? merge(target[key], source[key]) : target[key];
7
+ const acc = {};
8
+ for (const key in target) {
9
+ if (!Object.prototype.hasOwnProperty.call(target, key))
10
+ continue;
11
+ if (typeof target[key] === 'object' &&
12
+ target[key] !== null &&
13
+ !Array.isArray(target[key]) &&
14
+ Object.prototype.hasOwnProperty.call(source, key) &&
15
+ typeof source[key] === 'object' &&
16
+ source[key] !== null &&
17
+ !Array.isArray(source[key])) {
18
+ acc[key] = merge(target[key], source[key]);
11
19
  }
12
20
  else {
13
21
  acc[key] = Object.prototype.hasOwnProperty.call(source, key)
14
22
  ? source[key]
15
23
  : target[key];
16
24
  }
17
- return acc;
18
- }, {});
25
+ }
26
+ return acc;
19
27
  }
20
28
  exports.default = merge;
package/package.json CHANGED
@@ -1 +1 @@
1
- { "name": "@valkyriestudios/utils", "version": "11.3.0", "description": "A collection of single-function utilities for common tasks", "author": { "name": "Peter Vermeulen", "email": "contact@valkyriestudios.be", "url": "www.valkyriestudios.be" }, "keywords": [ "utility", "library", "javascript", "js", "node", "bun" ], "license": "MIT", "repository": { "type": "git", "url": "git+https://github.com/ValkyrieStudios/utils.git" }, "bugs": { "url": "https://github.com/ValkyrieStudios/utils/issues" }, "homepage": "https://github.com/ValkyrieStudios/utils#readme", "types": "index.d.ts" }
1
+ { "name": "@valkyriestudios/utils", "version": "11.5.0", "description": "A collection of single-function utilities for common tasks", "author": { "name": "Peter Vermeulen", "email": "contact@valkyriestudios.be", "url": "www.valkyriestudios.be" }, "keywords": [ "utility", "library", "javascript", "js", "node", "bun" ], "license": "MIT", "repository": { "type": "git", "url": "git+https://github.com/ValkyrieStudios/utils.git" }, "bugs": { "url": "https://github.com/ValkyrieStudios/utils/issues" }, "homepage": "https://github.com/ValkyrieStudios/utils#readme", "types": "index.d.ts" }
package/regexp/is.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is a RegExp
7
7
  */
8
- export default function isRegExp(val: any): boolean;
8
+ export default function isRegExp(val: unknown): boolean;
package/string/is.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @returns Whether or not the value is a string
7
7
  */
8
- export default function isString(val: any): boolean;
8
+ export default function isString(val: unknown): boolean;
@@ -10,4 +10,4 @@
10
10
  *
11
11
  * @returns Whether or not the value is a string of length between min and max inclusive
12
12
  */
13
- export default function isStringBetween(val: any, min: number, max: number, trimmed?: boolean): boolean;
13
+ export default function isStringBetween(val: unknown, min: number, max: number, trimmed?: boolean): boolean;
@@ -6,4 +6,4 @@
6
6
  *
7
7
  * @returns Whether or not the value is a string with content
8
8
  */
9
- export default function isNotEmptyString(val: any, trimmed?: boolean): boolean;
9
+ export default function isNotEmptyString(val: unknown, trimmed?: boolean): boolean;