diff --git a/types/sharp-timer/index.d.ts b/types/sharp-timer/index.d.ts
index 928a47eed7..cf2f7cba3f 100644
--- a/types/sharp-timer/index.d.ts
+++ b/types/sharp-timer/index.d.ts
@@ -1,52 +1,315 @@
-// Type definitions for sharp-timer 0.3
+// Type definitions for sharp-timer library. 1.0
// Project: https://github.com/afractal/SharpTimer
// Definitions by: Hermes Gjini - afractal
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+///
+
+export const millisPerSecond: 1000;
+export const millisPerMinute: 60000;
+export const millisPerHour: 3600000;
+export const millisPerDay: 86400000;
export type ElapsedEvent = () => void;
export type ElapsingEvent = (intervalValue: number) => void;
+/**
+ * Simulates the actions of a generic timer,
+ * generates elapsing and elapsed events for a specified interval.
+ */
export class Timer {
- private _enabled;
- private _stopped;
- private _interval;
- private _intervalElapsedEvents;
- private _intervalElapsingEvents;
+ private _enabled: boolean;
+ private _stopped: boolean;
+ private _interval: number;
+ private _intervalElapsedEvents: ElapsedEvent[];
+ private _intervalElapsingEvents: ElapsingEvent[];
+
+ /**
+ * Initializes a new instance of the Timer class,
+ * and sets all the properties to their initial values.
+ * @param interval
+ * The time, in milliseconds, in which the timer will be active.
+ * The value must be greater than zero.
+ */
constructor(interval: number);
+
+ /**
+ * Gets a boolean value to indicate the enabled state
+ * of the current Timer instance.
+ * @readonly
+ * @default true
+ */
readonly enabled: boolean;
+
+ /**
+ * Gets a boolean value to indicate the stopped state
+ * of the current Timer instance.
+ * @readonly
+ * @default false
+ */
readonly stopped: boolean;
+
+ /**
+ * Gets or sets the remaining interval in milliseconds.
+ * The value must be greater than zero.
+ */
interval: number;
+
+ /**
+ * Starts raising the Timer events
+ * by setting the enabled property to true.
+ */
start(): void;
+
+ /**
+ * Pauses the Timer instance by setting the enabled property to false.
+ */
pause(): void;
+
+ /**
+ * Resumes the Timer instance by setting the enabled property to true.
+ */
resume(): void;
+
+ /**
+ * Stops raising the Timer event
+ * by setting the enabled property to false.
+ */
stop(): void;
+
+ /**
+ * Occurs when the interval has completely elapsed.
+ * @param intervalElapsedHandler
+ * The callback which will be executed when
+ * the interval elapsed event occurs.
+ */
onIntervalElapsed(intervalElapsedHandler: ElapsedEvent): void;
+
+ /**
+ * Occurs when the interval elapses and completely elapsed.
+ * @param intervalElapsingHandler
+ * The callback which will be executed when
+ * the interval elapsing event occurs.
+ */
onIntervalElapsing(intervalElapsingHandler: ElapsingEvent): void;
+
+ /**
+ * Returns a string represenation of the remaining
+ * in this format: minutes:seconds.
+ * examples: 20:23, 00:04, 59:59
+ */
toString(): string;
- private getDoubleDigit(number);
- private checkForValidInterval(interval);
+
+ private getDoubleDigit(number: number): string;
+
+ private checkForValidInterval(interval: number): void;
}
+/**
+ * Simulates the actions of a generic stopwatch.
+ */
export class Stopwatch {
- private _isRunning;
- private _elapsedMilliseconds;
- private _startedTimeInMillis;
- private _intervalIds;
- private static readonly millisPerSecond;
- private static readonly millisPerMinute;
- private static readonly millisPerHour;
+ private _isRunning: boolean;
+ private _elapsedMilliseconds: number;
+ private _startedTimeInMillis: number;
+ private _intervalIds: Array;
+
+ /**
+ * Initializes a new instance of the Stopwatch class.
+ */
constructor();
+
+ /**
+ * Gets the elapsed time in this format:
+ * hrs:mins:secs:ms
+ * @readonly
+ */
readonly elapsed: string;
+
+ /**
+ * Gets the elapsed time in milliseconds.
+ * @readonly
+ */
readonly elapsedMilliseconds: number;
+
+ /**
+ * Gets the elapsed time in seconds.
+ * @readonly
+ */
readonly elapsedSeconds: number;
+
+ /**
+ * Gets the elapsed time in minutes.
+ * @readonly
+ */
readonly elapsedMinutes: number;
+
+ /**
+ * Gets the elapsed hours in hours.
+ * @readonly
+ */
readonly elapsedHours: number;
+
+ /**
+ * Gets the isRunning state of the current Stopwatch instance.
+ * @readonly
+ * @default false
+ */
readonly isRunning: boolean;
+
+ /**
+ * Initializes a new Stopwatch instance and
+ * starts measuring elapsed time.
+ */
static startNew(): Stopwatch;
+
+ /**
+ * Starts, or resumes the Stopwatch
+ * from measuring elapsed time.
+ */
start(): void;
+
+ /**
+ * Stops the Stopwatch from measuring elapsed time.
+ */
stop(): void;
+
+ /**
+ * Stops the Stopwatch and resets the elapsed time to zero.
+ */
reset(): void;
+
+ /**
+ * Stops the Stopwatch,
+ * resets the elapsed time to zero
+ * and starts the Stopwatch for measuring elapsed time.
+ * It is a shortcut for writing
+ * reset then start.
+ */
restart(): void;
+
+ /**
+ * Stops the Stopwatch and cleans up the intervals.
+ */
dispose(): void;
- private getDoubleDigit(num);
+
+ private getDoubleDigit(num: number): string;
+}
+
+/**
+ * Simulates an object that represents a time interval.
+ */
+export class Timespan {
+ private _milliseconds: number;
+ private constructor(milliseconds: number);
+
+ /**
+ * Gets the time interval in milliseconds.
+ * @readonly
+ */
+ readonly milliseconds: number;
+
+ /**
+ * Gets the time interval in seconds.
+ * @readonly
+ */
+ readonly seconds: number;
+
+ /**
+ * Gets the time interval in minutes.
+ * @readonly
+ */
+ readonly minutes: number;
+
+ /**
+ * Gets the time interval in hours.
+ * @readonly
+ */
+ readonly hours: number;
+
+ /**
+ * Gets the time interval in days.
+ * @readonly
+ */
+ readonly days: number;
+
+ /**
+ * Returns a Timespan that represents a specified number of days.
+ * @param days The number of days.
+ */
+ static fromDays(days: number): Timespan;
+
+ /**
+ * Returns a Timespan that represents a specified number of hours.
+ * @param hours The number of hours.
+ */
+ static fromHours(hours: number): Timespan;
+
+ /**
+ * Returns a Timespan that represents a specified number of minutes.
+ * @param minutes The number of minutes.
+ */
+ static fromMinutes(minutes: number): Timespan;
+
+ /**
+ * Returns a Timespan that represents a specified number of seconds.
+ * @param seconds The number of seconds.
+ */
+ static fromSeconds(seconds: number): Timespan;
+
+ /**
+ * Returns a Timespan that represents a specified number of milliseconds.
+ * @param milliseconds The number of milliseconds.
+ */
+ static fromMilliseconds(milliseconds: number): Timespan;
+
+ /**
+ * Compares two Timespan objects and
+ * returns an integer that indicates whether
+ * the first value is shorter than, equal to,
+ * or longer than the second value.
+ * @param t1 The first Timespan to compare.
+ * @param t2 The second Timespan to compare.
+ */
+ static compare(t1: Timespan, t2: Timespan): 1 | 0 | -1;
+
+ /**
+ * Returns a boolean value that indicates
+ * whether two specified instances of Timespan are equal.
+ * @param t1 The first Timespan to compare.
+ * @param t2 The second Timespan to compare.
+ */
+ static equals(t1: Timespan, t2: Timespan): boolean;
+
+ /**
+ * Adds the specified Timespan to this instance.
+ * @param timespan The Timespan to add.
+ */
+ addMutable(timespan: Timespan): void;
+
+ /**
+ * Substracts the specified Timespan from this instance.
+ * @param timespan The Timespan to substract.
+ */
+ substractMutable(timespan: Timespan): void;
+
+ /**
+ * Returns a new Timespan object whose
+ * value is the sum of the specified Timespan object and this instance.
+ * @param timespan The Timespan to add.
+ */
+ add(timespan: Timespan): Timespan;
+
+ /**
+ * Returns a new Timespan object whose
+ * value is the difference between the
+ * specified Timespan object and this instance.
+ * @param timespan The Timespan to substract.
+ */
+ substract(timespan: Timespan): Timespan;
+
+ /**
+ * Returns a new Timespan object
+ * whose value is the negated value of this instance.
+ */
+ negate(): Timespan;
}
diff --git a/types/sharp-timer/sharp-timer-tests.ts b/types/sharp-timer/sharp-timer-tests.ts
index 5d8976e474..db4d21b421 100644
--- a/types/sharp-timer/sharp-timer-tests.ts
+++ b/types/sharp-timer/sharp-timer-tests.ts
@@ -1,10 +1,32 @@
-import { Timer, Stopwatch } from 'sharp-timer';
+import { Timer, Stopwatch, Timespan, millisPerSecond } from 'sharp-timer';
+const millisecondsPerSecond = millisPerSecond;
+
+// timer test
let timer = new Timer(10);
-
+timer.toString();
timer.onIntervalElapsing(i => { });
timer.onIntervalElapsed(() => {
timer.stop();
});
timer.start();
+
+// stopwatch test
+let stopwatch = Stopwatch.startNew();
+
+const intervalId = setInterval(() => { }, 10);
+
+setTimeout(() => {
+ clearInterval(intervalId);
+ stopwatch.dispose();
+}, 100);
+
+// timespan test
+const {
+ days,
+ hours,
+ minutes,
+ seconds,
+ milliseconds
+} = Timespan.fromDays(2);
diff --git a/types/sharp-timer/v0/index.d.ts b/types/sharp-timer/v0/index.d.ts
new file mode 100644
index 0000000000..928a47eed7
--- /dev/null
+++ b/types/sharp-timer/v0/index.d.ts
@@ -0,0 +1,52 @@
+// Type definitions for sharp-timer 0.3
+// Project: https://github.com/afractal/SharpTimer
+// Definitions by: Hermes Gjini - afractal
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+export type ElapsedEvent = () => void;
+export type ElapsingEvent = (intervalValue: number) => void;
+
+export class Timer {
+ private _enabled;
+ private _stopped;
+ private _interval;
+ private _intervalElapsedEvents;
+ private _intervalElapsingEvents;
+ constructor(interval: number);
+ readonly enabled: boolean;
+ readonly stopped: boolean;
+ interval: number;
+ start(): void;
+ pause(): void;
+ resume(): void;
+ stop(): void;
+ onIntervalElapsed(intervalElapsedHandler: ElapsedEvent): void;
+ onIntervalElapsing(intervalElapsingHandler: ElapsingEvent): void;
+ toString(): string;
+ private getDoubleDigit(number);
+ private checkForValidInterval(interval);
+}
+
+export class Stopwatch {
+ private _isRunning;
+ private _elapsedMilliseconds;
+ private _startedTimeInMillis;
+ private _intervalIds;
+ private static readonly millisPerSecond;
+ private static readonly millisPerMinute;
+ private static readonly millisPerHour;
+ constructor();
+ readonly elapsed: string;
+ readonly elapsedMilliseconds: number;
+ readonly elapsedSeconds: number;
+ readonly elapsedMinutes: number;
+ readonly elapsedHours: number;
+ readonly isRunning: boolean;
+ static startNew(): Stopwatch;
+ start(): void;
+ stop(): void;
+ reset(): void;
+ restart(): void;
+ dispose(): void;
+ private getDoubleDigit(num);
+}
diff --git a/types/sharp-timer/v0/sharp-timer-tests.ts b/types/sharp-timer/v0/sharp-timer-tests.ts
new file mode 100644
index 0000000000..5d8976e474
--- /dev/null
+++ b/types/sharp-timer/v0/sharp-timer-tests.ts
@@ -0,0 +1,10 @@
+import { Timer, Stopwatch } from 'sharp-timer';
+
+let timer = new Timer(10);
+
+timer.onIntervalElapsing(i => { });
+timer.onIntervalElapsed(() => {
+ timer.stop();
+});
+
+timer.start();
diff --git a/types/sharp-timer/v0/tsconfig.json b/types/sharp-timer/v0/tsconfig.json
new file mode 100644
index 0000000000..37520d93f4
--- /dev/null
+++ b/types/sharp-timer/v0/tsconfig.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "lib": [
+ "es6"
+ ],
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "strictNullChecks": true,
+ "baseUrl": "../../",
+ "typeRoots": [
+ "../../"
+ ],
+ "paths": {
+ "sharp-timer": [
+ "sharp-timer/v0"
+ ]
+ },
+ "types": [],
+ "noEmit": true,
+ "forceConsistentCasingInFileNames": true
+ },
+ "files": [
+ "index.d.ts",
+ "sharp-timer-tests.ts"
+ ]
+}
diff --git a/types/sharp-timer/v0/tslint.json b/types/sharp-timer/v0/tslint.json
new file mode 100644
index 0000000000..d88586e5bd
--- /dev/null
+++ b/types/sharp-timer/v0/tslint.json
@@ -0,0 +1,3 @@
+{
+ "extends": "dtslint/dt.json"
+}