UNPKG

@rschedule/rschedule

Version:

A typescript library for working with recurring dates and events.

35 lines (25 loc) 1.06 kB
import { RuleOption } from '../rule-options'; import { IPipeRule, IPipeRunFn, PipeRule } from './interfaces'; export interface IByMillisecondOfSecondRuleOptions { byMillisecondOfSecond: RuleOption.ByMillisecondOfSecond[]; } export class ByMillisecondOfSecondPipe extends PipeRule<IByMillisecondOfSecondRuleOptions> implements IPipeRule<IByMillisecondOfSecondRuleOptions> { run(args: IPipeRunFn) { if (args.invalidDate) { return this.nextPipe.run(args); } let date = args.date; const currentMillisecond = date.get('millisecond'); for (const millisecond of this.options.byMillisecondOfSecond) { if (currentMillisecond > millisecond) continue; if (currentMillisecond === millisecond) return this.nextPipe.run({ date }); return this.nextValidDate(args, date.granularity('second').set('millisecond', millisecond)); } date = date .granularity('second') .add(1, 'second') .set('millisecond', this.options.byMillisecondOfSecond[0]); return this.nextValidDate(args, date); } }