@sapphire/stopwatch
Version:
Accurately measure passing time.
1 lines • 4.13 kB
Source Map (JSON)
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Stopwatch class, uses native node to replicate/extend performance-now dependency.\n */\nexport class Stopwatch {\n\t/**\n\t * The number of digits to appear after the decimal point when returning the friendly duration.\n\t */\n\tpublic digits: number;\n\n\t/**\n\t * The start time of this stopwatch\n\t */\n\t#start: number;\n\n\t/**\n\t * The end time of this stopwatch\n\t */\n\t#end: number | null;\n\n\t/**\n\t * Starts a new stopwatch\n\t */\n\tpublic constructor(digits = 2) {\n\t\tthis.digits = digits;\n\t\tthis.#start = performance.now();\n\t\tthis.#end = null;\n\t}\n\n\t/**\n\t * The duration of this stopwatch since start or start to end if this stopwatch has stopped.\n\t */\n\tpublic get duration(): number {\n\t\treturn this.#end ? this.#end - this.#start : performance.now() - this.#start;\n\t}\n\n\t/**\n\t * If the stopwatch is running or not.\n\t */\n\tpublic get running(): boolean {\n\t\treturn Boolean(!this.#end);\n\t}\n\n\t/**\n\t * Restarts the stopwatch (Returns a running state)\n\t */\n\tpublic restart(): this {\n\t\tthis.#start = performance.now();\n\t\tthis.#end = null;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the Stopwatch to 0 duration (Returns a stopped state)\n\t */\n\tpublic reset(): this {\n\t\tthis.#start = performance.now();\n\t\tthis.#end = this.#start;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Starts the Stopwatch\n\t */\n\tpublic start(): this {\n\t\tif (!this.running) {\n\t\t\tthis.#start = performance.now() - this.duration;\n\t\t\tthis.#end = null;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Stops the Stopwatch, freezing the duration\n\t */\n\tpublic stop(): this {\n\t\tif (this.running) this.#end = performance.now();\n\t\treturn this;\n\t}\n\n\t/**\n\t * Defines toString behavior\n\t */\n\tpublic toString(): string {\n\t\tconst time = this.duration;\n\t\tif (time >= 1000) return `${(time / 1000).toFixed(this.digits)}s`;\n\t\tif (time >= 1) return `${time.toFixed(this.digits)}ms`;\n\t\treturn `${(time * 1000).toFixed(this.digits)}μs`;\n\t}\n}\n"]}