tscommons-esm-async 0.0.2

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 (58) hide show
  1. package/dist/classes/commons-claim-pool.d.mts +14 -0
  2. package/dist/classes/commons-claim-pool.mjs +106 -0
  3. package/dist/classes/commons-claim-pool.mjs.map +1 -0
  4. package/dist/classes/commons-memory-observable.d.mts +7 -0
  5. package/dist/classes/commons-memory-observable.mjs +16 -0
  6. package/dist/classes/commons-memory-observable.mjs.map +1 -0
  7. package/dist/classes/commons-schedule.d.mts +14 -0
  8. package/dist/classes/commons-schedule.mjs +131 -0
  9. package/dist/classes/commons-schedule.mjs.map +1 -0
  10. package/dist/classes/commons-state-thread.d.mts +17 -0
  11. package/dist/classes/commons-state-thread.mjs +91 -0
  12. package/dist/classes/commons-state-thread.mjs.map +1 -0
  13. package/dist/classes/commons-synchronised.d.mts +6 -0
  14. package/dist/classes/commons-synchronised.mjs +43 -0
  15. package/dist/classes/commons-synchronised.mjs.map +1 -0
  16. package/dist/enums/ecommons-invocation.d.mts +5 -0
  17. package/dist/enums/ecommons-invocation.mjs +10 -0
  18. package/dist/enums/ecommons-invocation.mjs.map +1 -0
  19. package/dist/enums/ecommons-run-state.d.mts +11 -0
  20. package/dist/enums/ecommons-run-state.mjs +52 -0
  21. package/dist/enums/ecommons-run-state.mjs.map +1 -0
  22. package/dist/enums/ecommons-synchronised-timeout-action.d.mts +4 -0
  23. package/dist/enums/ecommons-synchronised-timeout-action.mjs +6 -0
  24. package/dist/enums/ecommons-synchronised-timeout-action.mjs.map +1 -0
  25. package/dist/helpers/commons-async.d.mts +5 -0
  26. package/dist/helpers/commons-async.mjs +118 -0
  27. package/dist/helpers/commons-async.mjs.map +1 -0
  28. package/dist/helpers/commons-debouncer.d.mts +8 -0
  29. package/dist/helpers/commons-debouncer.mjs +25 -0
  30. package/dist/helpers/commons-debouncer.mjs.map +1 -0
  31. package/dist/helpers/commons-final-value.d.mts +10 -0
  32. package/dist/helpers/commons-final-value.mjs +21 -0
  33. package/dist/helpers/commons-final-value.mjs.map +1 -0
  34. package/dist/helpers/commons-grouper.d.mts +11 -0
  35. package/dist/helpers/commons-grouper.mjs +26 -0
  36. package/dist/helpers/commons-grouper.mjs.map +1 -0
  37. package/dist/helpers/commons-promise.d.mts +1 -0
  38. package/dist/helpers/commons-promise.mjs +35 -0
  39. package/dist/helpers/commons-promise.mjs.map +1 -0
  40. package/dist/helpers/commons-semaphore.d.mts +5 -0
  41. package/dist/helpers/commons-semaphore.mjs +26 -0
  42. package/dist/helpers/commons-semaphore.mjs.map +1 -0
  43. package/dist/index.d.mts +19 -0
  44. package/dist/index.mjs +18 -0
  45. package/dist/index.mjs.map +1 -0
  46. package/dist/interfaces/icommons-stateful.d.mts +5 -0
  47. package/dist/interfaces/icommons-stateful.mjs +3 -0
  48. package/dist/interfaces/icommons-stateful.mjs.map +1 -0
  49. package/dist/types/tcommons-final-value.d.mts +4 -0
  50. package/dist/types/tcommons-final-value.mjs +2 -0
  51. package/dist/types/tcommons-final-value.mjs.map +1 -0
  52. package/dist/types/tcommons-schedule-time.d.mts +10 -0
  53. package/dist/types/tcommons-schedule-time.mjs +13 -0
  54. package/dist/types/tcommons-schedule-time.mjs.map +1 -0
  55. package/dist/types/tcommons-schedule.d.mts +6 -0
  56. package/dist/types/tcommons-schedule.mjs +10 -0
  57. package/dist/types/tcommons-schedule.mjs.map +1 -0
  58. package/package.json +31 -0
@@ -0,0 +1,14 @@
1
+ export declare class CommonsClaimPool<ResourceT = undefined> {
2
+ private maxClaimable;
3
+ private timeoutToClaim;
4
+ private active;
5
+ private pendingTimeouts;
6
+ private available;
7
+ private allocated;
8
+ constructor(maxClaimable: number, timeoutToClaim: number, resources?: ResourceT[]);
9
+ claim(): string | false;
10
+ getResource(uid: string): ResourceT;
11
+ claimOrPend(): Promise<string>;
12
+ free(uid: string): void;
13
+ runWithinPool<ReturnT = void>(callback: (resource?: ResourceT) => Promise<ReturnT>): Promise<ReturnT>;
14
+ }
@@ -0,0 +1,106 @@
1
+ import { commonsArrayRemove, commonsBase62GenerateLongRandomId } from 'tscommons-esm-core';
2
+ import { commonsAsyncAbortTimeout, commonsAsyncTimeout } from '../helpers/commons-async.mjs';
3
+ export class CommonsClaimPool {
4
+ maxClaimable;
5
+ timeoutToClaim;
6
+ active = [];
7
+ pendingTimeouts = [];
8
+ available;
9
+ allocated = new Map();
10
+ constructor(maxClaimable, timeoutToClaim, resources) {
11
+ this.maxClaimable = maxClaimable;
12
+ this.timeoutToClaim = timeoutToClaim;
13
+ if (resources) {
14
+ if (resources.length !== maxClaimable)
15
+ throw new Error('Available resources does not match the max claimable');
16
+ this.available = [...resources];
17
+ }
18
+ }
19
+ claim() {
20
+ if (this.active.length >= this.maxClaimable)
21
+ return false;
22
+ const uid = commonsBase62GenerateLongRandomId();
23
+ this.active.push(uid);
24
+ if (this.available) {
25
+ const resource = this.available.shift();
26
+ if (!resource)
27
+ throw new Error('Assertion failure. No resource avaliable');
28
+ this.allocated.set(uid, resource);
29
+ }
30
+ return uid;
31
+ }
32
+ getResource(uid) {
33
+ if (!this.available)
34
+ throw new Error('Resources are not available');
35
+ if (!this.allocated.has(uid))
36
+ throw new Error('Resource has not been allocated to this uid');
37
+ return this.allocated.get(uid);
38
+ }
39
+ claimOrPend() {
40
+ const internalTimeoutUid = commonsBase62GenerateLongRandomId();
41
+ const internalSpinUid = commonsBase62GenerateLongRandomId();
42
+ return new Promise((resolve, reject) => {
43
+ let timedout = false;
44
+ void (async () => {
45
+ try {
46
+ await commonsAsyncTimeout(this.timeoutToClaim, internalTimeoutUid);
47
+ }
48
+ catch (_e) {
49
+ // do nothing
50
+ }
51
+ timedout = true;
52
+ commonsAsyncAbortTimeout(internalSpinUid);
53
+ })();
54
+ void (async () => {
55
+ while (!timedout) {
56
+ const uid = this.claim();
57
+ if (uid) {
58
+ commonsAsyncAbortTimeout(internalTimeoutUid);
59
+ commonsAsyncAbortTimeout(internalSpinUid);
60
+ resolve(uid);
61
+ return;
62
+ }
63
+ try {
64
+ await commonsAsyncTimeout(100, internalSpinUid); // 100ms spin
65
+ }
66
+ catch (_e) {
67
+ // do nothing
68
+ }
69
+ }
70
+ reject(new Error('Timeout pending to claim a pool space'));
71
+ })();
72
+ });
73
+ }
74
+ free(uid) {
75
+ commonsArrayRemove(this.active, uid);
76
+ if (this.available) {
77
+ try {
78
+ const existing = this.getResource(uid);
79
+ this.allocated.delete(uid);
80
+ this.available.push(existing);
81
+ }
82
+ catch (_e) {
83
+ // ignore
84
+ }
85
+ }
86
+ for (const pendingTimeout of this.pendingTimeouts) {
87
+ commonsAsyncAbortTimeout(pendingTimeout);
88
+ }
89
+ }
90
+ async runWithinPool(callback) {
91
+ const uid = await this.claimOrPend();
92
+ try {
93
+ if (this.available) {
94
+ const resource = this.getResource(uid);
95
+ return await callback(resource);
96
+ }
97
+ else {
98
+ return await callback();
99
+ }
100
+ }
101
+ finally {
102
+ this.free(uid);
103
+ }
104
+ }
105
+ }
106
+ //# sourceMappingURL=commons-claim-pool.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-claim-pool.mjs","sourceRoot":"","sources":["../../src/classes/commons-claim-pool.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Observable } from 'rxjs';
2
+ export declare class CommonsMemoryObservable<T> {
3
+ private observable;
4
+ private value;
5
+ constructor(observable: Observable<T>, value: T);
6
+ get(): T;
7
+ }
@@ -0,0 +1,16 @@
1
+ export class CommonsMemoryObservable {
2
+ observable;
3
+ value;
4
+ constructor(observable, value) {
5
+ this.observable = observable;
6
+ this.value = value;
7
+ this.observable
8
+ .subscribe((v) => {
9
+ this.value = v;
10
+ });
11
+ }
12
+ get() {
13
+ return this.value;
14
+ }
15
+ }
16
+ //# sourceMappingURL=commons-memory-observable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-memory-observable.mjs","sourceRoot":"","sources":["../../src/classes/commons-memory-observable.mts"],"names":[],"mappings":"AAEA,MAAM,OAAO,uBAAuB;IAEzB;IACA;IAFV,YACU,UAAyB,EACzB,KAAQ;QADR,eAAU,GAAV,UAAU,CAAe;QACzB,UAAK,GAAL,KAAK,CAAG;QAEjB,IAAI,CAAC,UAAU;aACZ,SAAS,CACR,CAAC,CAAI,EAAQ,EAAE;YACd,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAChB,CAAC,CACF,CAAC;IACL,CAAC;IAEM,GAAG;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;CACD"}
@@ -0,0 +1,14 @@
1
+ import { TCommonsScheduleTime } from '../types/tcommons-schedule-time.mjs';
2
+ export declare class CommonsSchedule {
3
+ private id;
4
+ private static doesMatchSchedule;
5
+ private schedules;
6
+ private isRunning;
7
+ constructor(id: string);
8
+ schedule(at: TCommonsScheduleTime, callback: () => Promise<void>, id?: string): void;
9
+ clearSchedule(id: string): void;
10
+ private dispatch;
11
+ start(): boolean;
12
+ stop(): boolean;
13
+ parse<T>(json: unknown[], toAction: (_: string) => T | undefined, callback: (_: T) => Promise<void>): void;
14
+ }
@@ -0,0 +1,131 @@
1
+ import { commonsBase62GenerateRandomId, commonsTypeIsNumberArray } from 'tscommons-esm-core';
2
+ import { commonsAsyncInterval, commonsAsyncAbortInterval } from '../helpers/commons-async.mjs';
3
+ import { isTCommonsSchedule } from '../types/tcommons-schedule.mjs';
4
+ import { ECommonsInvocation } from '../enums/ecommons-invocation.mjs';
5
+ export class CommonsSchedule {
6
+ id;
7
+ static doesMatchSchedule(test, at) {
8
+ const years = [];
9
+ if (at.year !== undefined) {
10
+ if (commonsTypeIsNumberArray(at.year))
11
+ years.push(...at.year);
12
+ else
13
+ years.push(at.year);
14
+ }
15
+ if (years.length > 0 && !years.includes(test.getFullYear()))
16
+ return false;
17
+ const months = [];
18
+ if (at.month !== undefined) {
19
+ if (commonsTypeIsNumberArray(at.month))
20
+ months.push(...at.month);
21
+ else
22
+ months.push(at.month);
23
+ }
24
+ if (months.length > 0 && !months.includes(test.getMonth()))
25
+ return false;
26
+ const days = [];
27
+ if (at.day !== undefined) {
28
+ if (commonsTypeIsNumberArray(at.day))
29
+ days.push(...at.day);
30
+ else
31
+ days.push(at.day);
32
+ }
33
+ if (days.length > 0 && !days.includes(test.getDate()))
34
+ return false;
35
+ const dows = [];
36
+ if (at.dow !== undefined) {
37
+ if (commonsTypeIsNumberArray(at.dow))
38
+ dows.push(...at.dow);
39
+ else
40
+ dows.push(at.dow);
41
+ }
42
+ if (dows.length > 0 && !dows.includes(test.getDay()))
43
+ return false;
44
+ const hours = [];
45
+ if (at.hour !== undefined) {
46
+ if (commonsTypeIsNumberArray(at.hour))
47
+ hours.push(...at.hour);
48
+ else
49
+ hours.push(at.hour);
50
+ }
51
+ if (hours.length > 0 && !hours.includes(test.getHours()))
52
+ return false;
53
+ const minutes = [];
54
+ if (at.minute !== undefined) {
55
+ if (commonsTypeIsNumberArray(at.minute))
56
+ minutes.push(...at.minute);
57
+ else
58
+ minutes.push(at.minute);
59
+ }
60
+ if (minutes.length > 0 && !minutes.includes(test.getMinutes()))
61
+ return false;
62
+ const seconds = [];
63
+ if (at.second !== undefined) {
64
+ if (commonsTypeIsNumberArray(at.second))
65
+ seconds.push(...at.second);
66
+ else
67
+ seconds.push(at.second);
68
+ }
69
+ if (seconds.length > 0 && !seconds.includes(test.getSeconds()))
70
+ return false;
71
+ return true;
72
+ }
73
+ schedules = new Map();
74
+ isRunning = false;
75
+ constructor(id) {
76
+ this.id = id;
77
+ }
78
+ schedule(at, callback, id) {
79
+ if (id && this.schedules.has(id))
80
+ this.clearSchedule(id);
81
+ if (!id)
82
+ id = commonsBase62GenerateRandomId();
83
+ const schedule = {
84
+ at: at,
85
+ callback: callback
86
+ };
87
+ this.schedules.set(id, schedule);
88
+ }
89
+ clearSchedule(id) {
90
+ this.schedules.delete(id);
91
+ }
92
+ dispatch() {
93
+ const now = new Date();
94
+ for (const schedule of Array.from(this.schedules.values())) {
95
+ if (!CommonsSchedule.doesMatchSchedule(now, schedule.at))
96
+ continue;
97
+ void (async () => {
98
+ await schedule.callback();
99
+ })();
100
+ }
101
+ }
102
+ start() {
103
+ if (this.isRunning)
104
+ return false;
105
+ commonsAsyncInterval(1000, ECommonsInvocation.FIXED,
106
+ // eslint-disable-next-line @typescript-eslint/require-await
107
+ async () => {
108
+ this.dispatch();
109
+ }, `schedule_${this.id}`);
110
+ return true;
111
+ }
112
+ stop() {
113
+ if (!this.isRunning)
114
+ return false;
115
+ commonsAsyncAbortInterval(`schedule_${this.id}`);
116
+ return true;
117
+ }
118
+ parse(json, toAction, callback) {
119
+ for (const schedule of json) {
120
+ if (!isTCommonsSchedule(schedule))
121
+ throw new Error('Schedule JSON contains an invalid entry');
122
+ const action = toAction(schedule.action);
123
+ if (action === undefined)
124
+ throw new Error('Schedule JSON contains an invalid action');
125
+ this.schedule(schedule.at, async () => {
126
+ await callback(action);
127
+ });
128
+ }
129
+ }
130
+ }
131
+ //# sourceMappingURL=commons-schedule.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-schedule.mjs","sourceRoot":"","sources":["../../src/classes/commons-schedule.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ICommonsStateful } from '../interfaces/icommons-stateful.mjs';
2
+ import { ECommonsRunState } from '../enums/ecommons-run-state.mjs';
3
+ export declare abstract class CommonsStateThread implements ICommonsStateful {
4
+ static maximumTimeoutThread(timeout: number, callback: (stateful: ICommonsStateful) => Promise<void>): Promise<boolean>;
5
+ private state;
6
+ private timedOut;
7
+ private aborted;
8
+ private error;
9
+ constructor();
10
+ getState(): ECommonsRunState;
11
+ protected abstract run(): Promise<void>;
12
+ isAborted(): boolean;
13
+ isTimedOut(): boolean;
14
+ getError(): Error | undefined;
15
+ start(timeout: number, changed?: () => void): void;
16
+ abort(): void;
17
+ }
@@ -0,0 +1,91 @@
1
+ import { commonsBase62GenerateRandomId } from 'tscommons-esm-core';
2
+ import { commonsAsyncTimeout, commonsAsyncAbortTimeout } from '../helpers/commons-async.mjs';
3
+ import { ECommonsRunState } from '../enums/ecommons-run-state.mjs';
4
+ export class CommonsStateThread {
5
+ static async maximumTimeoutThread(timeout, callback) {
6
+ const thread = new (class extends CommonsStateThread {
7
+ async run() {
8
+ await callback(this);
9
+ }
10
+ })();
11
+ return new Promise((resolve, reject) => {
12
+ thread.start(timeout, () => {
13
+ switch (thread.getState()) {
14
+ case ECommonsRunState.PRE: // never happens, but doesn't hurt
15
+ case ECommonsRunState.RUNNING:
16
+ return;
17
+ case ECommonsRunState.ERROR:
18
+ reject(thread.getError() || new Error('Unknown thread error'));
19
+ return;
20
+ case ECommonsRunState.COMPLETED:
21
+ resolve(true);
22
+ return;
23
+ case ECommonsRunState.TIMEDOUT:
24
+ case ECommonsRunState.ABORTED:
25
+ resolve(false);
26
+ return;
27
+ }
28
+ throw new Error('Unknown thread state');
29
+ });
30
+ });
31
+ }
32
+ state;
33
+ timedOut = false;
34
+ aborted = false;
35
+ error;
36
+ constructor() {
37
+ this.state = ECommonsRunState.PRE;
38
+ }
39
+ getState() {
40
+ return this.state;
41
+ }
42
+ isAborted() {
43
+ return this.aborted;
44
+ }
45
+ isTimedOut() {
46
+ return this.timedOut;
47
+ }
48
+ getError() {
49
+ return this.error;
50
+ }
51
+ start(timeout, changed) {
52
+ this.state = ECommonsRunState.RUNNING;
53
+ if (changed)
54
+ changed();
55
+ const internalId = commonsBase62GenerateRandomId();
56
+ void (async () => {
57
+ try {
58
+ await commonsAsyncTimeout(timeout, internalId);
59
+ this.timedOut = true;
60
+ this.abort();
61
+ }
62
+ catch (_) {
63
+ // abort timeout, so ignore
64
+ }
65
+ })();
66
+ void (async () => {
67
+ try {
68
+ await this.run();
69
+ if (this.timedOut)
70
+ this.state = ECommonsRunState.TIMEDOUT;
71
+ else if (this.aborted)
72
+ this.state = ECommonsRunState.ABORTED;
73
+ else
74
+ this.state = ECommonsRunState.COMPLETED;
75
+ }
76
+ catch (e) {
77
+ this.error = e;
78
+ this.state = ECommonsRunState.ERROR;
79
+ }
80
+ finally {
81
+ commonsAsyncAbortTimeout(internalId);
82
+ if (changed)
83
+ changed();
84
+ }
85
+ })();
86
+ }
87
+ abort() {
88
+ this.aborted = true;
89
+ }
90
+ }
91
+ //# sourceMappingURL=commons-state-thread.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-state-thread.mjs","sourceRoot":"","sources":["../../src/classes/commons-state-thread.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ECommonsSynchronisedTimeoutAction } from '../enums/ecommons-synchronised-timeout-action.mjs';
2
+ export declare class CommonsSynchronised {
3
+ private semaphores;
4
+ synchronised<T>(context: string, timeout: number, timeoutAction: ECommonsSynchronisedTimeoutAction, callback: (claimed?: boolean) => Promise<T>): Promise<T>;
5
+ attempt(context: string, timeout: number, timeoutAction: ECommonsSynchronisedTimeoutAction): Promise<boolean>;
6
+ }
@@ -0,0 +1,43 @@
1
+ import { CommonsSemaphore } from '../helpers/commons-semaphore.mjs';
2
+ import { ECommonsSynchronisedTimeoutAction } from '../enums/ecommons-synchronised-timeout-action.mjs';
3
+ export class CommonsSynchronised {
4
+ semaphores = new Map();
5
+ async synchronised(context, timeout, timeoutAction, callback // the ? is for backwards compatibility
6
+ ) {
7
+ if (!this.semaphores.has(context))
8
+ this.semaphores.set(context, new CommonsSemaphore());
9
+ const semaphore = this.semaphores.get(context);
10
+ let claimed = false;
11
+ try {
12
+ await semaphore.claim(timeout);
13
+ claimed = true;
14
+ }
15
+ catch (_e) {
16
+ claimed = false;
17
+ }
18
+ if (!claimed && timeoutAction === ECommonsSynchronisedTimeoutAction.ABORT)
19
+ throw new Error('Timeout on synchronised block');
20
+ try {
21
+ return await callback(claimed);
22
+ }
23
+ finally {
24
+ if (claimed)
25
+ semaphore.release();
26
+ }
27
+ }
28
+ attempt(context, timeout, timeoutAction) {
29
+ return new Promise((resolve, reject) => {
30
+ void (async () => {
31
+ try {
32
+ await this.synchronised(context, timeout, timeoutAction, async (claimed) => {
33
+ resolve(claimed || false); // the || false is just for typescript, as synchronised always returns boolean
34
+ });
35
+ }
36
+ catch (e) {
37
+ reject(e);
38
+ }
39
+ })();
40
+ });
41
+ }
42
+ }
43
+ //# sourceMappingURL=commons-synchronised.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-synchronised.mjs","sourceRoot":"","sources":["../../src/classes/commons-synchronised.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,mDAAmD,CAAC;AAEtG,MAAM,OAAO,mBAAmB;IACvB,UAAU,GAAkC,IAAI,GAAG,EAA4B,CAAC;IAEjF,KAAK,CAAC,YAAY,CACvB,OAAe,EACf,OAAe,EACf,aAAgD,EAChD,QAA2C,CAAC,uCAAuC;;QAEpF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAC;QACxF,MAAM,SAAS,GAAqB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;QAElE,IAAI,OAAO,GAAY,KAAK,CAAC;QAC7B,IAAI,CAAC;YACJ,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,GAAG,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACb,OAAO,GAAG,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,aAAa,KAAK,iCAAiC,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAE5H,IAAI,CAAC;YACJ,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;gBAAS,CAAC;YACV,IAAI,OAAO;gBAAE,SAAS,CAAC,OAAO,EAAE,CAAC;QAClC,CAAC;IACF,CAAC;IAEM,OAAO,CACZ,OAAe,EACf,OAAe,EACf,aAAgD;QAEjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAmC,EAAE,MAA+B,EAAQ,EAAE;YACjG,KAAK,CAAC,KAAK,IAAmB,EAAE;gBAC/B,IAAI,CAAC;oBACJ,MAAM,IAAI,CAAC,YAAY,CACrB,OAAO,EACP,OAAO,EACP,aAAa,EACb,KAAK,EAAE,OAAiB,EAAiB,EAAE;wBAC1C,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,8EAA8E;oBAC1G,CAAC,CACF,CAAC;gBACH,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACZ,MAAM,CAAC,CAAU,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC,CAAC,EAAE,CAAC;QACN,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
@@ -0,0 +1,5 @@
1
+ export declare enum ECommonsInvocation {
2
+ FIXED = "fixed",
3
+ WHEN = "when",
4
+ IF = "if"
5
+ }
@@ -0,0 +1,10 @@
1
+ export var ECommonsInvocation;
2
+ (function (ECommonsInvocation) {
3
+ // run as normal; cycle per interval
4
+ ECommonsInvocation["FIXED"] = "fixed";
5
+ // restart interval when cycle complete
6
+ ECommonsInvocation["WHEN"] = "when";
7
+ // only run cycle if last one complete
8
+ ECommonsInvocation["IF"] = "if";
9
+ })(ECommonsInvocation || (ECommonsInvocation = {}));
10
+ //# sourceMappingURL=ecommons-invocation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecommons-invocation.mjs","sourceRoot":"","sources":["../../src/enums/ecommons-invocation.mts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,kBASX;AATD,WAAY,kBAAkB;IAC7B,oCAAoC;IACpC,qCAAe,CAAA;IAEf,uCAAuC;IACvC,mCAAa,CAAA;IAEb,sCAAsC;IACtC,+BAAS,CAAA;AACV,CAAC,EATW,kBAAkB,KAAlB,kBAAkB,QAS7B"}
@@ -0,0 +1,11 @@
1
+ export declare enum ECommonsRunState {
2
+ PRE = "pre",
3
+ RUNNING = "running",
4
+ COMPLETED = "completed",
5
+ TIMEDOUT = "timedout",
6
+ ERROR = "error",
7
+ ABORTED = "aborted"
8
+ }
9
+ export declare function fromECommonsRunState(value: ECommonsRunState): string;
10
+ export declare function toECommonsRunState(value: string): ECommonsRunState | undefined;
11
+ export declare function isECommonsRunState(test: unknown): test is ECommonsRunState;
@@ -0,0 +1,52 @@
1
+ import { commonsTypeIsString } from 'tscommons-esm-core';
2
+ export var ECommonsRunState;
3
+ (function (ECommonsRunState) {
4
+ ECommonsRunState["PRE"] = "pre";
5
+ ECommonsRunState["RUNNING"] = "running";
6
+ ECommonsRunState["COMPLETED"] = "completed";
7
+ ECommonsRunState["TIMEDOUT"] = "timedout";
8
+ ECommonsRunState["ERROR"] = "error";
9
+ ECommonsRunState["ABORTED"] = "aborted";
10
+ })(ECommonsRunState || (ECommonsRunState = {}));
11
+ export function fromECommonsRunState(value) {
12
+ switch (value) {
13
+ case ECommonsRunState.PRE:
14
+ return ECommonsRunState.PRE.toString();
15
+ case ECommonsRunState.RUNNING:
16
+ return ECommonsRunState.RUNNING.toString();
17
+ case ECommonsRunState.COMPLETED:
18
+ return ECommonsRunState.COMPLETED.toString();
19
+ case ECommonsRunState.TIMEDOUT:
20
+ return ECommonsRunState.TIMEDOUT.toString();
21
+ case ECommonsRunState.ERROR:
22
+ return ECommonsRunState.ERROR.toString();
23
+ case ECommonsRunState.ABORTED:
24
+ return ECommonsRunState.ABORTED.toString();
25
+ default:
26
+ throw new Error('Unknown ECommonsRunState');
27
+ }
28
+ }
29
+ export function toECommonsRunState(value) {
30
+ switch (value.toLowerCase()) {
31
+ case ECommonsRunState.PRE.toString():
32
+ return ECommonsRunState.PRE;
33
+ case ECommonsRunState.RUNNING.toString():
34
+ return ECommonsRunState.RUNNING;
35
+ case ECommonsRunState.COMPLETED.toString():
36
+ return ECommonsRunState.COMPLETED;
37
+ case ECommonsRunState.TIMEDOUT.toString():
38
+ return ECommonsRunState.TIMEDOUT;
39
+ case ECommonsRunState.ERROR.toString():
40
+ return ECommonsRunState.ERROR;
41
+ case ECommonsRunState.ABORTED.toString():
42
+ return ECommonsRunState.ABORTED;
43
+ default:
44
+ return undefined;
45
+ }
46
+ }
47
+ export function isECommonsRunState(test) {
48
+ if (!commonsTypeIsString(test))
49
+ return false;
50
+ return toECommonsRunState(test) !== undefined;
51
+ }
52
+ //# sourceMappingURL=ecommons-run-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecommons-run-state.mjs","sourceRoot":"","sources":["../../src/enums/ecommons-run-state.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,CAAN,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,uCAAmB,CAAA;IACnB,2CAAuB,CAAA;IACvB,yCAAqB,CAAA;IACrB,mCAAe,CAAA;IACf,uCAAmB,CAAA;AACrB,CAAC,EAPW,gBAAgB,KAAhB,gBAAgB,QAO3B;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC3D,QAAQ,KAAK,EAAE,CAAC;QACf,KAAK,gBAAgB,CAAC,GAAG;YACxB,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACxC,KAAK,gBAAgB,CAAC,OAAO;YAC5B,OAAO,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5C,KAAK,gBAAgB,CAAC,SAAS;YAC9B,OAAO,gBAAgB,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC9C,KAAK,gBAAgB,CAAC,QAAQ;YAC7B,OAAO,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC7C,KAAK,gBAAgB,CAAC,KAAK;YAC1B,OAAO,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1C,KAAK,gBAAgB,CAAC,OAAO;YAC5B,OAAO,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5C;YACC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC/C,QAAQ,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,KAAK,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE;YACnC,OAAO,gBAAgB,CAAC,GAAG,CAAC;QAC7B,KAAK,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE;YACvC,OAAO,gBAAgB,CAAC,OAAO,CAAC;QACjC,KAAK,gBAAgB,CAAC,SAAS,CAAC,QAAQ,EAAE;YACzC,OAAO,gBAAgB,CAAC,SAAS,CAAC;QACnC,KAAK,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACxC,OAAO,gBAAgB,CAAC,QAAQ,CAAC;QAClC,KAAK,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE;YACrC,OAAO,gBAAgB,CAAC,KAAK,CAAC;QAC/B,KAAK,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE;YACvC,OAAO,gBAAgB,CAAC,OAAO,CAAC;QACjC;YACC,OAAO,SAAS,CAAC;IACnB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC/C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7C,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare enum ECommonsSynchronisedTimeoutAction {
2
+ PROCEED = "proceed",
3
+ ABORT = "abort"
4
+ }
@@ -0,0 +1,6 @@
1
+ export var ECommonsSynchronisedTimeoutAction;
2
+ (function (ECommonsSynchronisedTimeoutAction) {
3
+ ECommonsSynchronisedTimeoutAction["PROCEED"] = "proceed";
4
+ ECommonsSynchronisedTimeoutAction["ABORT"] = "abort";
5
+ })(ECommonsSynchronisedTimeoutAction || (ECommonsSynchronisedTimeoutAction = {}));
6
+ //# sourceMappingURL=ecommons-synchronised-timeout-action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecommons-synchronised-timeout-action.mjs","sourceRoot":"","sources":["../../src/enums/ecommons-synchronised-timeout-action.mts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,iCAGX;AAHD,WAAY,iCAAiC;IAC5C,wDAAmB,CAAA;IACnB,oDAAe,CAAA;AAChB,CAAC,EAHW,iCAAiC,KAAjC,iCAAiC,QAG5C"}
@@ -0,0 +1,5 @@
1
+ import { ECommonsInvocation } from '../enums/ecommons-invocation.mjs';
2
+ export declare function commonsAsyncTimeout(ms: number, id?: string): Promise<void>;
3
+ export declare function commonsAsyncAbortTimeout(id: string): void;
4
+ export declare function commonsAsyncInterval(ms: number, approach: ECommonsInvocation, callback: () => Promise<void>, id?: string): void;
5
+ export declare function commonsAsyncAbortInterval(id: string): void;
@@ -0,0 +1,118 @@
1
+ import { commonsBase62GenerateRandomId } from 'tscommons-esm-core';
2
+ import { ECommonsInvocation } from '../enums/ecommons-invocation.mjs';
3
+ const timeouts = new Map();
4
+ // has to any, as node.js uses Timer and Angular uses number
5
+ const intervals = new Map();
6
+ const isInCycle = new Map();
7
+ const idUid = new Map();
8
+ const isAborted = new Map();
9
+ function internalClearTimeout(id) {
10
+ clearTimeout(timeouts.get(id).thread);
11
+ timeouts.delete(id);
12
+ }
13
+ export function commonsAsyncTimeout(ms, id) {
14
+ if (id && timeouts.has(id))
15
+ internalClearTimeout(id);
16
+ return new Promise((resolve, reject) => {
17
+ const thread = setTimeout(() => {
18
+ if (id && timeouts.has(id))
19
+ internalClearTimeout(id);
20
+ resolve();
21
+ }, ms);
22
+ if (id) {
23
+ timeouts.set(id, {
24
+ thread: thread,
25
+ reject: () => {
26
+ reject(new Error('abortTimeout called'));
27
+ }
28
+ });
29
+ }
30
+ });
31
+ }
32
+ export function commonsAsyncAbortTimeout(id) {
33
+ if (timeouts.has(id)) {
34
+ const reject = timeouts.get(id).reject;
35
+ internalClearTimeout(id);
36
+ reject();
37
+ }
38
+ }
39
+ function commonsAsyncClearInterval(id) {
40
+ clearInterval(intervals.get(id)); // eslint-disable-line
41
+ intervals.delete(id);
42
+ const internalId = idUid.get(id);
43
+ if (internalId !== undefined)
44
+ isInCycle.delete(internalId);
45
+ idUid.delete(id);
46
+ }
47
+ export function commonsAsyncInterval(ms, approach, callback, id) {
48
+ if (id && intervals.has(id))
49
+ commonsAsyncClearInterval(id);
50
+ switch (approach) {
51
+ case ECommonsInvocation.FIXED: {
52
+ const thread = setInterval(async () => {
53
+ await callback();
54
+ }, ms);
55
+ if (id)
56
+ intervals.set(id, thread);
57
+ break;
58
+ }
59
+ case ECommonsInvocation.WHEN: {
60
+ const cycle = async () => {
61
+ if (id !== undefined)
62
+ isAborted.set(id, false);
63
+ const isAbortedCallback = () => {
64
+ if (id === undefined)
65
+ return false;
66
+ return isAborted.get(id) || false;
67
+ };
68
+ let first = true;
69
+ while (!isAbortedCallback()) {
70
+ try {
71
+ if (first) {
72
+ first = false;
73
+ continue;
74
+ }
75
+ await callback();
76
+ }
77
+ catch (ex) {
78
+ // can't throw as it would abort the while loop
79
+ console.log(ex);
80
+ }
81
+ finally {
82
+ await commonsAsyncTimeout(ms);
83
+ }
84
+ }
85
+ if (id !== undefined)
86
+ isAborted.delete(id);
87
+ };
88
+ void cycle();
89
+ break;
90
+ }
91
+ case ECommonsInvocation.IF: {
92
+ const internalId = commonsBase62GenerateRandomId();
93
+ if (id)
94
+ idUid.set(id, internalId);
95
+ isInCycle.set(internalId, false);
96
+ commonsAsyncInterval(ms, ECommonsInvocation.FIXED, async () => {
97
+ if (isInCycle.get(internalId))
98
+ return;
99
+ try {
100
+ isInCycle.set(internalId, true);
101
+ await callback();
102
+ }
103
+ finally {
104
+ isInCycle.set(internalId, false);
105
+ }
106
+ }, id);
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ export function commonsAsyncAbortInterval(id) {
112
+ if (isAborted.has(id))
113
+ isAborted.set(id, true);
114
+ if (intervals.has(id)) {
115
+ commonsAsyncClearInterval(id);
116
+ }
117
+ }
118
+ //# sourceMappingURL=commons-async.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-async.mjs","sourceRoot":"","sources":["../../src/helpers/commons-async.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare class CommonsDebouncer<T> {
2
+ private release;
3
+ private last;
4
+ private unique;
5
+ private history;
6
+ constructor(release: number);
7
+ debounce(value: T): T | undefined;
8
+ }
@@ -0,0 +1,25 @@
1
+ export class CommonsDebouncer {
2
+ release;
3
+ last = undefined;
4
+ unique = undefined;
5
+ history = [];
6
+ constructor(release) {
7
+ this.release = release;
8
+ }
9
+ debounce(value) {
10
+ this.last = value;
11
+ if (this.last !== this.unique) {
12
+ this.unique = this.last;
13
+ if (!this.history.includes(this.unique)) {
14
+ this.history.push(this.unique);
15
+ setTimeout(() => {
16
+ const index = this.history.indexOf(this.unique);
17
+ this.history.splice(index, 1);
18
+ }, this.release);
19
+ return this.unique;
20
+ }
21
+ }
22
+ return undefined;
23
+ }
24
+ }
25
+ //# sourceMappingURL=commons-debouncer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-debouncer.mjs","sourceRoot":"","sources":["../../src/helpers/commons-debouncer.mts"],"names":[],"mappings":"AAGA,MAAM,OAAO,gBAAgB;IAMnB;IALD,IAAI,GAAgB,SAAS,CAAC;IAC9B,MAAM,GAAgB,SAAS,CAAC;IAChC,OAAO,GAAoB,EAAE,CAAC;IAEtC,YACS,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IACrB,CAAC;IAEG,QAAQ,CAAC,KAAQ;QACvB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAElB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;YAExB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/B,UAAU,CAAC,GAAS,EAAE;oBACrB,MAAM,KAAK,GAAW,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACxD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC/B,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEjB,OAAO,IAAI,CAAC,MAAM,CAAC;YACpB,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;CACD"}
@@ -0,0 +1,10 @@
1
+ import { Observable } from 'rxjs';
2
+ import { TCommonsFinalValue } from '../types/tcommons-final-value.mjs';
3
+ export declare class CommonsFinalValue<T> {
4
+ private delay;
5
+ private onRelease;
6
+ private timeout;
7
+ constructor(delay: number);
8
+ push(value: T): void;
9
+ releaseObservable(): Observable<TCommonsFinalValue<T>>;
10
+ }
@@ -0,0 +1,21 @@
1
+ import { Subject } from 'rxjs';
2
+ export class CommonsFinalValue {
3
+ delay;
4
+ onRelease = new Subject();
5
+ timeout; // has to be unknown, as Node.js uses Timer and Angular uses number
6
+ constructor(delay) {
7
+ this.delay = delay;
8
+ }
9
+ push(value) {
10
+ if (this.timeout)
11
+ clearTimeout(this.timeout);
12
+ const snapshot = new Date();
13
+ this.timeout = setTimeout(() => {
14
+ this.onRelease.next({ value: value, timestamp: snapshot });
15
+ }, this.delay);
16
+ }
17
+ releaseObservable() {
18
+ return this.onRelease;
19
+ }
20
+ }
21
+ //# sourceMappingURL=commons-final-value.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-final-value.mjs","sourceRoot":"","sources":["../../src/helpers/commons-final-value.mts"],"names":[],"mappings":"AAAA,OAAO,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;AAQ3C,MAAM,OAAO,iBAAiB;IAMnB;IALF,SAAS,GAAmC,IAAI,OAAO,EAAyB,CAAC;IAEjF,OAAO,CAAU,CAAC,mEAAmE;IAE7F,YACU,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IACpB,CAAC;IAEG,IAAI,CAAC,KAAQ;QACnB,IAAI,IAAI,CAAC,OAAO;YAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAS,IAAI,IAAI,EAAE,CAAC;QAElC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,GAAS,EAAE;YACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5D,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;IAEM,iBAAiB;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;CACD"}
@@ -0,0 +1,11 @@
1
+ import { Observable } from 'rxjs';
2
+ export declare class CommonsGrouper<T> {
3
+ private ignoreEmpty;
4
+ private onGroup;
5
+ private interval;
6
+ private group;
7
+ constructor(period: number, ignoreEmpty?: boolean);
8
+ groupObservable(): Observable<T[]>;
9
+ add(value: T): void;
10
+ cancel(): void;
11
+ }
@@ -0,0 +1,26 @@
1
+ import { Subject } from 'rxjs';
2
+ export class CommonsGrouper {
3
+ ignoreEmpty;
4
+ onGroup = new Subject();
5
+ interval; // has to be unknown, as Node.js uses Timer and Angular uses number
6
+ group = [];
7
+ constructor(period, ignoreEmpty = true) {
8
+ this.ignoreEmpty = ignoreEmpty;
9
+ this.interval = setInterval(() => {
10
+ if (this.group.length === 0 && this.ignoreEmpty)
11
+ return;
12
+ this.onGroup.next(this.group);
13
+ this.group = [];
14
+ }, period);
15
+ }
16
+ groupObservable() {
17
+ return this.onGroup;
18
+ }
19
+ add(value) {
20
+ this.group.push(value);
21
+ }
22
+ cancel() {
23
+ clearInterval(this.interval);
24
+ }
25
+ }
26
+ //# sourceMappingURL=commons-grouper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-grouper.mjs","sourceRoot":"","sources":["../../src/helpers/commons-grouper.mts"],"names":[],"mappings":"AAAA,OAAO,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;AAM3C,MAAM,OAAO,cAAc;IAQhB;IAPF,OAAO,GAAiB,IAAI,OAAO,EAAO,CAAC;IAE3C,QAAQ,CAAU,CAAC,mEAAmE;IACtF,KAAK,GAAQ,EAAE,CAAC;IAExB,YACE,MAAc,EACN,cAAuB,IAAI;QAA3B,gBAAW,GAAX,WAAW,CAAgB;QAEpC,IAAI,CAAC,QAAQ,GAAG,WAAW,CACzB,GAAS,EAAE;YACV,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW;gBAAE,OAAO;YAExD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QACjB,CAAC,EACD,MAAM,CACP,CAAC;IACH,CAAC;IAEM,eAAe;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAEM,GAAG,CAAC,KAAQ;QAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAEM,MAAM;QACZ,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACD"}
@@ -0,0 +1 @@
1
+ export declare function commonsPromiseTimeout<T>(promise: () => Promise<T>, timeout: number): Promise<T>;
@@ -0,0 +1,35 @@
1
+ import { commonsBase62GenerateRandomId } from 'tscommons-esm-core';
2
+ import { commonsAsyncAbortTimeout, commonsAsyncTimeout } from './commons-async.mjs';
3
+ export function commonsPromiseTimeout(promise, timeout) {
4
+ return new Promise((resolve, reject) => {
5
+ const timeoutId = `commonsAsyncPromiseTimeout_${commonsBase62GenerateRandomId()}`;
6
+ let completed = false;
7
+ void Promise.all([
8
+ (async () => {
9
+ try {
10
+ const outcome = await promise();
11
+ resolve(outcome);
12
+ }
13
+ catch (e) {
14
+ reject(e);
15
+ }
16
+ finally {
17
+ completed = true;
18
+ commonsAsyncAbortTimeout(timeoutId);
19
+ }
20
+ })(),
21
+ (async () => {
22
+ try {
23
+ await commonsAsyncTimeout(timeout, timeoutId);
24
+ }
25
+ catch (_e) {
26
+ // do nothing
27
+ }
28
+ if (!completed)
29
+ reject(new Error('Timeout'));
30
+ completed = true;
31
+ })()
32
+ ]);
33
+ });
34
+ }
35
+ //# sourceMappingURL=commons-promise.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-promise.mjs","sourceRoot":"","sources":["../../src/helpers/commons-promise.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEpF,MAAM,UAAU,qBAAqB,CACnC,OAAyB,EACzB,OAAe;IAEhB,OAAO,IAAI,OAAO,CAAC,CAAC,OAA4B,EAAE,MAA0B,EAAQ,EAAE;QACrF,MAAM,SAAS,GAAW,8BAA8B,6BAA6B,EAAE,EAAE,CAAC;QAC1F,IAAI,SAAS,GAAY,KAAK,CAAC;QAE/B,KAAK,OAAO,CAAC,GAAG,CAAC;YACf,CAAC,KAAK,IAAmB,EAAE;gBAC1B,IAAI,CAAC;oBACJ,MAAM,OAAO,GAAM,MAAM,OAAO,EAAE,CAAC;oBACnC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACZ,MAAM,CAAC,CAAU,CAAC,CAAC;gBACpB,CAAC;wBAAS,CAAC;oBACV,SAAS,GAAG,IAAI,CAAC;oBACjB,wBAAwB,CAAC,SAAS,CAAC,CAAC;gBACrC,CAAC;YACF,CAAC,CAAC,EAAE;YACJ,CAAC,KAAK,IAAmB,EAAE;gBAC1B,IAAI,CAAC;oBACJ,MAAM,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAC/C,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC;oBACb,aAAa;gBACd,CAAC;gBAED,IAAI,CAAC,SAAS;oBAAE,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC7C,SAAS,GAAG,IAAI,CAAC;YAClB,CAAC,CAAC,EAAE;SACL,CAAC,CAAC;IAEJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare class CommonsSemaphore {
2
+ private flag;
3
+ claim(timeout: number): Promise<void>;
4
+ release(): void;
5
+ }
@@ -0,0 +1,26 @@
1
+ import { commonsAsyncTimeout } from './commons-async.mjs';
2
+ export class CommonsSemaphore {
3
+ flag = false;
4
+ async claim(timeout) {
5
+ return new Promise((resolve, reject) => {
6
+ void (async () => {
7
+ let t = Math.floor(timeout / 50);
8
+ while (this.flag) {
9
+ // wait
10
+ await commonsAsyncTimeout(50);
11
+ t--;
12
+ if (t < 0) {
13
+ reject(new Error('Timeout whilst waiting to claim semaphore'));
14
+ return;
15
+ }
16
+ }
17
+ this.flag = true;
18
+ resolve();
19
+ })();
20
+ });
21
+ }
22
+ release() {
23
+ this.flag = false;
24
+ }
25
+ }
26
+ //# sourceMappingURL=commons-semaphore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-semaphore.mjs","sourceRoot":"","sources":["../../src/helpers/commons-semaphore.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,OAAO,gBAAgB;IACpB,IAAI,GAAY,KAAK,CAAC;IAEvB,KAAK,CAAC,KAAK,CAAC,OAAe;QACjC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAmB,EAAE,MAA0B,EAAE,EAAE;YAC5E,KAAK,CAAC,KAAK,IAAmB,EAAE;gBAC/B,IAAI,CAAC,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;gBAEzC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;oBAClB,OAAO;oBACP,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAC;oBAC9B,CAAC,EAAE,CAAC;oBACJ,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBACX,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;wBAC/D,OAAO;oBACR,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,OAAO,EAAE,CAAC;YACX,CAAC,CAAC,EAAE,CAAC;QACN,CAAC,CAAC,CAAC;IACJ,CAAC;IAEM,OAAO;QACb,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IACnB,CAAC;CACD"}
@@ -0,0 +1,19 @@
1
+ import { commonsPromiseTimeout } from './helpers/commons-promise.mjs';
2
+ import { CommonsSemaphore } from './helpers/commons-semaphore.mjs';
3
+ import { commonsAsyncTimeout, commonsAsyncAbortTimeout, commonsAsyncInterval, commonsAsyncAbortInterval } from './helpers/commons-async.mjs';
4
+ import { CommonsDebouncer } from './helpers/commons-debouncer.mjs';
5
+ import { CommonsGrouper } from './helpers/commons-grouper.mjs';
6
+ import { CommonsFinalValue } from './helpers/commons-final-value.mjs';
7
+ import { CommonsMemoryObservable } from './classes/commons-memory-observable.mjs';
8
+ import { CommonsStateThread } from './classes/commons-state-thread.mjs';
9
+ import { CommonsSynchronised } from './classes/commons-synchronised.mjs';
10
+ import { CommonsSchedule } from './classes/commons-schedule.mjs';
11
+ import { CommonsClaimPool } from './classes/commons-claim-pool.mjs';
12
+ import { ECommonsInvocation } from './enums/ecommons-invocation.mjs';
13
+ import { ECommonsSynchronisedTimeoutAction } from './enums/ecommons-synchronised-timeout-action.mjs';
14
+ import { ECommonsRunState, fromECommonsRunState, toECommonsRunState, isECommonsRunState } from './enums/ecommons-run-state.mjs';
15
+ import { TCommonsFinalValue } from './types/tcommons-final-value.mjs';
16
+ import { TCommonsScheduleTime, isTCommonsScheduleTime } from './types/tcommons-schedule-time.mjs';
17
+ import { TCommonsSchedule, isTCommonsSchedule } from './types/tcommons-schedule.mjs';
18
+ import { ICommonsStateful } from './interfaces/icommons-stateful.mjs';
19
+ export { commonsPromiseTimeout, CommonsSemaphore, commonsAsyncTimeout, commonsAsyncAbortTimeout, commonsAsyncInterval, commonsAsyncAbortInterval, CommonsDebouncer, CommonsGrouper, CommonsFinalValue, CommonsMemoryObservable, CommonsStateThread, CommonsSynchronised, CommonsSchedule, CommonsClaimPool, ECommonsInvocation, ECommonsSynchronisedTimeoutAction, ECommonsRunState, fromECommonsRunState, toECommonsRunState, isECommonsRunState, TCommonsFinalValue, TCommonsScheduleTime, isTCommonsScheduleTime, TCommonsSchedule, isTCommonsSchedule, ICommonsStateful };
package/dist/index.mjs ADDED
@@ -0,0 +1,18 @@
1
+ import { commonsPromiseTimeout } from './helpers/commons-promise.mjs';
2
+ import { CommonsSemaphore } from './helpers/commons-semaphore.mjs';
3
+ import { commonsAsyncTimeout, commonsAsyncAbortTimeout, commonsAsyncInterval, commonsAsyncAbortInterval } from './helpers/commons-async.mjs';
4
+ import { CommonsDebouncer } from './helpers/commons-debouncer.mjs';
5
+ import { CommonsGrouper } from './helpers/commons-grouper.mjs';
6
+ import { CommonsFinalValue } from './helpers/commons-final-value.mjs';
7
+ import { CommonsMemoryObservable } from './classes/commons-memory-observable.mjs';
8
+ import { CommonsStateThread } from './classes/commons-state-thread.mjs';
9
+ import { CommonsSynchronised } from './classes/commons-synchronised.mjs';
10
+ import { CommonsSchedule } from './classes/commons-schedule.mjs';
11
+ import { CommonsClaimPool } from './classes/commons-claim-pool.mjs';
12
+ import { ECommonsInvocation } from './enums/ecommons-invocation.mjs';
13
+ import { ECommonsSynchronisedTimeoutAction } from './enums/ecommons-synchronised-timeout-action.mjs';
14
+ import { ECommonsRunState, fromECommonsRunState, toECommonsRunState, isECommonsRunState } from './enums/ecommons-run-state.mjs';
15
+ import { isTCommonsScheduleTime } from './types/tcommons-schedule-time.mjs';
16
+ import { isTCommonsSchedule } from './types/tcommons-schedule.mjs';
17
+ export { commonsPromiseTimeout, CommonsSemaphore, commonsAsyncTimeout, commonsAsyncAbortTimeout, commonsAsyncInterval, commonsAsyncAbortInterval, CommonsDebouncer, CommonsGrouper, CommonsFinalValue, CommonsMemoryObservable, CommonsStateThread, CommonsSynchronised, CommonsSchedule, CommonsClaimPool, ECommonsInvocation, ECommonsSynchronisedTimeoutAction, ECommonsRunState, fromECommonsRunState, toECommonsRunState, isECommonsRunState, isTCommonsScheduleTime, isTCommonsSchedule };
18
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,iCAAiC,EAAE,MAAM,kDAAkD,CAAC;AACrG,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAwB,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAClG,OAAO,EAAoB,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAErF,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,EACzB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iCAAiC,EACjC,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAGlB,sBAAsB,EAEtB,kBAAkB,EAElB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ECommonsRunState } from '../enums/ecommons-run-state.mjs';
2
+ export interface ICommonsStateful {
3
+ getState(): ECommonsRunState;
4
+ isAborted(): boolean;
5
+ }
@@ -0,0 +1,3 @@
1
+ // This is a true interface similar to Java as opposed to a pseudo-struct interface as per TypeScript
2
+ export {};
3
+ //# sourceMappingURL=icommons-stateful.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icommons-stateful.mjs","sourceRoot":"","sources":["../../src/interfaces/icommons-stateful.mts"],"names":[],"mappings":"AAAA,qGAAqG"}
@@ -0,0 +1,4 @@
1
+ export type TCommonsFinalValue<T> = {
2
+ value: T;
3
+ timestamp: Date;
4
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tcommons-final-value.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcommons-final-value.mjs","sourceRoot":"","sources":["../../src/types/tcommons-final-value.mts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export type TCommonsScheduleTime = {
2
+ year?: number | number[];
3
+ month?: number | number[];
4
+ day?: number | number[];
5
+ dow?: number | number[];
6
+ hour?: number | number[];
7
+ minute?: number | number[];
8
+ second?: number | number[];
9
+ };
10
+ export declare function isTCommonsScheduleTime(test: unknown): test is TCommonsScheduleTime;
@@ -0,0 +1,13 @@
1
+ import { commonsTypeIsObject, commonsTypeHasPropertyNumberOrUndefined, commonsTypeHasPropertyArrayOrUndefined, commonsTypeIsNumberArray, commonsTypeHasPropertyArray } from 'tscommons-esm-core';
2
+ export function isTCommonsScheduleTime(test) {
3
+ if (!commonsTypeIsObject(test))
4
+ return false;
5
+ for (const key of 'year,month,day,dow,hour,minute,second'.split(',')) {
6
+ if (!commonsTypeHasPropertyNumberOrUndefined(test, key) && !commonsTypeHasPropertyArrayOrUndefined(test, key))
7
+ return false;
8
+ if (commonsTypeHasPropertyArray(test, key) && !commonsTypeIsNumberArray(test[key]))
9
+ return false;
10
+ }
11
+ return true;
12
+ }
13
+ //# sourceMappingURL=tcommons-schedule-time.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcommons-schedule-time.mjs","sourceRoot":"","sources":["../../src/types/tcommons-schedule-time.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,uCAAuC,EACvC,sCAAsC,EACtC,wBAAwB,EACxB,2BAA2B,EAC5B,MAAM,oBAAoB,CAAC;AAY5B,MAAM,UAAU,sBAAsB,CAAC,IAAa;IACnD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7C,KAAK,MAAM,GAAG,IAAI,uCAAuC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,uCAAuC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5H,IAAI,2BAA2B,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAClG,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { TCommonsScheduleTime } from './tcommons-schedule-time.mjs';
2
+ export type TCommonsSchedule = {
3
+ at: TCommonsScheduleTime;
4
+ action: string;
5
+ };
6
+ export declare function isTCommonsSchedule(test: unknown): test is TCommonsSchedule;
@@ -0,0 +1,10 @@
1
+ import { commonsTypeHasPropertyT, commonsTypeHasPropertyString } from 'tscommons-esm-core';
2
+ import { isTCommonsScheduleTime } from './tcommons-schedule-time.mjs';
3
+ export function isTCommonsSchedule(test) {
4
+ if (!commonsTypeHasPropertyT(test, 'at', isTCommonsScheduleTime))
5
+ return false;
6
+ if (!commonsTypeHasPropertyString(test, 'action'))
7
+ return false;
8
+ return true;
9
+ }
10
+ //# sourceMappingURL=tcommons-schedule.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcommons-schedule.mjs","sourceRoot":"","sources":["../../src/types/tcommons-schedule.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAE3F,OAAO,EAAwB,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAO5F,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC/C,IAAI,CAAC,uBAAuB,CAAuB,IAAI,EAAE,IAAI,EAAE,sBAAsB,CAAC;QAAE,OAAO,KAAK,CAAC;IAErG,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAEhE,OAAO,IAAI,CAAC;AACb,CAAC"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "tscommons-esm-async",
3
+ "version": "0.0.2",
4
+ "description": "",
5
+ "scripts": {
6
+ "tsc": "./node_modules/typescript/bin/tsc",
7
+ "preprepare": "rm -rf ./dist; php ~/Dev/etim.php src/ && npm run tsc",
8
+ "publish-major": "rm -rf dist; npm run tsc && npx eslint . && npm run preprepare && npm version major && npm install && npm publish && git add . && git commit -m 'publish'",
9
+ "publish-minor": "rm -rf dist; npm run tsc && npx eslint . && npm run preprepare && npm version minor && npm install && npm publish && git add . && git commit -m 'publish'",
10
+ "publish-patch": "rm -rf dist; npm run tsc && npx eslint . && npm run preprepare && npm version patch && npm install && npm publish && git add . && git commit -m 'publish'"
11
+ },
12
+ "main": "dist/index.mjs",
13
+ "types": "dist/index.d.mjs",
14
+ "type": "module",
15
+ "author": "Pete Morris",
16
+ "license": "ISC",
17
+ "devDependencies": {
18
+ "@stylistic/eslint-plugin-ts": "^2.10.1",
19
+ "eslint-plugin-import": "^2.31.0",
20
+ "eslint-plugin-prefer-arrow-functions": "^3.4.1",
21
+ "typescript": "^5.6.3",
22
+ "typescript-eslint": "^8.14.0"
23
+ },
24
+ "files": [
25
+ "dist/**/*"
26
+ ],
27
+ "dependencies": {
28
+ "rxjs": "^7.8.1",
29
+ "tscommons-esm-core": "^0.0.2"
30
+ }
31
+ }