@e280/stz 0.3.9 → 0.3.11

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e280/stz",
3
- "version": "0.3.9",
3
+ "version": "0.3.11",
4
4
  "description": "everyday ts fns for everything",
5
5
  "license": "MIT",
6
6
  "author": "Chase Moskal <chasemoskal@gmail.com>",
@@ -22,8 +22,8 @@
22
22
  "count": "find s -path '*/_archive' -prune -o -name '*.ts' -exec wc -l {} +"
23
23
  },
24
24
  "devDependencies": {
25
- "@e280/science": "^0.1.11",
26
- "@types/node": "^26.1.1",
25
+ "@e280/science": "^0.1.12",
26
+ "@types/node": "^26.2.0",
27
27
  "typescript": "^7.0.2"
28
28
  },
29
29
  "keywords": [
package/s/deadline.ts CHANGED
@@ -1,4 +1,6 @@
1
1
 
2
+ import {is} from "./is.js"
3
+
2
4
  export class DeadlineError extends Error {
3
5
  name = this.constructor.name
4
6
  constructor(public milliseconds: number) {
@@ -6,17 +8,29 @@ export class DeadlineError extends Error {
6
8
  }
7
9
  }
8
10
 
11
+ async function invoke<R>(fn: Promise<R> | (() => Promise<R>)) {
12
+ return is.fn(fn)
13
+ ? fn()
14
+ : fn
15
+ }
16
+
9
17
  /** set a deadline for a fn to do something, will reject with a `DeadlineError` if it takes too long */
10
- export function deadline<R>(milliseconds: number, fn: () => Promise<R>) {
11
- if (milliseconds <= 0 || milliseconds === Infinity)
12
- return fn()
18
+ export function deadline<R>(milliseconds: number | undefined | null, fn: Promise<R> | (() => Promise<R>)) {
19
+ if (milliseconds === undefined || milliseconds === null || milliseconds === Infinity)
20
+ return invoke(fn)
21
+
22
+ if (milliseconds < 0 || Number.isNaN(milliseconds))
23
+ throw new RangeError("invalid value provided as milliseconds to deadline fn")
24
+
25
+ if (milliseconds === 0)
26
+ return Promise.reject(new DeadlineError(milliseconds))
13
27
 
14
28
  return new Promise<R>((resolve, reject) => {
15
29
  const id = setTimeout(
16
30
  () => reject(new DeadlineError(milliseconds)),
17
31
  milliseconds,
18
32
  )
19
- fn()
33
+ invoke(fn)
20
34
  .then(resolve)
21
35
  .catch(reject)
22
36
  .finally(() => clearTimeout(id))
package/x/deadline.d.ts CHANGED
@@ -4,4 +4,4 @@ export declare class DeadlineError extends Error {
4
4
  constructor(milliseconds: number);
5
5
  }
6
6
  /** set a deadline for a fn to do something, will reject with a `DeadlineError` if it takes too long */
7
- export declare function deadline<R>(milliseconds: number, fn: () => Promise<R>): Promise<R>;
7
+ export declare function deadline<R>(milliseconds: number | undefined | null, fn: Promise<R> | (() => Promise<R>)): Promise<R>;
package/x/deadline.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { is } from "./is.js";
1
2
  export class DeadlineError extends Error {
2
3
  milliseconds;
3
4
  name = this.constructor.name;
@@ -6,13 +7,22 @@ export class DeadlineError extends Error {
6
7
  this.milliseconds = milliseconds;
7
8
  }
8
9
  }
10
+ async function invoke(fn) {
11
+ return is.fn(fn)
12
+ ? fn()
13
+ : fn;
14
+ }
9
15
  /** set a deadline for a fn to do something, will reject with a `DeadlineError` if it takes too long */
10
16
  export function deadline(milliseconds, fn) {
11
- if (milliseconds <= 0 || milliseconds === Infinity)
12
- return fn();
17
+ if (milliseconds === undefined || milliseconds === null || milliseconds === Infinity)
18
+ return invoke(fn);
19
+ if (milliseconds < 0 || Number.isNaN(milliseconds))
20
+ throw new RangeError("invalid value provided as milliseconds to deadline fn");
21
+ if (milliseconds === 0)
22
+ return Promise.reject(new DeadlineError(milliseconds));
13
23
  return new Promise((resolve, reject) => {
14
24
  const id = setTimeout(() => reject(new DeadlineError(milliseconds)), milliseconds);
15
- fn()
25
+ invoke(fn)
16
26
  .then(resolve)
17
27
  .catch(reject)
18
28
  .finally(() => clearTimeout(id));
package/x/deadline.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"deadline.js","sourceRoot":"","sources":["../s/deadline.ts"],"names":[],"mappings":"AACA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAEpB,YAAY;IAD/B,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC5B,YAAmB,YAAoB;QACtC,KAAK,CAAC,sBAAsB,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;4BADtD,YAAY;IAE/B,CAAC;CACD;AAED,uGAAuG;AACvG,MAAM,UAAU,QAAQ,CAAI,YAAoB,EAAE,EAAoB;IACrE,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,KAAK,QAAQ;QACjD,OAAO,EAAE,EAAE,CAAA;IAEZ,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,MAAM,EAAE,GAAG,UAAU,CACpB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,EAC7C,YAAY,CACZ,CAAA;QACD,EAAE,EAAE;aACF,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,MAAM,CAAC;aACb,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"deadline.js","sourceRoot":"","sources":["../s/deadline.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,SAAS,CAAA;AAE1B,MAAM,OAAO,aAAc,SAAQ,KAAK;IAEpB,YAAY;IAD/B,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC5B,YAAmB,YAAoB;QACtC,KAAK,CAAC,sBAAsB,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;4BADtD,YAAY;IAE/B,CAAC;CACD;AAED,KAAK,UAAU,MAAM,CAAI,EAAmC;IAC3D,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACf,CAAC,CAAC,EAAE,EAAE;QACN,CAAC,CAAC,EAAE,CAAA;AACN,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,QAAQ,CAAI,YAAuC,EAAE,EAAmC;IACvG,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,QAAQ;QACnF,OAAO,MAAM,CAAC,EAAE,CAAC,CAAA;IAElB,IAAI,YAAY,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;QACjD,MAAM,IAAI,UAAU,CAAC,uDAAuD,CAAC,CAAA;IAE9E,IAAI,YAAY,KAAK,CAAC;QACrB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,CAAA;IAEvD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,MAAM,EAAE,GAAG,UAAU,CACpB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,EAC7C,YAAY,CACZ,CAAA;QACD,MAAM,CAAC,EAAE,CAAC;aACR,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,MAAM,CAAC;aACb,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACH,CAAC"}