extra-utils 5.20.0 → 6.0.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
@@ -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-index.js","sourceRoot":"","sources":["../../src/number/remap-to-index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,KAA0C,EAC1C,KAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACtB,KAAK,CACH,KAAK,EACL,KAAK,EACL,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAClB,CACF,CAAA;IAED,OAAO,KAAK,KAAK,KAAK,CAAC,MAAM;QACxB,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAClB,CAAC,CAAC,KAAK,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"remap-to-index.js","sourceRoot":"","sources":["../../src/number/remap-to-index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,KAA0C,EAC1C,KAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACtB,KAAK,CACH,KAAK,EACL,KAAK,EACL,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAClB,CACF,CAAA;IAED,OAAO,KAAK,KAAK,KAAK,CAAC,MAAM;QACxB,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAClB,CAAC,CAAC,KAAK,CAAA;AAUd,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,6 +1,16 @@
1
+ import { assert } from '@blackglory/errors';
1
2
  export function remap(value, [oldMin, oldMax], [newMin, newMax]) {
2
- return (value - oldMin) / (oldMax - oldMin)
3
- * (newMax - newMin)
4
- + newMin;
3
+ assert(oldMin <= oldMax, 'The oldMin must be less than or equal to oldMax');
4
+ assert(newMin <= newMax, 'The newMin must be less than or equal to newMax');
5
+ assert(value >= oldMin && value <= oldMax, 'The parameter value must between oldMin and oldMax');
6
+ if (oldMin === oldMax) {
7
+ assert(newMin === newMax, 'The old range cannot be zero-length unless the new range is also zero-length');
8
+ return newMin;
9
+ }
10
+ else {
11
+ return (value - oldMin) / (oldMax - oldMin)
12
+ * (newMax - newMin)
13
+ + newMin;
14
+ }
5
15
  }
6
16
  //# sourceMappingURL=remap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remap.js","sourceRoot":"","sources":["../../src/number/remap.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CACnB,KAAa,EACb,CAAC,MAAM,EAAE,MAAM,CAA4C,EAC3D,CAAC,MAAM,EAAE,MAAM,CAA4C;IAE3D,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;UACpC,CAAC,MAAM,GAAG,MAAM,CAAC;UACjB,MAAM,CAAA;AACf,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 +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,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,CAAC;QAC/B,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 +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,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,CAAC;QAC/B,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.20.0",
3
+ "version": "6.0.0",
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,32 +32,30 @@
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/pass": "^1.1.1",
36
+ "@commitlint/cli": "^20.4.2",
37
+ "@commitlint/config-conventional": "^20.4.2",
38
+ "@eslint/js": "^10.0.1",
39
+ "@types/lodash-es": "^4.17.12",
40
+ "eslint": "^10.0.2",
48
41
  "husky": "^4.3.8",
49
- "jest": "^29.5.0",
50
- "jest-resolve": "^29.5.0",
51
42
  "npm-run-all": "^4.1.5",
52
- "rimraf": "^3.0.2",
43
+ "rimraf": "^6.1.3",
53
44
  "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"
45
+ "ts-patch": "^3.3.0",
46
+ "tsd": "^0.33.0",
47
+ "tslib": "^2.8.1",
48
+ "typescript": "5.9.3",
49
+ "typescript-eslint": "^8.56.1",
50
+ "typescript-transform-paths": "^3.5.6",
51
+ "vite": "^7.3.1",
52
+ "vite-tsconfig-paths": "^6.1.1",
53
+ "vitest": "^4.0.18"
60
54
  },
61
55
  "dependencies": {
62
- "justypes": "^4.2.0",
63
- "lodash-es": "^4.17.21"
56
+ "@blackglory/errors": "^3.1.0",
57
+ "justypes": "^4.5.0",
58
+ "lodash-es": "^4.17.23",
59
+ "return-style": "^4.0.0"
64
60
  }
65
61
  }
@@ -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
  }
@@ -17,4 +17,13 @@ export function remapToIndex(
17
17
  return index === items.length
18
18
  ? items.length - 1
19
19
  : index
20
+
21
+ // 上方代码在均匀性上优于使用`Math.round`的实现:
22
+ // return Math.round(
23
+ // remap(
24
+ // value
25
+ // , range
26
+ // , [0, items.length - 1]
27
+ // )
28
+ // )
20
29
  }
@@ -1,9 +1,27 @@
1
+ import { assert } from '@blackglory/errors'
2
+
1
3
  export function remap(
2
4
  value: number
3
5
  , [oldMin, oldMax]: readonly [oldMin: number, oldMax: number]
4
6
  , [newMin, newMax]: readonly [newMin: number, newMax: number]
5
7
  ): number {
6
- return (value - oldMin) / (oldMax - oldMin)
7
- * (newMax - newMin)
8
- + newMin
8
+ assert(oldMin <= oldMax, 'The oldMin must be less than or equal to oldMax')
9
+ assert(newMin <= newMax, 'The newMin must be less than or equal to newMax')
10
+ assert(
11
+ value >= oldMin && value <= oldMax
12
+ , 'The parameter value must between oldMin and oldMax'
13
+ )
14
+
15
+ if (oldMin === oldMax) {
16
+ assert(
17
+ newMin === newMax
18
+ , 'The old range cannot be zero-length unless the new range is also zero-length'
19
+ )
20
+
21
+ return newMin
22
+ } else {
23
+ return (value - oldMin) / (oldMax - oldMin)
24
+ * (newMax - newMin)
25
+ + newMin
26
+ }
9
27
  }
@@ -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
+ }