Skip to content
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

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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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