@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.
Files changed (42) hide show
  1. package/dist_bundle/bundle.js +15434 -0
  2. package/dist_bundle/bundle.js.map +7 -0
  3. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  4. package/dist_ts/00_commitinfo_data.js +9 -0
  5. package/dist_ts/index.d.ts +8 -0
  6. package/dist_ts/index.js +9 -0
  7. package/dist_ts/smarttime.classes.cronjob.d.ts +22 -0
  8. package/dist_ts/smarttime.classes.cronjob.js +44 -0
  9. package/dist_ts/smarttime.classes.cronmanager.d.ts +18 -0
  10. package/dist_ts/smarttime.classes.cronmanager.js +71 -0
  11. package/dist_ts/smarttime.classes.cronparser.d.ts +7 -0
  12. package/dist_ts/smarttime.classes.cronparser.js +74 -0
  13. package/dist_ts/smarttime.classes.extendeddate.d.ts +42 -0
  14. package/dist_ts/smarttime.classes.extendeddate.js +114 -0
  15. package/dist_ts/smarttime.classes.hrtmeasurement.d.ts +22 -0
  16. package/dist_ts/smarttime.classes.hrtmeasurement.js +43 -0
  17. package/dist_ts/smarttime.classes.interval.d.ts +12 -0
  18. package/dist_ts/smarttime.classes.interval.js +34 -0
  19. package/dist_ts/smarttime.classes.timer.d.ts +38 -0
  20. package/dist_ts/smarttime.classes.timer.js +54 -0
  21. package/dist_ts/smarttime.classes.timestamp.d.ts +51 -0
  22. package/dist_ts/smarttime.classes.timestamp.js +81 -0
  23. package/dist_ts/smarttime.plugins.d.ts +8 -0
  24. package/dist_ts/smarttime.plugins.js +13 -0
  25. package/dist_ts/smarttime.units.d.ts +18 -0
  26. package/dist_ts/smarttime.units.js +50 -0
  27. package/license +21 -0
  28. package/npmextra.json +17 -0
  29. package/package.json +48 -0
  30. package/readme.md +63 -0
  31. package/ts/00_commitinfo_data.ts +8 -0
  32. package/ts/index.ts +8 -0
  33. package/ts/smarttime.classes.cronjob.ts +58 -0
  34. package/ts/smarttime.classes.cronmanager.ts +85 -0
  35. package/ts/smarttime.classes.cronparser.ts +88 -0
  36. package/ts/smarttime.classes.extendeddate.ts +151 -0
  37. package/ts/smarttime.classes.hrtmeasurement.ts +43 -0
  38. package/ts/smarttime.classes.interval.ts +43 -0
  39. package/ts/smarttime.classes.timer.ts +86 -0
  40. package/ts/smarttime.classes.timestamp.ts +100 -0
  41. package/ts/smarttime.plugins.ts +16 -0
  42. package/ts/smarttime.units.ts +62 -0
@@ -0,0 +1,8 @@
1
+ /**
2
+ * autocreated commitinfo by @pushrocks/commitinfo
3
+ */
4
+ export declare const commitinfo: {
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ };
@@ -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';
@@ -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,7 @@
1
+ export declare class CronParser {
2
+ cronExpression: string;
3
+ get cronArray(): string[];
4
+ constructor(cronExpressionArg: string);
5
+ private getNextPartMatch;
6
+ msToNext(): number;
7
+ }
@@ -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
+ }