@push.rocks/smarttime 4.0.1
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_bundle/bundle.js +15434 -0
- package/dist_bundle/bundle.js.map +7 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/index.d.ts +8 -0
- package/dist_ts/index.js +9 -0
- package/dist_ts/smarttime.classes.cronjob.d.ts +22 -0
- package/dist_ts/smarttime.classes.cronjob.js +44 -0
- package/dist_ts/smarttime.classes.cronmanager.d.ts +18 -0
- package/dist_ts/smarttime.classes.cronmanager.js +71 -0
- package/dist_ts/smarttime.classes.cronparser.d.ts +7 -0
- package/dist_ts/smarttime.classes.cronparser.js +74 -0
- package/dist_ts/smarttime.classes.extendeddate.d.ts +42 -0
- package/dist_ts/smarttime.classes.extendeddate.js +114 -0
- package/dist_ts/smarttime.classes.hrtmeasurement.d.ts +22 -0
- package/dist_ts/smarttime.classes.hrtmeasurement.js +43 -0
- package/dist_ts/smarttime.classes.interval.d.ts +12 -0
- package/dist_ts/smarttime.classes.interval.js +34 -0
- package/dist_ts/smarttime.classes.timer.d.ts +38 -0
- package/dist_ts/smarttime.classes.timer.js +54 -0
- package/dist_ts/smarttime.classes.timestamp.d.ts +51 -0
- package/dist_ts/smarttime.classes.timestamp.js +81 -0
- package/dist_ts/smarttime.plugins.d.ts +8 -0
- package/dist_ts/smarttime.plugins.js +13 -0
- package/dist_ts/smarttime.units.d.ts +18 -0
- package/dist_ts/smarttime.units.js +50 -0
- package/license +21 -0
- package/npmextra.json +17 -0
- package/package.json +48 -0
- package/readme.md +63 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/index.ts +8 -0
- package/ts/smarttime.classes.cronjob.ts +58 -0
- package/ts/smarttime.classes.cronmanager.ts +85 -0
- package/ts/smarttime.classes.cronparser.ts +88 -0
- package/ts/smarttime.classes.extendeddate.ts +151 -0
- package/ts/smarttime.classes.hrtmeasurement.ts +43 -0
- package/ts/smarttime.classes.interval.ts +43 -0
- package/ts/smarttime.classes.timer.ts +86 -0
- package/ts/smarttime.classes.timestamp.ts +100 -0
- package/ts/smarttime.plugins.ts +16 -0
- package/ts/smarttime.units.ts +62 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autocreated commitinfo by @pushrocks/commitinfo
|
|
3
|
+
*/
|
|
4
|
+
export const commitinfo = {
|
|
5
|
+
name: '@pushrocks/smarttime',
|
|
6
|
+
version: '4.0.1',
|
|
7
|
+
description: 'handle time in smart ways'
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDJCQUEyQjtDQUN6QyxDQUFBIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './smarttime.classes.cronmanager.js';
|
|
2
|
+
export * from './smarttime.classes.cronjob.js';
|
|
3
|
+
export * from './smarttime.classes.extendeddate.js';
|
|
4
|
+
export * from './smarttime.classes.hrtmeasurement.js';
|
|
5
|
+
export * from './smarttime.classes.interval.js';
|
|
6
|
+
export * from './smarttime.classes.timer.js';
|
|
7
|
+
export * from './smarttime.classes.timestamp.js';
|
|
8
|
+
export * from './smarttime.units.js';
|
package/dist_ts/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './smarttime.classes.cronmanager.js';
|
|
2
|
+
export * from './smarttime.classes.cronjob.js';
|
|
3
|
+
export * from './smarttime.classes.extendeddate.js';
|
|
4
|
+
export * from './smarttime.classes.hrtmeasurement.js';
|
|
5
|
+
export * from './smarttime.classes.interval.js';
|
|
6
|
+
export * from './smarttime.classes.timer.js';
|
|
7
|
+
export * from './smarttime.classes.timestamp.js';
|
|
8
|
+
export * from './smarttime.units.js';
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsc0JBQXNCLENBQUMifQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as plugins from './smarttime.plugins.js';
|
|
2
|
+
import { CronManager } from './smarttime.classes.cronmanager.js';
|
|
3
|
+
export type TJobFunction = ((triggerTimeArg?: number) => void) | ((triggerTimeArg?: number) => Promise<any>);
|
|
4
|
+
export declare class CronJob {
|
|
5
|
+
cronParser: plugins.croner;
|
|
6
|
+
status: 'started' | 'stopped' | 'initial';
|
|
7
|
+
cronExpression: string;
|
|
8
|
+
jobFunction: TJobFunction;
|
|
9
|
+
private nextExecutionUnix;
|
|
10
|
+
constructor(cronManager: CronManager, cronExpressionArg: string, jobFunction: TJobFunction);
|
|
11
|
+
/**
|
|
12
|
+
* checks wether the cronjob needs to be executed
|
|
13
|
+
*/
|
|
14
|
+
checkExecution(): number;
|
|
15
|
+
getNextExecutionTime(): number;
|
|
16
|
+
/**
|
|
17
|
+
* gets the time to next execution
|
|
18
|
+
*/
|
|
19
|
+
getTimeToNextExecution(): number;
|
|
20
|
+
start(): void;
|
|
21
|
+
stop(): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as plugins from './smarttime.plugins.js';
|
|
2
|
+
import './smarttime.classes.cronmanager.js';
|
|
3
|
+
import './smarttime.classes.cronparser.js';
|
|
4
|
+
export class CronJob {
|
|
5
|
+
constructor(cronManager, cronExpressionArg, jobFunction) {
|
|
6
|
+
this.status = 'initial';
|
|
7
|
+
this.nextExecutionUnix = 0;
|
|
8
|
+
this.cronExpression = cronExpressionArg;
|
|
9
|
+
this.jobFunction = jobFunction;
|
|
10
|
+
this.cronParser = plugins.croner(cronExpressionArg);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* checks wether the cronjob needs to be executed
|
|
14
|
+
*/
|
|
15
|
+
checkExecution() {
|
|
16
|
+
if (this.nextExecutionUnix === 0) {
|
|
17
|
+
this.getNextExecutionTime();
|
|
18
|
+
}
|
|
19
|
+
if (Date.now() > this.nextExecutionUnix) {
|
|
20
|
+
const maybePromise = this.jobFunction(this.nextExecutionUnix);
|
|
21
|
+
if (maybePromise instanceof Promise) {
|
|
22
|
+
maybePromise.catch((e) => console.log(e));
|
|
23
|
+
}
|
|
24
|
+
this.nextExecutionUnix = this.getNextExecutionTime();
|
|
25
|
+
}
|
|
26
|
+
return this.nextExecutionUnix;
|
|
27
|
+
}
|
|
28
|
+
getNextExecutionTime() {
|
|
29
|
+
return (this.nextExecutionUnix = Date.now() + this.getTimeToNextExecution());
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* gets the time to next execution
|
|
33
|
+
*/
|
|
34
|
+
getTimeToNextExecution() {
|
|
35
|
+
return this.cronParser.msToNext();
|
|
36
|
+
}
|
|
37
|
+
start() {
|
|
38
|
+
this.status = 'started';
|
|
39
|
+
}
|
|
40
|
+
stop() {
|
|
41
|
+
this.status = 'stopped';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUE0QixvQ0FBb0MsQ0FBQztBQUVqRSxPQUEyQixtQ0FBbUMsQ0FBQztBQU0vRCxNQUFNLE9BQU8sT0FBTztJQU9sQixZQUFZLFdBQXdCLEVBQUUsaUJBQXlCLEVBQUUsV0FBeUI7UUFMbkYsV0FBTSxHQUFzQyxTQUFTLENBQUM7UUFHckQsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBR3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYztRQUNuQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDN0I7UUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDdkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM5RCxJQUFJLFlBQVksWUFBWSxPQUFPLEVBQUU7Z0JBQ25DLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzQztZQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUN0RDtRQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFTSxvQkFBb0I7UUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVNLElBQUk7UUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMxQixDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as plugins from './smarttime.plugins.js';
|
|
2
|
+
import { CronJob, TJobFunction } from './smarttime.classes.cronjob.js';
|
|
3
|
+
export declare class CronManager {
|
|
4
|
+
executionTimeout: plugins.smartdelay.Timeout<void>;
|
|
5
|
+
status: 'started' | 'stopped';
|
|
6
|
+
cronjobs: plugins.lik.ObjectMap<CronJob>;
|
|
7
|
+
constructor();
|
|
8
|
+
addCronjob(cronIdentifierArg: string, cronFunctionArg: TJobFunction): CronJob;
|
|
9
|
+
removeCronjob(cronjobArg: CronJob): void;
|
|
10
|
+
/**
|
|
11
|
+
* starts the cronjob
|
|
12
|
+
*/
|
|
13
|
+
start(): void;
|
|
14
|
+
/**
|
|
15
|
+
* stops all cronjobs
|
|
16
|
+
*/
|
|
17
|
+
stop(): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as plugins from './smarttime.plugins.js';
|
|
2
|
+
import { CronJob } from './smarttime.classes.cronjob.js';
|
|
3
|
+
import { getMilliSecondsAsHumanReadableString } from './smarttime.units.js';
|
|
4
|
+
export class CronManager {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.status = 'stopped';
|
|
7
|
+
this.cronjobs = new plugins.lik.ObjectMap();
|
|
8
|
+
}
|
|
9
|
+
addCronjob(cronIdentifierArg, cronFunctionArg) {
|
|
10
|
+
const newCronJob = new CronJob(this, cronIdentifierArg, cronFunctionArg);
|
|
11
|
+
this.cronjobs.add(newCronJob);
|
|
12
|
+
if (this.status === 'started') {
|
|
13
|
+
newCronJob.start();
|
|
14
|
+
}
|
|
15
|
+
return newCronJob;
|
|
16
|
+
}
|
|
17
|
+
removeCronjob(cronjobArg) {
|
|
18
|
+
cronjobArg.stop();
|
|
19
|
+
this.cronjobs.remove(cronjobArg);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* starts the cronjob
|
|
23
|
+
*/
|
|
24
|
+
start() {
|
|
25
|
+
if (this.status !== 'started') {
|
|
26
|
+
this.status = 'started';
|
|
27
|
+
for (const cronJob of this.cronjobs.getArray()) {
|
|
28
|
+
cronJob.start();
|
|
29
|
+
}
|
|
30
|
+
const runCronCycle = async () => {
|
|
31
|
+
this.executionTimeout = new plugins.smartdelay.Timeout(0);
|
|
32
|
+
do {
|
|
33
|
+
let nextRunningCronjob;
|
|
34
|
+
for (const cronJob of this.cronjobs.getArray()) {
|
|
35
|
+
cronJob.checkExecution();
|
|
36
|
+
if (!nextRunningCronjob ||
|
|
37
|
+
cronJob.getTimeToNextExecution() < nextRunningCronjob.getTimeToNextExecution()) {
|
|
38
|
+
nextRunningCronjob = cronJob;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (nextRunningCronjob) {
|
|
42
|
+
this.executionTimeout = new plugins.smartdelay.Timeout(nextRunningCronjob.getTimeToNextExecution());
|
|
43
|
+
console.log(`Next CronJob scheduled in ${getMilliSecondsAsHumanReadableString(this.executionTimeout.getTimeLeft())}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.executionTimeout = new plugins.smartdelay.Timeout(1000);
|
|
47
|
+
console.log('no cronjobs specified! Checking again in 1 second');
|
|
48
|
+
}
|
|
49
|
+
await this.executionTimeout.promise;
|
|
50
|
+
} while (this.status === 'started');
|
|
51
|
+
};
|
|
52
|
+
runCronCycle();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* stops all cronjobs
|
|
57
|
+
*/
|
|
58
|
+
stop() {
|
|
59
|
+
if (this.status === 'started') {
|
|
60
|
+
this.status = 'stopped';
|
|
61
|
+
this.executionTimeout.cancel();
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log(`You tried to stop a CronManager that was not actually started.`);
|
|
65
|
+
}
|
|
66
|
+
for (const cron of this.cronjobs.getArray()) {
|
|
67
|
+
cron.stop();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHRpbWUuY2xhc3Nlcy5jcm9ubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFNUUsTUFBTSxPQUFPLFdBQVc7SUFNdEI7UUFITyxXQUFNLEdBQTBCLFNBQVMsQ0FBQztRQUMxQyxhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBVyxDQUFDO0lBRXhDLENBQUM7SUFFVCxVQUFVLENBQUMsaUJBQXlCLEVBQUUsZUFBNkI7UUFDeEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDN0IsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3BCO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxVQUFtQjtRQUN0QyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDeEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUM5QyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDakI7WUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELEdBQUc7b0JBQ0QsSUFBSSxrQkFBMkIsQ0FBQztvQkFDaEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFO3dCQUM5QyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3pCLElBQ0UsQ0FBQyxrQkFBa0I7NEJBQ25CLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLGtCQUFrQixDQUFDLHNCQUFzQixFQUFFLEVBQzlFOzRCQUNBLGtCQUFrQixHQUFHLE9BQU8sQ0FBQzt5QkFDOUI7cUJBQ0Y7b0JBQ0QsSUFBSSxrQkFBa0IsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQ3BELGtCQUFrQixDQUFDLHNCQUFzQixFQUFFLENBQzVDLENBQUM7d0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCw2QkFBNkIsb0NBQW9DLENBQy9ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FDcEMsRUFBRSxDQUNKLENBQUM7cUJBQ0g7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzdELE9BQU8sQ0FBQyxHQUFHLENBQUMsbURBQW1ELENBQUMsQ0FBQztxQkFDbEU7b0JBRUQsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2lCQUNyQyxRQUFRLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3RDLENBQUMsQ0FBQztZQUNGLFlBQVksRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksSUFBSTtRQUNULElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2hDO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7U0FDL0U7UUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import './smarttime.plugins.js';
|
|
2
|
+
export class CronParser {
|
|
3
|
+
get cronArray() {
|
|
4
|
+
return this.cronExpression.split(' ');
|
|
5
|
+
}
|
|
6
|
+
constructor(cronExpressionArg) {
|
|
7
|
+
this.cronExpression = cronExpressionArg;
|
|
8
|
+
if (this.cronArray.length < 6) {
|
|
9
|
+
throw new Error('CronParser needs second level accuracy');
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
getNextPartMatch(cronPart, startValue, moduloArg) {
|
|
13
|
+
if (cronPart === '*') {
|
|
14
|
+
return startValue;
|
|
15
|
+
}
|
|
16
|
+
if (cronPart.includes('/')) {
|
|
17
|
+
const every = parseInt(cronPart.split('/')[1], 10);
|
|
18
|
+
const findEvenMatch = (recursionStartArg) => {
|
|
19
|
+
if (recursionStartArg % every === 0) {
|
|
20
|
+
return recursionStartArg;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return findEvenMatch(recursionStartArg + 1);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
return findEvenMatch(startValue);
|
|
27
|
+
}
|
|
28
|
+
if (parseInt(cronPart, 10) || cronPart === '0') {
|
|
29
|
+
const match = parseInt(cronPart, 10);
|
|
30
|
+
return match;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
msToNext() {
|
|
34
|
+
const cronArray = this.cronArray;
|
|
35
|
+
const secondExpression = cronArray[0];
|
|
36
|
+
const minuteExpression = cronArray[1];
|
|
37
|
+
const hourExpression = cronArray[2];
|
|
38
|
+
const dayExpression = cronArray[3];
|
|
39
|
+
const monthExpression = cronArray[4];
|
|
40
|
+
const yearExpression = cronArray[5];
|
|
41
|
+
let currentDate = new Date();
|
|
42
|
+
let currentSecond = currentDate.getSeconds() + 1;
|
|
43
|
+
let currentMinute = currentDate.getMinutes();
|
|
44
|
+
let currentHour = currentDate.getHours();
|
|
45
|
+
let currentDay = currentDate.getDate();
|
|
46
|
+
let currentMonth = currentDate.getMonth();
|
|
47
|
+
let currentYear = currentDate.getFullYear();
|
|
48
|
+
const targetSecond = this.getNextPartMatch(secondExpression, currentSecond, 59);
|
|
49
|
+
if (targetSecond < currentSecond) {
|
|
50
|
+
currentMinute = (currentMinute + 1) % 59;
|
|
51
|
+
}
|
|
52
|
+
const targetMinute = this.getNextPartMatch(minuteExpression, currentMinute, 59);
|
|
53
|
+
if (targetMinute < currentMinute) {
|
|
54
|
+
currentHour = (currentHour + 1) % 23;
|
|
55
|
+
}
|
|
56
|
+
const targetHour = this.getNextPartMatch(hourExpression, currentHour, 23);
|
|
57
|
+
if (targetHour < currentHour) {
|
|
58
|
+
currentDay = (currentDay + 1) % 30;
|
|
59
|
+
}
|
|
60
|
+
const targetDay = currentDay;
|
|
61
|
+
if (targetDay < currentDay) {
|
|
62
|
+
currentMonth = (currentMonth + 1) % 11;
|
|
63
|
+
}
|
|
64
|
+
const targetMonth = currentMonth;
|
|
65
|
+
if (targetMonth < currentMonth) {
|
|
66
|
+
currentYear = currentYear + 1;
|
|
67
|
+
}
|
|
68
|
+
const targetYear = currentYear;
|
|
69
|
+
const targetDate = new Date(targetYear, targetMonth, targetDay, targetHour, targetMinute, targetSecond);
|
|
70
|
+
const targetTime = targetDate.getTime();
|
|
71
|
+
return targetTime - Date.now();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0aW1lLmNsYXNzZXMuY3JvbnBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBeUIsd0JBQXdCLENBQUM7QUFFbEQsTUFBTSxPQUFPLFVBQVU7SUFFckIsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELFlBQVksaUJBQXlCO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsVUFBa0IsRUFBRSxTQUFpQjtRQUM5RSxJQUFJLFFBQVEsS0FBSyxHQUFHLEVBQUU7WUFDcEIsT0FBTyxVQUFVLENBQUM7U0FDbkI7UUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxpQkFBeUIsRUFBVSxFQUFFO2dCQUMxRCxJQUFJLGlCQUFpQixHQUFHLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQ25DLE9BQU8saUJBQWlCLENBQUM7aUJBQzFCO3FCQUFNO29CQUNMLE9BQU8sYUFBYSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUM3QztZQUNILENBQUMsQ0FBQztZQUNGLE9BQU8sYUFBYSxDQUFDLFVBQVUs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
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as units from './smarttime.units.js';
|
|
2
|
+
export type TAvailableZone = 'Europe/Berlin';
|
|
3
|
+
export interface IDateUnits {
|
|
4
|
+
year: number;
|
|
5
|
+
yearString: string;
|
|
6
|
+
month: number;
|
|
7
|
+
monthString: string;
|
|
8
|
+
monthName: string;
|
|
9
|
+
day: number;
|
|
10
|
+
dayString: string;
|
|
11
|
+
dayOfTheWeek: number;
|
|
12
|
+
dayOfTheWeekName: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class ExtendedDate extends Date {
|
|
15
|
+
static fromMillis(milliSeconds: number): ExtendedDate;
|
|
16
|
+
static fromDate(dateArg: Date): ExtendedDate;
|
|
17
|
+
static fromEuropeanDate(europeanDate: string): ExtendedDate;
|
|
18
|
+
/**
|
|
19
|
+
* creates an Extended date from a hypedDate like "2018-03-28"
|
|
20
|
+
* @param dateString
|
|
21
|
+
*/
|
|
22
|
+
static fromHyphedDate(dateString: string): ExtendedDate;
|
|
23
|
+
/**
|
|
24
|
+
* Same as .fromEuropeanDate(), but accepts additional timeArg and zoneArg
|
|
25
|
+
*/
|
|
26
|
+
static fromEuropeanDateAndTime(europeanDateArg: string, timeArg?: string, zoneArg?: TAvailableZone): ExtendedDate;
|
|
27
|
+
timezone: TAvailableZone;
|
|
28
|
+
constructor(unixMilli?: number);
|
|
29
|
+
exportToEuropeanDate(): string;
|
|
30
|
+
exportToHyphedSortableDate(): string;
|
|
31
|
+
/**
|
|
32
|
+
* exports units
|
|
33
|
+
*/
|
|
34
|
+
exportToUnits(): IDateUnits;
|
|
35
|
+
format(formatArg: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* boolean checks
|
|
38
|
+
*/
|
|
39
|
+
isToday(): boolean;
|
|
40
|
+
lessTimePassedToNow(unitArgs: units.IUnitCombinationArg): boolean;
|
|
41
|
+
moreTimePassedToNow(unitArgs: units.IUnitCombinationArg): boolean;
|
|
42
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import * as plugins from './smarttime.plugins.js';
|
|
2
|
+
import * as units from './smarttime.units.js';
|
|
3
|
+
export class ExtendedDate extends Date {
|
|
4
|
+
// STATIC factories
|
|
5
|
+
static fromMillis(milliSeconds) {
|
|
6
|
+
return new ExtendedDate(milliSeconds);
|
|
7
|
+
}
|
|
8
|
+
static fromDate(dateArg) {
|
|
9
|
+
return new ExtendedDate(dateArg.getTime());
|
|
10
|
+
}
|
|
11
|
+
static fromEuropeanDate(europeanDate) {
|
|
12
|
+
const dateArray = /(.*)\.(.*)\.(.*)/.exec(europeanDate);
|
|
13
|
+
const date = new Date(parseFloat(dateArray[3]), // year
|
|
14
|
+
parseFloat(dateArray[2]) - 1, // month
|
|
15
|
+
parseFloat(dateArray[1]) // day
|
|
16
|
+
);
|
|
17
|
+
const unixMilli = date.getTime();
|
|
18
|
+
return new ExtendedDate(unixMilli);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* creates an Extended date from a hypedDate like "2018-03-28"
|
|
22
|
+
* @param dateString
|
|
23
|
+
*/
|
|
24
|
+
static fromHyphedDate(dateString) {
|
|
25
|
+
// guards
|
|
26
|
+
// implementation
|
|
27
|
+
const dateMillis = new Date(dateString).getTime();
|
|
28
|
+
return new ExtendedDate(dateMillis);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Same as .fromEuropeanDate(), but accepts additional timeArg and zoneArg
|
|
32
|
+
*/
|
|
33
|
+
static fromEuropeanDateAndTime(europeanDateArg, timeArg = '12:00:00', zoneArg = 'Europe/Berlin') {
|
|
34
|
+
// guards
|
|
35
|
+
// implementation
|
|
36
|
+
const dateArray = /(.*)\.(.*)\.(.*)/.exec(europeanDateArg);
|
|
37
|
+
const sliceDate = (dateString) => {
|
|
38
|
+
return `0${dateString}`.slice(-2);
|
|
39
|
+
};
|
|
40
|
+
const dateTimeString = `${dateArray[3]}-${sliceDate(dateArray[2])}-${sliceDate(dateArray[1])}T${timeArg}`;
|
|
41
|
+
const date = plugins.dayjs(dateTimeString);
|
|
42
|
+
const unixMilli = date.toDate().getTime();
|
|
43
|
+
return new ExtendedDate(unixMilli);
|
|
44
|
+
}
|
|
45
|
+
constructor(unixMilli = Date.now()) {
|
|
46
|
+
super(unixMilli);
|
|
47
|
+
}
|
|
48
|
+
//
|
|
49
|
+
exportToEuropeanDate() {
|
|
50
|
+
const units = this.exportToUnits();
|
|
51
|
+
return `${units.dayString}.${units.monthString}.${units.yearString}`;
|
|
52
|
+
}
|
|
53
|
+
exportToHyphedSortableDate() {
|
|
54
|
+
const units = this.exportToUnits();
|
|
55
|
+
return `${units.yearString}-${units.monthString}-${units.dayString}`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* exports units
|
|
59
|
+
*/
|
|
60
|
+
exportToUnits() {
|
|
61
|
+
const monthsArray = [
|
|
62
|
+
'January',
|
|
63
|
+
'February',
|
|
64
|
+
'March',
|
|
65
|
+
'April',
|
|
66
|
+
'May',
|
|
67
|
+
'June',
|
|
68
|
+
'July',
|
|
69
|
+
'August',
|
|
70
|
+
'September',
|
|
71
|
+
'October',
|
|
72
|
+
'November',
|
|
73
|
+
'December',
|
|
74
|
+
];
|
|
75
|
+
const daysArray = [
|
|
76
|
+
'Monday',
|
|
77
|
+
'Tuesday',
|
|
78
|
+
'Wednesday',
|
|
79
|
+
'Thursday',
|
|
80
|
+
'Friday',
|
|
81
|
+
'Saturday',
|
|
82
|
+
'Sunday',
|
|
83
|
+
];
|
|
84
|
+
return {
|
|
85
|
+
year: this.getFullYear(),
|
|
86
|
+
yearString: `${this.getFullYear()}`,
|
|
87
|
+
month: this.getMonth() + 1,
|
|
88
|
+
monthString: ('0' + (this.getMonth() + 1)).slice(-2),
|
|
89
|
+
monthName: monthsArray[this.getMonth()],
|
|
90
|
+
day: this.getDate(),
|
|
91
|
+
dayString: ('0' + this.getDate()).slice(-2),
|
|
92
|
+
dayOfTheWeek: this.getDay(),
|
|
93
|
+
dayOfTheWeekName: daysArray[this.getDay()],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
format(formatArg) {
|
|
97
|
+
return plugins.dayjs(this.getTime()).format(formatArg);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* boolean checks
|
|
101
|
+
*/
|
|
102
|
+
isToday() {
|
|
103
|
+
return plugins.dayjs(this.getTime()).isToday();
|
|
104
|
+
}
|
|
105
|
+
lessTimePassedToNow(unitArgs) {
|
|
106
|
+
const maxPassedUnixTime = units.getMilliSecondsFromUnits(unitArgs);
|
|
107
|
+
const actualPassedUnixTime = Date.now() - this.getTime();
|
|
108
|
+
return actualPassedUnixTime < maxPassedUnixTime;
|
|
109
|
+
}
|
|
110
|
+
moreTimePassedToNow(unitArgs) {
|
|
111
|
+
return !this.lessTimePassedToNow(unitArgs);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0aW1lLmNsYXNzZXMuZXh0ZW5kZWRkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnR0aW1lLmNsYXNzZXMuZXh0ZW5kZWRkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEtBQUssTUFBTSxzQkFBc0IsQ0FBQztBQWdCOUMsTUFBTSxPQUFPLFlBQWEsU0FBUSxJQUFJO0lBQ3BDLG1CQUFtQjtJQUNaLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBb0I7UUFDM0MsT0FBTyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFhO1FBQ2xDLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFvQjtRQUNqRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQ25CLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPO1FBQ2pDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUTtRQUN0QyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUNoQyxDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBa0I7UUFDN0MsU0FBUztRQUNU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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* easy high resolution time measurement
|
|
3
|
+
*/
|
|
4
|
+
export declare class HrtMeasurement {
|
|
5
|
+
nanoSeconds: number;
|
|
6
|
+
milliSeconds: number;
|
|
7
|
+
private _milliStart;
|
|
8
|
+
private _milliDiff;
|
|
9
|
+
private _started;
|
|
10
|
+
/**
|
|
11
|
+
* start the measurement
|
|
12
|
+
*/
|
|
13
|
+
start(): void;
|
|
14
|
+
/**
|
|
15
|
+
* stop the measurement
|
|
16
|
+
*/
|
|
17
|
+
stop(): this;
|
|
18
|
+
/**
|
|
19
|
+
* reset the measurement
|
|
20
|
+
*/
|
|
21
|
+
reset(): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* easy high resolution time measurement
|
|
3
|
+
*/
|
|
4
|
+
export class HrtMeasurement {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.nanoSeconds = null;
|
|
7
|
+
this.milliSeconds = null;
|
|
8
|
+
this._milliStart = null;
|
|
9
|
+
this._milliDiff = null;
|
|
10
|
+
this._started = false;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* start the measurement
|
|
14
|
+
*/
|
|
15
|
+
start() {
|
|
16
|
+
this._started = true;
|
|
17
|
+
this._milliStart = Date.now();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* stop the measurement
|
|
21
|
+
*/
|
|
22
|
+
stop() {
|
|
23
|
+
if (this._started === false) {
|
|
24
|
+
console.log("Hasn't started yet");
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
this._milliDiff = Date.now() - this._milliStart;
|
|
28
|
+
this.nanoSeconds = this._milliDiff * 1000;
|
|
29
|
+
this.milliSeconds = this._milliDiff;
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* reset the measurement
|
|
34
|
+
*/
|
|
35
|
+
reset() {
|
|
36
|
+
this.nanoSeconds = null;
|
|
37
|
+
this.milliSeconds = null;
|
|
38
|
+
this._milliStart = null;
|
|
39
|
+
this._milliDiff = null;
|
|
40
|
+
this._started = false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0aW1lLmNsYXNzZXMuaHJ0bWVhc3VyZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHRpbWUuY2xhc3Nlcy5ocnRtZWFzdXJlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBQ1MsZ0JBQVcsR0FBVyxJQUFJLENBQUM7UUFDM0IsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFDM0IsZ0JBQVcsR0FBVyxJQUFJLENBQUM7UUFDM0IsZUFBVSxHQUFXLElBQUksQ0FBQztRQUMxQixhQUFRLEdBQVksS0FBSyxDQUFDO0lBa0NwQyxDQUFDO0lBaENDOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDVCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNsQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class Interval {
|
|
2
|
+
status: 'started' | 'stopped' | 'initial';
|
|
3
|
+
private statusAuthorization;
|
|
4
|
+
intervalMilliseconds: number;
|
|
5
|
+
nextIntervalMillisenconds: number;
|
|
6
|
+
intervalJobs: Array<() => any>;
|
|
7
|
+
constructor(intervalMillisencondsArg: number);
|
|
8
|
+
start(): void;
|
|
9
|
+
stop(): void;
|
|
10
|
+
addIntervalJob(funcArg: () => any): void;
|
|
11
|
+
private executeIntervalJobs;
|
|
12
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as plugins from './smarttime.plugins.js';
|
|
2
|
+
export class Interval {
|
|
3
|
+
constructor(intervalMillisencondsArg) {
|
|
4
|
+
this.status = 'initial';
|
|
5
|
+
this.statusAuthorization = null;
|
|
6
|
+
this.intervalJobs = [];
|
|
7
|
+
this.intervalMilliseconds = intervalMillisencondsArg;
|
|
8
|
+
}
|
|
9
|
+
start() {
|
|
10
|
+
this.status = 'started';
|
|
11
|
+
const statusAuth = new Date();
|
|
12
|
+
this.statusAuthorization = statusAuth;
|
|
13
|
+
const runInterval = async () => {
|
|
14
|
+
while (this.status === 'started' && this.statusAuthorization === statusAuth) {
|
|
15
|
+
await plugins.smartdelay.delayFor(this.intervalMilliseconds);
|
|
16
|
+
this.executeIntervalJobs();
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
runInterval();
|
|
20
|
+
}
|
|
21
|
+
stop() {
|
|
22
|
+
this.status = 'stopped';
|
|
23
|
+
this.statusAuthorization = null;
|
|
24
|
+
}
|
|
25
|
+
addIntervalJob(funcArg) {
|
|
26
|
+
this.intervalJobs.push(funcArg);
|
|
27
|
+
}
|
|
28
|
+
executeIntervalJobs() {
|
|
29
|
+
for (const funcArg of this.intervalJobs) {
|
|
30
|
+
funcArg();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0aW1lLmNsYXNzZXMuaW50ZXJ2YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHRpbWUuY2xhc3Nlcy5pbnRlcnZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHdCQUF3QixDQUFDO0FBRWxELE1BQU0sT0FBTyxRQUFRO0lBU25CLFlBQVksd0JBQWdDO1FBUnJDLFdBQU0sR0FBc0MsU0FBUyxDQUFDO1FBQ3JELHdCQUFtQixHQUFRLElBQUksQ0FBQztRQU1qQyxpQkFBWSxHQUFxQixFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDO0lBQ3ZELENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLFVBQVUsRUFBRTtnQkFDM0UsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUM7UUFDRixXQUFXLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUVNLGNBQWMsQ0FBQyxPQUFrQjtRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN2QyxPQUFPLEVBQUUsQ0FBQztTQUNYO0lBQ0gsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { TimeStamp } from './smarttime.classes.timestamp.js';
|
|
2
|
+
export type TimerState = 'initiated' | 'started' | 'paused' | 'completed';
|
|
3
|
+
export declare class Timer {
|
|
4
|
+
/**
|
|
5
|
+
* the original amount of milliseconds for this Timer
|
|
6
|
+
*/
|
|
7
|
+
timeInMilliseconds: number;
|
|
8
|
+
/**
|
|
9
|
+
* the state of the timer
|
|
10
|
+
*/
|
|
11
|
+
state: TimerState;
|
|
12
|
+
/**
|
|
13
|
+
* completed Promise
|
|
14
|
+
*/
|
|
15
|
+
completed: Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* a reference to when the Timeout started
|
|
18
|
+
*/
|
|
19
|
+
startedAt: TimeStamp;
|
|
20
|
+
/**
|
|
21
|
+
* a reference to when a Timer has been potentially paused
|
|
22
|
+
*/
|
|
23
|
+
pausedAt: TimeStamp;
|
|
24
|
+
get timeLeft(): number;
|
|
25
|
+
/**
|
|
26
|
+
* the current timeout the needs to be canceled when this Timer is stopped
|
|
27
|
+
*/
|
|
28
|
+
private currentTimeout;
|
|
29
|
+
private completedDeferred;
|
|
30
|
+
constructor(timeInMillisecondsArg: number);
|
|
31
|
+
/**
|
|
32
|
+
* starts the timer
|
|
33
|
+
*/
|
|
34
|
+
start(): void;
|
|
35
|
+
pause(): void;
|
|
36
|
+
resume(): void;
|
|
37
|
+
reset(): void;
|
|
38
|
+
}
|