Skip to content

Commit 4cbc424

Browse files
committed
fix: check if second step number is positive (fixes #321)
1 parent 1facc64 commit 4cbc424

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

src/helper.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const checkSingleElementWithinLimits = (
4848
}
4949

5050
const number = Number(element)
51-
if (isNaN(number)) {
51+
if (Number.isNaN(number)) {
5252
return err(`Element '${element}' of ${cronFieldType} field is invalid.`)
5353
}
5454

@@ -152,7 +152,7 @@ const checkSingleElement = (
152152
}
153153

154154
const occurrenceNum = Number(occurrence)
155-
if (!occurrence || isNaN(occurrenceNum)) {
155+
if (!occurrence || Number.isNaN(occurrenceNum)) {
156156
return err(
157157
`Unexpected value following the '#' symbol, a positive number was expected but found ${occurrence}.`,
158158
)
@@ -261,7 +261,7 @@ const checkListElement = (
261261
}
262262

263263
if (!options.allowStepping) {
264-
return err('Stepping (\'/\') is now allowed.')
264+
return err('Stepping (\'/\') is not allowed.')
265265
}
266266

267267
const firstElementResult = checkFirstStepElement(
@@ -283,7 +283,7 @@ const checkListElement = (
283283
)
284284
}
285285

286-
if (isNaN(Number(secondStepElement))) {
286+
if (Number.isNaN(Number(secondStepElement))) {
287287
return err(
288288
`Second step element '${secondStepElement}' of '${listElement}' is not valid (not a number).`,
289289
)
@@ -296,7 +296,11 @@ const checkListElement = (
296296
)
297297
}
298298

299-
const { lowerLimit, upperLimit } = options[cronFieldType]
299+
if (secondStepNumber < 0) {
300+
return err(
301+
`Second step element '${secondStepElement}' of '${listElement}' cannot be negative.`,
302+
)
303+
}
300304

301305
// check if step number is an integer
302306
if (secondStepNumber % 1 !== 0) {
@@ -305,6 +309,9 @@ const checkListElement = (
305309
)
306310
}
307311

312+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
313+
const { lowerLimit, upperLimit } = options[cronFieldType]
314+
308315
// check if step number is less than the max number
309316
if (upperLimit && secondStepNumber > upperLimit) {
310317
return err(
@@ -318,7 +325,7 @@ const checkListElement = (
318325
if (rangeArray.length === 2) {
319326
const rangeStart = Number(rangeArray[0])
320327
const rangeEnd = Number(rangeArray[1])
321-
if (!isNaN(rangeStart) && !isNaN(rangeEnd)) {
328+
if (!Number.isNaN(rangeStart) && !Number.isNaN(rangeEnd)) {
322329
if (secondStepNumber <= 0) {
323330
return err(`Step value '${secondStepElement}' must be greater than 0.`)
324331
}

src/index.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ describe('Test cron validation', () => {
218218
).toBeFalsy()
219219

220220
expect(cron('*/1.5 * * * *').isValid()).toBeFalsy()
221+
222+
expect(cron('*/-1 * * * *').isValid()).toBeFalsy()
223+
expect(cron('*/-5 * * * *').isValid()).toBeFalsy()
224+
expect(cron('*/-1.5 * * * *').isValid()).toBeFalsy()
221225
})
222226

223227
it('Test range limits', () => {

0 commit comments

Comments
 (0)