@formatjs/intl 5.0.0-rc.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +117 -9
- package/index.js.map +1 -1
- package/package.json +3 -3
package/index.d.ts
CHANGED
|
@@ -1,17 +1,112 @@
|
|
|
1
|
-
import { FormatError, FormatXMLElementFn, Formats, Formatters as Formatters$1, IntlMessageFormat, MessageContract, MessageFormatArguments, MessageTag, MessageValue, MessageValues, MessageValues as MessageValues$1, MessageValuesOf, Options, PrimitiveType, TypedMessageValues, UntypedMessageContract } from "intl-messageformat";
|
|
1
|
+
import { FormatError, FormatXMLElementFn, Formats, Formatters as Formatters$1, IntlMessageFormat, MessageContract, MessageFormatArguments, MessageTag, MessageValue, MessageValues, MessageValues as MessageValues$1, MessageValuesOf, MessageValuesOf as MessageValuesOf$1, Options, PrimitiveType, TypedMessageValues, UntypedMessageContract } from "intl-messageformat";
|
|
2
2
|
import { MessageFormatElement } from "@formatjs/icu-messageformat-parser";
|
|
3
3
|
//#region packages/intl/typed-message.d.ts
|
|
4
|
-
export type TypedMessageDescriptor<V extends MessageValues$1> = MessageDescriptor & MessageContract<V>;
|
|
4
|
+
export type TypedMessageDescriptor<V extends MessageValues$1> = Readonly<MessageDescriptor> & MessageContract<V>;
|
|
5
5
|
export type UntypedMessageDescriptor = MessageDescriptor & UntypedMessageContract;
|
|
6
6
|
export type TypedMessageArguments<V extends MessageValues$1, T = string, TChunk = T> = MessageFormatArguments<V, T, TChunk, [options?: Options]>;
|
|
7
|
+
export declare function defineMessage<V extends MessageValues$1, const D extends MessageDescriptor>(message: D, options: {
|
|
8
|
+
typed: true;
|
|
9
|
+
}): Readonly<D> & Omit<TypedMessageDescriptor<V>, keyof D>;
|
|
10
|
+
export declare function defineMessage<V extends MessageValues$1>(message: MessageDescriptor & {
|
|
11
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
12
|
+
defaultMessage: string;
|
|
13
|
+
}, options: {
|
|
14
|
+
typed: true;
|
|
15
|
+
}): TypedMessageDescriptor<V> & Readonly<{
|
|
16
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
17
|
+
defaultMessage: string;
|
|
18
|
+
}>;
|
|
19
|
+
export declare function defineMessage<V extends MessageValues$1>(message: MessageDescriptor & {
|
|
20
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
21
|
+
defaultMessage: NonNullable<MessageDescriptor["defaultMessage"]>;
|
|
22
|
+
}, options: {
|
|
23
|
+
typed: true;
|
|
24
|
+
}): TypedMessageDescriptor<V> & Readonly<{
|
|
25
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
26
|
+
defaultMessage: NonNullable<MessageDescriptor["defaultMessage"]>;
|
|
27
|
+
}>;
|
|
28
|
+
export declare function defineMessage<V extends MessageValues$1>(message: MessageDescriptor & {
|
|
29
|
+
defaultMessage: string;
|
|
30
|
+
}, options: {
|
|
31
|
+
typed: true;
|
|
32
|
+
}): TypedMessageDescriptor<V> & Readonly<{
|
|
33
|
+
defaultMessage: string;
|
|
34
|
+
}>;
|
|
35
|
+
export declare function defineMessage<V extends MessageValues$1>(message: MessageDescriptor & {
|
|
36
|
+
defaultMessage: NonNullable<MessageDescriptor["defaultMessage"]>;
|
|
37
|
+
}, options: {
|
|
38
|
+
typed: true;
|
|
39
|
+
}): TypedMessageDescriptor<V> & Readonly<{
|
|
40
|
+
defaultMessage: NonNullable<MessageDescriptor["defaultMessage"]>;
|
|
41
|
+
}>;
|
|
42
|
+
export declare function defineMessage<V extends MessageValues$1>(message: MessageDescriptor & {
|
|
43
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
44
|
+
}, options: {
|
|
45
|
+
typed: true;
|
|
46
|
+
}): TypedMessageDescriptor<V> & Readonly<{
|
|
47
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
48
|
+
}>;
|
|
7
49
|
export declare function defineMessage<V extends MessageValues$1>(message: MessageDescriptor, options: {
|
|
8
50
|
typed: true;
|
|
9
51
|
}): TypedMessageDescriptor<V>;
|
|
10
|
-
export declare function defineMessage<T>(message: T): T
|
|
52
|
+
export declare function defineMessage<T>(message: T): Readonly<T>;
|
|
53
|
+
export declare function defineMessages<V extends Record<string, MessageValues$1>, const D extends { [K in keyof V]: MessageDescriptor; }>(messages: D, options: {
|
|
54
|
+
typed: true;
|
|
55
|
+
}): { readonly [K in keyof V]: Readonly<D[K]> & Omit<TypedMessageDescriptor<V[K]>, keyof D[K]>; };
|
|
56
|
+
export declare function defineMessages<V extends Record<string, MessageValues$1>>(messages: { [K in keyof V]: MessageDescriptor & {
|
|
57
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
58
|
+
defaultMessage: string;
|
|
59
|
+
}; }, options: {
|
|
60
|
+
typed: true;
|
|
61
|
+
}): { readonly [K in keyof V]: TypedMessageDescriptor<V[K]> & Readonly<{
|
|
62
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
63
|
+
defaultMessage: string;
|
|
64
|
+
}>; };
|
|
65
|
+
export declare function defineMessages<V extends Record<string, MessageValues$1>>(messages: { [K in keyof V]: MessageDescriptor & {
|
|
66
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
67
|
+
defaultMessage: NonNullable<MessageDescriptor["defaultMessage"]>;
|
|
68
|
+
}; }, options: {
|
|
69
|
+
typed: true;
|
|
70
|
+
}): { readonly [K in keyof V]: TypedMessageDescriptor<V[K]> & Readonly<{
|
|
71
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
72
|
+
defaultMessage: NonNullable<MessageDescriptor["defaultMessage"]>;
|
|
73
|
+
}>; };
|
|
74
|
+
export declare function defineMessages<V extends Record<string, MessageValues$1>>(messages: { [K in keyof V]: MessageDescriptor & {
|
|
75
|
+
defaultMessage: string;
|
|
76
|
+
}; }, options: {
|
|
77
|
+
typed: true;
|
|
78
|
+
}): { readonly [K in keyof V]: TypedMessageDescriptor<V[K]> & Readonly<{
|
|
79
|
+
defaultMessage: string;
|
|
80
|
+
}>; };
|
|
81
|
+
export declare function defineMessages<V extends Record<string, MessageValues$1>>(messages: { [K in keyof V]: MessageDescriptor & {
|
|
82
|
+
defaultMessage: NonNullable<MessageDescriptor["defaultMessage"]>;
|
|
83
|
+
}; }, options: {
|
|
84
|
+
typed: true;
|
|
85
|
+
}): { readonly [K in keyof V]: TypedMessageDescriptor<V[K]> & Readonly<{
|
|
86
|
+
defaultMessage: NonNullable<MessageDescriptor["defaultMessage"]>;
|
|
87
|
+
}>; };
|
|
88
|
+
export declare function defineMessages<V extends Record<string, MessageValues$1>>(messages: { [K in keyof V]: MessageDescriptor & {
|
|
89
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
90
|
+
}; }, options: {
|
|
91
|
+
typed: true;
|
|
92
|
+
}): { readonly [K in keyof V]: TypedMessageDescriptor<V[K]> & Readonly<{
|
|
93
|
+
id: NonNullable<MessageDescriptor["id"]>;
|
|
94
|
+
}>; };
|
|
11
95
|
export declare function defineMessages<V extends Record<string, MessageValues$1>>(messages: { [K in keyof V]: MessageDescriptor; }, options: {
|
|
12
96
|
typed: true;
|
|
13
|
-
}): { [K in keyof V]: TypedMessageDescriptor<V[K]>; };
|
|
14
|
-
export declare function defineMessages<K extends keyof any, T = MessageDescriptor, U extends Record<K, T> = Record<K, T>>(messages: U): U;
|
|
97
|
+
}): { readonly [K in keyof V]: TypedMessageDescriptor<V[K]>; };
|
|
98
|
+
export declare function defineMessages<K extends keyof any, T = MessageDescriptor, U extends Record<K, T> = Record<K, T>>(messages: U): { readonly [P in keyof U]: Readonly<U[P]>; };
|
|
99
|
+
/** Argument contracts keyed by application message IDs. */
|
|
100
|
+
export type RegisteredMessageId = keyof FormatjsIntl.MessageArguments & string;
|
|
101
|
+
export type RegisteredMessageValues<K extends RegisteredMessageId> = FormatjsIntl.MessageArguments[K] extends MessageValues$1 ? FormatjsIntl.MessageArguments[K] : never;
|
|
102
|
+
/** Keep known IDs out of the permissive overload without rejecting dynamic IDs. */
|
|
103
|
+
export type UnregisteredMessageDescriptor<D extends UntypedMessageDescriptor> = D & (D extends {
|
|
104
|
+
id: infer K;
|
|
105
|
+
} ? Extract<K, RegisteredMessageId> extends never ? unknown : never : unknown);
|
|
106
|
+
/** Derive a registry from typed catalog entries with literal IDs. */
|
|
107
|
+
export type MessageArgumentsFromCatalog<C extends Record<string, TypedMessageDescriptor<MessageValues$1>>> = { readonly [K in keyof C as C[K] extends {
|
|
108
|
+
id: infer I extends string;
|
|
109
|
+
} ? string extends I ? never : I : never]: MessageValuesOf$1<C[K]>; };
|
|
15
110
|
//#endregion
|
|
16
111
|
//#region packages/ecma402-abstract/types/duration.d.ts
|
|
17
112
|
interface DurationInput {
|
|
@@ -164,6 +259,7 @@ export interface Part<T = string> {
|
|
|
164
259
|
declare global {
|
|
165
260
|
namespace FormatjsIntl {
|
|
166
261
|
interface Message {}
|
|
262
|
+
interface MessageArguments {}
|
|
167
263
|
interface IntlConfig {}
|
|
168
264
|
interface Formats {}
|
|
169
265
|
}
|
|
@@ -230,14 +326,26 @@ export interface IntlFormatters<TBase = unknown> {
|
|
|
230
326
|
formatMessage<V extends MessageValues = never, T extends TBase = TBase>(this: void, descriptor: [V] extends [never] ? never : UntypedMessageDescriptor, ...args: TypedMessageArguments<NoInfer<V>, T>): string | T | Array<string | T>;
|
|
231
327
|
formatMessage<D extends TypedMessageDescriptor<MessageValues>>(this: void, descriptor: D, ...args: TypedMessageArguments<MessageValuesOf<NoInfer<D>>, string, TBase>): string;
|
|
232
328
|
formatMessage<D extends TypedMessageDescriptor<MessageValues>>(this: void, descriptor: D, ...args: TypedMessageArguments<MessageValuesOf<NoInfer<D>>, TBase>): string | TBase | Array<string | TBase>;
|
|
233
|
-
formatMessage(this: void, descriptor: UntypedMessageDescriptor
|
|
234
|
-
|
|
329
|
+
formatMessage<const K extends RegisteredMessageId>(this: void, descriptor: UntypedMessageDescriptor & {
|
|
330
|
+
id: K;
|
|
331
|
+
}, ...args: TypedMessageArguments<RegisteredMessageValues<NoInfer<K>>, string, TBase>): string;
|
|
332
|
+
formatMessage<const K extends RegisteredMessageId>(this: void, descriptor: UntypedMessageDescriptor & {
|
|
333
|
+
id: K;
|
|
334
|
+
}, ...args: TypedMessageArguments<RegisteredMessageValues<NoInfer<K>>, TBase>): string | TBase | Array<string | TBase>;
|
|
335
|
+
formatMessage<V = never, const D extends UntypedMessageDescriptor = UntypedMessageDescriptor>(this: void, descriptor: [V] extends [never] ? D & UnregisteredMessageDescriptor<NoInfer<D>> : never, values?: Record<string, PrimitiveType | FormatXMLElementFn<string, string>>, opts?: Options): string;
|
|
336
|
+
formatMessage<V = never, const D extends UntypedMessageDescriptor = UntypedMessageDescriptor>(this: void, descriptor: [V] extends [never] ? D & UnregisteredMessageDescriptor<NoInfer<D>> : never, values?: Record<string, PrimitiveType | TBase | FormatXMLElementFn<TBase>>, opts?: Options): string | TBase | Array<string | TBase>;
|
|
235
337
|
$t<V extends MessageValues = never, T extends TBase = TBase>(this: void, descriptor: [V] extends [never] ? never : UntypedMessageDescriptor, ...args: TypedMessageArguments<NoInfer<V>, string, T>): string;
|
|
236
338
|
$t<V extends MessageValues = never, T extends TBase = TBase>(this: void, descriptor: [V] extends [never] ? never : UntypedMessageDescriptor, ...args: TypedMessageArguments<NoInfer<V>, T>): string | T | Array<string | T>;
|
|
237
339
|
$t<D extends TypedMessageDescriptor<MessageValues>>(this: void, descriptor: D, ...args: TypedMessageArguments<MessageValuesOf<NoInfer<D>>, string, TBase>): string;
|
|
238
340
|
$t<D extends TypedMessageDescriptor<MessageValues>>(this: void, descriptor: D, ...args: TypedMessageArguments<MessageValuesOf<NoInfer<D>>, TBase>): string | TBase | Array<string | TBase>;
|
|
239
|
-
$t(this: void, descriptor: UntypedMessageDescriptor
|
|
240
|
-
|
|
341
|
+
$t<const K extends RegisteredMessageId>(this: void, descriptor: UntypedMessageDescriptor & {
|
|
342
|
+
id: K;
|
|
343
|
+
}, ...args: TypedMessageArguments<RegisteredMessageValues<NoInfer<K>>, string, TBase>): string;
|
|
344
|
+
$t<const K extends RegisteredMessageId>(this: void, descriptor: UntypedMessageDescriptor & {
|
|
345
|
+
id: K;
|
|
346
|
+
}, ...args: TypedMessageArguments<RegisteredMessageValues<NoInfer<K>>, TBase>): string | TBase | Array<string | TBase>;
|
|
347
|
+
$t<V = never, const D extends UntypedMessageDescriptor = UntypedMessageDescriptor>(this: void, descriptor: [V] extends [never] ? D & UnregisteredMessageDescriptor<NoInfer<D>> : never, values?: Record<string, PrimitiveType | FormatXMLElementFn<string, string>>, opts?: Options): string;
|
|
348
|
+
$t<V = never, const D extends UntypedMessageDescriptor = UntypedMessageDescriptor>(this: void, descriptor: [V] extends [never] ? D & UnregisteredMessageDescriptor<NoInfer<D>> : never, values?: Record<string, PrimitiveType | TBase | FormatXMLElementFn<TBase>>, opts?: Options): string | TBase | (TBase | string)[];
|
|
241
349
|
formatList(this: void, values: Iterable<string>, opts?: FormatListOptions): string;
|
|
242
350
|
formatList<T extends TBase>(this: void, values: Iterable<string | T>, opts?: FormatListOptions): T | string | (string | T)[];
|
|
243
351
|
formatListToParts<T extends TBase>(this: void, values: Iterable<string | T>, opts?: FormatListOptions): Part[];
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["getFormatter","getFormatter","getFormatter"],"sources":["../typed-message.ts","../error.ts","../utils.ts","../message.ts","../dateTime.ts","../duration.ts","../displayName.ts","../list.ts","../plural.ts","../relativeTime.ts","../number.ts","../create-intl.ts"],"sourcesContent":["import type {\n MessageContract,\n MessageValues,\n MessageFormatArguments,\n UntypedMessageContract,\n Options,\n} from 'intl-messageformat'\nimport type {MessageDescriptor} from '#packages/intl/types.js'\nexport type {\n MessageValue,\n MessageTag,\n MessageValues,\n MessageValuesOf,\n TypedMessageValues,\n} from 'intl-messageformat'\n\nexport type TypedMessageDescriptor<V extends MessageValues> =\n MessageDescriptor & MessageContract<V>\nexport type UntypedMessageDescriptor = MessageDescriptor &\n UntypedMessageContract\n\nexport type TypedMessageArguments<\n V extends MessageValues,\n T = string,\n TChunk = T,\n> = MessageFormatArguments<V, T, TChunk, [options?: Options]>\n\nexport function defineMessage<V extends MessageValues>(\n message: MessageDescriptor,\n options: {typed: true}\n): TypedMessageDescriptor<V>\nexport function defineMessage<T>(message: T): T\nexport function defineMessage(\n message: unknown,\n _options?: {typed: true}\n): unknown {\n return message\n}\n\nexport function defineMessages<V extends Record<string, MessageValues>>(\n messages: {[K in keyof V]: MessageDescriptor},\n options: {typed: true}\n): {[K in keyof V]: TypedMessageDescriptor<V[K]>}\nexport function defineMessages<\n K extends keyof any,\n T = MessageDescriptor,\n U extends Record<K, T> = Record<K, T>,\n>(messages: U): U\nexport function defineMessages(\n messages: unknown,\n _options?: {typed: true}\n): unknown {\n return messages\n}\n","import {type MessageDescriptor} from '#packages/intl/types.js'\n\nexport enum IntlErrorCode {\n FORMAT_ERROR = 'FORMAT_ERROR',\n UNSUPPORTED_FORMATTER = 'UNSUPPORTED_FORMATTER',\n INVALID_CONFIG = 'INVALID_CONFIG',\n MISSING_DATA = 'MISSING_DATA',\n MISSING_TRANSLATION = 'MISSING_TRANSLATION',\n}\n\nexport class IntlError<\n T extends IntlErrorCode = IntlErrorCode.FORMAT_ERROR,\n> extends Error {\n public readonly code: T\n\n constructor(code: T, message: string, exception?: Error | unknown) {\n const err = exception\n ? exception instanceof Error\n ? exception\n : new Error(String(exception))\n : undefined\n super(\n `[@formatjs/intl Error ${code}] ${message}\n${err ? `\\n${err.message}\\n${err.stack}` : ''}`\n )\n this.code = code\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (typeof Error.captureStackTrace === 'function') {\n // @ts-ignore just so we don't need to declare dep on @types/node\n Error.captureStackTrace(this, IntlError)\n }\n }\n}\n\nexport class UnsupportedFormatterError extends IntlError<IntlErrorCode.UNSUPPORTED_FORMATTER> {\n constructor(message: string, exception?: Error | unknown) {\n super(IntlErrorCode.UNSUPPORTED_FORMATTER, message, exception)\n }\n}\n\nexport class InvalidConfigError extends IntlError<IntlErrorCode.INVALID_CONFIG> {\n constructor(message: string, exception?: Error | unknown) {\n super(IntlErrorCode.INVALID_CONFIG, message, exception)\n }\n}\n\nexport class MissingDataError extends IntlError<IntlErrorCode.MISSING_DATA> {\n constructor(message: string, exception?: Error | unknown) {\n super(IntlErrorCode.MISSING_DATA, message, exception)\n }\n}\n\nexport class IntlFormatError extends IntlError<IntlErrorCode.FORMAT_ERROR> {\n public readonly descriptor?: MessageDescriptor\n public readonly locale: string\n constructor(message: string, locale: string, exception?: Error | unknown) {\n super(\n IntlErrorCode.FORMAT_ERROR,\n `${message}\nLocale: ${locale}\n`,\n exception\n )\n this.locale = locale\n }\n}\n\nexport class MessageFormatError extends IntlFormatError {\n public readonly descriptor?: MessageDescriptor\n public readonly locale: string\n constructor(\n message: string,\n locale: string,\n descriptor?: MessageDescriptor,\n exception?: Error | unknown\n ) {\n super(\n `${message}\nMessageID: ${descriptor?.id}\nDefault Message: ${descriptor?.defaultMessage}\nDescription: ${descriptor?.description}\n`,\n locale,\n exception\n )\n this.descriptor = descriptor\n this.locale = locale\n }\n}\n\nexport class MissingTranslationError extends IntlError<IntlErrorCode.MISSING_TRANSLATION> {\n public readonly descriptor?: MessageDescriptor\n constructor(descriptor: MessageDescriptor, locale: string) {\n super(\n IntlErrorCode.MISSING_TRANSLATION,\n `Missing message: \"${descriptor.id}\" for locale \"${locale}\", using ${\n descriptor.defaultMessage\n ? `default message (${\n typeof descriptor.defaultMessage === 'string'\n ? descriptor.defaultMessage\n : descriptor.defaultMessage\n .map((e: any) => e.value ?? JSON.stringify(e))\n .join()\n })`\n : 'id'\n } as fallback.`\n )\n this.descriptor = descriptor\n }\n}\n","import type {DurationFormatOptions} from '#packages/ecma402-abstract/types/duration.js'\nimport {type NumberFormatOptions} from '#packages/ecma402-abstract/types/number.js'\nimport {type Cache, memoize, strategies} from '@formatjs/fast-memoize'\nimport {IntlMessageFormat} from 'intl-messageformat'\nimport {UnsupportedFormatterError} from '#packages/intl/error.js'\nimport {\n type CustomFormats,\n type Formatters,\n type IntlCache,\n type OnErrorFn,\n type OnWarnFn,\n type ResolvedIntlConfig,\n} from '#packages/intl/types.js'\n\nexport function invariant(\n condition: boolean,\n message: string,\n Err: any = Error\n): asserts condition {\n if (!condition) {\n throw new Err(message)\n }\n}\n\nexport function filterProps<T extends Record<string, any>, K extends string>(\n props: T,\n allowlist: Array<K>,\n defaults: Partial<T> = {}\n): Pick<T, K> {\n return allowlist.reduce(\n (filtered, name) => {\n if (name in props) {\n filtered[name] = props[name]\n } else if (name in defaults) {\n filtered[name] = defaults[name]!\n }\n\n return filtered\n },\n {} as Pick<T, K>\n )\n}\n\nconst defaultErrorHandler: OnErrorFn = error => {\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (process.env.NODE_ENV !== 'production') {\n console.error(error)\n }\n}\n\nconst defaultWarnHandler: OnWarnFn = (warning: string) => {\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (process.env.NODE_ENV !== 'production') {\n console.warn(warning)\n }\n}\n\nexport const DEFAULT_INTL_CONFIG: Pick<\n ResolvedIntlConfig<any>,\n | 'fallbackOnEmptyString'\n | 'formats'\n | 'messages'\n | 'timeZone'\n | 'defaultLocale'\n | 'defaultFormats'\n | 'onError'\n | 'onWarn'\n> = {\n formats: {},\n messages: {},\n timeZone: undefined,\n\n defaultLocale: 'en',\n defaultFormats: {},\n\n fallbackOnEmptyString: true,\n\n onError: defaultErrorHandler,\n onWarn: defaultWarnHandler,\n}\n\nexport function createIntlCache(): IntlCache {\n return {\n dateTime: {},\n number: {},\n message: {},\n duration: {},\n relativeTime: {},\n pluralRules: {},\n list: {},\n displayNames: {},\n }\n}\n\nfunction createFastMemoizeCache<V>(\n store: Record<string, V | undefined>\n): Cache<string, V> {\n return {\n create() {\n return {\n get(key) {\n return store[key]\n },\n set(key, value) {\n store[key] = value\n },\n }\n },\n }\n}\n\n/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */\nexport function createFormatters(\n cache: IntlCache = createIntlCache()\n): Formatters {\n const RelativeTimeFormat = (Intl as any).RelativeTimeFormat\n const ListFormat = (Intl as any).ListFormat\n const DisplayNames = (Intl as any).DisplayNames\n const getDateTimeFormat = memoize(\n (...args) => new Intl.DateTimeFormat(...args),\n {\n cache: createFastMemoizeCache(cache.dateTime),\n strategy: strategies.variadic,\n }\n )\n const getNumberFormat = memoize((...args) => new Intl.NumberFormat(...args), {\n cache: createFastMemoizeCache(cache.number),\n strategy: strategies.variadic,\n })\n const getPluralRules = memoize((...args) => new Intl.PluralRules(...args), {\n cache: createFastMemoizeCache(cache.pluralRules),\n strategy: strategies.variadic,\n })\n return {\n getDateTimeFormat,\n getNumberFormat,\n getMessageFormat: memoize(\n (message, locales, overrideFormats, opts) =>\n new IntlMessageFormat(message, locales, overrideFormats, {\n formatters: {\n getNumberFormat,\n getDateTimeFormat,\n getPluralRules,\n },\n ...opts,\n }),\n {\n cache: createFastMemoizeCache(cache.message),\n strategy: strategies.variadic,\n }\n ),\n getDurationFormat: memoize((...args) => new Intl.DurationFormat(...args), {\n cache: createFastMemoizeCache(cache.duration),\n strategy: strategies.variadic,\n }),\n getRelativeTimeFormat: memoize(\n (...args) => new RelativeTimeFormat(...args),\n {\n cache: createFastMemoizeCache(cache.relativeTime),\n strategy: strategies.variadic,\n }\n ),\n getPluralRules,\n getListFormat: memoize((...args) => new ListFormat(...args), {\n cache: createFastMemoizeCache(cache.list),\n strategy: strategies.variadic,\n }),\n getDisplayNames: memoize((...args) => new DisplayNames(...args), {\n cache: createFastMemoizeCache(cache.displayNames),\n strategy: strategies.variadic,\n }),\n }\n}\n\nexport function getNamedFormat<T extends keyof CustomFormats>(\n formats: CustomFormats,\n type: T,\n name: string,\n onError: OnErrorFn\n):\n | NumberFormatOptions\n | Intl.DateTimeFormatOptions\n | Intl.RelativeTimeFormatOptions\n | DurationFormatOptions\n | undefined {\n const formatType = formats && formats[type]\n let format\n if (formatType) {\n format = formatType[name]\n }\n if (format) {\n return format\n }\n\n onError(new UnsupportedFormatterError(`No ${type} format named: ${name}`))\n}\n","import {\n type CustomFormats,\n type Formatters,\n type MessageDescriptor,\n type OnErrorFn,\n} from '#packages/intl/types.js'\n\nimport {\n type MessageFormatElement,\n TYPE,\n} from '@formatjs/icu-messageformat-parser'\nimport {\n type FormatXMLElementFn,\n IntlMessageFormat,\n type Formatters as IntlMessageFormatFormatters,\n type Options,\n type PrimitiveType,\n} from 'intl-messageformat'\nimport {\n MessageFormatError,\n MissingTranslationError,\n} from '#packages/intl/error.js'\nimport {invariant} from '#packages/intl/utils.js'\n\nfunction setTimeZoneInOptions(\n opts: Record<string, Intl.DateTimeFormatOptions>,\n timeZone: string\n): Record<string, Intl.DateTimeFormatOptions> {\n return Object.keys(opts).reduce(\n (all: Record<string, Intl.DateTimeFormatOptions>, k) => {\n all[k] = {\n timeZone,\n ...opts[k],\n }\n return all\n },\n {}\n )\n}\n\nfunction deepMergeOptions(\n opts1: Record<string, Intl.DateTimeFormatOptions>,\n opts2: Record<string, Intl.DateTimeFormatOptions>\n): Record<string, Intl.DateTimeFormatOptions> {\n const keys = Object.keys({...opts1, ...opts2})\n return keys.reduce((all: Record<string, Intl.DateTimeFormatOptions>, k) => {\n all[k] = {\n ...opts1[k],\n ...opts2[k],\n }\n return all\n }, {})\n}\n\nfunction deepMergeFormatsAndSetTimeZone(\n f1: CustomFormats,\n timeZone?: string\n): CustomFormats {\n if (!timeZone) {\n return f1\n }\n const mfFormats = IntlMessageFormat.formats\n return {\n ...mfFormats,\n ...f1,\n date: deepMergeOptions(\n setTimeZoneInOptions(mfFormats.date, timeZone),\n setTimeZoneInOptions(f1.date || {}, timeZone)\n ),\n time: deepMergeOptions(\n setTimeZoneInOptions(mfFormats.time, timeZone),\n setTimeZoneInOptions(f1.time || {}, timeZone)\n ),\n }\n}\n\nexport type FormatMessageFn<T> = (\n {\n locale,\n formats,\n messages,\n defaultLocale,\n defaultFormats,\n fallbackOnEmptyString,\n onError,\n timeZone,\n defaultRichTextElements,\n }: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n messages: Record<string, string> | Record<string, MessageFormatElement[]>\n defaultLocale: string\n defaultFormats: CustomFormats\n defaultRichTextElements?: Record<string, FormatXMLElementFn<T>>\n fallbackOnEmptyString?: boolean\n onError: OnErrorFn\n },\n state: IntlMessageFormatFormatters & Pick<Formatters, 'getMessageFormat'>,\n messageDescriptor: MessageDescriptor,\n values?: Record<string, PrimitiveType | T | FormatXMLElementFn<T>>,\n opts?: Options\n) => T extends string ? string : Array<T | string> | string | T\n\nfunction getMessageDescriptorContext(\n messageDescriptor: MessageDescriptor\n): string {\n const {defaultMessage} = messageDescriptor\n try {\n return defaultMessage !== undefined\n ? `\\nDefault Message: ${\n typeof defaultMessage === 'string'\n ? defaultMessage\n : JSON.stringify(defaultMessage)\n }`\n : `\\nMessage Descriptor: ${JSON.stringify(messageDescriptor)}`\n } catch {\n return ''\n }\n}\n\nexport const formatMessage: FormatMessageFn<any> = (\n {\n locale,\n formats,\n messages,\n defaultLocale,\n defaultFormats,\n fallbackOnEmptyString,\n onError,\n timeZone,\n defaultRichTextElements,\n },\n state,\n messageDescriptor = {id: ''},\n values,\n opts\n) => {\n const {id: msgId, defaultMessage} = messageDescriptor\n\n // `id` is a required field of a Message Descriptor.\n if (!msgId) {\n invariant(\n false,\n `[@formatjs/intl] An \\`id\\` must be provided to format a message. You can either:\n1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.github.io/docs/tooling/babel-plugin)\nor [@formatjs/ts-transformer](https://formatjs.github.io/docs/tooling/ts-transformer) OR\n2. Configure your \\`eslint\\` config to include [eslint-plugin-formatjs](https://formatjs.github.io/docs/tooling/linter#enforce-id)\nto autofix this issue${getMessageDescriptorContext(messageDescriptor)}`\n )\n }\n const id = String(msgId)\n const message =\n // In case messages is Object.create(null)\n // e.g import('foo.json') from webpack)\n // See https://github.com/formatjs/formatjs/issues/1914\n messages &&\n Object.prototype.hasOwnProperty.call(messages, id) &&\n messages[id]\n\n // IMPORTANT: Hot path if `message` is AST with a single literal node\n if (\n Array.isArray(message) &&\n message.length === 1 &&\n message[0].type === TYPE.literal\n ) {\n return message[0].value\n }\n\n values = {\n ...defaultRichTextElements,\n ...values,\n }\n formats = deepMergeFormatsAndSetTimeZone(formats, timeZone)\n defaultFormats = deepMergeFormatsAndSetTimeZone(defaultFormats, timeZone)\n\n if (!message) {\n if (fallbackOnEmptyString === false && message === '') {\n return message\n }\n\n if (\n !defaultMessage ||\n (locale && locale.toLowerCase() !== defaultLocale.toLowerCase())\n ) {\n // This prevents warnings from littering the console in development\n // when no `messages` are passed into the <IntlProvider> for the\n // default locale.\n onError(new MissingTranslationError(messageDescriptor, locale))\n }\n if (defaultMessage) {\n try {\n const formatter = state.getMessageFormat(\n defaultMessage,\n defaultLocale,\n defaultFormats,\n opts\n )\n\n return formatter.format(values)\n } catch (e) {\n onError(\n new MessageFormatError(\n `Error formatting default message for: \"${id}\", rendering default message verbatim`,\n locale,\n messageDescriptor,\n e\n )\n )\n return typeof defaultMessage === 'string' ? defaultMessage : id\n }\n }\n return id\n }\n\n // We have the translated message\n try {\n const formatter = state.getMessageFormat(message, locale, formats, {\n formatters: state,\n ...opts,\n })\n\n return formatter.format<any>(values)\n } catch (e) {\n onError(\n new MessageFormatError(\n `Error formatting message: \"${id}\", using ${\n defaultMessage ? 'default message' : 'id'\n } as fallback.`,\n locale,\n messageDescriptor,\n e\n )\n )\n }\n\n if (defaultMessage) {\n try {\n const formatter = state.getMessageFormat(\n defaultMessage,\n defaultLocale,\n defaultFormats,\n opts\n )\n\n return formatter.format(values)\n } catch (e) {\n onError(\n new MessageFormatError(\n `Error formatting the default message for: \"${id}\", rendering message verbatim`,\n locale,\n messageDescriptor,\n e\n )\n )\n }\n }\n\n if (typeof message === 'string') {\n return message\n }\n if (typeof defaultMessage === 'string') {\n return defaultMessage\n }\n return id\n}\n","import {\n type CustomFormats,\n type Formatters,\n type IntlFormatters,\n type OnErrorFn,\n} from '#packages/intl/types.js'\n\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {filterProps, getNamedFormat} from '#packages/intl/utils.js'\n\nconst DATE_TIME_FORMAT_OPTIONS: Array<keyof Intl.DateTimeFormatOptions> = [\n 'formatMatcher',\n\n 'timeZone',\n 'hour12',\n\n 'weekday',\n 'era',\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'timeZoneName',\n 'hourCycle',\n 'dateStyle',\n 'timeStyle',\n 'calendar',\n // 'dayPeriod',\n 'numberingSystem',\n 'fractionalSecondDigits',\n]\n\nexport function getFormatter(\n {\n locale,\n formats,\n onError,\n timeZone,\n }: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n type: 'date' | 'time' | 'dateTimeRange',\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n options: Parameters<IntlFormatters['formatDate']>[1] = {}\n): Intl.DateTimeFormat {\n const {format} = options\n const defaults = {\n ...(timeZone && {timeZone}),\n ...(format && getNamedFormat(formats!, type, format, onError)),\n }\n\n let filteredOptions = filterProps(\n options,\n DATE_TIME_FORMAT_OPTIONS,\n defaults\n ) as Intl.DateTimeFormatOptions\n\n if (\n type === 'time' &&\n !filteredOptions.hour &&\n !filteredOptions.minute &&\n !filteredOptions.second &&\n !filteredOptions.timeStyle &&\n !filteredOptions.dateStyle\n ) {\n // Add default formatting options if hour, minute, or second isn't defined.\n filteredOptions = {...filteredOptions, hour: 'numeric', minute: 'numeric'}\n }\n\n return getDateTimeFormat(locale, filteredOptions)\n}\n\nexport function formatDate(\n config: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n value: Parameters<IntlFormatters['formatDate']>[0],\n options: Parameters<IntlFormatters['formatDate']>[1] = {}\n): string {\n const date = typeof value === 'string' ? new Date(value || 0) : value\n try {\n return getFormatter(config, 'date', getDateTimeFormat, options).format(date)\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting date.', config.locale, e)\n )\n }\n\n return String(date)\n}\n\nexport function formatTime(\n config: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n value: Parameters<IntlFormatters['formatTime']>[0],\n options: Parameters<IntlFormatters['formatTime']>[1] = {}\n): string {\n const date = typeof value === 'string' ? new Date(value || 0) : value\n\n try {\n return getFormatter(config, 'time', getDateTimeFormat, options).format(date)\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting time.', config.locale, e)\n )\n }\n\n return String(date)\n}\n\nexport function formatDateTimeRange(\n config: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n from: Parameters<IntlFormatters['formatDateTimeRange']>[0],\n to: Parameters<IntlFormatters['formatDateTimeRange']>[1],\n options: Parameters<IntlFormatters['formatDateTimeRange']>[2] = {}\n): string {\n const fromDate = typeof from === 'string' ? new Date(from || 0) : from\n const toDate = typeof to === 'string' ? new Date(to || 0) : to\n\n try {\n return getFormatter(\n config,\n 'dateTimeRange',\n getDateTimeFormat,\n options\n ).formatRange(fromDate, toDate)\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting date time range.', config.locale, e)\n )\n }\n\n return String(fromDate)\n}\n\nexport function formatDateToParts(\n config: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n value: Parameters<IntlFormatters['formatDate']>[0],\n options: Parameters<IntlFormatters['formatDate']>[1] = {}\n): Intl.DateTimeFormatPart[] {\n const date = typeof value === 'string' ? new Date(value || 0) : value\n try {\n return getFormatter(\n config,\n 'date',\n getDateTimeFormat,\n options\n ).formatToParts(date) as Intl.DateTimeFormatPart[] // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting date.', config.locale, e)\n )\n }\n\n return []\n}\n\nexport function formatTimeToParts(\n config: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n value: Parameters<IntlFormatters['formatTimeToParts']>[0],\n options: Parameters<IntlFormatters['formatTimeToParts']>[1] = {}\n): Intl.DateTimeFormatPart[] {\n const date = typeof value === 'string' ? new Date(value || 0) : value\n\n try {\n return getFormatter(\n config,\n 'time',\n getDateTimeFormat,\n options\n ).formatToParts(date) as Intl.DateTimeFormatPart[] // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting time.', config.locale, e)\n )\n }\n\n return []\n}\n","import {IntlFormatError} from '#packages/intl/error.js'\nimport type {\n CustomFormats,\n FormatDurationOptions,\n Formatters,\n IntlFormatters,\n OnErrorFn,\n} from '#packages/intl/types.js'\nimport {filterProps, getNamedFormat} from '#packages/intl/utils.js'\nimport {ErrorCode, FormatError} from 'intl-messageformat'\n\nconst DURATION_FORMAT_OPTIONS: Array<\n Exclude<keyof FormatDurationOptions, 'format'>\n> = [\n 'style',\n 'numberingSystem',\n 'years',\n 'yearsDisplay',\n 'months',\n 'monthsDisplay',\n 'weeks',\n 'weeksDisplay',\n 'days',\n 'daysDisplay',\n 'hours',\n 'hoursDisplay',\n 'minutes',\n 'minutesDisplay',\n 'seconds',\n 'secondsDisplay',\n 'milliseconds',\n 'millisecondsDisplay',\n 'microseconds',\n 'microsecondsDisplay',\n 'nanoseconds',\n 'nanosecondsDisplay',\n 'fractionalDigits',\n]\n\ntype Config = {\n locale: string\n formats: CustomFormats\n onError: OnErrorFn\n}\n\nfunction getFormatter(\n {locale, formats, onError}: Config,\n getDurationFormat: Formatters['getDurationFormat'],\n options: FormatDurationOptions\n): ReturnType<Formatters['getDurationFormat']> | undefined {\n if (!Intl.DurationFormat) {\n onError(\n new FormatError(\n 'Intl.DurationFormat is not available in this environment.\\nTry polyfilling it using \"@formatjs/intl-durationformat\"',\n ErrorCode.MISSING_INTL_API\n )\n )\n return\n }\n\n const {format} = options\n const defaults = ((format &&\n getNamedFormat(formats, 'duration', format, onError)) ||\n {}) as FormatDurationOptions\n return getDurationFormat(\n locale,\n filterProps(options, DURATION_FORMAT_OPTIONS, defaults)\n )\n}\n\nexport function formatDuration(\n config: Config,\n getDurationFormat: Formatters['getDurationFormat'],\n value: Parameters<IntlFormatters['formatDuration']>[0],\n options: FormatDurationOptions = {}\n): string {\n try {\n return getFormatter(config, getDurationFormat, options)?.format(value) ?? ''\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting duration.', config.locale, e)\n )\n }\n return ''\n}\n\nexport function formatDurationToParts(\n config: Config,\n getDurationFormat: Formatters['getDurationFormat'],\n value: Parameters<IntlFormatters['formatDuration']>[0],\n options: FormatDurationOptions = {}\n): ReturnType<IntlFormatters['formatDurationToParts']> {\n try {\n return (\n getFormatter(config, getDurationFormat, options)?.formatToParts(value) ??\n []\n )\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting duration.', config.locale, e)\n )\n }\n return []\n}\n","import {\n type Formatters,\n type IntlFormatters,\n type OnErrorFn,\n} from '#packages/intl/types.js'\nimport {filterProps} from '#packages/intl/utils.js'\n\nimport {ErrorCode, FormatError} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\n\nconst DISPLAY_NAMES_OPTONS: Array<keyof Intl.DisplayNamesOptions> = [\n 'style',\n 'type',\n 'fallback',\n 'languageDisplay',\n]\n\nexport function formatDisplayName(\n {\n locale,\n onError,\n }: {\n locale: string\n onError: OnErrorFn\n },\n getDisplayNames: Formatters['getDisplayNames'],\n value: Parameters<IntlFormatters['formatDisplayName']>[0],\n options: Parameters<IntlFormatters['formatDisplayName']>[1]\n): string | undefined {\n const DisplayNames: typeof Intl.DisplayNames = (Intl as any).DisplayNames\n if (!DisplayNames) {\n onError(\n new FormatError(\n `Intl.DisplayNames is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-displaynames\"\n`,\n ErrorCode.MISSING_INTL_API\n )\n )\n }\n const filteredOptions = filterProps(\n options,\n DISPLAY_NAMES_OPTONS\n ) as Intl.DisplayNamesOptions\n try {\n return getDisplayNames(locale, filteredOptions).of(value)\n } catch (e) {\n onError(new IntlFormatError('Error formatting display name.', locale, e))\n }\n}\n","import {ErrorCode, FormatError} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {\n type Formatters,\n type IntlFormatters,\n type OnErrorFn,\n type Part,\n} from '#packages/intl/types.js'\nimport {filterProps} from '#packages/intl/utils.js'\n\nconst LIST_FORMAT_OPTIONS: Array<keyof Intl.ListFormatOptions> = [\n 'type',\n 'style',\n]\n\nconst now = Date.now()\n\nfunction generateToken(i: number): string {\n return `${now}_${i}_${now}`\n}\n\nexport function formatList(\n opts: {\n locale: string\n onError: OnErrorFn\n },\n getListFormat: Formatters['getListFormat'],\n values: Iterable<string>,\n options: Parameters<IntlFormatters['formatList']>[1]\n): string\nexport function formatList<T>(\n opts: {\n locale: string\n onError: OnErrorFn\n },\n getListFormat: Formatters['getListFormat'],\n values: Iterable<string | T>,\n options: Parameters<IntlFormatters['formatList']>[1] = {}\n): Array<T | string> | T | string {\n const results = formatListToParts(\n opts,\n getListFormat,\n values,\n options\n ).reduce((all: Array<string | T>, el) => {\n const val = el.value\n if (typeof val !== 'string') {\n all.push(val)\n } else if (typeof all[all.length - 1] === 'string') {\n all[all.length - 1] += val\n } else {\n all.push(val)\n }\n return all\n }, [])\n return results.length === 1 ? results[0] : results.length === 0 ? '' : results\n}\n\nexport function formatListToParts<T>(\n opts: {\n locale: string\n onError: OnErrorFn\n },\n getListFormat: Formatters['getListFormat'],\n values: Iterable<string | T>,\n options: Parameters<IntlFormatters['formatList']>[1]\n): Part[]\nexport function formatListToParts<T>(\n {\n locale,\n onError,\n }: {\n locale: string\n onError: OnErrorFn\n },\n getListFormat: Formatters['getListFormat'],\n values: Parameters<IntlFormatters['formatList']>[0],\n options: Parameters<IntlFormatters['formatList']>[1] = {}\n): Part<T>[] {\n const ListFormat: typeof Intl.ListFormat = Intl.ListFormat\n if (!ListFormat) {\n onError(\n new FormatError(\n `Intl.ListFormat is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-listformat\"\n`,\n ErrorCode.MISSING_INTL_API\n )\n )\n }\n const filteredOptions = filterProps(\n options,\n LIST_FORMAT_OPTIONS\n ) as Intl.ListFormatOptions\n\n try {\n const richValues: Record<string, T> = {}\n const serializedValues = Array.from(values).map((v, i) => {\n if (typeof v === 'object' && v !== null) {\n const id = generateToken(i)\n richValues[id] = v as any\n return id\n }\n return String(v)\n })\n return getListFormat(locale, filteredOptions)\n .formatToParts(serializedValues)\n .map(\n part =>\n (part.type === 'literal'\n ? part\n : {...part, value: richValues[part.value] || part.value}) as Part<T>\n )\n } catch (e) {\n onError(new IntlFormatError('Error formatting list.', locale, e))\n }\n\n // @ts-ignore\n return values\n}\n","import {ErrorCode, FormatError} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {\n type Formatters,\n type IntlFormatters,\n type OnErrorFn,\n} from '#packages/intl/types.js'\nimport {filterProps} from '#packages/intl/utils.js'\n\nconst PLURAL_FORMAT_OPTIONS: Array<keyof Intl.PluralRulesOptions> = ['type']\n\nexport function formatPlural(\n {\n locale,\n onError,\n }: {\n locale: string\n onError: OnErrorFn\n },\n getPluralRules: Formatters['getPluralRules'],\n value: Parameters<IntlFormatters['formatPlural']>[0],\n options: Parameters<IntlFormatters['formatPlural']>[1] = {}\n): Intl.LDMLPluralRule {\n if (!Intl.PluralRules) {\n onError(\n new FormatError(\n `Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n`,\n ErrorCode.MISSING_INTL_API\n )\n )\n }\n const filteredOptions = filterProps(\n options,\n PLURAL_FORMAT_OPTIONS\n ) as Intl.PluralRulesOptions\n\n try {\n return getPluralRules(locale, filteredOptions).select(\n value\n ) as Intl.LDMLPluralRule\n } catch (e) {\n onError(new IntlFormatError('Error formatting plural.', locale, e))\n }\n\n return 'other'\n}\n","import {\n type IntlFormatters,\n type Formatters,\n type CustomFormats,\n type OnErrorFn,\n} from '#packages/intl/types.js'\n\nimport {getNamedFormat, filterProps} from '#packages/intl/utils.js'\nimport {FormatError, ErrorCode} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\n\nconst RELATIVE_TIME_FORMAT_OPTIONS: Array<\n keyof Intl.RelativeTimeFormatOptions\n> = ['numeric', 'style']\n\nfunction getFormatter(\n {\n locale,\n formats,\n onError,\n }: {\n locale: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getRelativeTimeFormat: Formatters['getRelativeTimeFormat'],\n options: Parameters<IntlFormatters['formatRelativeTime']>[2] = {}\n): Intl.RelativeTimeFormat {\n const {format} = options\n\n const defaults =\n (!!format && getNamedFormat(formats, 'relative', format, onError)) || {}\n const filteredOptions = filterProps(\n options,\n RELATIVE_TIME_FORMAT_OPTIONS,\n defaults as Intl.RelativeTimeFormatOptions\n ) as Intl.RelativeTimeFormatOptions\n\n return getRelativeTimeFormat(locale, filteredOptions)\n}\n\nexport function formatRelativeTime(\n config: {\n locale: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getRelativeTimeFormat: Formatters['getRelativeTimeFormat'],\n value: Parameters<IntlFormatters['formatRelativeTime']>[0],\n unit?: Parameters<IntlFormatters['formatRelativeTime']>[1],\n options: Parameters<IntlFormatters['formatRelativeTime']>[2] = {}\n): string {\n if (!unit) {\n unit = 'second'\n }\n const RelativeTimeFormat = Intl.RelativeTimeFormat\n if (!RelativeTimeFormat) {\n config.onError(\n new FormatError(\n `Intl.RelativeTimeFormat is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-relativetimeformat\"\n`,\n ErrorCode.MISSING_INTL_API\n )\n )\n }\n try {\n return getFormatter(config, getRelativeTimeFormat, options).format(\n value,\n unit\n )\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting relative time.', config.locale, e)\n )\n }\n\n return String(value)\n}\n","import {type NumberFormatOptions} from '#packages/ecma402-abstract/types/number.js'\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {\n type CustomFormats,\n type Formatters,\n type IntlFormatters,\n type OnErrorFn,\n} from '#packages/intl/types.js'\nimport {filterProps, getNamedFormat} from '#packages/intl/utils.js'\n\nconst NUMBER_FORMAT_OPTIONS: Array<keyof NumberFormatOptions> = [\n 'style',\n 'currency',\n 'unit',\n 'unitDisplay',\n 'useGrouping',\n\n 'minimumIntegerDigits',\n 'minimumFractionDigits',\n 'maximumFractionDigits',\n 'minimumSignificantDigits',\n 'maximumSignificantDigits',\n\n // ES2020 NumberFormat\n 'compactDisplay',\n 'currencyDisplay',\n 'currencySign',\n 'notation',\n 'signDisplay',\n 'unit',\n 'unitDisplay',\n 'numberingSystem',\n\n // ES2023 NumberFormat\n 'trailingZeroDisplay',\n 'roundingPriority',\n 'roundingIncrement',\n 'roundingMode',\n]\n\nexport function getFormatter(\n {\n locale,\n formats,\n onError,\n }: {\n locale: string\n\n formats: CustomFormats\n onError: OnErrorFn\n },\n getNumberFormat: Formatters['getNumberFormat'],\n options: Parameters<IntlFormatters['formatNumber']>[1] = {}\n): Intl.NumberFormat {\n const {format} = options\n const defaults = ((format &&\n getNamedFormat(formats!, 'number', format, onError)) ||\n {}) as NumberFormatOptions\n const filteredOptions = filterProps(\n options,\n NUMBER_FORMAT_OPTIONS,\n defaults\n ) as NumberFormatOptions\n\n return getNumberFormat(locale, filteredOptions)\n}\n\nexport function formatNumber(\n config: {\n locale: string\n\n formats: CustomFormats\n onError: OnErrorFn\n },\n getNumberFormat: Formatters['getNumberFormat'],\n value: Parameters<IntlFormatters['formatNumber']>[0],\n options: Parameters<IntlFormatters['formatNumber']>[1] = {}\n): string {\n try {\n return getFormatter(config, getNumberFormat, options).format(value)\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting number.', config.locale, e)\n )\n }\n\n return String(value)\n}\n\nexport function formatNumberToParts(\n config: {\n locale: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getNumberFormat: Formatters['getNumberFormat'],\n value: Parameters<IntlFormatters['formatNumber']>[0],\n options: Parameters<IntlFormatters['formatNumber']>[1] = {}\n): Intl.NumberFormatPart[] {\n try {\n return getFormatter(config, getNumberFormat, options).formatToParts(\n value as number\n )\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting number.', config.locale, e)\n )\n }\n\n return []\n}\n","import {\n formatDate,\n formatDateTimeRange,\n formatDateToParts,\n formatTime,\n formatTimeToParts,\n} from '#packages/intl/dateTime.js'\nimport {formatDisplayName} from '#packages/intl/displayName.js'\nimport {formatDuration, formatDurationToParts} from '#packages/intl/duration.js'\nimport {InvalidConfigError, MissingDataError} from '#packages/intl/error.js'\nimport {formatList, formatListToParts} from '#packages/intl/list.js'\nimport {formatMessage} from '#packages/intl/message.js'\nimport {formatNumber, formatNumberToParts} from '#packages/intl/number.js'\nimport {formatPlural} from '#packages/intl/plural.js'\nimport {formatRelativeTime} from '#packages/intl/relativeTime.js'\nimport {\n type IntlCache,\n type IntlConfig,\n type IntlShape,\n type ResolvedIntlConfig,\n} from '#packages/intl/types.js'\nimport {createFormatters, DEFAULT_INTL_CONFIG} from '#packages/intl/utils.js'\nimport {type MessageFormatElement} from '@formatjs/icu-messageformat-parser'\n\nexport interface CreateIntlFn<\n T = string,\n C extends IntlConfig<T> = IntlConfig<T>,\n S extends IntlShape<T> = IntlShape<T>,\n> {\n (config: C, cache?: IntlCache): S\n}\n\nfunction messagesContainString(\n messages: Record<string, string> | Record<string, MessageFormatElement[]>\n): messages is Record<string, MessageFormatElement[]> {\n const firstMessage = messages ? messages[Object.keys(messages)[0]] : undefined\n\n return typeof firstMessage === 'string'\n}\n\nfunction verifyConfigMessages<T = string>(config: IntlConfig<T>) {\n if (\n config.onWarn &&\n config.defaultRichTextElements &&\n messagesContainString(config.messages || {})\n ) {\n config.onWarn(`[@formatjs/intl] \"defaultRichTextElements\" was specified but \"message\" was not pre-compiled. \nPlease consider using \"@formatjs/cli\" to pre-compile your messages for performance.\nFor more details see https://formatjs.github.io/docs/getting-started/message-distribution`)\n }\n}\n\n/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */\nexport function createIntl<T = string>(\n config: IntlConfig<T>,\n cache?: IntlCache\n): IntlShape<T> {\n const formatters = createFormatters(cache)\n const resolvedConfig: ResolvedIntlConfig<T> = {\n ...DEFAULT_INTL_CONFIG,\n ...config,\n }\n\n const {locale, defaultLocale, onError} = resolvedConfig\n if (!locale) {\n if (onError) {\n onError(\n new InvalidConfigError(\n `\"locale\" was not configured, using \"${defaultLocale}\" as fallback. See https://formatjs.github.io/docs/react-intl/api#intlshape for more details`\n )\n )\n }\n // Since there's no registered locale data for `locale`, this will\n // fallback to the `defaultLocale` to make sure things can render.\n // The `messages` are overridden to the `defaultProps` empty object\n // to maintain referential equality across re-renders. It's assumed\n // each <FormattedMessage> contains a `defaultMessage` prop.\n resolvedConfig.locale = resolvedConfig.defaultLocale || 'en'\n } else if (!Intl.NumberFormat.supportedLocalesOf(locale).length && onError) {\n onError(\n new MissingDataError(\n `Missing locale data for locale: \"${locale}\" in Intl.NumberFormat. Using default locale: \"${defaultLocale}\" as fallback. See https://formatjs.github.io/docs/react-intl#runtime-requirements for more details`\n )\n )\n } else if (\n !Intl.DateTimeFormat.supportedLocalesOf(locale).length &&\n onError\n ) {\n onError(\n new MissingDataError(\n `Missing locale data for locale: \"${locale}\" in Intl.DateTimeFormat. Using default locale: \"${defaultLocale}\" as fallback. See https://formatjs.github.io/docs/react-intl#runtime-requirements for more details`\n )\n )\n }\n\n verifyConfigMessages(resolvedConfig)\n return {\n ...resolvedConfig,\n formatters,\n formatNumber: formatNumber.bind(\n null,\n resolvedConfig,\n formatters.getNumberFormat\n ),\n formatNumberToParts: formatNumberToParts.bind(\n null,\n resolvedConfig,\n formatters.getNumberFormat\n ),\n formatDuration: formatDuration.bind(\n null,\n resolvedConfig,\n formatters.getDurationFormat\n ),\n formatDurationToParts: formatDurationToParts.bind(\n null,\n resolvedConfig,\n formatters.getDurationFormat\n ),\n formatRelativeTime: formatRelativeTime.bind(\n null,\n resolvedConfig,\n formatters.getRelativeTimeFormat\n ),\n formatDate: formatDate.bind(\n null,\n resolvedConfig,\n formatters.getDateTimeFormat\n ),\n formatDateToParts: formatDateToParts.bind(\n null,\n resolvedConfig,\n formatters.getDateTimeFormat\n ),\n formatTime: formatTime.bind(\n null,\n resolvedConfig,\n formatters.getDateTimeFormat\n ),\n formatDateTimeRange: formatDateTimeRange.bind(\n null,\n resolvedConfig,\n formatters.getDateTimeFormat\n ),\n formatTimeToParts: formatTimeToParts.bind(\n null,\n resolvedConfig,\n formatters.getDateTimeFormat\n ),\n formatPlural: formatPlural.bind(\n null,\n resolvedConfig,\n formatters.getPluralRules\n ),\n formatMessage: formatMessage.bind(null, resolvedConfig, formatters),\n $t: formatMessage.bind(null, resolvedConfig, formatters),\n formatList: formatList.bind(null, resolvedConfig, formatters.getListFormat),\n formatListToParts: formatListToParts.bind(\n null,\n resolvedConfig,\n formatters.getListFormat\n ),\n formatDisplayName: formatDisplayName.bind(\n null,\n resolvedConfig,\n formatters.getDisplayNames\n ),\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["getFormatter","getFormatter","getFormatter"],"sources":["../typed-message.ts","../error.ts","../utils.ts","../message.ts","../dateTime.ts","../duration.ts","../displayName.ts","../list.ts","../plural.ts","../relativeTime.ts","../number.ts","../create-intl.ts"],"sourcesContent":["import type {\n MessageContract,\n MessageValuesOf,\n MessageValues,\n MessageFormatArguments,\n UntypedMessageContract,\n Options,\n} from 'intl-messageformat'\nimport type {MessageDescriptor} from '#packages/intl/types.js'\nexport type {\n MessageValue,\n MessageTag,\n MessageValues,\n MessageValuesOf,\n TypedMessageValues,\n} from 'intl-messageformat'\n\nexport type TypedMessageDescriptor<V extends MessageValues> =\n Readonly<MessageDescriptor> & MessageContract<V>\nexport type UntypedMessageDescriptor = MessageDescriptor &\n UntypedMessageContract\n\nexport type TypedMessageArguments<\n V extends MessageValues,\n T = string,\n TChunk = T,\n> = MessageFormatArguments<V, T, TChunk, [options?: Options]>\n\nexport function defineMessage<\n V extends MessageValues,\n const D extends MessageDescriptor,\n>(\n message: D,\n options: {typed: true}\n): Readonly<D> & Omit<TypedMessageDescriptor<V>, keyof D>\nexport function defineMessage<V extends MessageValues>(\n message: MessageDescriptor & {\n id: NonNullable<MessageDescriptor['id']>\n defaultMessage: string\n },\n options: {typed: true}\n): TypedMessageDescriptor<V> &\n Readonly<{id: NonNullable<MessageDescriptor['id']>; defaultMessage: string}>\nexport function defineMessage<V extends MessageValues>(\n message: MessageDescriptor & {\n id: NonNullable<MessageDescriptor['id']>\n defaultMessage: NonNullable<MessageDescriptor['defaultMessage']>\n },\n options: {typed: true}\n): TypedMessageDescriptor<V> &\n Readonly<{\n id: NonNullable<MessageDescriptor['id']>\n defaultMessage: NonNullable<MessageDescriptor['defaultMessage']>\n }>\nexport function defineMessage<V extends MessageValues>(\n message: MessageDescriptor & {defaultMessage: string},\n options: {typed: true}\n): TypedMessageDescriptor<V> & Readonly<{defaultMessage: string}>\nexport function defineMessage<V extends MessageValues>(\n message: MessageDescriptor & {\n defaultMessage: NonNullable<MessageDescriptor['defaultMessage']>\n },\n options: {typed: true}\n): TypedMessageDescriptor<V> &\n Readonly<{defaultMessage: NonNullable<MessageDescriptor['defaultMessage']>}>\nexport function defineMessage<V extends MessageValues>(\n message: MessageDescriptor & {id: NonNullable<MessageDescriptor['id']>},\n options: {typed: true}\n): TypedMessageDescriptor<V> &\n Readonly<{id: NonNullable<MessageDescriptor['id']>}>\nexport function defineMessage<V extends MessageValues>(\n message: MessageDescriptor,\n options: {typed: true}\n): TypedMessageDescriptor<V>\nexport function defineMessage<T>(message: T): Readonly<T>\nexport function defineMessage(\n message: unknown,\n _options?: {typed: true}\n): unknown {\n return message\n}\n\nexport function defineMessages<\n V extends Record<string, MessageValues>,\n const D extends {[K in keyof V]: MessageDescriptor},\n>(\n messages: D,\n options: {typed: true}\n): {\n readonly [K in keyof V]: Readonly<D[K]> &\n Omit<TypedMessageDescriptor<V[K]>, keyof D[K]>\n}\nexport function defineMessages<V extends Record<string, MessageValues>>(\n messages: {\n [K in keyof V]: MessageDescriptor & {\n id: NonNullable<MessageDescriptor['id']>\n defaultMessage: string\n }\n },\n options: {typed: true}\n): {\n readonly [K in keyof V]: TypedMessageDescriptor<V[K]> &\n Readonly<{id: NonNullable<MessageDescriptor['id']>; defaultMessage: string}>\n}\nexport function defineMessages<V extends Record<string, MessageValues>>(\n messages: {\n [K in keyof V]: MessageDescriptor & {\n id: NonNullable<MessageDescriptor['id']>\n defaultMessage: NonNullable<MessageDescriptor['defaultMessage']>\n }\n },\n options: {typed: true}\n): {\n readonly [K in keyof V]: TypedMessageDescriptor<V[K]> &\n Readonly<{\n id: NonNullable<MessageDescriptor['id']>\n defaultMessage: NonNullable<MessageDescriptor['defaultMessage']>\n }>\n}\nexport function defineMessages<V extends Record<string, MessageValues>>(\n messages: {[K in keyof V]: MessageDescriptor & {defaultMessage: string}},\n options: {typed: true}\n): {\n readonly [K in keyof V]: TypedMessageDescriptor<V[K]> &\n Readonly<{defaultMessage: string}>\n}\nexport function defineMessages<V extends Record<string, MessageValues>>(\n messages: {\n [K in keyof V]: MessageDescriptor & {\n defaultMessage: NonNullable<MessageDescriptor['defaultMessage']>\n }\n },\n options: {typed: true}\n): {\n readonly [K in keyof V]: TypedMessageDescriptor<V[K]> &\n Readonly<{defaultMessage: NonNullable<MessageDescriptor['defaultMessage']>}>\n}\nexport function defineMessages<V extends Record<string, MessageValues>>(\n messages: {\n [K in keyof V]: MessageDescriptor & {\n id: NonNullable<MessageDescriptor['id']>\n }\n },\n options: {typed: true}\n): {\n readonly [K in keyof V]: TypedMessageDescriptor<V[K]> &\n Readonly<{id: NonNullable<MessageDescriptor['id']>}>\n}\nexport function defineMessages<V extends Record<string, MessageValues>>(\n messages: {[K in keyof V]: MessageDescriptor},\n options: {typed: true}\n): {readonly [K in keyof V]: TypedMessageDescriptor<V[K]>}\nexport function defineMessages<\n K extends keyof any,\n T = MessageDescriptor,\n U extends Record<K, T> = Record<K, T>,\n>(messages: U): {readonly [P in keyof U]: Readonly<U[P]>}\nexport function defineMessages(\n messages: unknown,\n _options?: {typed: true}\n): unknown {\n return messages\n}\n\n/** Argument contracts keyed by application message IDs. */\nexport type RegisteredMessageId = keyof FormatjsIntl.MessageArguments & string\n\nexport type RegisteredMessageValues<K extends RegisteredMessageId> =\n FormatjsIntl.MessageArguments[K] extends MessageValues\n ? FormatjsIntl.MessageArguments[K]\n : never\n\n/** Keep known IDs out of the permissive overload without rejecting dynamic IDs. */\nexport type UnregisteredMessageDescriptor<D extends UntypedMessageDescriptor> =\n D &\n (D extends {id: infer K}\n ? Extract<K, RegisteredMessageId> extends never\n ? unknown\n : never\n : unknown)\n\n/** Derive a registry from typed catalog entries with literal IDs. */\nexport type MessageArgumentsFromCatalog<\n C extends Record<string, TypedMessageDescriptor<MessageValues>>,\n> = {\n readonly [\n K in keyof C as C[K] extends {id: infer I extends string}\n ? string extends I\n ? never\n : I\n : never\n ]: MessageValuesOf<C[K]>\n}\n","import {type MessageDescriptor} from '#packages/intl/types.js'\n\nexport enum IntlErrorCode {\n FORMAT_ERROR = 'FORMAT_ERROR',\n UNSUPPORTED_FORMATTER = 'UNSUPPORTED_FORMATTER',\n INVALID_CONFIG = 'INVALID_CONFIG',\n MISSING_DATA = 'MISSING_DATA',\n MISSING_TRANSLATION = 'MISSING_TRANSLATION',\n}\n\nexport class IntlError<\n T extends IntlErrorCode = IntlErrorCode.FORMAT_ERROR,\n> extends Error {\n public readonly code: T\n\n constructor(code: T, message: string, exception?: Error | unknown) {\n const err = exception\n ? exception instanceof Error\n ? exception\n : new Error(String(exception))\n : undefined\n super(\n `[@formatjs/intl Error ${code}] ${message}\n${err ? `\\n${err.message}\\n${err.stack}` : ''}`\n )\n this.code = code\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (typeof Error.captureStackTrace === 'function') {\n // @ts-ignore just so we don't need to declare dep on @types/node\n Error.captureStackTrace(this, IntlError)\n }\n }\n}\n\nexport class UnsupportedFormatterError extends IntlError<IntlErrorCode.UNSUPPORTED_FORMATTER> {\n constructor(message: string, exception?: Error | unknown) {\n super(IntlErrorCode.UNSUPPORTED_FORMATTER, message, exception)\n }\n}\n\nexport class InvalidConfigError extends IntlError<IntlErrorCode.INVALID_CONFIG> {\n constructor(message: string, exception?: Error | unknown) {\n super(IntlErrorCode.INVALID_CONFIG, message, exception)\n }\n}\n\nexport class MissingDataError extends IntlError<IntlErrorCode.MISSING_DATA> {\n constructor(message: string, exception?: Error | unknown) {\n super(IntlErrorCode.MISSING_DATA, message, exception)\n }\n}\n\nexport class IntlFormatError extends IntlError<IntlErrorCode.FORMAT_ERROR> {\n public readonly descriptor?: MessageDescriptor\n public readonly locale: string\n constructor(message: string, locale: string, exception?: Error | unknown) {\n super(\n IntlErrorCode.FORMAT_ERROR,\n `${message}\nLocale: ${locale}\n`,\n exception\n )\n this.locale = locale\n }\n}\n\nexport class MessageFormatError extends IntlFormatError {\n public readonly descriptor?: MessageDescriptor\n public readonly locale: string\n constructor(\n message: string,\n locale: string,\n descriptor?: MessageDescriptor,\n exception?: Error | unknown\n ) {\n super(\n `${message}\nMessageID: ${descriptor?.id}\nDefault Message: ${descriptor?.defaultMessage}\nDescription: ${descriptor?.description}\n`,\n locale,\n exception\n )\n this.descriptor = descriptor\n this.locale = locale\n }\n}\n\nexport class MissingTranslationError extends IntlError<IntlErrorCode.MISSING_TRANSLATION> {\n public readonly descriptor?: MessageDescriptor\n constructor(descriptor: MessageDescriptor, locale: string) {\n super(\n IntlErrorCode.MISSING_TRANSLATION,\n `Missing message: \"${descriptor.id}\" for locale \"${locale}\", using ${\n descriptor.defaultMessage\n ? `default message (${\n typeof descriptor.defaultMessage === 'string'\n ? descriptor.defaultMessage\n : descriptor.defaultMessage\n .map((e: any) => e.value ?? JSON.stringify(e))\n .join()\n })`\n : 'id'\n } as fallback.`\n )\n this.descriptor = descriptor\n }\n}\n","import type {DurationFormatOptions} from '#packages/ecma402-abstract/types/duration.js'\nimport {type NumberFormatOptions} from '#packages/ecma402-abstract/types/number.js'\nimport {type Cache, memoize, strategies} from '@formatjs/fast-memoize'\nimport {IntlMessageFormat} from 'intl-messageformat'\nimport {UnsupportedFormatterError} from '#packages/intl/error.js'\nimport {\n type CustomFormats,\n type Formatters,\n type IntlCache,\n type OnErrorFn,\n type OnWarnFn,\n type ResolvedIntlConfig,\n} from '#packages/intl/types.js'\n\nexport function invariant(\n condition: boolean,\n message: string,\n Err: any = Error\n): asserts condition {\n if (!condition) {\n throw new Err(message)\n }\n}\n\nexport function filterProps<T extends Record<string, any>, K extends string>(\n props: T,\n allowlist: Array<K>,\n defaults: Partial<T> = {}\n): Pick<T, K> {\n return allowlist.reduce(\n (filtered, name) => {\n if (name in props) {\n filtered[name] = props[name]\n } else if (name in defaults) {\n filtered[name] = defaults[name]!\n }\n\n return filtered\n },\n {} as Pick<T, K>\n )\n}\n\nconst defaultErrorHandler: OnErrorFn = error => {\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (process.env.NODE_ENV !== 'production') {\n console.error(error)\n }\n}\n\nconst defaultWarnHandler: OnWarnFn = (warning: string) => {\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (process.env.NODE_ENV !== 'production') {\n console.warn(warning)\n }\n}\n\nexport const DEFAULT_INTL_CONFIG: Pick<\n ResolvedIntlConfig<any>,\n | 'fallbackOnEmptyString'\n | 'formats'\n | 'messages'\n | 'timeZone'\n | 'defaultLocale'\n | 'defaultFormats'\n | 'onError'\n | 'onWarn'\n> = {\n formats: {},\n messages: {},\n timeZone: undefined,\n\n defaultLocale: 'en',\n defaultFormats: {},\n\n fallbackOnEmptyString: true,\n\n onError: defaultErrorHandler,\n onWarn: defaultWarnHandler,\n}\n\nexport function createIntlCache(): IntlCache {\n return {\n dateTime: {},\n number: {},\n message: {},\n duration: {},\n relativeTime: {},\n pluralRules: {},\n list: {},\n displayNames: {},\n }\n}\n\nfunction createFastMemoizeCache<V>(\n store: Record<string, V | undefined>\n): Cache<string, V> {\n return {\n create() {\n return {\n get(key) {\n return store[key]\n },\n set(key, value) {\n store[key] = value\n },\n }\n },\n }\n}\n\n/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */\nexport function createFormatters(\n cache: IntlCache = createIntlCache()\n): Formatters {\n const RelativeTimeFormat = (Intl as any).RelativeTimeFormat\n const ListFormat = (Intl as any).ListFormat\n const DisplayNames = (Intl as any).DisplayNames\n const getDateTimeFormat = memoize(\n (...args) => new Intl.DateTimeFormat(...args),\n {\n cache: createFastMemoizeCache(cache.dateTime),\n strategy: strategies.variadic,\n }\n )\n const getNumberFormat = memoize((...args) => new Intl.NumberFormat(...args), {\n cache: createFastMemoizeCache(cache.number),\n strategy: strategies.variadic,\n })\n const getPluralRules = memoize((...args) => new Intl.PluralRules(...args), {\n cache: createFastMemoizeCache(cache.pluralRules),\n strategy: strategies.variadic,\n })\n return {\n getDateTimeFormat,\n getNumberFormat,\n getMessageFormat: memoize(\n (message, locales, overrideFormats, opts) =>\n new IntlMessageFormat(message, locales, overrideFormats, {\n formatters: {\n getNumberFormat,\n getDateTimeFormat,\n getPluralRules,\n },\n ...opts,\n }),\n {\n cache: createFastMemoizeCache(cache.message),\n strategy: strategies.variadic,\n }\n ),\n getDurationFormat: memoize((...args) => new Intl.DurationFormat(...args), {\n cache: createFastMemoizeCache(cache.duration),\n strategy: strategies.variadic,\n }),\n getRelativeTimeFormat: memoize(\n (...args) => new RelativeTimeFormat(...args),\n {\n cache: createFastMemoizeCache(cache.relativeTime),\n strategy: strategies.variadic,\n }\n ),\n getPluralRules,\n getListFormat: memoize((...args) => new ListFormat(...args), {\n cache: createFastMemoizeCache(cache.list),\n strategy: strategies.variadic,\n }),\n getDisplayNames: memoize((...args) => new DisplayNames(...args), {\n cache: createFastMemoizeCache(cache.displayNames),\n strategy: strategies.variadic,\n }),\n }\n}\n\nexport function getNamedFormat<T extends keyof CustomFormats>(\n formats: CustomFormats,\n type: T,\n name: string,\n onError: OnErrorFn\n):\n | NumberFormatOptions\n | Intl.DateTimeFormatOptions\n | Intl.RelativeTimeFormatOptions\n | DurationFormatOptions\n | undefined {\n const formatType = formats && formats[type]\n let format\n if (formatType) {\n format = formatType[name]\n }\n if (format) {\n return format\n }\n\n onError(new UnsupportedFormatterError(`No ${type} format named: ${name}`))\n}\n","import {\n type CustomFormats,\n type Formatters,\n type MessageDescriptor,\n type OnErrorFn,\n} from '#packages/intl/types.js'\n\nimport {\n type MessageFormatElement,\n TYPE,\n} from '@formatjs/icu-messageformat-parser'\nimport {\n type FormatXMLElementFn,\n IntlMessageFormat,\n type Formatters as IntlMessageFormatFormatters,\n type Options,\n type PrimitiveType,\n} from 'intl-messageformat'\nimport {\n MessageFormatError,\n MissingTranslationError,\n} from '#packages/intl/error.js'\nimport {invariant} from '#packages/intl/utils.js'\n\nfunction setTimeZoneInOptions(\n opts: Record<string, Intl.DateTimeFormatOptions>,\n timeZone: string\n): Record<string, Intl.DateTimeFormatOptions> {\n return Object.keys(opts).reduce(\n (all: Record<string, Intl.DateTimeFormatOptions>, k) => {\n all[k] = {\n timeZone,\n ...opts[k],\n }\n return all\n },\n {}\n )\n}\n\nfunction deepMergeOptions(\n opts1: Record<string, Intl.DateTimeFormatOptions>,\n opts2: Record<string, Intl.DateTimeFormatOptions>\n): Record<string, Intl.DateTimeFormatOptions> {\n const keys = Object.keys({...opts1, ...opts2})\n return keys.reduce((all: Record<string, Intl.DateTimeFormatOptions>, k) => {\n all[k] = {\n ...opts1[k],\n ...opts2[k],\n }\n return all\n }, {})\n}\n\nfunction deepMergeFormatsAndSetTimeZone(\n f1: CustomFormats,\n timeZone?: string\n): CustomFormats {\n if (!timeZone) {\n return f1\n }\n const mfFormats = IntlMessageFormat.formats\n return {\n ...mfFormats,\n ...f1,\n date: deepMergeOptions(\n setTimeZoneInOptions(mfFormats.date, timeZone),\n setTimeZoneInOptions(f1.date || {}, timeZone)\n ),\n time: deepMergeOptions(\n setTimeZoneInOptions(mfFormats.time, timeZone),\n setTimeZoneInOptions(f1.time || {}, timeZone)\n ),\n }\n}\n\nexport type FormatMessageFn<T> = (\n {\n locale,\n formats,\n messages,\n defaultLocale,\n defaultFormats,\n fallbackOnEmptyString,\n onError,\n timeZone,\n defaultRichTextElements,\n }: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n messages: Record<string, string> | Record<string, MessageFormatElement[]>\n defaultLocale: string\n defaultFormats: CustomFormats\n defaultRichTextElements?: Record<string, FormatXMLElementFn<T>>\n fallbackOnEmptyString?: boolean\n onError: OnErrorFn\n },\n state: IntlMessageFormatFormatters & Pick<Formatters, 'getMessageFormat'>,\n messageDescriptor: MessageDescriptor,\n values?: Record<string, PrimitiveType | T | FormatXMLElementFn<T>>,\n opts?: Options\n) => T extends string ? string : Array<T | string> | string | T\n\nfunction getMessageDescriptorContext(\n messageDescriptor: MessageDescriptor\n): string {\n const {defaultMessage} = messageDescriptor\n try {\n return defaultMessage !== undefined\n ? `\\nDefault Message: ${\n typeof defaultMessage === 'string'\n ? defaultMessage\n : JSON.stringify(defaultMessage)\n }`\n : `\\nMessage Descriptor: ${JSON.stringify(messageDescriptor)}`\n } catch {\n return ''\n }\n}\n\nexport const formatMessage: FormatMessageFn<any> = (\n {\n locale,\n formats,\n messages,\n defaultLocale,\n defaultFormats,\n fallbackOnEmptyString,\n onError,\n timeZone,\n defaultRichTextElements,\n },\n state,\n messageDescriptor = {id: ''},\n values,\n opts\n) => {\n const {id: msgId, defaultMessage} = messageDescriptor\n\n // `id` is a required field of a Message Descriptor.\n if (!msgId) {\n invariant(\n false,\n `[@formatjs/intl] An \\`id\\` must be provided to format a message. You can either:\n1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.github.io/docs/tooling/babel-plugin)\nor [@formatjs/ts-transformer](https://formatjs.github.io/docs/tooling/ts-transformer) OR\n2. Configure your \\`eslint\\` config to include [eslint-plugin-formatjs](https://formatjs.github.io/docs/tooling/linter#enforce-id)\nto autofix this issue${getMessageDescriptorContext(messageDescriptor)}`\n )\n }\n const id = String(msgId)\n const message =\n // In case messages is Object.create(null)\n // e.g import('foo.json') from webpack)\n // See https://github.com/formatjs/formatjs/issues/1914\n messages &&\n Object.prototype.hasOwnProperty.call(messages, id) &&\n messages[id]\n\n // IMPORTANT: Hot path if `message` is AST with a single literal node\n if (\n Array.isArray(message) &&\n message.length === 1 &&\n message[0].type === TYPE.literal\n ) {\n return message[0].value\n }\n\n values = {\n ...defaultRichTextElements,\n ...values,\n }\n formats = deepMergeFormatsAndSetTimeZone(formats, timeZone)\n defaultFormats = deepMergeFormatsAndSetTimeZone(defaultFormats, timeZone)\n\n if (!message) {\n if (fallbackOnEmptyString === false && message === '') {\n return message\n }\n\n if (\n !defaultMessage ||\n (locale && locale.toLowerCase() !== defaultLocale.toLowerCase())\n ) {\n // This prevents warnings from littering the console in development\n // when no `messages` are passed into the <IntlProvider> for the\n // default locale.\n onError(new MissingTranslationError(messageDescriptor, locale))\n }\n if (defaultMessage) {\n try {\n const formatter = state.getMessageFormat(\n defaultMessage,\n defaultLocale,\n defaultFormats,\n opts\n )\n\n return formatter.format(values)\n } catch (e) {\n onError(\n new MessageFormatError(\n `Error formatting default message for: \"${id}\", rendering default message verbatim`,\n locale,\n messageDescriptor,\n e\n )\n )\n return typeof defaultMessage === 'string' ? defaultMessage : id\n }\n }\n return id\n }\n\n // We have the translated message\n try {\n const formatter = state.getMessageFormat(message, locale, formats, {\n formatters: state,\n ...opts,\n })\n\n return formatter.format<any>(values)\n } catch (e) {\n onError(\n new MessageFormatError(\n `Error formatting message: \"${id}\", using ${\n defaultMessage ? 'default message' : 'id'\n } as fallback.`,\n locale,\n messageDescriptor,\n e\n )\n )\n }\n\n if (defaultMessage) {\n try {\n const formatter = state.getMessageFormat(\n defaultMessage,\n defaultLocale,\n defaultFormats,\n opts\n )\n\n return formatter.format(values)\n } catch (e) {\n onError(\n new MessageFormatError(\n `Error formatting the default message for: \"${id}\", rendering message verbatim`,\n locale,\n messageDescriptor,\n e\n )\n )\n }\n }\n\n if (typeof message === 'string') {\n return message\n }\n if (typeof defaultMessage === 'string') {\n return defaultMessage\n }\n return id\n}\n","import {\n type CustomFormats,\n type Formatters,\n type IntlFormatters,\n type OnErrorFn,\n} from '#packages/intl/types.js'\n\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {filterProps, getNamedFormat} from '#packages/intl/utils.js'\n\nconst DATE_TIME_FORMAT_OPTIONS: Array<keyof Intl.DateTimeFormatOptions> = [\n 'formatMatcher',\n\n 'timeZone',\n 'hour12',\n\n 'weekday',\n 'era',\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'timeZoneName',\n 'hourCycle',\n 'dateStyle',\n 'timeStyle',\n 'calendar',\n // 'dayPeriod',\n 'numberingSystem',\n 'fractionalSecondDigits',\n]\n\nexport function getFormatter(\n {\n locale,\n formats,\n onError,\n timeZone,\n }: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n type: 'date' | 'time' | 'dateTimeRange',\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n options: Parameters<IntlFormatters['formatDate']>[1] = {}\n): Intl.DateTimeFormat {\n const {format} = options\n const defaults = {\n ...(timeZone && {timeZone}),\n ...(format && getNamedFormat(formats!, type, format, onError)),\n }\n\n let filteredOptions = filterProps(\n options,\n DATE_TIME_FORMAT_OPTIONS,\n defaults\n ) as Intl.DateTimeFormatOptions\n\n if (\n type === 'time' &&\n !filteredOptions.hour &&\n !filteredOptions.minute &&\n !filteredOptions.second &&\n !filteredOptions.timeStyle &&\n !filteredOptions.dateStyle\n ) {\n // Add default formatting options if hour, minute, or second isn't defined.\n filteredOptions = {...filteredOptions, hour: 'numeric', minute: 'numeric'}\n }\n\n return getDateTimeFormat(locale, filteredOptions)\n}\n\nexport function formatDate(\n config: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n value: Parameters<IntlFormatters['formatDate']>[0],\n options: Parameters<IntlFormatters['formatDate']>[1] = {}\n): string {\n const date = typeof value === 'string' ? new Date(value || 0) : value\n try {\n return getFormatter(config, 'date', getDateTimeFormat, options).format(date)\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting date.', config.locale, e)\n )\n }\n\n return String(date)\n}\n\nexport function formatTime(\n config: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n value: Parameters<IntlFormatters['formatTime']>[0],\n options: Parameters<IntlFormatters['formatTime']>[1] = {}\n): string {\n const date = typeof value === 'string' ? new Date(value || 0) : value\n\n try {\n return getFormatter(config, 'time', getDateTimeFormat, options).format(date)\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting time.', config.locale, e)\n )\n }\n\n return String(date)\n}\n\nexport function formatDateTimeRange(\n config: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n from: Parameters<IntlFormatters['formatDateTimeRange']>[0],\n to: Parameters<IntlFormatters['formatDateTimeRange']>[1],\n options: Parameters<IntlFormatters['formatDateTimeRange']>[2] = {}\n): string {\n const fromDate = typeof from === 'string' ? new Date(from || 0) : from\n const toDate = typeof to === 'string' ? new Date(to || 0) : to\n\n try {\n return getFormatter(\n config,\n 'dateTimeRange',\n getDateTimeFormat,\n options\n ).formatRange(fromDate, toDate)\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting date time range.', config.locale, e)\n )\n }\n\n return String(fromDate)\n}\n\nexport function formatDateToParts(\n config: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n value: Parameters<IntlFormatters['formatDate']>[0],\n options: Parameters<IntlFormatters['formatDate']>[1] = {}\n): Intl.DateTimeFormatPart[] {\n const date = typeof value === 'string' ? new Date(value || 0) : value\n try {\n return getFormatter(\n config,\n 'date',\n getDateTimeFormat,\n options\n ).formatToParts(date) as Intl.DateTimeFormatPart[] // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting date.', config.locale, e)\n )\n }\n\n return []\n}\n\nexport function formatTimeToParts(\n config: {\n locale: string\n timeZone?: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getDateTimeFormat: Formatters['getDateTimeFormat'],\n value: Parameters<IntlFormatters['formatTimeToParts']>[0],\n options: Parameters<IntlFormatters['formatTimeToParts']>[1] = {}\n): Intl.DateTimeFormatPart[] {\n const date = typeof value === 'string' ? new Date(value || 0) : value\n\n try {\n return getFormatter(\n config,\n 'time',\n getDateTimeFormat,\n options\n ).formatToParts(date) as Intl.DateTimeFormatPart[] // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting time.', config.locale, e)\n )\n }\n\n return []\n}\n","import {IntlFormatError} from '#packages/intl/error.js'\nimport type {\n CustomFormats,\n FormatDurationOptions,\n Formatters,\n IntlFormatters,\n OnErrorFn,\n} from '#packages/intl/types.js'\nimport {filterProps, getNamedFormat} from '#packages/intl/utils.js'\nimport {ErrorCode, FormatError} from 'intl-messageformat'\n\nconst DURATION_FORMAT_OPTIONS: Array<\n Exclude<keyof FormatDurationOptions, 'format'>\n> = [\n 'style',\n 'numberingSystem',\n 'years',\n 'yearsDisplay',\n 'months',\n 'monthsDisplay',\n 'weeks',\n 'weeksDisplay',\n 'days',\n 'daysDisplay',\n 'hours',\n 'hoursDisplay',\n 'minutes',\n 'minutesDisplay',\n 'seconds',\n 'secondsDisplay',\n 'milliseconds',\n 'millisecondsDisplay',\n 'microseconds',\n 'microsecondsDisplay',\n 'nanoseconds',\n 'nanosecondsDisplay',\n 'fractionalDigits',\n]\n\ntype Config = {\n locale: string\n formats: CustomFormats\n onError: OnErrorFn\n}\n\nfunction getFormatter(\n {locale, formats, onError}: Config,\n getDurationFormat: Formatters['getDurationFormat'],\n options: FormatDurationOptions\n): ReturnType<Formatters['getDurationFormat']> | undefined {\n if (!Intl.DurationFormat) {\n onError(\n new FormatError(\n 'Intl.DurationFormat is not available in this environment.\\nTry polyfilling it using \"@formatjs/intl-durationformat\"',\n ErrorCode.MISSING_INTL_API\n )\n )\n return\n }\n\n const {format} = options\n const defaults = ((format &&\n getNamedFormat(formats, 'duration', format, onError)) ||\n {}) as FormatDurationOptions\n return getDurationFormat(\n locale,\n filterProps(options, DURATION_FORMAT_OPTIONS, defaults)\n )\n}\n\nexport function formatDuration(\n config: Config,\n getDurationFormat: Formatters['getDurationFormat'],\n value: Parameters<IntlFormatters['formatDuration']>[0],\n options: FormatDurationOptions = {}\n): string {\n try {\n return getFormatter(config, getDurationFormat, options)?.format(value) ?? ''\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting duration.', config.locale, e)\n )\n }\n return ''\n}\n\nexport function formatDurationToParts(\n config: Config,\n getDurationFormat: Formatters['getDurationFormat'],\n value: Parameters<IntlFormatters['formatDuration']>[0],\n options: FormatDurationOptions = {}\n): ReturnType<IntlFormatters['formatDurationToParts']> {\n try {\n return (\n getFormatter(config, getDurationFormat, options)?.formatToParts(value) ??\n []\n )\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting duration.', config.locale, e)\n )\n }\n return []\n}\n","import {\n type Formatters,\n type IntlFormatters,\n type OnErrorFn,\n} from '#packages/intl/types.js'\nimport {filterProps} from '#packages/intl/utils.js'\n\nimport {ErrorCode, FormatError} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\n\nconst DISPLAY_NAMES_OPTONS: Array<keyof Intl.DisplayNamesOptions> = [\n 'style',\n 'type',\n 'fallback',\n 'languageDisplay',\n]\n\nexport function formatDisplayName(\n {\n locale,\n onError,\n }: {\n locale: string\n onError: OnErrorFn\n },\n getDisplayNames: Formatters['getDisplayNames'],\n value: Parameters<IntlFormatters['formatDisplayName']>[0],\n options: Parameters<IntlFormatters['formatDisplayName']>[1]\n): string | undefined {\n const DisplayNames: typeof Intl.DisplayNames = (Intl as any).DisplayNames\n if (!DisplayNames) {\n onError(\n new FormatError(\n `Intl.DisplayNames is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-displaynames\"\n`,\n ErrorCode.MISSING_INTL_API\n )\n )\n }\n const filteredOptions = filterProps(\n options,\n DISPLAY_NAMES_OPTONS\n ) as Intl.DisplayNamesOptions\n try {\n return getDisplayNames(locale, filteredOptions).of(value)\n } catch (e) {\n onError(new IntlFormatError('Error formatting display name.', locale, e))\n }\n}\n","import {ErrorCode, FormatError} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {\n type Formatters,\n type IntlFormatters,\n type OnErrorFn,\n type Part,\n} from '#packages/intl/types.js'\nimport {filterProps} from '#packages/intl/utils.js'\n\nconst LIST_FORMAT_OPTIONS: Array<keyof Intl.ListFormatOptions> = [\n 'type',\n 'style',\n]\n\nconst now = Date.now()\n\nfunction generateToken(i: number): string {\n return `${now}_${i}_${now}`\n}\n\nexport function formatList(\n opts: {\n locale: string\n onError: OnErrorFn\n },\n getListFormat: Formatters['getListFormat'],\n values: Iterable<string>,\n options: Parameters<IntlFormatters['formatList']>[1]\n): string\nexport function formatList<T>(\n opts: {\n locale: string\n onError: OnErrorFn\n },\n getListFormat: Formatters['getListFormat'],\n values: Iterable<string | T>,\n options: Parameters<IntlFormatters['formatList']>[1] = {}\n): Array<T | string> | T | string {\n const results = formatListToParts(\n opts,\n getListFormat,\n values,\n options\n ).reduce((all: Array<string | T>, el) => {\n const val = el.value\n if (typeof val !== 'string') {\n all.push(val)\n } else if (typeof all[all.length - 1] === 'string') {\n all[all.length - 1] += val\n } else {\n all.push(val)\n }\n return all\n }, [])\n return results.length === 1 ? results[0] : results.length === 0 ? '' : results\n}\n\nexport function formatListToParts<T>(\n opts: {\n locale: string\n onError: OnErrorFn\n },\n getListFormat: Formatters['getListFormat'],\n values: Iterable<string | T>,\n options: Parameters<IntlFormatters['formatList']>[1]\n): Part[]\nexport function formatListToParts<T>(\n {\n locale,\n onError,\n }: {\n locale: string\n onError: OnErrorFn\n },\n getListFormat: Formatters['getListFormat'],\n values: Parameters<IntlFormatters['formatList']>[0],\n options: Parameters<IntlFormatters['formatList']>[1] = {}\n): Part<T>[] {\n const ListFormat: typeof Intl.ListFormat = Intl.ListFormat\n if (!ListFormat) {\n onError(\n new FormatError(\n `Intl.ListFormat is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-listformat\"\n`,\n ErrorCode.MISSING_INTL_API\n )\n )\n }\n const filteredOptions = filterProps(\n options,\n LIST_FORMAT_OPTIONS\n ) as Intl.ListFormatOptions\n\n try {\n const richValues: Record<string, T> = {}\n const serializedValues = Array.from(values).map((v, i) => {\n if (typeof v === 'object' && v !== null) {\n const id = generateToken(i)\n richValues[id] = v as any\n return id\n }\n return String(v)\n })\n return getListFormat(locale, filteredOptions)\n .formatToParts(serializedValues)\n .map(\n part =>\n (part.type === 'literal'\n ? part\n : {...part, value: richValues[part.value] || part.value}) as Part<T>\n )\n } catch (e) {\n onError(new IntlFormatError('Error formatting list.', locale, e))\n }\n\n // @ts-ignore\n return values\n}\n","import {ErrorCode, FormatError} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {\n type Formatters,\n type IntlFormatters,\n type OnErrorFn,\n} from '#packages/intl/types.js'\nimport {filterProps} from '#packages/intl/utils.js'\n\nconst PLURAL_FORMAT_OPTIONS: Array<keyof Intl.PluralRulesOptions> = ['type']\n\nexport function formatPlural(\n {\n locale,\n onError,\n }: {\n locale: string\n onError: OnErrorFn\n },\n getPluralRules: Formatters['getPluralRules'],\n value: Parameters<IntlFormatters['formatPlural']>[0],\n options: Parameters<IntlFormatters['formatPlural']>[1] = {}\n): Intl.LDMLPluralRule {\n if (!Intl.PluralRules) {\n onError(\n new FormatError(\n `Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n`,\n ErrorCode.MISSING_INTL_API\n )\n )\n }\n const filteredOptions = filterProps(\n options,\n PLURAL_FORMAT_OPTIONS\n ) as Intl.PluralRulesOptions\n\n try {\n return getPluralRules(locale, filteredOptions).select(\n value\n ) as Intl.LDMLPluralRule\n } catch (e) {\n onError(new IntlFormatError('Error formatting plural.', locale, e))\n }\n\n return 'other'\n}\n","import {\n type IntlFormatters,\n type Formatters,\n type CustomFormats,\n type OnErrorFn,\n} from '#packages/intl/types.js'\n\nimport {getNamedFormat, filterProps} from '#packages/intl/utils.js'\nimport {FormatError, ErrorCode} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\n\nconst RELATIVE_TIME_FORMAT_OPTIONS: Array<\n keyof Intl.RelativeTimeFormatOptions\n> = ['numeric', 'style']\n\nfunction getFormatter(\n {\n locale,\n formats,\n onError,\n }: {\n locale: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getRelativeTimeFormat: Formatters['getRelativeTimeFormat'],\n options: Parameters<IntlFormatters['formatRelativeTime']>[2] = {}\n): Intl.RelativeTimeFormat {\n const {format} = options\n\n const defaults =\n (!!format && getNamedFormat(formats, 'relative', format, onError)) || {}\n const filteredOptions = filterProps(\n options,\n RELATIVE_TIME_FORMAT_OPTIONS,\n defaults as Intl.RelativeTimeFormatOptions\n ) as Intl.RelativeTimeFormatOptions\n\n return getRelativeTimeFormat(locale, filteredOptions)\n}\n\nexport function formatRelativeTime(\n config: {\n locale: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getRelativeTimeFormat: Formatters['getRelativeTimeFormat'],\n value: Parameters<IntlFormatters['formatRelativeTime']>[0],\n unit?: Parameters<IntlFormatters['formatRelativeTime']>[1],\n options: Parameters<IntlFormatters['formatRelativeTime']>[2] = {}\n): string {\n if (!unit) {\n unit = 'second'\n }\n const RelativeTimeFormat = Intl.RelativeTimeFormat\n if (!RelativeTimeFormat) {\n config.onError(\n new FormatError(\n `Intl.RelativeTimeFormat is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-relativetimeformat\"\n`,\n ErrorCode.MISSING_INTL_API\n )\n )\n }\n try {\n return getFormatter(config, getRelativeTimeFormat, options).format(\n value,\n unit\n )\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting relative time.', config.locale, e)\n )\n }\n\n return String(value)\n}\n","import {type NumberFormatOptions} from '#packages/ecma402-abstract/types/number.js'\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {\n type CustomFormats,\n type Formatters,\n type IntlFormatters,\n type OnErrorFn,\n} from '#packages/intl/types.js'\nimport {filterProps, getNamedFormat} from '#packages/intl/utils.js'\n\nconst NUMBER_FORMAT_OPTIONS: Array<keyof NumberFormatOptions> = [\n 'style',\n 'currency',\n 'unit',\n 'unitDisplay',\n 'useGrouping',\n\n 'minimumIntegerDigits',\n 'minimumFractionDigits',\n 'maximumFractionDigits',\n 'minimumSignificantDigits',\n 'maximumSignificantDigits',\n\n // ES2020 NumberFormat\n 'compactDisplay',\n 'currencyDisplay',\n 'currencySign',\n 'notation',\n 'signDisplay',\n 'unit',\n 'unitDisplay',\n 'numberingSystem',\n\n // ES2023 NumberFormat\n 'trailingZeroDisplay',\n 'roundingPriority',\n 'roundingIncrement',\n 'roundingMode',\n]\n\nexport function getFormatter(\n {\n locale,\n formats,\n onError,\n }: {\n locale: string\n\n formats: CustomFormats\n onError: OnErrorFn\n },\n getNumberFormat: Formatters['getNumberFormat'],\n options: Parameters<IntlFormatters['formatNumber']>[1] = {}\n): Intl.NumberFormat {\n const {format} = options\n const defaults = ((format &&\n getNamedFormat(formats!, 'number', format, onError)) ||\n {}) as NumberFormatOptions\n const filteredOptions = filterProps(\n options,\n NUMBER_FORMAT_OPTIONS,\n defaults\n ) as NumberFormatOptions\n\n return getNumberFormat(locale, filteredOptions)\n}\n\nexport function formatNumber(\n config: {\n locale: string\n\n formats: CustomFormats\n onError: OnErrorFn\n },\n getNumberFormat: Formatters['getNumberFormat'],\n value: Parameters<IntlFormatters['formatNumber']>[0],\n options: Parameters<IntlFormatters['formatNumber']>[1] = {}\n): string {\n try {\n return getFormatter(config, getNumberFormat, options).format(value)\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting number.', config.locale, e)\n )\n }\n\n return String(value)\n}\n\nexport function formatNumberToParts(\n config: {\n locale: string\n formats: CustomFormats\n onError: OnErrorFn\n },\n getNumberFormat: Formatters['getNumberFormat'],\n value: Parameters<IntlFormatters['formatNumber']>[0],\n options: Parameters<IntlFormatters['formatNumber']>[1] = {}\n): Intl.NumberFormatPart[] {\n try {\n return getFormatter(config, getNumberFormat, options).formatToParts(\n value as number\n )\n } catch (e) {\n config.onError(\n new IntlFormatError('Error formatting number.', config.locale, e)\n )\n }\n\n return []\n}\n","import {\n formatDate,\n formatDateTimeRange,\n formatDateToParts,\n formatTime,\n formatTimeToParts,\n} from '#packages/intl/dateTime.js'\nimport {formatDisplayName} from '#packages/intl/displayName.js'\nimport {formatDuration, formatDurationToParts} from '#packages/intl/duration.js'\nimport {InvalidConfigError, MissingDataError} from '#packages/intl/error.js'\nimport {formatList, formatListToParts} from '#packages/intl/list.js'\nimport {formatMessage} from '#packages/intl/message.js'\nimport {formatNumber, formatNumberToParts} from '#packages/intl/number.js'\nimport {formatPlural} from '#packages/intl/plural.js'\nimport {formatRelativeTime} from '#packages/intl/relativeTime.js'\nimport {\n type IntlCache,\n type IntlConfig,\n type IntlShape,\n type ResolvedIntlConfig,\n} from '#packages/intl/types.js'\nimport {createFormatters, DEFAULT_INTL_CONFIG} from '#packages/intl/utils.js'\nimport {type MessageFormatElement} from '@formatjs/icu-messageformat-parser'\n\nexport interface CreateIntlFn<\n T = string,\n C extends IntlConfig<T> = IntlConfig<T>,\n S extends IntlShape<T> = IntlShape<T>,\n> {\n (config: C, cache?: IntlCache): S\n}\n\nfunction messagesContainString(\n messages: Record<string, string> | Record<string, MessageFormatElement[]>\n): messages is Record<string, MessageFormatElement[]> {\n const firstMessage = messages ? messages[Object.keys(messages)[0]] : undefined\n\n return typeof firstMessage === 'string'\n}\n\nfunction verifyConfigMessages<T = string>(config: IntlConfig<T>) {\n if (\n config.onWarn &&\n config.defaultRichTextElements &&\n messagesContainString(config.messages || {})\n ) {\n config.onWarn(`[@formatjs/intl] \"defaultRichTextElements\" was specified but \"message\" was not pre-compiled. \nPlease consider using \"@formatjs/cli\" to pre-compile your messages for performance.\nFor more details see https://formatjs.github.io/docs/getting-started/message-distribution`)\n }\n}\n\n/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */\nexport function createIntl<T = string>(\n config: IntlConfig<T>,\n cache?: IntlCache\n): IntlShape<T> {\n const formatters = createFormatters(cache)\n const resolvedConfig: ResolvedIntlConfig<T> = {\n ...DEFAULT_INTL_CONFIG,\n ...config,\n }\n\n const {locale, defaultLocale, onError} = resolvedConfig\n if (!locale) {\n if (onError) {\n onError(\n new InvalidConfigError(\n `\"locale\" was not configured, using \"${defaultLocale}\" as fallback. See https://formatjs.github.io/docs/react-intl/api#intlshape for more details`\n )\n )\n }\n // Since there's no registered locale data for `locale`, this will\n // fallback to the `defaultLocale` to make sure things can render.\n // The `messages` are overridden to the `defaultProps` empty object\n // to maintain referential equality across re-renders. It's assumed\n // each <FormattedMessage> contains a `defaultMessage` prop.\n resolvedConfig.locale = resolvedConfig.defaultLocale || 'en'\n } else if (!Intl.NumberFormat.supportedLocalesOf(locale).length && onError) {\n onError(\n new MissingDataError(\n `Missing locale data for locale: \"${locale}\" in Intl.NumberFormat. Using default locale: \"${defaultLocale}\" as fallback. See https://formatjs.github.io/docs/react-intl#runtime-requirements for more details`\n )\n )\n } else if (\n !Intl.DateTimeFormat.supportedLocalesOf(locale).length &&\n onError\n ) {\n onError(\n new MissingDataError(\n `Missing locale data for locale: \"${locale}\" in Intl.DateTimeFormat. Using default locale: \"${defaultLocale}\" as fallback. See https://formatjs.github.io/docs/react-intl#runtime-requirements for more details`\n )\n )\n }\n\n verifyConfigMessages(resolvedConfig)\n return {\n ...resolvedConfig,\n formatters,\n formatNumber: formatNumber.bind(\n null,\n resolvedConfig,\n formatters.getNumberFormat\n ),\n formatNumberToParts: formatNumberToParts.bind(\n null,\n resolvedConfig,\n formatters.getNumberFormat\n ),\n formatDuration: formatDuration.bind(\n null,\n resolvedConfig,\n formatters.getDurationFormat\n ),\n formatDurationToParts: formatDurationToParts.bind(\n null,\n resolvedConfig,\n formatters.getDurationFormat\n ),\n formatRelativeTime: formatRelativeTime.bind(\n null,\n resolvedConfig,\n formatters.getRelativeTimeFormat\n ),\n formatDate: formatDate.bind(\n null,\n resolvedConfig,\n formatters.getDateTimeFormat\n ),\n formatDateToParts: formatDateToParts.bind(\n null,\n resolvedConfig,\n formatters.getDateTimeFormat\n ),\n formatTime: formatTime.bind(\n null,\n resolvedConfig,\n formatters.getDateTimeFormat\n ),\n formatDateTimeRange: formatDateTimeRange.bind(\n null,\n resolvedConfig,\n formatters.getDateTimeFormat\n ),\n formatTimeToParts: formatTimeToParts.bind(\n null,\n resolvedConfig,\n formatters.getDateTimeFormat\n ),\n formatPlural: formatPlural.bind(\n null,\n resolvedConfig,\n formatters.getPluralRules\n ),\n formatMessage: formatMessage.bind(null, resolvedConfig, formatters),\n $t: formatMessage.bind(null, resolvedConfig, formatters),\n formatList: formatList.bind(null, resolvedConfig, formatters.getListFormat),\n formatListToParts: formatListToParts.bind(\n null,\n resolvedConfig,\n formatters.getListFormat\n ),\n formatDisplayName: formatDisplayName.bind(\n null,\n resolvedConfig,\n formatters.getDisplayNames\n ),\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@formatjs/intl",
|
|
3
|
-
"version": "5.0.0
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Internationalize JS apps. This library provides an API to format dates, numbers, and strings, including pluralization and handling translations.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"format",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@formatjs/fast-memoize": "3.1.7",
|
|
34
|
-
"@formatjs/icu-messageformat-parser": "3.5.
|
|
35
|
-
"intl-messageformat": "12.0.0
|
|
34
|
+
"@formatjs/icu-messageformat-parser": "3.5.19",
|
|
35
|
+
"intl-messageformat": "12.0.0"
|
|
36
36
|
}
|
|
37
37
|
}
|