Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite interface (v3.0) #47

Merged
merged 29 commits into from
May 16, 2024
Merged

Rewrite interface (v3.0) #47

merged 29 commits into from
May 16, 2024

Conversation

borgar
Copy link
Owner

@borgar borgar commented Oct 25, 2023

Dramatic overhaul of the parser and interface inspired by #42, the need to expose types (#38), and locale issues (#23).

Changes from 2.0:

  • Formatters are no longer constructed. Formatting is just a simple call.
    Fixes: Is there any real need for the "create a formatter" mechanism? #42

  • Types are now exposed for the entire interface.
    Closes Add "numfmt.d.ts" to package.json as types entry #38

  • nbsp option is now off by default. A non-breaking space is till used as the grouping separator in the default locale, so "13 203" should not linebreak.

  • formatColor() now returns null if pattern does not define a color. Previously it would default to "black".
    Fixes Consider indicating whether "black" color is explicitly specified or assigned as a default #40

  • locale has been fixed so that a pattern may correctly override a locale. The expected behaviour is to be able to provide a default locale and that formatters override it by modifiers.

  • Both en_US and en-US styles are now supported for locale tags.

  • Group sizing is now controlled by an option, { grouping: [ 3, 3 ] }
    The formatter had remnants of behaviour from its ancestor which allowed defining group sizing in the format. In Excel, #,##,##0 and #,##0 are equivalent but sizing is controlled via locale settings.
    Fixes Comma operator does not work correctly #48

  • dateToSerial() no longer passes non-dates through. If it gets incompatible input (such as a number), a null will be returned.

  • nativeDate option has been removed. This affects two things:

    • dateFromSerial() now always returns a date parts array ([ y, m, d, ... ]).
    • parseValue()/parseDate() can no longer return dates.

    If you need the old behaviour then here is a utility function that safely converts the output to a Date.

    function toNativeDate (dateArrray) {
      const [ y, m, d, hh, mm, ss ] = dateArrray;
      const dt = new Date(0);
      dt.setUTCFullYear(y, m - 1, d);
      dt.setUTCHours(hh, mm, ss);
      return dt;
    }

@borgar borgar merged commit e5a1966 into master May 16, 2024
@borgar borgar deleted the v3.0 branch May 16, 2024 13:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
1 participant