2.1.0 • Published 5 years ago

winder v2.1.0

Weekly downloads
2
License
ISC
Repository
-
Last release
5 years ago

Winder

A DSL to specify relative and recurring events

You can define a custom data type by passing a bunch of functions that extract field values ffom a compound (e.g. month from a date) and can increase and decrease that field's value.

Winder is using these functions to generate a series of events from a given first event.

To specify a series of events, you combine skip and find statements.

Skip

skip count unit

Skip simply skips forward (or backward) a specified number of units. The number of units can either be a positive or negative integer, or the literal +n or -n (or n, which is the ame as +n)

The value for n can be specified at runtime and can be used to create a series.

find

find count unit unit1==value1 unit2==value2...

find repeatedly calls skip until a set of conditions is met.

Example

2019-08-09|skip n year|find -1 day day==Saturday

Starting from 9th of August 2019, skip ahead N years and then find the previous Saturday.

API

const Winder = require('winder')
const winder = Winder(codec, fields)
console.log(winder('2019-08-09|skip n year|find -1 day day==Saturday', 1))

Example for codec and fields using dayjs

const Winder = require('winder')
const dayjs = require('dayjs')

function day() {
  return {
    get: date => date.day(),
    inc: date => date.add(1, 'day'),
    dec: date => date.subtract(1, 'day')
  }
}

function week() {
  return {
    get: date => date.week(),
    inc: date => date.add(1, 'week'),
    dec: date => date.subtract(1, 'week')
  }
}

function year() {
  return {
    get: date => date.year(),
    inc: date => date.add(1, 'year'),
    dec: date => date.subtract(1, 'year')
  }
}

const codec = {
  decode: x => dayjs(x, 'YYYY-MM-DD'),
  encode: x => x.format('dd YYYY-MM-DD')
}

const winder = Winder(
  codec,
  {day, week, year}
)

// One week before on Sunday'
const result = winder('2019-08-09|skip -1 week|find -1 day day==0')

// 6 years later and one week before on Sunday
const result = winder('2019-08-09|skip n year|skip -1 week|find -1 day day==0', 6)
2.1.0

5 years ago

2.0.0

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago