Commit 4f1b0af

Anton Golub <antongolub@antongolub.com>
2022-06-10 19:16:46
feat: add NaN assert to duration parser (#434)
1 parent fdc626b
Changed files (2)
src/util.ts
@@ -112,14 +112,17 @@ export type Duration = number | `${number}s` | `${number}ms`
 
 export function parseDuration(d: Duration) {
   if (typeof d == 'number') {
+    if (isNaN(d) || d < 0) {
+      throw new Error(`Invalid duration: "${d}".`)
+    }
     return d
   } else if (/\d+s/.test(d)) {
     return +d.slice(0, -1) * 1000
   } else if (/\d+ms/.test(d)) {
     return +d.slice(0, -2)
-  } else {
-    throw new Error(`Unknown duration: "${d}".`)
   }
+
+  throw new Error(`Unknown duration: "${d}".`)
 }
 
 export function formatCmd(cmd?: string): string {
test/util.test.js
@@ -56,6 +56,8 @@ test('duration parsing works', () => {
   assert.is(parseDuration('2s'), 2000)
   assert.is(parseDuration('500ms'), 500)
   assert.throws(() => parseDuration('100'))
+  assert.throws(() => parseDuration(NaN))
+  assert.throws(() => parseDuration(-1))
 })
 
 test('formatCwd works', () => {