@xylabs/forget 4.6.1 → 4.6.3

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.
@@ -1,5 +1,6 @@
1
1
  // src/forget.ts
2
2
  import { delay } from "@xylabs/delay";
3
+ import { isPromise } from "@xylabs/promise";
3
4
  var ForgetPromise = {
4
5
  get active() {
5
6
  return this.activeForgets > 0;
@@ -24,36 +25,40 @@ var ForgetPromise = {
24
25
  * @param config Configuration of forget settings
25
26
  */
26
27
  forget(promise, onComplete, config) {
27
- let completed = false;
28
- this.activeForgets++;
29
- const promiseWrapper = async () => {
30
- await promise.then((result) => {
31
- this.activeForgets--;
32
- completed = true;
33
- onComplete?.([result, void 0]);
34
- }).catch((error) => {
35
- this.activeForgets--;
36
- completed = true;
37
- onComplete?.([void 0, error]);
38
- });
39
- };
40
- const promises = [promiseWrapper()];
41
- if (config) {
42
- const timeoutFunc = async () => {
43
- await delay(config.delay);
44
- if (!completed) {
45
- console.log(`forget promise timeout out after ${config.delay}ms [Cancelling]`);
46
- config.cancel?.();
47
- }
28
+ if (isPromise(promise)) {
29
+ let completed = false;
30
+ this.activeForgets++;
31
+ const promiseWrapper = async () => {
32
+ await promise.then((result) => {
33
+ this.activeForgets--;
34
+ completed = true;
35
+ onComplete?.([result, void 0]);
36
+ }).catch((error) => {
37
+ this.activeForgets--;
38
+ completed = true;
39
+ onComplete?.([void 0, error]);
40
+ });
48
41
  };
49
- promises.push(timeoutFunc());
42
+ const promises = [promiseWrapper()];
43
+ if (config) {
44
+ const timeoutFunc = async () => {
45
+ await delay(config.delay);
46
+ if (!completed) {
47
+ console.log(`forget promise timeout out after ${config.delay}ms [Cancelling]`);
48
+ config.cancel?.();
49
+ }
50
+ };
51
+ promises.push(timeoutFunc());
52
+ }
53
+ const all = Promise.race(promises);
54
+ all.then(() => {
55
+ return;
56
+ }).catch(() => {
57
+ return;
58
+ });
59
+ } else {
60
+ return promise();
50
61
  }
51
- const all = Promise.race(promises);
52
- all.then(() => {
53
- return;
54
- }).catch(() => {
55
- return;
56
- });
57
62
  }
58
63
  };
59
64
  var forget = (promise, onComplete, timeout) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/forget.ts"],"sourcesContent":["import { delay } from '@xylabs/delay'\n\nexport interface ForgetTimeoutConfig {\n cancel: () => void\n delay: number\n}\n\nexport const ForgetPromise = {\n get active() {\n return this.activeForgets > 0\n },\n\n activeForgets: 0,\n\n async awaitInactive(interval = 100, timeout?: number) {\n let timeoutRemaining = timeout\n while (this.active) {\n await delay(interval)\n if (timeoutRemaining !== undefined) {\n timeoutRemaining -= interval\n if (timeoutRemaining <= 0) {\n return this.activeForgets\n }\n }\n }\n return 0\n },\n\n /**\n * Used to explicitly launch an async function (or Promise) with awaiting it\n * @param promise The promise to forget\n * @param config Configuration of forget settings\n */\n forget<T>(promise: Promise<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, config?: ForgetTimeoutConfig) {\n let completed = false\n this.activeForgets++\n\n const promiseWrapper = async () => {\n await promise\n .then((result: T) => {\n this.activeForgets--\n completed = true\n onComplete?.([result, undefined])\n })\n .catch((error) => {\n this.activeForgets--\n completed = true\n onComplete?.([undefined, error])\n })\n }\n\n const promises = [promiseWrapper()]\n\n // if there is a timeout, add it to the race\n if (config) {\n const timeoutFunc = async () => {\n await delay(config.delay)\n if (!completed) {\n console.log(`forget promise timeout out after ${config.delay}ms [Cancelling]`)\n config.cancel?.()\n }\n }\n promises.push(timeoutFunc())\n }\n\n const all = Promise.race(promises)\n\n all\n .then(() => {\n return\n })\n .catch(() => {\n return\n })\n },\n}\n\n// used to explicitly launch an async function (or Promise) with awaiting it\nexport const forget = <T>(promise: Promise<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, timeout?: ForgetTimeoutConfig) => {\n ForgetPromise.forget<T>(promise, onComplete, timeout)\n}\n"],"mappings":";AAAA,SAAS,aAAa;AAOf,IAAM,gBAAgB;AAAA,EAC3B,IAAI,SAAS;AACX,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAAA,EAEA,eAAe;AAAA,EAEf,MAAM,cAAc,WAAW,KAAK,SAAkB;AACpD,QAAI,mBAAmB;AACvB,WAAO,KAAK,QAAQ;AAClB,YAAM,MAAM,QAAQ;AACpB,UAAI,qBAAqB,QAAW;AAClC,4BAAoB;AACpB,YAAI,oBAAoB,GAAG;AACzB,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAU,SAAqB,YAAmE,QAA8B;AAC9H,QAAI,YAAY;AAChB,SAAK;AAEL,UAAM,iBAAiB,YAAY;AACjC,YAAM,QACH,KAAK,CAAC,WAAc;AACnB,aAAK;AACL,oBAAY;AACZ,qBAAa,CAAC,QAAQ,MAAS,CAAC;AAAA,MAClC,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,aAAK;AACL,oBAAY;AACZ,qBAAa,CAAC,QAAW,KAAK,CAAC;AAAA,MACjC,CAAC;AAAA,IACL;AAEA,UAAM,WAAW,CAAC,eAAe,CAAC;AAGlC,QAAI,QAAQ;AACV,YAAM,cAAc,YAAY;AAC9B,cAAM,MAAM,OAAO,KAAK;AACxB,YAAI,CAAC,WAAW;AACd,kBAAQ,IAAI,oCAAoC,OAAO,KAAK,iBAAiB;AAC7E,iBAAO,SAAS;AAAA,QAClB;AAAA,MACF;AACA,eAAS,KAAK,YAAY,CAAC;AAAA,IAC7B;AAEA,UAAM,MAAM,QAAQ,KAAK,QAAQ;AAEjC,QACG,KAAK,MAAM;AACV;AAAA,IACF,CAAC,EACA,MAAM,MAAM;AACX;AAAA,IACF,CAAC;AAAA,EACL;AACF;AAGO,IAAM,SAAS,CAAI,SAAqB,YAAmE,YAAkC;AAClJ,gBAAc,OAAU,SAAS,YAAY,OAAO;AACtD;","names":[]}
1
+ {"version":3,"sources":["../../src/forget.ts"],"sourcesContent":["import { delay } from '@xylabs/delay'\nimport { isPromise, type Promisable } from '@xylabs/promise'\n\nexport interface ForgetTimeoutConfig {\n cancel: () => void\n delay: number\n}\n\nexport const ForgetPromise = {\n get active() {\n return this.activeForgets > 0\n },\n\n activeForgets: 0,\n\n async awaitInactive(interval = 100, timeout?: number) {\n let timeoutRemaining = timeout\n while (this.active) {\n await delay(interval)\n if (timeoutRemaining !== undefined) {\n timeoutRemaining -= interval\n if (timeoutRemaining <= 0) {\n return this.activeForgets\n }\n }\n }\n return 0\n },\n\n /**\n * Used to explicitly launch an async function (or Promise) with awaiting it\n * @param promise The promise to forget\n * @param config Configuration of forget settings\n */\n forget<T>(promise: Promisable<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, config?: ForgetTimeoutConfig) {\n if (isPromise(promise)) {\n let completed = false\n this.activeForgets++\n\n const promiseWrapper = async () => {\n await promise\n .then((result: T) => {\n this.activeForgets--\n completed = true\n onComplete?.([result, undefined])\n })\n .catch((error) => {\n this.activeForgets--\n completed = true\n onComplete?.([undefined, error])\n })\n }\n\n const promises = [promiseWrapper()]\n\n // if there is a timeout, add it to the race\n if (config) {\n const timeoutFunc = async () => {\n await delay(config.delay)\n if (!completed) {\n console.log(`forget promise timeout out after ${config.delay}ms [Cancelling]`)\n config.cancel?.()\n }\n }\n promises.push(timeoutFunc())\n }\n\n const all = Promise.race(promises)\n\n all\n .then(() => {\n return\n })\n .catch(() => {\n return\n })\n } else {\n return (promise as () => void)()\n }\n },\n}\n\n// used to explicitly launch an async function (or Promise) with awaiting it\nexport const forget = <T>(promise: Promisable<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, timeout?: ForgetTimeoutConfig) => {\n ForgetPromise.forget<T>(promise, onComplete, timeout)\n}\n"],"mappings":";AAAA,SAAS,aAAa;AACtB,SAAS,iBAAkC;AAOpC,IAAM,gBAAgB;AAAA,EAC3B,IAAI,SAAS;AACX,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAAA,EAEA,eAAe;AAAA,EAEf,MAAM,cAAc,WAAW,KAAK,SAAkB;AACpD,QAAI,mBAAmB;AACvB,WAAO,KAAK,QAAQ;AAClB,YAAM,MAAM,QAAQ;AACpB,UAAI,qBAAqB,QAAW;AAClC,4BAAoB;AACpB,YAAI,oBAAoB,GAAG;AACzB,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAU,SAAwB,YAAmE,QAA8B;AACjI,QAAI,UAAU,OAAO,GAAG;AACtB,UAAI,YAAY;AAChB,WAAK;AAEL,YAAM,iBAAiB,YAAY;AACjC,cAAM,QACH,KAAK,CAAC,WAAc;AACnB,eAAK;AACL,sBAAY;AACZ,uBAAa,CAAC,QAAQ,MAAS,CAAC;AAAA,QAClC,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,eAAK;AACL,sBAAY;AACZ,uBAAa,CAAC,QAAW,KAAK,CAAC;AAAA,QACjC,CAAC;AAAA,MACL;AAEA,YAAM,WAAW,CAAC,eAAe,CAAC;AAGlC,UAAI,QAAQ;AACV,cAAM,cAAc,YAAY;AAC9B,gBAAM,MAAM,OAAO,KAAK;AACxB,cAAI,CAAC,WAAW;AACd,oBAAQ,IAAI,oCAAoC,OAAO,KAAK,iBAAiB;AAC7E,mBAAO,SAAS;AAAA,UAClB;AAAA,QACF;AACA,iBAAS,KAAK,YAAY,CAAC;AAAA,MAC7B;AAEA,YAAM,MAAM,QAAQ,KAAK,QAAQ;AAEjC,UACG,KAAK,MAAM;AACV;AAAA,MACF,CAAC,EACA,MAAM,MAAM;AACX;AAAA,MACF,CAAC;AAAA,IACL,OAAO;AACL,aAAQ,QAAuB;AAAA,IACjC;AAAA,EACF;AACF;AAGO,IAAM,SAAS,CAAI,SAAwB,YAAmE,YAAkC;AACrJ,gBAAc,OAAU,SAAS,YAAY,OAAO;AACtD;","names":[]}
@@ -1,3 +1,4 @@
1
+ import { type Promisable } from '@xylabs/promise';
1
2
  export interface ForgetTimeoutConfig {
2
3
  cancel: () => void;
3
4
  delay: number;
@@ -11,7 +12,7 @@ export declare const ForgetPromise: {
11
12
  * @param promise The promise to forget
12
13
  * @param config Configuration of forget settings
13
14
  */
14
- forget<T>(promise: Promise<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, config?: ForgetTimeoutConfig): void;
15
+ forget<T>(promise: Promisable<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, config?: ForgetTimeoutConfig): void;
15
16
  };
16
- export declare const forget: <T>(promise: Promise<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, timeout?: ForgetTimeoutConfig) => void;
17
+ export declare const forget: <T>(promise: Promisable<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, timeout?: ForgetTimeoutConfig) => void;
17
18
  //# sourceMappingURL=forget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"forget.d.ts","sourceRoot":"","sources":["../../src/forget.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,aAAa;;;+CAOsB,MAAM;IAcpD;;;;OAIG;WACI,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,WAAW,mBAAmB;CA0C/H,CAAA;AAGD,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,UAAU,mBAAmB,SAE9I,CAAA"}
1
+ {"version":3,"file":"forget.d.ts","sourceRoot":"","sources":["../../src/forget.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,aAAa;;;+CAOsB,MAAM;IAcpD;;;;OAIG;WACI,CAAC,WAAW,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,WAAW,mBAAmB;CA8ClI,CAAA;AAGD,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,UAAU,mBAAmB,SAEjJ,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/forget",
3
- "version": "4.6.1",
3
+ "version": "4.6.3",
4
4
  "description": "Base functionality used throughout XY Labs TypeScript/JavaScript libraries",
5
5
  "keywords": [
6
6
  "forget",
@@ -36,7 +36,8 @@
36
36
  "module": "./dist/neutral/index.mjs",
37
37
  "types": "./dist/types/index.d.ts",
38
38
  "dependencies": {
39
- "@xylabs/delay": "^4.6.1"
39
+ "@xylabs/delay": "^4.6.3",
40
+ "@xylabs/promise": "^4.6.3"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@xylabs/ts-scripts-yarn3": "^6.1.3",
package/src/forget.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { delay } from '@xylabs/delay'
2
+ import { isPromise, type Promisable } from '@xylabs/promise'
2
3
 
3
4
  export interface ForgetTimeoutConfig {
4
5
  cancel: () => void
@@ -31,51 +32,55 @@ export const ForgetPromise = {
31
32
  * @param promise The promise to forget
32
33
  * @param config Configuration of forget settings
33
34
  */
34
- forget<T>(promise: Promise<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, config?: ForgetTimeoutConfig) {
35
- let completed = false
36
- this.activeForgets++
35
+ forget<T>(promise: Promisable<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, config?: ForgetTimeoutConfig) {
36
+ if (isPromise(promise)) {
37
+ let completed = false
38
+ this.activeForgets++
37
39
 
38
- const promiseWrapper = async () => {
39
- await promise
40
- .then((result: T) => {
41
- this.activeForgets--
42
- completed = true
43
- onComplete?.([result, undefined])
44
- })
45
- .catch((error) => {
46
- this.activeForgets--
47
- completed = true
48
- onComplete?.([undefined, error])
49
- })
50
- }
40
+ const promiseWrapper = async () => {
41
+ await promise
42
+ .then((result: T) => {
43
+ this.activeForgets--
44
+ completed = true
45
+ onComplete?.([result, undefined])
46
+ })
47
+ .catch((error) => {
48
+ this.activeForgets--
49
+ completed = true
50
+ onComplete?.([undefined, error])
51
+ })
52
+ }
51
53
 
52
- const promises = [promiseWrapper()]
54
+ const promises = [promiseWrapper()]
53
55
 
54
- // if there is a timeout, add it to the race
55
- if (config) {
56
- const timeoutFunc = async () => {
57
- await delay(config.delay)
58
- if (!completed) {
59
- console.log(`forget promise timeout out after ${config.delay}ms [Cancelling]`)
60
- config.cancel?.()
56
+ // if there is a timeout, add it to the race
57
+ if (config) {
58
+ const timeoutFunc = async () => {
59
+ await delay(config.delay)
60
+ if (!completed) {
61
+ console.log(`forget promise timeout out after ${config.delay}ms [Cancelling]`)
62
+ config.cancel?.()
63
+ }
61
64
  }
65
+ promises.push(timeoutFunc())
62
66
  }
63
- promises.push(timeoutFunc())
64
- }
65
67
 
66
- const all = Promise.race(promises)
68
+ const all = Promise.race(promises)
67
69
 
68
- all
69
- .then(() => {
70
- return
71
- })
72
- .catch(() => {
73
- return
74
- })
70
+ all
71
+ .then(() => {
72
+ return
73
+ })
74
+ .catch(() => {
75
+ return
76
+ })
77
+ } else {
78
+ return (promise as () => void)()
79
+ }
75
80
  },
76
81
  }
77
82
 
78
83
  // used to explicitly launch an async function (or Promise) with awaiting it
79
- export const forget = <T>(promise: Promise<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, timeout?: ForgetTimeoutConfig) => {
84
+ export const forget = <T>(promise: Promisable<T>, onComplete?: (result: [T | undefined, Error | undefined]) => void, timeout?: ForgetTimeoutConfig) => {
80
85
  ForgetPromise.forget<T>(promise, onComplete, timeout)
81
86
  }