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.
- package/dist/classes/commons-claim-pool.d.mts +14 -0
- package/dist/classes/commons-claim-pool.mjs +106 -0
- package/dist/classes/commons-claim-pool.mjs.map +1 -0
- package/dist/classes/commons-memory-observable.d.mts +7 -0
- package/dist/classes/commons-memory-observable.mjs +16 -0
- package/dist/classes/commons-memory-observable.mjs.map +1 -0
- package/dist/classes/commons-schedule.d.mts +14 -0
- package/dist/classes/commons-schedule.mjs +131 -0
- package/dist/classes/commons-schedule.mjs.map +1 -0
- package/dist/classes/commons-state-thread.d.mts +17 -0
- package/dist/classes/commons-state-thread.mjs +91 -0
- package/dist/classes/commons-state-thread.mjs.map +1 -0
- package/dist/classes/commons-synchronised.d.mts +6 -0
- package/dist/classes/commons-synchronised.mjs +43 -0
- package/dist/classes/commons-synchronised.mjs.map +1 -0
- package/dist/enums/ecommons-invocation.d.mts +5 -0
- package/dist/enums/ecommons-invocation.mjs +10 -0
- package/dist/enums/ecommons-invocation.mjs.map +1 -0
- package/dist/enums/ecommons-run-state.d.mts +11 -0
- package/dist/enums/ecommons-run-state.mjs +52 -0
- package/dist/enums/ecommons-run-state.mjs.map +1 -0
- package/dist/enums/ecommons-synchronised-timeout-action.d.mts +4 -0
- package/dist/enums/ecommons-synchronised-timeout-action.mjs +6 -0
- package/dist/enums/ecommons-synchronised-timeout-action.mjs.map +1 -0
- package/dist/helpers/commons-async.d.mts +5 -0
- package/dist/helpers/commons-async.mjs +118 -0
- package/dist/helpers/commons-async.mjs.map +1 -0
- package/dist/helpers/commons-debouncer.d.mts +8 -0
- package/dist/helpers/commons-debouncer.mjs +25 -0
- package/dist/helpers/commons-debouncer.mjs.map +1 -0
- package/dist/helpers/commons-final-value.d.mts +10 -0
- package/dist/helpers/commons-final-value.mjs +21 -0
- package/dist/helpers/commons-final-value.mjs.map +1 -0
- package/dist/helpers/commons-grouper.d.mts +11 -0
- package/dist/helpers/commons-grouper.mjs +26 -0
- package/dist/helpers/commons-grouper.mjs.map +1 -0
- package/dist/helpers/commons-promise.d.mts +1 -0
- package/dist/helpers/commons-promise.mjs +35 -0
- package/dist/helpers/commons-promise.mjs.map +1 -0
- package/dist/helpers/commons-semaphore.d.mts +5 -0
- package/dist/helpers/commons-semaphore.mjs +26 -0
- package/dist/helpers/commons-semaphore.mjs.map +1 -0
- package/dist/index.d.mts +19 -0
- package/dist/index.mjs +18 -0
- package/dist/index.mjs.map +1 -0
- package/dist/interfaces/icommons-stateful.d.mts +5 -0
- package/dist/interfaces/icommons-stateful.mjs +3 -0
- package/dist/interfaces/icommons-stateful.mjs.map +1 -0
- package/dist/types/tcommons-final-value.d.mts +4 -0
- package/dist/types/tcommons-final-value.mjs +2 -0
- package/dist/types/tcommons-final-value.mjs.map +1 -0
- package/dist/types/tcommons-schedule-time.d.mts +10 -0
- package/dist/types/tcommons-schedule-time.mjs +13 -0
- package/dist/types/tcommons-schedule-time.mjs.map +1 -0
- package/dist/types/tcommons-schedule.d.mts +6 -0
- package/dist/types/tcommons-schedule.mjs +10 -0
- package/dist/types/tcommons-schedule.mjs.map +1 -0
- 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,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,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,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":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AActE,MAAM,QAAQ,GAA0B,IAAI,GAAG,EAAoB,CAAC;AAEpE,4DAA4D;AAC5D,MAAM,SAAS,GAAqB,IAAI,GAAG,EAAe,CAAC;AAE3D,MAAM,SAAS,GAAyB,IAAI,GAAG,EAAmB,CAAC;AACnE,MAAM,KAAK,GAAwB,IAAI,GAAG,EAAkB,CAAC;AAC7D,MAAM,SAAS,GAAyB,IAAI,GAAG,EAAmB,CAAC;AAEnE,SAAS,oBAAoB,CAAC,EAAU;IACvC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAU,EAAE,EAAW;IAC1D,IAAI,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAErD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAmB,EAAE,MAA0B,EAAQ,EAAE;QAC5E,MAAM,MAAM,GAAY,UAAU,CAAC,GAAS,EAAE;YAC7C,IAAI,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,oBAAoB,CAAC,EAAE,CAAC,CAAC;YACrD,OAAO,EAAE,CAAC;QACX,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,EAAE,EAAE,CAAC;YACR,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE;gBACf,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,GAAS,EAAE;oBAClB,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAC1C,CAAC;aACF,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,EAAU;IAClD,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GAAe,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC;QACpD,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,EAAE,CAAC;IACV,CAAC;AACF,CAAC;AAED,SAAS,yBAAyB,CAAC,EAAU;IAC5C,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC,sBAAsB;IACzD,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAErB,MAAM,UAAU,GAAqB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnD,IAAI,UAAU,KAAK,SAAS;QAAE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE3D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,EAAU,EACV,QAA4B,EAC5B,QAA6B,EAC7B,EAAW;IAEZ,IAAI,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAE3D,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAY,WAAW,CAAC,KAAK,IAAmB,EAAE;gBAC7D,MAAM,QAAQ,EAAE,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,IAAI,EAAE;gBAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAElC,MAAM;QACP,CAAC;QACD,KAAK,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAwB,KAAK,IAAmB,EAAE;gBAC5D,IAAI,EAAE,KAAK,SAAS;oBAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAE/C,MAAM,iBAAiB,GAAkB,GAAG,EAAE;oBAC7C,IAAI,EAAE,KAAK,SAAS;wBAAE,OAAO,KAAK,CAAC;oBACnC,OAAO,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;gBACnC,CAAC,CAAC;gBAEF,IAAI,KAAK,GAAY,IAAI,CAAC;gBAC1B,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBACJ,IAAI,KAAK,EAAE,CAAC;4BACX,KAAK,GAAG,KAAK,CAAC;4BACd,SAAS;wBACV,CAAC;wBACD,MAAM,QAAQ,EAAE,CAAC;oBAClB,CAAC;oBAAC,OAAO,EAAE,EAAE,CAAC;wBACb,+CAA+C;wBAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACjB,CAAC;4BAAS,CAAC;wBACV,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAC;oBAC/B,CAAC;gBACF,CAAC;gBAED,IAAI,EAAE,KAAK,SAAS;oBAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC,CAAC;YAEF,KAAK,KAAK,EAAE,CAAC;YAEb,MAAM;QACP,CAAC;QACD,KAAK,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,6BAA6B,EAAE,CAAC;YACnD,IAAI,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAElC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAEjC,oBAAoB,CAClB,EAAE,EACF,kBAAkB,CAAC,KAAK,EACxB,KAAK,IAAmB,EAAE;gBACzB,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;oBAAE,OAAO;gBAEtC,IAAI,CAAC;oBACJ,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBAChC,MAAM,QAAQ,EAAE,CAAC;gBAClB,CAAC;wBAAS,CAAC;oBACV,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBAClC,CAAC;YACF,CAAC,EACD,EAAE,CACH,CAAC;YAEF,MAAM;QACP,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,EAAU;IACnD,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAE/C,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACvB,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;AACF,CAAC"}
|
|
@@ -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,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"}
|
package/dist/index.d.mts
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"icommons-stateful.mjs","sourceRoot":"","sources":["../../src/interfaces/icommons-stateful.mts"],"names":[],"mappings":"AAAA,qGAAqG"}
|
|
@@ -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,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
|
+
}
|