Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions .github/dependabot.yml

This file was deleted.

3 changes: 0 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,6 @@ jobs:
pnpm-store-${{ runner.os }}-
- name: Build
run: pnpm run build
- name: Build Stackblitz
if: github.event_name == 'pull_request'
run: pnpm dlx pkg-pr-new@0.0 publish --compact --pnpm .
- name: Build size report
if: github.event_name == 'pull_request'
uses: andresz1/size-limit-action@v1.8.0
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# CHANGELOG

## [2.0.0] 01-22-2026

### :boom: Breaking

- Removed [`mitt`](https://www.npmjs.com/package/mitt) as dependency to implement a far simpler event emitter.
- To remove all event emitters from an event type call `timer.off(<event>)`
12 changes: 8 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,16 @@
</p>
</p>

`mini-timer` is the smallest, minimal-dependency event driven timer that quickly and comfortably counts time for you.
`mini-timer` is the smallest event driven timer without any dependencies that quickly and comfortably counts time for you.

```powershell
pnpm i mini-timer
```

## Goal

The goal of this package is to provide the smallest possible timer package that is easy to use and as versatile as possible.

## Usage

The timer requires 2 (optional 3) arguments that define the start and end point with the increment between steps.
Expand Down Expand Up @@ -56,10 +60,10 @@ t.resume()
t.stop() // The default event of stop is "finish".

// Now, clean everything up with "off"

t.off('update', ...)
t.off('update', ...) // Removes callback by reference
t.off('update') // Removes all callbacks
```

---

© Torathion 2025
© Torathion 2026
15 changes: 11 additions & 4 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { type Handler } from 'mitt'

declare module 'mini-timer' {
/**
* Union type for events that signal the timer has stopped.
Expand All @@ -22,6 +20,11 @@ declare module 'mini-timer' {
*/
export type TimerEvent = StopEvent | 'update' | StartEvent

/**
* Generic Timer Event Listener for all event types.
*/
export type TimerListener = (elapsed: number) => void

/**
* Defines the core state properties of a timer.
*/
Expand All @@ -40,20 +43,24 @@ declare module 'mini-timer' {
* Represents a timer instance, extending `TimerState` with control methods and event handling.
*/
export interface Timer extends TimerState {
/**
* Event cache storing all functions.
*/
events: Map<TimerEvent, Set<TimerListener>>
/**
* Removes an event handler for a specific timer event.
*
* @param event - The timer event to stop listening for.
* @param handler - The handler function to remove.
*/
off: (event: TimerEvent, handler: Handler<number>) => void
off: (event: TimerEvent, handler: TimerListener) => void
/**
* Registers an event handler for a specific timer event.
*
* @param event - The timer event to listen for.
* @param handler - The handler function to call when the event occurs.
*/
on: (event: TimerEvent, handler: Handler<number>) => void
on: (event: TimerEvent, handler: TimerListener) => void
/**
* Pauses the timer. This stops the timer and emits a 'pause' event.
*/
Expand Down
33 changes: 14 additions & 19 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mini-timer",
"version": "1.0.2",
"version": "2.0.0",
"description": "The tiniest timer to tick!",
"types": "./index.d.ts",
"main": "./dist/index.js",
Expand All @@ -21,7 +21,7 @@
"keywords": [
"small",
"timer",
"micro",
"mini",
"tiny",
"utility"
],
Expand All @@ -37,23 +37,18 @@
"license": "MIT",
"type": "module",
"sideEffects": false,
"packageManager": "pnpm@10.11.0",
"packageManager": "pnpm@10.28.1",
"devDependencies": {
"@rollup/rollup-win32-ia32-msvc": "^4.41.1",
"@size-limit/file": "^11.2.0",
"@size-limit/preset-app": "^11.2.0",
"@vitest/coverage-v8": "^3.1.4",
"esbuild": "^0.25.4",
"eslint": "^9.27.0",
"eslint-config-shiny": "^4.2.1",
"jiti": "^2.4.2",
"size-limit": "^11.2.0",
"typescript": "^5.8.3",
"typestar": "^1.11.0",
"vite": "^6.3.5",
"vitest": "^3.1.4"
},
"dependencies": {
"mitt": "^3.0.1"
"@size-limit/file": "^12.0.0",
"@size-limit/preset-app": "^12.0.0",
"@vitest/coverage-v8": "^4.0.18",
"esbuild": "^0.27.2",
"eslint": "^9.39.2",
"eslint-config-shiny": "^4.3.1",
"jiti": "^2.6.1",
"size-limit": "^12.0.0",
"typescript": "^5.9.3",
"vite": "^7.3.1",
"vitest": "^4.0.18"
}
}
Loading
Loading