Hexagon / croner

Trigger functions or evaluate cron expressions in JavaScript or TypeScript. No dependencies. Most features. Node. Deno. Bun. Browser.
https://croner.56k.guru
MIT License
2.01k stars 51 forks source link

Every X seconds cron fails with maximum call stack exceeded #260

Open fschaeffler opened 9 hours ago

fschaeffler commented 9 hours ago

Describe the bug When defining a cron for every X seconds, I get an exception with maximum call stack exceeded.

To Reproduce

  1. install croner
  2. require croner
  3. create a cron which should trigger every X seconds

Example:

const { Cron } = require('croner')

// works as expected
new Cron('* * * * * *', () => console.log('test every second'))

// fails with maximum call stack exceeded
new Cron('/3 * * * * *', () => console.log('test 3 seconds'))

Uncaught RangeError: Maximum call stack size exceeded
    at CronDate.findNext (/home/flo/dev/private/trading/autotrader/node_modules/croner/dist/croner.min.cjs:1:15327)
    at CronDate.recurse (/home/flo/dev/private/trading/autotrader/node_modules/croner/dist/croner.min.cjs:1:16435)
    at CronDate.recurse (/home/flo/dev/private/trading/autotrader/node_modules/croner/dist/croner.min.cjs:1:16993)
    at CronDate.recurse (/home/flo/dev/private/trading/autotrader/node_modules/croner/dist/croner.min.cjs:1:16993)
    at CronDate.recurse (/home/flo/dev/private/trading/autotrader/node_modules/croner/dist/croner.min.cjs:1:16993)
    at CronDate.recurse (/home/flo/dev/private/trading/autotrader/node_modules/croner/dist/croner.min.cjs:1:16791)
    at CronDate.recurse (/home/flo/dev/private/trading/autotrader/node_modules/croner/dist/croner.min.cjs:1:16993)
    at CronDate.recurse (/home/flo/dev/private/trading/autotrader/node_modules/croner/dist/croner.min.cjs:1:16993)
    at CronDate.recurse (/home/flo/dev/private/trading/autotrader/node_modules/croner/dist/croner.min.cjs:1:16993)
    at CronDate.recurse (/home/flo/dev/private/trading/autotrader/node_modules/croner/dist/croner.min.cjs:1:16993)

Expected behavior There's no exception when creating this cron and it gets triggered every X seconds.

System:

Hexagon commented 9 hours ago

Interesting! What if you add a before /3, like `/3 *`?

Hexagon commented 9 hours ago

Should work, but leave this open. I need to fiure out if it should be handled as a syntax error, or "just work". Call stack is not expexted behavior!

fschaeffler commented 9 hours ago

You're totally right. Adding an asterisk before it solves the issue. Thank you for looking into it!