Skip to content

Fix leading whitespace dropping the negative sign#69

Merged
dy merged 2 commits into
jkroso:masterfrom
naveentehrpariya:fix-leading-whitespace-negative-sign
Jun 29, 2026
Merged

Fix leading whitespace dropping the negative sign#69
dy merged 2 commits into
jkroso:masterfrom
naveentehrpariya:fix-leading-whitespace-negative-sign

Conversation

@naveentehrpariya

Copy link
Copy Markdown
Contributor

The global sign was decided by str[0] === '-', reading the raw first character. The parser already tolerates leading whitespace for the magnitude ( 1h → 3600000), but with a leading minus the sign check saw the whitespace instead of the -:

parse('-1h')  // -3600000
parse(' -1h') //  3600000  ← bug

Test the first non-whitespace character with /^\s*-/ instead. Only a leading minus preceded by whitespace is affected; the intentional mid-string-minus behavior (1h-30m, 2hr -40mins) is unchanged.

The global sign was decided by `str[0] === '-'`, reading the raw first
character. The parser already tolerates leading whitespace for the
magnitude (` 1h` parses to 3600000), but with a leading minus the
sign check saw the whitespace instead of the `-`, so ` -1h` returned
+3600000 rather than -3600000.

Test the first non-whitespace character with `/^\s*-/` instead. This
only affects a leading minus preceded by whitespace; the intentional
mid-string-minus behavior (`1h-30m`, `2hr -40mins`) is unchanged since
those inputs do not start with optional-whitespace-then-minus.
@dy

dy commented Jun 28, 2026

Copy link
Copy Markdown
Collaborator

Regex is too heavy. Any way to make it simpler? Via trim I suppose?

@naveentehrpariya

Copy link
Copy Markdown
Contributor Author

Good call — dropped the regex, now just String(str).trimStart()[0] === '-'. Tests still green.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Fixes an input-parsing bug where a leading whitespace before - caused negative durations to be interpreted as positive, aligning sign detection with the parser’s existing tolerance for leading whitespace.

Changes:

  • Update sign detection to check the first non-whitespace character rather than str[0].
  • Add test coverage for negative durations preceded by spaces and tabs.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
index.js Adjusts sign detection to handle leading whitespace before -.
test.js Adds regression tests for whitespace-prefixed negative inputs.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@dy
dy merged commit 4285dda into jkroso:master Jun 29, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants