cron-js-parser
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

Hey there! Would you take a quick second to ⭐️ star this repo?



📢Support for Unix scheduler coming soon

Contents

Introduction

Cron expressions are powerful, but can be pretty confusing. The aim of this library is to standardize javascript logic for handling cron expressions.

✨ Introducing JCON - Javascript Cron Object Notation

Supported Schedulers

JCON

Overview

ℹ️ More on mode objects can be found here

{
  seconds: <Mode Object>,
  minutes: <Mode Object>
  hours: <Mode Object>,
  daysOfMonth?: <Mode Object>,
  months: <Mode Object>,
  daysOfWeek?: <Mode Object>,
  years?: <Mode Object>
}

Mandatory Fields - seconds, minutes, hours, months Optional Fields - daysOfMonth, daysOfWeek, years

Mode Object

These constants define the allowed string literal values for the mode property in the respective types.

Types

1. Cycle

Represents an object with a fixed mode indicating a cycle.

type Cycle = {
  mode: typeof cycle;
};

2. At

Represents an object with a mode 'at' and an array of numeric values.

type At = {
  mode: typeof at;
  value: number[];
};

3. StartAtRepeatCycleEvery

Represents an object with a mode 'StartAtRepeatCycleEvery' and a StartAt object as its value.

type StartAtRepeatCycleEvery = {
  mode: typeof startAtRepeatCycleEvery;
  value: StartAt;
};

4. StartCycleInRange

Represents an object with a mode 'startCycleInRange' and an InRange object as its value.

type StartCycleInRange = {
  mode: typeof startCycleInRange;
  value: InRange;
};

Summary

Type Property Type Description
cycle mode typeof cycle Must be the literal string 'cycle'
At mode typeof at Must be the literal string 'at'
At value number[] An array of numbers specifying values
StartAtRepeatCycleEvery mode typeof startAtRepeatCycleEvery Must be the literal string 'startAtRepeatCycleEvery'
StartAtRepeatCycleEvery value StartAt An object containing startAt and every numbers
StartCycleInRange mode typeof startCycleInRange Must be the literal string 'startCycleInRange'
StartCycleInRange value InRange An object defining a range with from and to

Methods Overview

Parsers

parseCronExpression
export const parseCronExpression = (cronValues: QuartzCronObj): string
Description

Converts a structured QuartzCronObj back into a cron expression string.

Input
  • cronValues (QuartzCronObj): An object representing the components of a cron expression.
Output
  • Returns a string representing the cron expression generated from the input object.
parseHumanReadable
export const parseHumanReadable = (
  cronExpr: string,
  cronValues: QuartzCronObj,
  language: string
): string
Description

Generates a human-readable description of a cron expression in the specified language.

Inputs
  • cronExpr (string): The cron expression string. If empty or falsy, the function will generate the expression from cronValues.
  • cronValues (QuartzCronObj): An object representing the cron expression components.
  • language (string): The locale/language code (e.g., 'en', 'fr', 'de') to format the description.
Output
  • Returns a string containing a verbose, human-readable description of the cron schedule in the specified language.

Deparser

deparseCronExpression
Description

Converts a cron expression string into a structured QuartzCronObj representation.

Input
  • cronExpr (string): A valid cron expression string in Quartz format.
Output
  • Returns a QuartzCronObj — an object representing the parsed components of the cron expression.

Input

const { 
  parseCronExpression, parseHumanReadable, deparseCronExpression
} = require('./cron-js-parser.quartz');

let obj = {
  seconds: {
    mode: 'at',
    value: [1, 5, 10]
  },
  minutes: {
    mode: 'StartAtRepeatCycleEvery',
    value: {
      startAt: 1,
      every: 10
    }
  },
  hours: {
    mode:'startCycleInRange',
    value: {
      from: 2,
      to: 20
    }
  },
  daysOfMonth: {
    mode: 'cycle'
  },
  months: {
    mode: 'cycle'
  },
  years: {
    mode: 'at',
    value: [2020, 2022]
  },
  daysOfWeek: {
    mode: 'on',
    value: {
      isLastWeek: false,
      dayIndex: 6,
      weekIndex: 3
    } 
  }
};
const cron = parseCronExpression(obj); 
console.log(cron);
lang = 'fr' //French
console.log(parseHumanReadable(cron,{},lang))
const deparsed = deparseCronExpression(cron)
console.log(deparsed)
console.log(parseCronExpression(deparsed))

Output

1,5,10 1/10 2-20 ? * ? 2020,2022
1, 5, et 10 secondes après la minute, toutes les 10 minutes, à partir de 1 minutes après l'heure, de 02:00 à 20:59, tous les jours, uniquement en 2020 et 2022
{
  seconds: { mode: 'at', value: [ 1, 5, 10 ] },
  minutes: { mode: 'StartAtRepeatCycleEvery', value: { startAt: 1, every: 10 } },
  hours: { mode: 'startCycleInRange', value: { from: 2, to: 20 } },
  daysOfMonth: undefined,
  months: { mode: 'cycle' },
  years: { mode: 'at', value: [ 2020, 2022 ] }
}
1,5,10 1/10 2-20 ? * ? 2020,2022

Cron Trigger Standards

Days of Week

  • 1 - SUN - Sunday
  • 2 - MON - Monday
  • 3 - TUE - Tuesday
  • 4 - WED - Wednesday
  • 5 - THU - Thursday
  • 6 - FRI - Friday
  • 7 - SAT - Saturday

Support

  • Javascript
  • Typescript
  • Nodejs
  • Browser

Important Links

Package Sidebar

Install

npm i cron-js-parser

Weekly Downloads

657

Version

1.1.0

License

MIT

Unpacked Size

1.63 MB

Total Files

180

Last publish

Collaborators

  • adagioneo