Skip to content

Intl.NumberFormat: Add latest options, fix previous library discrepancies #56902

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

Merged
merged 23 commits into from
Mar 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
df89080
Intl.NumberFormat: fix previous divergences from spec
Renegade334 Dec 30, 2023
f9612a0
Intl.NumberFormat: add ECMA-402 version 10 changes under es2023.intl
Renegade334 Dec 30, 2023
50e295d
Intl.NumberFormat: narrow to literal union types
Renegade334 Dec 30, 2023
7a9f949
Intl.NumberFormat: move ES23 methods from esnext.intl to es2023.intl
Renegade334 Dec 30, 2023
ef87a15
es2023.intl: CRLF
Renegade334 Dec 30, 2023
8b96367
es2023.intl: Fix interface names
Renegade334 Dec 30, 2023
0b137b9
Intl.NumberFormat: conditional type override for useGrouping
Renegade334 Dec 30, 2023
bb13158
Intl.NumberFormat: add false to ResolvedNumberFormatOptionsUseGrouping
Renegade334 Dec 30, 2023
b857806
Intl.NumberFormat: narrow currencyDisplay type
Renegade334 Dec 30, 2023
481c244
Intl.NumberFormat: narrow currencySign type
Renegade334 Dec 30, 2023
0734e7a
es2020.intl: make NumberFormatOptions.numberingSystem optional
Renegade334 Dec 31, 2023
d0876e5
Update baselines to include lib.es2023.intl.d.ts
Renegade334 Dec 31, 2023
72f7d44
Add conformance tests for es2020.intl / es2023.intl
Renegade334 Dec 31, 2023
7b73dc7
Intl.NumberFormat: remove duplicate method override from es2020.bigint
Renegade334 Dec 31, 2023
6ee47d4
Intl.NumberFormat: Registry-ise NumberFormatPartType
Renegade334 Dec 31, 2023
f8e9dda
Intl.NumberFormatPartType: add tests / update baselines
Renegade334 Dec 31, 2023
ca699fc
Restore name of exported type Intl.NumberFormatPartTypes
Renegade334 Dec 31, 2023
40cdb05
Move NumberFormat#formatRange tests from ES2021 to ES2023
Renegade334 Dec 31, 2023
a6261f9
Remove test formatToPartsBigInt (duplicate of tests included in bigin…
Renegade334 Dec 31, 2023
90b7d94
Merge branch 'main' into intl-numberformat
Renegade334 Jan 3, 2024
37c5d52
Type string registry interfaces as {key: never}
Renegade334 Feb 1, 2024
ff58e75
ResolvedNumberFormatOptions: {minimum,maximum}FractionDigits to optional
Renegade334 Feb 2, 2024
254a8ce
Merge branch 'main' into intl-numberformat
Renegade334 Feb 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/compiler/commandLineParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ const libEntries: [string, string][] = [
["es2022.regexp", "lib.es2022.regexp.d.ts"],
["es2023.array", "lib.es2023.array.d.ts"],
["es2023.collection", "lib.es2023.collection.d.ts"],
["es2023.intl", "lib.es2023.intl.d.ts"],
["esnext.array", "lib.es2023.array.d.ts"],
["esnext.collection", "lib.esnext.collection.d.ts"],
["esnext.symbol", "lib.es2019.symbol.d.ts"],
Expand Down
20 changes: 16 additions & 4 deletions src/lib/es2018.intl.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,22 @@ declare namespace Intl {

const PluralRules: PluralRulesConstructor;

// We can only have one definition for 'type' in TypeScript, and so you can learn where the keys come from here:
type ES2018NumberFormatPartType = "literal" | "nan" | "infinity" | "percent" | "integer" | "group" | "decimal" | "fraction" | "plusSign" | "minusSign" | "percentSign" | "currency" | "code" | "symbol" | "name";
Copy link
Member

Choose a reason for hiding this comment

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

NumberFormatPartTypeRegistry

ES2018

  • literal
  • nan
  • infinity
  • percent
  • integer
  • group
  • decimal
  • fraction
  • plusSign
  • minusSign
  • percentSign
  • currency

ES2020

  • compact
  • exponentInteger
  • exponentMinusSign
  • exponentSeparator
  • unit
  • unknown

type ES2020NumberFormatPartType = "compact" | "exponentInteger" | "exponentMinusSign" | "exponentSeparator" | "unit" | "unknown";
type NumberFormatPartTypes = ES2018NumberFormatPartType | ES2020NumberFormatPartType;
interface NumberFormatPartTypeRegistry {
literal: never;
nan: never;
infinity: never;
percent: never;
integer: never;
group: never;
decimal: never;
fraction: never;
plusSign: never;
minusSign: never;
percentSign: never;
currency: never;
}

type NumberFormatPartTypes = keyof NumberFormatPartTypeRegistry;

interface NumberFormatPart {
type: NumberFormatPartTypes;
Expand Down
2 changes: 1 addition & 1 deletion src/lib/es2019.intl.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
declare namespace Intl {
interface DateTimeFormatPartTypesRegistry {
unknown: any;
unknown: never;
}
}
1 change: 0 additions & 1 deletion src/lib/es2020.bigint.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,5 @@ interface DataView {
declare namespace Intl {
interface NumberFormat {
format(value: number | bigint): string;
resolvedOptions(): ResolvedNumberFormatOptions;
Copy link
Member

Choose a reason for hiding this comment

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

duplicated with entry in es5, doesn't need to be here

}
}
39 changes: 32 additions & 7 deletions src/lib/es2020.intl.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -223,24 +223,49 @@ declare namespace Intl {
): UnicodeBCP47LocaleIdentifier[];
};

interface NumberFormatOptionsStyleRegistry {
unit: never;
}

interface NumberFormatOptionsCurrencyDisplayRegistry {
narrowSymbol: never;
}

interface NumberFormatOptionsSignDisplayRegistry {
auto: never;
never: never;
always: never;
exceptZero: never;
}

type NumberFormatOptionsSignDisplay = keyof NumberFormatOptionsSignDisplayRegistry;
Copy link
Member

Choose a reason for hiding this comment

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

ES2020

  • auto
  • never
  • always
  • exceptZero

ES2023

  • negative


interface NumberFormatOptions {
numberingSystem?: string | undefined;
compactDisplay?: "short" | "long" | undefined;
notation?: "standard" | "scientific" | "engineering" | "compact" | undefined;
signDisplay?: "auto" | "never" | "always" | "exceptZero" | undefined;
signDisplay?: NumberFormatOptionsSignDisplay | undefined;
unit?: string | undefined;
unitDisplay?: "short" | "long" | "narrow" | undefined;
currencyDisplay?: string | undefined;
currencySign?: string | undefined;
currencySign?: "standard" | "accounting" | undefined;
}

interface ResolvedNumberFormatOptions {
compactDisplay?: "short" | "long";
notation?: "standard" | "scientific" | "engineering" | "compact";
signDisplay?: "auto" | "never" | "always" | "exceptZero";
notation: "standard" | "scientific" | "engineering" | "compact";
signDisplay: NumberFormatOptionsSignDisplay;
unit?: string;
unitDisplay?: "short" | "long" | "narrow";
currencyDisplay?: string;
currencySign?: string;
currencySign?: "standard" | "accounting";
}

interface NumberFormatPartTypeRegistry {
compact: never;
exponentInteger: never;
exponentMinusSign: never;
exponentSeparator: never;
unit: never;
unknown: never;
}

interface DateTimeFormatOptions {
Expand Down
1 change: 1 addition & 0 deletions src/lib/es2023.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/// <reference lib="es2022" />
/// <reference lib="es2023.array" />
/// <reference lib="es2023.collection" />
/// <reference lib="es2023.intl" />
34 changes: 34 additions & 0 deletions src/lib/es2023.intl.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
declare namespace Intl {
interface NumberFormatOptionsUseGroupingRegistry {
min2: never;
auto: never;
always: never;
}

interface NumberFormatOptionsSignDisplayRegistry {
negative: never;
}

interface NumberFormatOptions {
roundingPriority?: "auto" | "morePrecision" | "lessPrecision" | undefined;
roundingIncrement?: 1 | 2 | 5 | 10 | 20 | 25 | 50 | 100 | 200 | 250 | 500 | 1000 | 2000 | 2500 | 5000 | undefined;
roundingMode?: "ceil" | "floor" | "expand" | "trunc" | "halfCeil" | "halfFloor" | "halfExpand" | "halfTrunc" | "halfEven" | undefined;
trailingZeroDisplay?: "auto" | "stripIfInteger" | undefined;
}

interface ResolvedNumberFormatOptions {
roundingPriority: "auto" | "morePrecision" | "lessPrecision";
roundingMode: "ceil" | "floor" | "expand" | "trunc" | "halfCeil" | "halfFloor" | "halfExpand" | "halfTrunc" | "halfEven";
roundingIncrement: 1 | 2 | 5 | 10 | 20 | 25 | 50 | 100 | 200 | 250 | 500 | 1000 | 2000 | 2500 | 5000;
trailingZeroDisplay: "auto" | "stripIfInteger";
}

interface NumberRangeFormatPart extends NumberFormatPart {
source: "startRange" | "endRange" | "shared";
}

interface NumberFormat {
formatRange(start: number | bigint, end: number | bigint): string;
formatRangeToParts(start: number | bigint, end: number | bigint): NumberRangeFormatPart[];
}
}
38 changes: 30 additions & 8 deletions src/lib/es5.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4415,12 +4415,33 @@ declare namespace Intl {

var Collator: CollatorConstructor;

interface NumberFormatOptionsStyleRegistry {
decimal: never;
percent: never;
currency: never;
}

type NumberFormatOptionsStyle = keyof NumberFormatOptionsStyleRegistry;
Copy link
Member

Choose a reason for hiding this comment

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

ES5

  • decimal
  • percent
  • currency

ES2020

  • unit


interface NumberFormatOptionsCurrencyDisplayRegistry {
code: never;
symbol: never;
name: never;
}

type NumberFormatOptionsCurrencyDisplay = keyof NumberFormatOptionsCurrencyDisplayRegistry;
Copy link
Member

Choose a reason for hiding this comment

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

ES5

  • code
  • symbol
  • name

ES2020

  • narrowSymbol


interface NumberFormatOptionsUseGroupingRegistry {}
Copy link
Member

Choose a reason for hiding this comment

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

ES2023

  • min2
  • auto
  • always


type NumberFormatOptionsUseGrouping = {} extends NumberFormatOptionsUseGroupingRegistry ? boolean : keyof NumberFormatOptionsUseGroupingRegistry | "true" | "false" | boolean;
type ResolvedNumberFormatOptionsUseGrouping = {} extends NumberFormatOptionsUseGroupingRegistry ? boolean : keyof NumberFormatOptionsUseGroupingRegistry | false;

interface NumberFormatOptions {
localeMatcher?: string | undefined;
style?: string | undefined;
localeMatcher?: "lookup" | "best fit" | undefined;
style?: NumberFormatOptionsStyle | undefined;
currency?: string | undefined;
currencySign?: string | undefined;
useGrouping?: boolean | undefined;
currencyDisplay?: NumberFormatOptionsCurrencyDisplay | undefined;
useGrouping?: NumberFormatOptionsUseGrouping | undefined;
minimumIntegerDigits?: number | undefined;
minimumFractionDigits?: number | undefined;
maximumFractionDigits?: number | undefined;
Expand All @@ -4431,14 +4452,15 @@ declare namespace Intl {
interface ResolvedNumberFormatOptions {
locale: string;
numberingSystem: string;
style: string;
style: NumberFormatOptionsStyle;
currency?: string;
currencyDisplay?: NumberFormatOptionsCurrencyDisplay;
minimumIntegerDigits: number;
minimumFractionDigits: number;
maximumFractionDigits: number;
minimumFractionDigits?: number;
maximumFractionDigits?: number;
minimumSignificantDigits?: number;
maximumSignificantDigits?: number;
useGrouping: boolean;
useGrouping: ResolvedNumberFormatOptionsUseGrouping;
}

interface NumberFormat {
Expand Down
9 changes: 1 addition & 8 deletions src/lib/esnext.intl.d.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
declare namespace Intl {
interface NumberRangeFormatPart extends NumberFormatPart {
source: "startRange" | "endRange" | "shared";
}

interface NumberFormat {
formatRange(start: number | bigint, end: number | bigint): string;
formatRangeToParts(start: number | bigint, end: number | bigint): NumberRangeFormatPart[];
}
// Empty
}
1 change: 1 addition & 0 deletions src/lib/libs.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
"es2022.regexp",
"es2023.array",
"es2023.collection",
"es2023.intl",
"esnext.decorators",
"esnext.intl",
"esnext.disposable",
Expand Down

This file was deleted.

18 changes: 0 additions & 18 deletions tests/baselines/reference/DateTimeFormatAndNumberFormatES2021.js

This file was deleted.

This file was deleted.

This file was deleted.

Loading