extra-utils 5.21.0 → 6.0.1

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
@@ -176,6 +176,11 @@ function isURLString(text: string): boolean
176
176
  function isntURLString(text: string): boolean
177
177
 
178
178
  function toString(val: unknown): string
179
+
180
+ function parseHostnamePort(hostnamePort: string): {
181
+ hostname: string
182
+ port: number | undefined
183
+ }
179
184
  ```
180
185
 
181
186
  #### removeExtraIndents
@@ -383,7 +388,7 @@ function pipe<A, B>(
383
388
  ): B
384
389
  function pipe<T, U>(
385
390
  value: T
386
- , ...operators: Array<(value: any) => unknown>
391
+ , ...operators: Array<(value: unknown) => unknown>
387
392
  ): U
388
393
  ```
389
394
 
@@ -454,7 +459,7 @@ function pipeAsync<A, B>(
454
459
  ): Promise<B>
455
460
  function pipeAsync<T, U>(
456
461
  value: Awaitable<T>
457
- , ...operators: Array<(value: any) => Awaitable<unknown>>
462
+ , ...operators: Array<(value: unknown) => Awaitable<unknown>>
458
463
  ): Promise<U>
459
464
  ```
460
465
 
@@ -1 +1 @@
1
- {"version":3,"file":"get-enum-key.js","sourceRoot":"","sources":["../../src/enum/get-enum-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,MAAM,UAAU,UAAU,CACxB,KAAQ,EACR,SAAqB;IAErB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QAC7C,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO,GAAG,CAAA;SACX;KACF;IAED,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;AAC7E,CAAC"}
1
+ {"version":3,"file":"get-enum-key.js","sourceRoot":"","sources":["../../src/enum/get-enum-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,MAAM,UAAU,UAAU,CACxB,KAAQ,EACR,SAAqB;IAErB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;AAC7E,CAAC"}
@@ -41,4 +41,4 @@ export declare function pipeAsync<A, B, C>(value: Awaitable<A>, ...operators: [
41
41
  export declare function pipeAsync<A, B>(value: Awaitable<A>, ...operators: [
42
42
  (value: A) => Awaitable<B>
43
43
  ]): Promise<B>;
44
- export declare function pipeAsync<T, U>(value: Awaitable<T>, ...operators: Array<(value: any) => Awaitable<unknown>>): Promise<U>;
44
+ export declare function pipeAsync<T, U>(value: Awaitable<T>, ...operators: Array<(value: unknown) => Awaitable<unknown>>): Promise<U>;
@@ -1 +1 @@
1
- {"version":3,"file":"pipe-async.js","sourceRoot":"","sources":["../../src/fp/pipe-async.ts"],"names":[],"mappings":"AAqEA,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAmB,EACnB,GAAG,SAAyC;IAE5C,IAAI,MAAM,GAAU,MAAM,KAAK,CAAA;IAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAA;KAChC;IACD,OAAO,MAAW,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"pipe-async.js","sourceRoot":"","sources":["../../src/fp/pipe-async.ts"],"names":[],"mappings":"AAqEA,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAmB,EACnB,GAAG,SAAyC;IAE5C,IAAI,MAAM,GAAU,MAAM,KAAK,CAAA;IAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IACD,OAAO,MAAW,CAAA;AACpB,CAAC"}
package/lib/fp/pipe.d.ts CHANGED
@@ -40,4 +40,4 @@ export declare function pipe<A, B, C>(value: A, ...operators: [
40
40
  export declare function pipe<A, B>(value: A, ...operators: [
41
41
  (value: A) => B
42
42
  ]): B;
43
- export declare function pipe<T, U>(value: T, ...operators: Array<(value: any) => unknown>): U;
43
+ export declare function pipe<T, U>(value: T, ...operators: Array<(value: unknown) => unknown>): U;
@@ -1 +1 @@
1
- {"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../src/fp/pipe.ts"],"names":[],"mappings":"AAmEA,MAAM,UAAU,IAAI,CAClB,KAAQ,EACR,GAAG,SAAyC;IAE5C,IAAI,MAAM,GAAU,KAAK,CAAA;IACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;KAC1B;IACD,OAAO,MAAW,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../src/fp/pipe.ts"],"names":[],"mappings":"AAmEA,MAAM,UAAU,IAAI,CAClB,KAAQ,EACR,GAAG,SAAyC;IAE5C,IAAI,MAAM,GAAU,KAAK,CAAA;IACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IACD,OAAO,MAAW,CAAA;AACpB,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare function isFunction<T extends Function = (...args: any[]) => any>(val: unknown): val is T;
1
+ export declare function isFunction<T extends Function = (...args: unknown[]) => unknown>(val: unknown): val is T;
2
2
  export declare function isntFunction<T>(val: T): val is Exclude<T, Function>;
@@ -1 +1 @@
1
- {"version":3,"file":"is-json-serializable.js","sourceRoot":"","sources":["../../src/json/is-json-serializable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,2BAA4B;AAC/C,OAAO,EAAE,UAAU,EAAE,0BAA2B;AAEhD,MAAM,UAAU,kBAAkB,CAIhC,GAAY;IACZ,OAAO,QAAQ,CAAC,GAAG,CAAC;WACb,QAAQ,IAAI,GAAG;WACf,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAI,GAAM;IAC5C,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;AACjC,CAAC"}
1
+ {"version":3,"file":"is-json-serializable.js","sourceRoot":"","sources":["../../src/json/is-json-serializable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,2BAA4B;AAC/C,OAAO,EAAE,UAAU,EAAE,0BAA2B;AAEhD,MAAM,UAAU,kBAAkB,CAMhC,GAAY;IACZ,OAAO,QAAQ,CAAC,GAAG,CAAC;WACb,QAAQ,IAAI,GAAG;WACf,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,GAAM;IAGN,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;AACjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"remap-to-weighted-index.js","sourceRoot":"","sources":["../../src/number/remap-to-weighted-index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,KAA0C,EAC1C,OAA8B;IAE9B,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IAExE,IAAI,WAAW,KAAK,CAAC,EAAE;QAErB,OAAO,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;KAC3C;SAAM;QACL,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;QAEtD,IAAI,OAAO,GAAG,WAAW,CAAA;QACzB,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;YACjC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACzB,IAAI,MAAM,IAAI,CAAC,EAAE;gBACf,SAAQ;aACT;iBAAM;gBACL,OAAO,IAAI,MAAM,CAAA;gBACjB,IAAI,QAAQ,IAAI,OAAO;oBAAE,OAAO,CAAC,CAAA;aAClC;SACF;QAGD,OAAO,CAAC,CAAA;KACT;AACH,CAAC"}
1
+ {"version":3,"file":"remap-to-weighted-index.js","sourceRoot":"","sources":["../../src/number/remap-to-weighted-index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,KAA0C,EAC1C,OAA8B;IAE9B,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IAExE,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QAEtB,OAAO,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;QAEtD,IAAI,OAAO,GAAG,WAAW,CAAA;QACzB,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC;YAClC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACzB,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChB,SAAQ;YACV,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,MAAM,CAAA;gBACjB,IAAI,QAAQ,IAAI,OAAO;oBAAE,OAAO,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAGD,OAAO,CAAC,CAAA;IACV,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"remap-to-weighted-item.js","sourceRoot":"","sources":["../../src/number/remap-to-weighted-item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAiBnE,MAAM,UAAU,mBAAmB,CAA0B,GAAG,IAW7D;IAED,IAAI,KAAa,CAAA;IACjB,IAAI,KAA0C,CAAA;IAC9C,IAAI,KAAuB,CAAA;IAC3B,IAAI,OAA8B,CAAA;IAElC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;QAC5B,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAA0B,CAAA;KAClE;SAAM;QACL,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;KACtC;IAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IACzD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC"}
1
+ {"version":3,"file":"remap-to-weighted-item.js","sourceRoot":"","sources":["../../src/number/remap-to-weighted-item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAiBnE,MAAM,UAAU,mBAAmB,CAA0B,GAAG,IAW7D;IAED,IAAI,KAAa,CAAA;IACjB,IAAI,KAA0C,CAAA;IAC9C,IAAI,KAAuB,CAAA;IAC3B,IAAI,OAA8B,CAAA;IAElC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;QAC5B,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAA0B,CAAA;IACnE,CAAC;SAAM,CAAC;QACN,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACvC,CAAC;IAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IACzD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"remap.js","sourceRoot":"","sources":["../../src/number/remap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,MAAM,UAAU,KAAK,CACnB,KAAa,EACb,CAAC,MAAM,EAAE,MAAM,CAA4C,EAC3D,CAAC,MAAM,EAAE,MAAM,CAA4C;IAE3D,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,iDAAiD,CAAC,CAAA;IAC3E,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,iDAAiD,CAAC,CAAA;IAC3E,MAAM,CACJ,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,EAClC,oDAAoD,CACrD,CAAA;IAED,IAAI,MAAM,KAAK,MAAM,EAAE;QACrB,MAAM,CACJ,MAAM,KAAK,MAAM,EACjB,8EAA8E,CAC/E,CAAA;QAED,OAAO,MAAM,CAAA;KACd;SAAM;QACL,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;cACpC,CAAC,MAAM,GAAG,MAAM,CAAC;cACjB,MAAM,CAAA;KACd;AACH,CAAC"}
1
+ {"version":3,"file":"remap.js","sourceRoot":"","sources":["../../src/number/remap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,MAAM,UAAU,KAAK,CACnB,KAAa,EACb,CAAC,MAAM,EAAE,MAAM,CAA4C,EAC3D,CAAC,MAAM,EAAE,MAAM,CAA4C;IAE3D,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,iDAAiD,CAAC,CAAA;IAC3E,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,iDAAiD,CAAC,CAAA;IAC3E,MAAM,CACJ,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,EAClC,oDAAoD,CACrD,CAAA;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,CACJ,MAAM,KAAK,MAAM,EACjB,8EAA8E,CAC/E,CAAA;QAED,OAAO,MAAM,CAAA;IACf,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;cACpC,CAAC,MAAM,GAAG,MAAM,CAAC;cACjB,MAAM,CAAA;IACf,CAAC;AACH,CAAC"}
@@ -1,9 +1,19 @@
1
1
  import { isReferenceEqual } from './is-reference-equal.js';
2
- import { isObject } from './is-object.js';
2
+ import { isPlainObject } from './is-plain-object.js';
3
+ import { isArray } from "../array/is-array.js";
3
4
  export function isDeepEqual(a, b) {
4
5
  if (isReferenceEqual(a, b))
5
6
  return true;
6
- if (isObject(a) && isObject(b)) {
7
+ if (isArray(a) && isArray(b)) {
8
+ if (a.length === b.length) {
9
+ for (let i = 0; i < a.length; i++) {
10
+ if (!isDeepEqual(a[i], b[i]))
11
+ return false;
12
+ }
13
+ return true;
14
+ }
15
+ }
16
+ else if (isPlainObject(a) && isPlainObject(b)) {
7
17
  const keysA = Reflect.ownKeys(a);
8
18
  const keysB = Reflect.ownKeys(b);
9
19
  if (keysA.length === keysB.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"is-deep-equal.js","sourceRoot":"","sources":["../../src/object/is-deep-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,UAAU,WAAW,CAAC,CAAU,EAAE,CAAU;IAChD,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;YACjC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;gBACvB,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;oBAC7C,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAC5B;oBACA,OAAO,KAAK,CAAA;iBACb;aACF;YAED,OAAO,IAAI,CAAA;SACZ;KACF;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"is-deep-equal.js","sourceRoot":"","sources":["../../src/object/is-deep-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,6BAA8B;AAEhD,MAAM,UAAU,WAAW,CAAC,CAAU,EAAE,CAAU;IAChD,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;YAC5C,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;SAAM,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;oBAC7C,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAC5B,CAAC;oBACD,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -1,9 +1,19 @@
1
1
  import { isReferenceEqual } from './is-reference-equal.js';
2
- import { isObject } from './is-object.js';
2
+ import { isPlainObject } from './is-plain-object.js';
3
+ import { isArray } from "../array/is-array.js";
3
4
  export function isShallowEqual(a, b) {
4
5
  if (isReferenceEqual(a, b))
5
6
  return true;
6
- if (isObject(a) && isObject(b)) {
7
+ if (isArray(a) && isArray(b)) {
8
+ if (a.length === b.length) {
9
+ for (let i = 0; i < a.length; i++) {
10
+ if (a[i] !== b[i])
11
+ return false;
12
+ }
13
+ return true;
14
+ }
15
+ }
16
+ else if (isPlainObject(a) && isPlainObject(b)) {
7
17
  const keysA = Reflect.ownKeys(a);
8
18
  const keysB = Reflect.ownKeys(b);
9
19
  if (keysA.length === keysB.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"is-shallow-equal.js","sourceRoot":"","sources":["../../src/object/is-shallow-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,UAAU,cAAc,CAAC,CAAU,EAAE,CAAU;IACnD,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;YACjC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;gBACvB,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;oBAC7C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EACjB;oBACA,OAAO,KAAK,CAAA;iBACb;aACF;YAED,OAAO,IAAI,CAAA;SACZ;KACF;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"is-shallow-equal.js","sourceRoot":"","sources":["../../src/object/is-shallow-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,6BAA8B;AAEhD,MAAM,UAAU,cAAc,CAAC,CAAU,EAAE,CAAU;IACnD,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;YACjC,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;SAAM,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;oBAC7C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EACjB,CAAC;oBACD,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -6,3 +6,4 @@ export * from './remove-extra-indents.js';
6
6
  export * from './remove-leading-blank-lines.js';
7
7
  export * from './remove-trailing-blank-lines.js';
8
8
  export * from './to-string.js';
9
+ export * from './parse-hostname-port.js';
@@ -6,4 +6,5 @@ export * from './remove-extra-indents.js';
6
6
  export * from './remove-leading-blank-lines.js';
7
7
  export * from './remove-trailing-blank-lines.js';
8
8
  export * from './to-string.js';
9
+ export * from './parse-hostname-port.js';
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/string/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,kCAAkC,CAAA;AAChD,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/string/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,kCAAkC,CAAA;AAChD,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-url-string.js","sourceRoot":"","sources":["../../src/string/is-url-string.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI;QACF,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;QACb,OAAO,IAAI,CAAA;KACZ;IAAC,MAAM;QACN,OAAO,KAAK,CAAA;KACb;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC"}
1
+ {"version":3,"file":"is-url-string.js","sourceRoot":"","sources":["../../src/string/is-url-string.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;QACb,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function parseHostnamePort(hostnamePort: string): {
2
+ hostname: string;
3
+ port: number | undefined;
4
+ };
@@ -0,0 +1,17 @@
1
+ import { isntNaN } from "../number/is-nan.js";
2
+ import { getErrorResult } from 'return-style';
3
+ export function parseHostnamePort(hostnamePort) {
4
+ const [error, url] = getErrorResult(() => new URL(`protocol://${hostnamePort}`));
5
+ if (error)
6
+ throw new Error('Invalid hostname port string');
7
+ const hostname = url.hostname;
8
+ const portText = url.port;
9
+ const port = Number.parseInt(portText, 10);
10
+ return {
11
+ hostname,
12
+ port: isntNaN(port)
13
+ ? port
14
+ : undefined
15
+ };
16
+ }
17
+ //# sourceMappingURL=parse-hostname-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-hostname-port.js","sourceRoot":"","sources":["../../src/string/parse-hostname-port.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,4BAA6B;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,UAAU,iBAAiB,CAAC,YAAoB;IAIpD,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,cAAc,YAAY,EAAE,CAAC,CAAC,CAAA;IAChF,IAAI,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAE1D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAA;IAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAA;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAE1C,OAAO;QACL,QAAQ;QACR,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;YACf,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,SAAS;KAChB,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"remove-extra-indents.js","sourceRoot":"","sources":["../../src/string/remove-extra-indents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,EAAE,gBAAgB,GAAG,KAAK,KAEtB,EAAE;IAEN,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,kBAAkB,GAAG,KAAK;SAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SAC7D,MAAM,CACL,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;SACvC;aAAM;YACL,OAAO,CAAC,CAAA;SACT;IACH,CAAC,EACD,QAAQ,CACT,CAAA;IACH,IAAI,kBAAkB,KAAK,CAAC,IAAI,kBAAkB,KAAK,QAAQ,EAAE;QAC/D,OAAO,IAAI,CAAA;KACZ;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC"}
1
+ {"version":3,"file":"remove-extra-indents.js","sourceRoot":"","sources":["../../src/string/remove-extra-indents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,EAAE,gBAAgB,GAAG,KAAK,KAEtB,EAAE;IAEN,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,kBAAkB,GAAG,KAAK;SAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SAC7D,MAAM,CACL,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC,EACD,QAAQ,CACT,CAAA;IACH,IAAI,kBAAkB,KAAK,CAAC,IAAI,kBAAkB,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"remove-leading-blank-lines.js","sourceRoot":"","sources":["../../src/string/remove-leading-blank-lines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,cAAsB,QAAQ;IAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE9B,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,OACE,QAAQ,GAAG,WAAW;QACtB,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACrB;QACA,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,QAAQ,EAAE,CAAA;KACX;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"remove-leading-blank-lines.js","sourceRoot":"","sources":["../../src/string/remove-leading-blank-lines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,cAAsB,QAAQ;IAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE9B,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,OACE,QAAQ,GAAG,WAAW;QACtB,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACrB,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,QAAQ,EAAE,CAAA;IACZ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"remove-trailing-blank-lines.js","sourceRoot":"","sources":["../../src/string/remove-trailing-blank-lines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,UAAU,wBAAwB,CACtC,IAAY,EACZ,cAAsB,QAAQ;IAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE9B,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,OACE,QAAQ,GAAG,WAAW;QACtB,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EACpC;QACA,KAAK,CAAC,GAAG,EAAE,CAAA;QACX,QAAQ,EAAE,CAAA;KACX;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"remove-trailing-blank-lines.js","sourceRoot":"","sources":["../../src/string/remove-trailing-blank-lines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,UAAU,wBAAwB,CACtC,IAAY,EACZ,cAAsB,QAAQ;IAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE9B,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,OACE,QAAQ,GAAG,WAAW;QACtB,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EACpC,CAAC;QACD,KAAK,CAAC,GAAG,EAAE,CAAA;QACX,QAAQ,EAAE,CAAA;IACZ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "extra-utils",
3
- "version": "5.21.0",
3
+ "version": "6.0.1",
4
4
  "description": "Utilities for JavaScript and Typescript",
5
5
  "files": [
6
6
  "src",
@@ -14,14 +14,12 @@
14
14
  "author": "BlackGlory <woshenmedoubuzhidao@blackglory.me>",
15
15
  "license": "MIT",
16
16
  "engines": {
17
- "node": ">=12"
17
+ "node": ">=22"
18
18
  },
19
19
  "scripts": {
20
20
  "prepare": "ts-patch install -s",
21
21
  "lint": "eslint --ext .js,.jsx,.ts,.tsx --quiet src __tests__",
22
- "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --runInBand --config jest.config.cjs",
23
- "test:debug": "cross-env NODE_OPTIONS=--experimental-vm-modules node --inspect-brk node_modules/.bin/jest --runInBand --config jest.config.cjs",
24
- "test:coverage": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage --config jest.config.cjs",
22
+ "test": "vitest run",
25
23
  "prepublishOnly": "run-s prepare clean build",
26
24
  "clean": "rimraf lib",
27
25
  "build": "tsc --project tsconfig.build.json --outDir lib",
@@ -34,33 +32,31 @@
34
32
  }
35
33
  },
36
34
  "devDependencies": {
37
- "@blackglory/jest-resolver": "^0.3.0",
38
- "@blackglory/pass": "^1.1.0",
39
- "@commitlint/cli": "^17.6.1",
40
- "@commitlint/config-conventional": "^17.6.1",
41
- "@types/jest": "^29.5.0",
42
- "@types/jsdom": "^21.1.1",
43
- "@types/lodash-es": "^4.17.7",
44
- "@typescript-eslint/eslint-plugin": "^5.58.0",
45
- "@typescript-eslint/parser": "^5.58.0",
46
- "cross-env": "^7.0.3",
47
- "eslint": "^8.38.0",
35
+ "@blackglory/go": "^2.0.0",
36
+ "@blackglory/pass": "^1.1.1",
37
+ "@commitlint/cli": "^20.4.2",
38
+ "@commitlint/config-conventional": "^20.4.2",
39
+ "@eslint/js": "^10.0.1",
40
+ "@types/lodash-es": "^4.17.12",
41
+ "eslint": "^10.0.2",
48
42
  "husky": "^4.3.8",
49
- "jest": "^29.5.0",
50
- "jest-resolve": "^29.5.0",
51
43
  "npm-run-all": "^4.1.5",
52
- "rimraf": "^3.0.2",
44
+ "rimraf": "^6.1.3",
53
45
  "standard-version": "^9.5.0",
54
- "ts-jest": "^29.1.0",
55
- "ts-patch": "^2.1.0",
56
- "tsd": "^0.28.1",
57
- "tslib": "^2.5.0",
58
- "typescript": "4.8",
59
- "typescript-transform-paths": "^3.4.6"
46
+ "ts-patch": "^3.3.0",
47
+ "tsd": "^0.33.0",
48
+ "tslib": "^2.8.1",
49
+ "typescript": "5.9.3",
50
+ "typescript-eslint": "^8.56.1",
51
+ "typescript-transform-paths": "^3.5.6",
52
+ "vite": "^7.3.1",
53
+ "vite-tsconfig-paths": "^6.1.1",
54
+ "vitest": "^4.0.18"
60
55
  },
61
56
  "dependencies": {
62
57
  "@blackglory/errors": "^3.1.0",
63
- "justypes": "^4.2.0",
64
- "lodash-es": "^4.17.21"
58
+ "justypes": "^4.5.0",
59
+ "lodash-es": "^4.17.23",
60
+ "return-style": "^4.0.0"
65
61
  }
66
62
  }
@@ -65,7 +65,7 @@ export function pipeAsync<A, B>(
65
65
  ): Promise<B>
66
66
  export function pipeAsync<T, U>(
67
67
  value: Awaitable<T>
68
- , ...operators: Array<(value: any) => Awaitable<unknown>>
68
+ , ...operators: Array<(value: unknown) => Awaitable<unknown>>
69
69
  ): Promise<U>
70
70
  export async function pipeAsync<T, U>(
71
71
  value: Awaitable<T>
package/src/fp/pipe.ts CHANGED
@@ -63,7 +63,7 @@ export function pipe<A, B>(
63
63
  ): B
64
64
  export function pipe<T, U>(
65
65
  value: T
66
- , ...operators: Array<(value: any) => unknown>
66
+ , ...operators: Array<(value: unknown) => unknown>
67
67
  ): U
68
68
  export function pipe<T, U>(
69
69
  value: T
@@ -1,4 +1,4 @@
1
- export function isFunction<T extends Function = (...args: any[]) => any>(
1
+ export function isFunction<T extends Function = (...args: unknown[]) => unknown>(
2
2
  val: unknown
3
3
  ): val is T {
4
4
  return typeof val === 'function'
@@ -4,7 +4,9 @@ import { isFunction } from '@src/is-function.js'
4
4
 
5
5
  export function isJSONSerializable<T extends
6
6
  | JSONValue
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
8
  | Record<string, JSONValue | JSONSerializable<any>>
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
10
  | Array<JSONValue | JSONSerializable<any>>
9
11
  >(val: unknown): val is JSONSerializable<T> {
10
12
  return isObject(val)
@@ -12,6 +14,9 @@ export function isJSONSerializable<T extends
12
14
  && isFunction(val.toJSON)
13
15
  }
14
16
 
15
- export function isntJSONSerializable<T>(val: T): val is Exclude<T, JSONSerializable<any>> {
17
+ export function isntJSONSerializable<T>(
18
+ val: T
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ ): val is Exclude<T, JSONSerializable<any>> {
16
21
  return !isJSONSerializable(val)
17
22
  }
@@ -1,10 +1,19 @@
1
1
  import { isReferenceEqual } from './is-reference-equal.js'
2
- import { isObject } from './is-object.js'
2
+ import { isPlainObject } from './is-plain-object.js'
3
+ import { isArray } from '@src/array/is-array.js'
3
4
 
4
5
  export function isDeepEqual(a: unknown, b: unknown): boolean {
5
6
  if (isReferenceEqual(a, b)) return true
6
7
 
7
- if (isObject(a) && isObject(b)) {
8
+ if (isArray(a) && isArray(b)) {
9
+ if (a.length === b.length) {
10
+ for (let i = 0; i < a.length; i++) {
11
+ if (!isDeepEqual(a[i], b[i])) return false
12
+ }
13
+
14
+ return true
15
+ }
16
+ } else if (isPlainObject(a) && isPlainObject(b)) {
8
17
  const keysA = Reflect.ownKeys(a)
9
18
  const keysB = Reflect.ownKeys(b)
10
19
 
@@ -1,10 +1,19 @@
1
1
  import { isReferenceEqual } from './is-reference-equal.js'
2
- import { isObject } from './is-object.js'
2
+ import { isPlainObject } from './is-plain-object.js'
3
+ import { isArray } from '@src/array/is-array.js'
3
4
 
4
5
  export function isShallowEqual(a: unknown, b: unknown): boolean {
5
6
  if (isReferenceEqual(a, b)) return true
6
7
 
7
- if (isObject(a) && isObject(b)) {
8
+ if (isArray(a) && isArray(b)) {
9
+ if (a.length === b.length) {
10
+ for (let i = 0; i < a.length; i++) {
11
+ if (a[i] !== b[i]) return false
12
+ }
13
+
14
+ return true
15
+ }
16
+ } else if (isPlainObject(a) && isPlainObject(b)) {
8
17
  const keysA = Reflect.ownKeys(a)
9
18
  const keysB = Reflect.ownKeys(b)
10
19
 
@@ -6,3 +6,4 @@ export * from './remove-extra-indents.js'
6
6
  export * from './remove-leading-blank-lines.js'
7
7
  export * from './remove-trailing-blank-lines.js'
8
8
  export * from './to-string.js'
9
+ export * from './parse-hostname-port.js'
@@ -0,0 +1,21 @@
1
+ import { isntNaN } from '@src/number/is-nan.js'
2
+ import { getErrorResult } from 'return-style'
3
+
4
+ export function parseHostnamePort(hostnamePort: string): {
5
+ hostname: string
6
+ port: number | undefined
7
+ } {
8
+ const [error, url] = getErrorResult(() => new URL(`protocol://${hostnamePort}`))
9
+ if (error) throw new Error('Invalid hostname port string')
10
+
11
+ const hostname = url.hostname
12
+ const portText = url.port
13
+ const port = Number.parseInt(portText, 10)
14
+
15
+ return {
16
+ hostname
17
+ , port: isntNaN(port)
18
+ ? port
19
+ : undefined
20
+ }
21
+ }