timehandlr

Scheduling for dynamically repeating or synchronized events.

Usage no npm install needed!

<script type="module">
  import timehandlr from 'https://cdn.skypack.dev/timehandlr';
</script>

README

TimeHandlr

Code Style: Prettier TypeScript: Strict NPM version Join the chat at https://gitter.im/FullScreenShenanigans/community

Scheduling for dynamically repeating or synchronized events.

Like @sinonjs/fake-timers, but for one-time and repeating events in production code.

Usage

Constructor

import { TimeHandlr } from "timehandlr";

const timeHandler = new TimeHandlr();

addEvent

Parameters:

  • callback: Function: Callback to run for the event.
  • timeDelay: number | Function (optional): How long from now to run the callback (by default, 1).
  • ...args: any[]: Any additional arguments to pass to the callback.

Returns: An event with the given callback and time information.

Adds an event to be called once.

const timeHandler = new TimeHandlr();

timeHandler.addEvent(() => console.log("Hello world!"), 3);

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

If args are provided, they're passed to the callback. This is similar to Function.call.

const timeHandler = new TimeHandlr();

timeHandler.addEvent(console.log.bind(console), 3, "Hello world!");

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

addEventInterval

Parameters:

  • callback: Function: Callback to run for the event.
  • timeDelay: number | Function (optional): How long from now to run the callback (by default, 1).
  • numRepeats: number | Function (optional): How many times to run the event (by default, 1).
  • ...args: any[]: Any additional arguments to pass to the callback.

Adds an event to be called multiple times.

const timeHandler = new TimeHandlr();

timeHandler.addEventInterval(() => console.log("Hello world!"), 3, 2);

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

If args are provided, they're passed to the callback. This is similar to Function.call.

const timeHandler = new TimeHandlr();

timeHandler.addEventInterval(console.log.bind(console), 3, "Hello world!");

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

addEventIntervalSynched

Parameters:

  • callback: Function: Callback to run for the event.
  • timeDelay: number | Function (optional): How long from now to run the callback (by default, 1).
  • numRepeats: number | Function (optional): How many times to run the event (by default, 1).
  • ...args: any[]: Any additional arguments to pass to the callback.

Adds an event interval, waiting to start until it's in sync with the time delay.

This is useful for starting animations of objects intended to be animated in sync, like Goombas in Mario or flower scenery in Pokemon. Otherwise identical to addEventInterval.

cancelEvent

Parameters:

  • event: Object: Event to cancel.

Cancels an event created by one of the addEvent* methods.

const timeHandler = new TimeHandlr();

const event = timeHandler.addEvent(() => console.log("Hello world!"), 3);

timeHandler.advance();
timeHandler.advance();

timeHandler.cancelEvent(event);

timeHandler.advance();

cancelAllEvents

Cancels all events.

const timeHandler = new TimeHandlr();

timeHandler.addEvent(() => console.log("Hello world!"), 3);

timeHandler.advance();
timeHandler.advance();

timeHandler.cancelAllEvents();

timeHandler.advance();

Development

This repository is a portion of the EightBittr monorepo. See its docs/Development.md for details on how to get started. 💖

Running Tests

yarn run test

Tests are written in Mocha and Chai. Their files are written using alongside source files under src/ and named *.test.ts?. Whenever you add, remove, or rename a *.test.t* file under src/, watch will re-run yarn run test:setup to regenerate the list of static test files in test/index.html. You can open that file in a browser to debug through the tests, or run yarn test:run to run them in headless Chrome.