0.1.3 • Published 1 year ago

everytime.js v0.1.3

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

everytime.js - Schedule async functions

TLDR

every.other.day.at("12:00").do(async () => console.log("Hello"))

everytime.js is a library that helps you schedule functions to run repeatedly. Also available in Python.

Full Example

import { every } from "everytime.js"

async function greet() {
    console.log("Hello")
}

every(5).days.do(greet)

Install

everytime.js can be installed from npmjs with

npm i everytime.js

How to schedule functions

do()

Normally, you will use the do-function to schedule functions.

every(5).seconds.do(greet)

schedule

You can wrap the everytime expression into a call to schedule.

schedule(every.day.at("12:00"))(greet)

This allows you to pass custom datetime iterables to schedule (see Schedule custom times).

Schedule custom times

schedule accepts datetime iterables. The following schedule works:

schedule([dayjs(), dayjs().add(1, "day")])

Decorators

Keep in mind that Decorators are an experimental feature and may be subject to change.

Decorators only work for methods and not for free functions. Therefore you have to wrap functions in a class to use the run decorator.

class C {
    @run(every.second)
    static f() {
        console.log("hello")
    }
}

Supported Expressions

Quantification

Every time unit can be quantified by every, every.other or every(n):

  • every.second
  • every.other.second
  • every(5).seconds

Supported time units

The supported time units are

  • millisecond
  • second
  • minute
  • hour
  • day
  • week

Modifier functions

All everytime expressions are datetime iterables of type Iterable<Dayjs>. To change the scheduling, modify these enumerations with the following functions.

filter

every.hour.filter((datetime: Dayjs) => datetime.hour() < 10).do(greet)

will schedule the function hourly, but only betweeen 0:00 and 9:59.

map

every.hour.map((datetime: Dayjs) => datetime.startOf("hour"))

will schedule the function hourly, but ensures that the function will run at the start of the hour at minute 0.

take

every.day.at("12:00").take(10).do(greet)

will schedule the function daily at 12:00 for the next 10 days (and then terminate).

Specific time of the day

day can be scheduled for a specific time of the day:

every.day.at("12:15")

(Note that hour is 24-hour based)

How it works

everytime.js uses setTimeout to schedule functions and the Day.js library to calculate time differences.

Normally, the process will run forever (because expressions like every.day describe infinitely many datetimes). If you use a finite custom iterable with schedule, the process will terminate accordingly.

0.1.3

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago