@xylabs/forget 2.6.4

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.
Files changed (100) hide show
  1. package/.depcheckrc +3 -0
  2. package/LICENSE +165 -0
  3. package/README.md +71 -0
  4. package/dist/cjs/browser/Buffer.d.ts +3 -0
  5. package/dist/cjs/browser/Buffer.d.ts.map +1 -0
  6. package/dist/cjs/browser/Buffer.js +6 -0
  7. package/dist/cjs/browser/Buffer.js.map +1 -0
  8. package/dist/cjs/browser/bufferPolyfill.d.ts +2 -0
  9. package/dist/cjs/browser/bufferPolyfill.d.ts.map +1 -0
  10. package/dist/cjs/browser/bufferPolyfill.js +15 -0
  11. package/dist/cjs/browser/bufferPolyfill.js.map +1 -0
  12. package/dist/cjs/browser/index.d.ts +3 -0
  13. package/dist/cjs/browser/index.d.ts.map +1 -0
  14. package/dist/cjs/browser/index.js +6 -0
  15. package/dist/cjs/browser/index.js.map +1 -0
  16. package/dist/cjs/browserIndex.d.ts +3 -0
  17. package/dist/cjs/browserIndex.d.ts.map +1 -0
  18. package/dist/cjs/browserIndex.js +9 -0
  19. package/dist/cjs/browserIndex.js.map +1 -0
  20. package/dist/cjs/delay.d.ts +2 -0
  21. package/dist/cjs/delay.d.ts.map +1 -0
  22. package/dist/cjs/delay.js +8 -0
  23. package/dist/cjs/delay.js.map +1 -0
  24. package/dist/cjs/forget.d.ts +12 -0
  25. package/dist/cjs/forget.d.ts.map +1 -0
  26. package/dist/cjs/forget.js +70 -0
  27. package/dist/cjs/forget.js.map +1 -0
  28. package/dist/cjs/index.d.ts +4 -0
  29. package/dist/cjs/index.d.ts.map +1 -0
  30. package/dist/cjs/index.js +8 -0
  31. package/dist/cjs/index.js.map +1 -0
  32. package/dist/cjs/node/Buffer.d.ts +3 -0
  33. package/dist/cjs/node/Buffer.d.ts.map +1 -0
  34. package/dist/cjs/node/Buffer.js +6 -0
  35. package/dist/cjs/node/Buffer.js.map +1 -0
  36. package/dist/cjs/node/bufferPolyfill.d.ts +2 -0
  37. package/dist/cjs/node/bufferPolyfill.d.ts.map +1 -0
  38. package/dist/cjs/node/bufferPolyfill.js +8 -0
  39. package/dist/cjs/node/bufferPolyfill.js.map +1 -0
  40. package/dist/cjs/node/index.d.ts +3 -0
  41. package/dist/cjs/node/index.d.ts.map +1 -0
  42. package/dist/cjs/node/index.js +6 -0
  43. package/dist/cjs/node/index.js.map +1 -0
  44. package/dist/cjs/nodeIndex.d.ts +3 -0
  45. package/dist/cjs/nodeIndex.d.ts.map +1 -0
  46. package/dist/cjs/nodeIndex.js +9 -0
  47. package/dist/cjs/nodeIndex.js.map +1 -0
  48. package/dist/docs.json +110 -0
  49. package/dist/esm/browser/Buffer.d.ts +3 -0
  50. package/dist/esm/browser/Buffer.d.ts.map +1 -0
  51. package/dist/esm/browser/Buffer.js +3 -0
  52. package/dist/esm/browser/Buffer.js.map +1 -0
  53. package/dist/esm/browser/bufferPolyfill.d.ts +2 -0
  54. package/dist/esm/browser/bufferPolyfill.d.ts.map +1 -0
  55. package/dist/esm/browser/bufferPolyfill.js +11 -0
  56. package/dist/esm/browser/bufferPolyfill.js.map +1 -0
  57. package/dist/esm/browser/index.d.ts +3 -0
  58. package/dist/esm/browser/index.d.ts.map +1 -0
  59. package/dist/esm/browser/index.js +3 -0
  60. package/dist/esm/browser/index.js.map +1 -0
  61. package/dist/esm/browserIndex.d.ts +3 -0
  62. package/dist/esm/browserIndex.d.ts.map +1 -0
  63. package/dist/esm/browserIndex.js +3 -0
  64. package/dist/esm/browserIndex.js.map +1 -0
  65. package/dist/esm/delay.d.ts +2 -0
  66. package/dist/esm/delay.d.ts.map +1 -0
  67. package/dist/esm/delay.js +4 -0
  68. package/dist/esm/delay.js.map +1 -0
  69. package/dist/esm/forget.d.ts +12 -0
  70. package/dist/esm/forget.d.ts.map +1 -0
  71. package/dist/esm/forget.js +61 -0
  72. package/dist/esm/forget.js.map +1 -0
  73. package/dist/esm/index.d.ts +4 -0
  74. package/dist/esm/index.d.ts.map +1 -0
  75. package/dist/esm/index.js +5 -0
  76. package/dist/esm/index.js.map +1 -0
  77. package/dist/esm/node/Buffer.d.ts +3 -0
  78. package/dist/esm/node/Buffer.d.ts.map +1 -0
  79. package/dist/esm/node/Buffer.js +3 -0
  80. package/dist/esm/node/Buffer.js.map +1 -0
  81. package/dist/esm/node/bufferPolyfill.d.ts +2 -0
  82. package/dist/esm/node/bufferPolyfill.d.ts.map +1 -0
  83. package/dist/esm/node/bufferPolyfill.js +4 -0
  84. package/dist/esm/node/bufferPolyfill.js.map +1 -0
  85. package/dist/esm/node/index.d.ts +3 -0
  86. package/dist/esm/node/index.d.ts.map +1 -0
  87. package/dist/esm/node/index.js +3 -0
  88. package/dist/esm/node/index.js.map +1 -0
  89. package/dist/esm/nodeIndex.d.ts +3 -0
  90. package/dist/esm/nodeIndex.d.ts.map +1 -0
  91. package/dist/esm/nodeIndex.js +3 -0
  92. package/dist/esm/nodeIndex.js.map +1 -0
  93. package/package.json +63 -0
  94. package/src/forget.spec.ts +37 -0
  95. package/src/forget.ts +75 -0
  96. package/src/index.ts +6 -0
  97. package/tsconfig.build.cjs.json +10 -0
  98. package/tsconfig.build.esm.json +10 -0
  99. package/tsconfig.json +9 -0
  100. package/tsconfig.test.json +5 -0
package/dist/docs.json ADDED
@@ -0,0 +1,110 @@
1
+ {
2
+ "id": 0,
3
+ "name": "@xylabs/forget",
4
+ "kind": 1,
5
+ "kindString": "Project",
6
+ "flags": {},
7
+ "originalName": "",
8
+ "children": [
9
+ {
10
+ "id": 5,
11
+ "name": "default",
12
+ "kind": 8388608,
13
+ "kindString": "Reference",
14
+ "flags": {},
15
+ "sources": [
16
+ {
17
+ "fileName": "index.ts",
18
+ "line": 6,
19
+ "character": 0,
20
+ "url": "https://github.com/xylabs/sdk-js/blob/ff7d0bd/packages/forget/src/index.ts#L6"
21
+ }
22
+ ],
23
+ "target": 1
24
+ },
25
+ {
26
+ "id": 1,
27
+ "name": "forget",
28
+ "kind": 64,
29
+ "kindString": "Function",
30
+ "flags": {},
31
+ "sources": [
32
+ {
33
+ "fileName": "forget.ts",
34
+ "line": 73,
35
+ "character": 13,
36
+ "url": "https://github.com/xylabs/sdk-js/blob/ff7d0bd/packages/forget/src/forget.ts#L73"
37
+ }
38
+ ],
39
+ "signatures": [
40
+ {
41
+ "id": 2,
42
+ "name": "forget",
43
+ "kind": 4096,
44
+ "kindString": "Call signature",
45
+ "flags": {},
46
+ "parameters": [
47
+ {
48
+ "id": 3,
49
+ "name": "promise",
50
+ "kind": 32768,
51
+ "kindString": "Parameter",
52
+ "flags": {},
53
+ "type": {
54
+ "type": "reference",
55
+ "typeArguments": [
56
+ {
57
+ "type": "intrinsic",
58
+ "name": "unknown"
59
+ }
60
+ ],
61
+ "name": "Promise",
62
+ "qualifiedName": "Promise",
63
+ "package": "typescript"
64
+ }
65
+ },
66
+ {
67
+ "id": 4,
68
+ "name": "timeout",
69
+ "kind": 32768,
70
+ "kindString": "Parameter",
71
+ "flags": {
72
+ "isOptional": true
73
+ },
74
+ "type": {
75
+ "type": "reference",
76
+ "name": "ForgetTimeoutConfig"
77
+ }
78
+ }
79
+ ],
80
+ "type": {
81
+ "type": "intrinsic",
82
+ "name": "void"
83
+ }
84
+ }
85
+ ]
86
+ }
87
+ ],
88
+ "groups": [
89
+ {
90
+ "title": "References",
91
+ "children": [
92
+ 5
93
+ ]
94
+ },
95
+ {
96
+ "title": "Functions",
97
+ "children": [
98
+ 1
99
+ ]
100
+ }
101
+ ],
102
+ "sources": [
103
+ {
104
+ "fileName": "index.ts",
105
+ "line": 1,
106
+ "character": 0,
107
+ "url": "https://github.com/xylabs/sdk-js/blob/ff7d0bd/packages/forget/src/index.ts#L1"
108
+ }
109
+ ]
110
+ }
@@ -0,0 +1,3 @@
1
+ import { Buffer as BrowserBuffer } from 'buffer/';
2
+ export { BrowserBuffer };
3
+ //# sourceMappingURL=Buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Buffer.d.ts","sourceRoot":"","sources":["../../../src/browser/Buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Buffer as BrowserBuffer } from 'buffer/';
2
+ export { BrowserBuffer };
3
+ //# sourceMappingURL=Buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Buffer.js","sourceRoot":"","sources":["../../../src/browser/Buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const bufferPolyfillBrowser: () => void;
2
+ //# sourceMappingURL=bufferPolyfill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferPolyfill.d.ts","sourceRoot":"","sources":["../../../src/browser/bufferPolyfill.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,YAQjC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { BrowserBuffer } from './Buffer';
2
+ export const bufferPolyfillBrowser = () => {
3
+ if (window !== undefined) {
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ const global = window;
6
+ if (global.Buffer === undefined) {
7
+ global.Buffer = BrowserBuffer;
8
+ }
9
+ }
10
+ };
11
+ //# sourceMappingURL=bufferPolyfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferPolyfill.js","sourceRoot":"","sources":["../../../src/browser/bufferPolyfill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,8DAA8D;QAC9D,MAAM,MAAM,GAAG,MAAa,CAAA;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;YAC/B,MAAM,CAAC,MAAM,GAAG,aAAa,CAAA;SAC9B;KACF;AACH,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './Buffer';
2
+ export * from './bufferPolyfill';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './Buffer';
2
+ export * from './bufferPolyfill';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './browser';
2
+ export { BrowserBuffer as Buffer, bufferPolyfillBrowser as bufferPolyfill } from './browser';
3
+ //# sourceMappingURL=browserIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserIndex.d.ts","sourceRoot":"","sources":["../../src/browserIndex.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,aAAa,IAAI,MAAM,EAAE,qBAAqB,IAAI,cAAc,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './browser';
2
+ export { BrowserBuffer as Buffer, bufferPolyfillBrowser as bufferPolyfill } from './browser';
3
+ //# sourceMappingURL=browserIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserIndex.js","sourceRoot":"","sources":["../../src/browserIndex.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,aAAa,IAAI,MAAM,EAAE,qBAAqB,IAAI,cAAc,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const delay: (ms: number) => Promise<unknown>;
2
+ //# sourceMappingURL=delay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delay.d.ts","sourceRoot":"","sources":["../../src/delay.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,OAAQ,MAAM,qBAE/B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export const delay = (ms) => {
2
+ return new Promise((resolve) => setTimeout(resolve, ms));
3
+ };
4
+ //# sourceMappingURL=delay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delay.js","sourceRoot":"","sources":["../../src/delay.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ export interface ForgetTimeoutConfig {
2
+ delay: number;
3
+ cancel: () => void;
4
+ }
5
+ export declare class ForgetPromise {
6
+ static get active(): boolean;
7
+ static activeForgets: number;
8
+ static awaitInactive(interval?: number, timeout?: number): Promise<number>;
9
+ static forget(promise: Promise<unknown>, timeout?: ForgetTimeoutConfig): void;
10
+ }
11
+ export declare const forget: (promise: Promise<unknown>, timeout?: ForgetTimeoutConfig) => void;
12
+ //# sourceMappingURL=forget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forget.d.ts","sourceRoot":"","sources":["../../src/forget.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,qBAAa,aAAa;IACxB,MAAM,KAAK,MAAM,YAEhB;IAED,MAAM,CAAC,aAAa,SAAI;WAEX,aAAa,CAAC,QAAQ,SAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAe3D,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB;CAwCvE;AAGD,eAAO,MAAM,MAAM,YAAa,QAAQ,OAAO,CAAC,YAAY,mBAAmB,SAE9E,CAAA"}
@@ -0,0 +1,61 @@
1
+ import { delay } from '@xylabs/delay';
2
+ export class ForgetPromise {
3
+ static get active() {
4
+ return this.activeForgets > 0;
5
+ }
6
+ static activeForgets = 0;
7
+ static async awaitInactive(interval = 100, timeout) {
8
+ let timeoutRemaining = timeout;
9
+ while (this.active) {
10
+ await delay(interval);
11
+ if (timeoutRemaining !== undefined) {
12
+ timeoutRemaining -= interval;
13
+ if (timeoutRemaining <= 0) {
14
+ return this.activeForgets;
15
+ }
16
+ }
17
+ }
18
+ return 0;
19
+ }
20
+ //used to explicitly launch an async function (or Promise) with awaiting it
21
+ static forget(promise, timeout) {
22
+ let completed = false;
23
+ this.activeForgets++;
24
+ const promiseWrapper = async () => {
25
+ await promise
26
+ .then(() => {
27
+ this.activeForgets--;
28
+ completed = true;
29
+ })
30
+ .catch(() => {
31
+ this.activeForgets--;
32
+ completed = true;
33
+ });
34
+ };
35
+ const promises = [promiseWrapper()];
36
+ //if there is a timeout, add it to the race
37
+ if (timeout) {
38
+ const timeoutFunc = async () => {
39
+ await delay(timeout.delay);
40
+ if (!completed) {
41
+ console.log(`forget promise timeout out after ${timeout.delay}ms [Cancelling]`);
42
+ timeout.cancel?.();
43
+ }
44
+ };
45
+ promises.push(timeoutFunc());
46
+ }
47
+ const all = Promise.race(promises);
48
+ all
49
+ .then(() => {
50
+ return;
51
+ })
52
+ .catch(() => {
53
+ return;
54
+ });
55
+ }
56
+ }
57
+ //used to explicitly launch an async function (or Promise) with awaiting it
58
+ export const forget = (promise, timeout) => {
59
+ ForgetPromise.forget(promise, timeout);
60
+ };
61
+ //# sourceMappingURL=forget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forget.js","sourceRoot":"","sources":["../../src/forget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAOrC,MAAM,OAAO,aAAa;IACxB,MAAM,KAAK,MAAM;QACf,OAAO,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,MAAM,CAAC,aAAa,GAAG,CAAC,CAAA;IAExB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,GAAG,GAAG,EAAE,OAAgB;QACzD,IAAI,gBAAgB,GAAG,OAAO,CAAA;QAC9B,OAAO,IAAI,CAAC,MAAM,EAAE;YAClB,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAA;YACrB,IAAI,gBAAgB,KAAK,SAAS,EAAE;gBAClC,gBAAgB,IAAI,QAAQ,CAAA;gBAC5B,IAAI,gBAAgB,IAAI,CAAC,EAAE;oBACzB,OAAO,IAAI,CAAC,aAAa,CAAA;iBAC1B;aACF;SACF;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,MAAM,CAAC,OAAyB,EAAE,OAA6B;QACpE,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,IAAI,CAAC,aAAa,EAAE,CAAA;QAEpB,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;YAChC,MAAM,OAAO;iBACV,IAAI,CAAC,GAAG,EAAE;gBACT,IAAI,CAAC,aAAa,EAAE,CAAA;gBACpB,SAAS,GAAG,IAAI,CAAA;YAClB,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,IAAI,CAAC,aAAa,EAAE,CAAA;gBACpB,SAAS,GAAG,IAAI,CAAA;YAClB,CAAC,CAAC,CAAA;QACN,CAAC,CAAA;QAED,MAAM,QAAQ,GAAG,CAAC,cAAc,EAAE,CAAC,CAAA;QAEnC,2CAA2C;QAC3C,IAAI,OAAO,EAAE;YACX,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;gBAC7B,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC1B,IAAI,CAAC,SAAS,EAAE;oBACd,OAAO,CAAC,GAAG,CAAC,oCAAoC,OAAO,CAAC,KAAK,iBAAiB,CAAC,CAAA;oBAC/E,OAAO,CAAC,MAAM,EAAE,EAAE,CAAA;iBACnB;YACH,CAAC,CAAA;YACD,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;SAC7B;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAElC,GAAG;aACA,IAAI,CAAC,GAAG,EAAE;YACT,OAAM;QACR,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,OAAM;QACR,CAAC,CAAC,CAAA;IACN,CAAC;;AAGH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAyB,EAAE,OAA6B,EAAE,EAAE;IACjF,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACxC,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { forget } from './forget';
2
+ export { forget };
3
+ export default forget;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,CAAA;AAGjB,eAAe,MAAM,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { forget } from './forget';
2
+ export { forget };
3
+ // eslint-disable-next-line import/no-default-export
4
+ export default forget;
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,CAAA;AAEjB,oDAAoD;AACpD,eAAe,MAAM,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Buffer } from 'buffer';
2
+ export { Buffer as NodeBuffer };
3
+ //# sourceMappingURL=Buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Buffer.d.ts","sourceRoot":"","sources":["../../../src/node/Buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Buffer } from 'buffer';
2
+ export { Buffer as NodeBuffer };
3
+ //# sourceMappingURL=Buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Buffer.js","sourceRoot":"","sources":["../../../src/node/Buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const bufferPolyfillNode: () => void;
2
+ //# sourceMappingURL=bufferPolyfill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferPolyfill.d.ts","sourceRoot":"","sources":["../../../src/node/bufferPolyfill.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,YAE9B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export const bufferPolyfillNode = () => {
2
+ return;
3
+ };
4
+ //# sourceMappingURL=bufferPolyfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferPolyfill.js","sourceRoot":"","sources":["../../../src/node/bufferPolyfill.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,OAAM;AACR,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './Buffer';
2
+ export * from './bufferPolyfill';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './Buffer';
2
+ export * from './bufferPolyfill';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './node';
2
+ export { NodeBuffer as Buffer, bufferPolyfillNode as bufferPolyfill } from './node';
3
+ //# sourceMappingURL=nodeIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeIndex.d.ts","sourceRoot":"","sources":["../../src/nodeIndex.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,kBAAkB,IAAI,cAAc,EAAE,MAAM,QAAQ,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './node';
2
+ export { NodeBuffer as Buffer, bufferPolyfillNode as bufferPolyfill } from './node';
3
+ //# sourceMappingURL=nodeIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeIndex.js","sourceRoot":"","sources":["../../src/nodeIndex.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,kBAAkB,IAAI,cAAc,EAAE,MAAM,QAAQ,CAAA"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "license": "LGPL-3.0",
3
+ "name": "@xylabs/forget",
4
+ "author": {
5
+ "email": "support@xylabs.com",
6
+ "name": "XY Labs Development Team",
7
+ "url": "https://xylabs.com"
8
+ },
9
+ "bugs": {
10
+ "email": "support@xylabs.com",
11
+ "url": "https://github.com/xylabs/sdk-js/issues"
12
+ },
13
+ "description": "Base functionality used throughout XY Labs TypeScript/JavaScript libraries",
14
+ "browser": "dist/esm/index.js",
15
+ "main": "dist/cjs/index.js",
16
+ "module": "dist/esm/index.js",
17
+ "docs": "dist/docs.json",
18
+ "types": "dist/esm/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "node": {
22
+ "import": "./dist/esm/index.js",
23
+ "require": "./dist/cjs/index.js"
24
+ },
25
+ "browser": {
26
+ "import": "./dist/esm/index.js",
27
+ "require": "./dist/cjs/index.js"
28
+ },
29
+ "default": "./dist/esm/index.js"
30
+ },
31
+ "./dist/docs.json": {
32
+ "default": "./dist/docs.json"
33
+ },
34
+ "./package.json": "./package.json"
35
+ },
36
+ "homepage": "https://xylabs.com",
37
+ "keywords": [
38
+ "xylabs",
39
+ "utility",
40
+ "typescript",
41
+ "esm"
42
+ ],
43
+ "dependencies": {
44
+ "@xylabs/delay": "^2.6.4",
45
+ "tslib": "^2.4.0"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^18.6.5",
49
+ "@xylabs/tsconfig": "^2.5.75"
50
+ },
51
+ "publishConfig": {
52
+ "access": "public"
53
+ },
54
+ "repository": {
55
+ "type": "git",
56
+ "url": "https://github.com/xylabs/sdk-js.git"
57
+ },
58
+ "resolutions": {
59
+ "uuid": "^8"
60
+ },
61
+ "sideEffects": false,
62
+ "version": "2.6.4"
63
+ }
@@ -0,0 +1,37 @@
1
+ import { delay } from '@xylabs/delay'
2
+
3
+ import { forget, ForgetPromise } from './forget'
4
+
5
+ describe('forget', () => {
6
+ test('checking happy path', async () => {
7
+ let cancelled = false
8
+ forget(delay(100), { cancel: () => (cancelled = true), delay: 200 })
9
+ await delay(300)
10
+ expect(cancelled).toBeFalsy()
11
+ })
12
+ test('checking unhappy path', async () => {
13
+ let cancelled = false
14
+ forget(delay(200), { cancel: () => (cancelled = true), delay: 100 })
15
+ await delay(300)
16
+ expect(cancelled).toBeTruthy()
17
+ })
18
+ test('forget active', async () => {
19
+ forget(delay(300))
20
+ expect(ForgetPromise.active).toBeTruthy()
21
+ await delay(600)
22
+ expect(ForgetPromise.active).toBeFalsy()
23
+ })
24
+ test('forget active async', async () => {
25
+ forget(delay(1000))
26
+ await ForgetPromise.awaitInactive()
27
+ expect(ForgetPromise.active).toBeFalsy()
28
+ })
29
+ test('forget active async w/timeout', async () => {
30
+ forget(delay(300))
31
+ const activeCount = await ForgetPromise.awaitInactive(100, 200)
32
+ expect(activeCount).toBe(1)
33
+ expect(ForgetPromise.active).toBeTruthy()
34
+ await ForgetPromise.awaitInactive()
35
+ expect(ForgetPromise.active).toBeFalsy()
36
+ })
37
+ })
package/src/forget.ts ADDED
@@ -0,0 +1,75 @@
1
+ import { delay } from '@xylabs/delay'
2
+
3
+ export interface ForgetTimeoutConfig {
4
+ delay: number
5
+ cancel: () => void
6
+ }
7
+
8
+ export class ForgetPromise {
9
+ static get active() {
10
+ return this.activeForgets > 0
11
+ }
12
+
13
+ static activeForgets = 0
14
+
15
+ static async awaitInactive(interval = 100, timeout?: number) {
16
+ let timeoutRemaining = timeout
17
+ while (this.active) {
18
+ await delay(interval)
19
+ if (timeoutRemaining !== undefined) {
20
+ timeoutRemaining -= interval
21
+ if (timeoutRemaining <= 0) {
22
+ return this.activeForgets
23
+ }
24
+ }
25
+ }
26
+ return 0
27
+ }
28
+
29
+ //used to explicitly launch an async function (or Promise) with awaiting it
30
+ static forget(promise: Promise<unknown>, timeout?: ForgetTimeoutConfig) {
31
+ let completed = false
32
+ this.activeForgets++
33
+
34
+ const promiseWrapper = async () => {
35
+ await promise
36
+ .then(() => {
37
+ this.activeForgets--
38
+ completed = true
39
+ })
40
+ .catch(() => {
41
+ this.activeForgets--
42
+ completed = true
43
+ })
44
+ }
45
+
46
+ const promises = [promiseWrapper()]
47
+
48
+ //if there is a timeout, add it to the race
49
+ if (timeout) {
50
+ const timeoutFunc = async () => {
51
+ await delay(timeout.delay)
52
+ if (!completed) {
53
+ console.log(`forget promise timeout out after ${timeout.delay}ms [Cancelling]`)
54
+ timeout.cancel?.()
55
+ }
56
+ }
57
+ promises.push(timeoutFunc())
58
+ }
59
+
60
+ const all = Promise.race(promises)
61
+
62
+ all
63
+ .then(() => {
64
+ return
65
+ })
66
+ .catch(() => {
67
+ return
68
+ })
69
+ }
70
+ }
71
+
72
+ //used to explicitly launch an async function (or Promise) with awaiting it
73
+ export const forget = (promise: Promise<unknown>, timeout?: ForgetTimeoutConfig) => {
74
+ ForgetPromise.forget(promise, timeout)
75
+ }
package/src/index.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { forget } from './forget'
2
+
3
+ export { forget }
4
+
5
+ // eslint-disable-next-line import/no-default-export
6
+ export default forget
@@ -0,0 +1,10 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "CommonJS",
4
+ "outDir": "./dist/cjs",
5
+ "target": "ES6"
6
+ },
7
+ "exclude": ["src/**/*.spec.ts"],
8
+ "extends": "./tsconfig.json",
9
+ "include": ["src"]
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "ES2022",
4
+ "outDir": "./dist/esm",
5
+ "target": "ES2022"
6
+ },
7
+ "exclude": ["src/**/*.spec.ts"],
8
+ "extends": "./tsconfig.json",
9
+ "include": ["src"]
10
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "compilerOptions": {
3
+ "esModuleInterop": true,
4
+ "outDir": "dist",
5
+ "sourceMap": true
6
+ },
7
+ "exclude": [".yarn/**/*", "dist", "node_modules"],
8
+ "extends": "@xylabs/tsconfig"
9
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "exclude": ["dist/**/*"],
3
+ "extends": "@xylabs/tsconfig-dom",
4
+ "include": ["**/*.spec.ts"]
5
+ }