@formatjs/intl 4.1.17 → 4.1.19

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 CHANGED
@@ -44,54 +44,54 @@ type NumberFormatOptions = Omit<Intl.NumberFormatOptions, "signDisplay" | "useGr
44
44
  };
45
45
  //#endregion
46
46
  //#region packages/intl/error.d.ts
47
- declare enum IntlErrorCode {
47
+ export declare enum IntlErrorCode {
48
48
  FORMAT_ERROR = "FORMAT_ERROR",
49
49
  UNSUPPORTED_FORMATTER = "UNSUPPORTED_FORMATTER",
50
50
  INVALID_CONFIG = "INVALID_CONFIG",
51
51
  MISSING_DATA = "MISSING_DATA",
52
52
  MISSING_TRANSLATION = "MISSING_TRANSLATION"
53
53
  }
54
- declare class IntlError<T extends IntlErrorCode = IntlErrorCode.FORMAT_ERROR> extends Error {
54
+ export declare class IntlError<T extends IntlErrorCode = IntlErrorCode.FORMAT_ERROR> extends Error {
55
55
  readonly code: T;
56
56
  constructor(code: T, message: string, exception?: Error | unknown);
57
57
  }
58
- declare class UnsupportedFormatterError extends IntlError<IntlErrorCode.UNSUPPORTED_FORMATTER> {
58
+ export declare class UnsupportedFormatterError extends IntlError<IntlErrorCode.UNSUPPORTED_FORMATTER> {
59
59
  constructor(message: string, exception?: Error | unknown);
60
60
  }
61
- declare class InvalidConfigError extends IntlError<IntlErrorCode.INVALID_CONFIG> {
61
+ export declare class InvalidConfigError extends IntlError<IntlErrorCode.INVALID_CONFIG> {
62
62
  constructor(message: string, exception?: Error | unknown);
63
63
  }
64
- declare class MissingDataError extends IntlError<IntlErrorCode.MISSING_DATA> {
64
+ export declare class MissingDataError extends IntlError<IntlErrorCode.MISSING_DATA> {
65
65
  constructor(message: string, exception?: Error | unknown);
66
66
  }
67
- declare class IntlFormatError extends IntlError<IntlErrorCode.FORMAT_ERROR> {
67
+ export declare class IntlFormatError extends IntlError<IntlErrorCode.FORMAT_ERROR> {
68
68
  readonly descriptor?: MessageDescriptor;
69
69
  readonly locale: string;
70
70
  constructor(message: string, locale: string, exception?: Error | unknown);
71
71
  }
72
- declare class MessageFormatError extends IntlFormatError {
72
+ export declare class MessageFormatError extends IntlFormatError {
73
73
  readonly descriptor?: MessageDescriptor;
74
74
  readonly locale: string;
75
75
  constructor(message: string, locale: string, descriptor?: MessageDescriptor, exception?: Error | unknown);
76
76
  }
77
- declare class MissingTranslationError extends IntlError<IntlErrorCode.MISSING_TRANSLATION> {
77
+ export declare class MissingTranslationError extends IntlError<IntlErrorCode.MISSING_TRANSLATION> {
78
78
  readonly descriptor?: MessageDescriptor;
79
79
  constructor(descriptor: MessageDescriptor, locale: string);
80
80
  }
81
81
  //#endregion
82
82
  //#region packages/intl/utils.d.ts
83
- declare function filterProps<T extends Record<string, any>, K extends string>(props: T, allowlist: Array<K>, defaults?: Partial<T>): Pick<T, K>;
84
- declare const DEFAULT_INTL_CONFIG: Pick<ResolvedIntlConfig<any>, "fallbackOnEmptyString" | "formats" | "messages" | "timeZone" | "defaultLocale" | "defaultFormats" | "onError" | "onWarn">;
85
- declare function createIntlCache(): IntlCache;
83
+ export declare function filterProps<T extends Record<string, any>, K extends string>(props: T, allowlist: Array<K>, defaults?: Partial<T>): Pick<T, K>;
84
+ export declare const DEFAULT_INTL_CONFIG: Pick<ResolvedIntlConfig<any>, "fallbackOnEmptyString" | "formats" | "messages" | "timeZone" | "defaultLocale" | "defaultFormats" | "onError" | "onWarn">;
85
+ export declare function createIntlCache(): IntlCache;
86
86
  /**
87
87
  * Create intl formatters and populate cache
88
88
  * @param cache explicit cache to prevent leaking memory
89
89
  */
90
- declare function createFormatters(cache?: IntlCache): Formatters;
91
- declare function getNamedFormat<T extends keyof CustomFormats>(formats: CustomFormats, type: T, name: string, onError: OnErrorFn): NumberFormatOptions | Intl.DateTimeFormatOptions | Intl.RelativeTimeFormatOptions | undefined;
90
+ export declare function createFormatters(cache?: IntlCache): Formatters;
91
+ export declare function getNamedFormat<T extends keyof CustomFormats>(formats: CustomFormats, type: T, name: string, onError: OnErrorFn): NumberFormatOptions | Intl.DateTimeFormatOptions | Intl.RelativeTimeFormatOptions | undefined;
92
92
  //#endregion
93
93
  //#region packages/intl/types.d.ts
94
- interface Part<T = string> {
94
+ export interface Part<T = string> {
95
95
  type: "element" | "literal";
96
96
  value: T;
97
97
  }
@@ -108,14 +108,14 @@ type MessageIds = FormatjsIntl.Message extends {
108
108
  type Locale = FormatjsIntl.IntlConfig extends {
109
109
  locale: infer T;
110
110
  } ? T extends string ? T : string : string;
111
- type OnErrorFn = (err: MissingTranslationError | MessageFormatError | MissingDataError | InvalidConfigError | UnsupportedFormatterError | FormatError) => void;
112
- type OnWarnFn = (warning: string) => void;
111
+ export type OnErrorFn = (err: MissingTranslationError | MessageFormatError | MissingDataError | InvalidConfigError | UnsupportedFormatterError | FormatError) => void;
112
+ export type OnWarnFn = (warning: string) => void;
113
113
  /**
114
114
  * Config for intl object.
115
115
  * Generic type T is the type of potential rich text element. For example:
116
116
  * With React, T would be React.ReactNode
117
117
  */
118
- interface ResolvedIntlConfig<T = string> {
118
+ export interface ResolvedIntlConfig<T = string> {
119
119
  locale: Locale;
120
120
  timeZone?: string;
121
121
  fallbackOnEmptyString?: boolean;
@@ -127,26 +127,26 @@ interface ResolvedIntlConfig<T = string> {
127
127
  onError: OnErrorFn;
128
128
  onWarn?: OnWarnFn;
129
129
  }
130
- interface CustomFormats extends Partial<Formats> {
130
+ export interface CustomFormats extends Partial<Formats> {
131
131
  relative?: Record<string, Intl.RelativeTimeFormatOptions>;
132
132
  dateTimeRange?: Record<string, Intl.DateTimeFormatOptions>;
133
133
  }
134
- interface CustomFormatConfig<Source = string> {
134
+ export interface CustomFormatConfig<Source = string> {
135
135
  format?: Source extends keyof FormatjsIntl.Formats ? FormatjsIntl.Formats[Source] : string;
136
136
  }
137
- type FormatDateTimeRangeOptions = Omit<Intl.DateTimeFormatOptions, "localeMatcher"> & CustomFormatConfig<"dateTimeRange">;
138
- type FormatDateOptions = Omit<Intl.DateTimeFormatOptions, "localeMatcher"> & CustomFormatConfig<"date">;
139
- type FormatTimeOptions = Omit<Intl.DateTimeFormatOptions, "localeMatcher"> & CustomFormatConfig<"time">;
140
- type FormatNumberOptions = Omit<NumberFormatOptions, "localeMatcher"> & CustomFormatConfig<"number">;
141
- type FormatRelativeTimeOptions = Omit<Intl.RelativeTimeFormatOptions, "localeMatcher"> & CustomFormatConfig<"time">;
142
- type FormatPluralOptions = Omit<Intl.PluralRulesOptions, "localeMatcher"> & CustomFormatConfig;
143
- type FormatListOptions = Omit<Intl.ListFormatOptions, "localeMatcher">;
144
- type FormatDisplayNameOptions = Omit<Intl.DisplayNamesOptions, "localeMatcher">;
137
+ export type FormatDateTimeRangeOptions = Omit<Intl.DateTimeFormatOptions, "localeMatcher"> & CustomFormatConfig<"dateTimeRange">;
138
+ export type FormatDateOptions = Omit<Intl.DateTimeFormatOptions, "localeMatcher"> & CustomFormatConfig<"date">;
139
+ export type FormatTimeOptions = Omit<Intl.DateTimeFormatOptions, "localeMatcher"> & CustomFormatConfig<"time">;
140
+ export type FormatNumberOptions = Omit<NumberFormatOptions, "localeMatcher"> & CustomFormatConfig<"number">;
141
+ export type FormatRelativeTimeOptions = Omit<Intl.RelativeTimeFormatOptions, "localeMatcher"> & CustomFormatConfig<"time">;
142
+ export type FormatPluralOptions = Omit<Intl.PluralRulesOptions, "localeMatcher"> & CustomFormatConfig;
143
+ export type FormatListOptions = Omit<Intl.ListFormatOptions, "localeMatcher">;
144
+ export type FormatDisplayNameOptions = Omit<Intl.DisplayNamesOptions, "localeMatcher">;
145
145
  /**
146
146
  * `TBase` is the type constraints of the rich text element in the formatted output.
147
147
  * For example, with React, `TBase` should be `React.ReactNode`.
148
148
  */
149
- interface IntlFormatters<TBase = unknown> {
149
+ export interface IntlFormatters<TBase = unknown> {
150
150
  formatDateTimeRange(this: void, from: Parameters<Intl.DateTimeFormat["formatRange"]>[0] | string, to: Parameters<Intl.DateTimeFormat["formatRange"]>[1] | string, opts?: FormatDateTimeRangeOptions): string;
151
151
  formatDate(this: void, value: Parameters<Intl.DateTimeFormat["format"]>[0] | string, opts?: FormatDateOptions): string;
152
152
  formatTime(this: void, value: Parameters<Intl.DateTimeFormat["format"]>[0] | string, opts?: FormatTimeOptions): string;
@@ -165,7 +165,7 @@ interface IntlFormatters<TBase = unknown> {
165
165
  formatListToParts<T extends TBase>(this: void, values: Iterable<string | T>, opts?: FormatListOptions): Part[];
166
166
  formatDisplayName(this: void, value: Parameters<Intl.DisplayNames["of"]>[0], opts: FormatDisplayNameOptions): string | undefined;
167
167
  }
168
- interface Formatters {
168
+ export interface Formatters {
169
169
  getDateTimeFormat(this: void, ...args: ConstructorParameters<typeof Intl.DateTimeFormat>): Intl.DateTimeFormat;
170
170
  getNumberFormat(this: void, locales?: string | string[], opts?: NumberFormatOptions): Intl.NumberFormat;
171
171
  getMessageFormat(this: void, ...args: ConstructorParameters<typeof IntlMessageFormat>): IntlMessageFormat;
@@ -174,10 +174,10 @@ interface Formatters {
174
174
  getListFormat(this: void, ...args: ConstructorParameters<typeof Intl.ListFormat>): Intl.ListFormat;
175
175
  getDisplayNames(this: void, ...args: ConstructorParameters<typeof Intl.DisplayNames>): Intl.DisplayNames;
176
176
  }
177
- interface IntlShape<T = string> extends ResolvedIntlConfig<T>, IntlFormatters<T> {
177
+ export interface IntlShape<T = string> extends ResolvedIntlConfig<T>, IntlFormatters<T> {
178
178
  formatters: Formatters;
179
179
  }
180
- interface IntlCache {
180
+ export interface IntlCache {
181
181
  dateTime: Record<string, Intl.DateTimeFormat>;
182
182
  number: Record<string, Intl.NumberFormat>;
183
183
  message: Record<string, IntlMessageFormat>;
@@ -186,12 +186,12 @@ interface IntlCache {
186
186
  list: Record<string, Intl.ListFormat>;
187
187
  displayNames: Record<string, Intl.DisplayNames>;
188
188
  }
189
- interface MessageDescriptor {
189
+ export interface MessageDescriptor {
190
190
  id?: MessageIds;
191
191
  description?: string | object;
192
192
  defaultMessage?: string | MessageFormatElement[];
193
193
  }
194
- type IntlConfig<T = string> = Omit<ResolvedIntlConfig<T>, keyof typeof DEFAULT_INTL_CONFIG> & Partial<typeof DEFAULT_INTL_CONFIG>;
194
+ export type IntlConfig<T = string> = Omit<ResolvedIntlConfig<T>, keyof typeof DEFAULT_INTL_CONFIG> & Partial<typeof DEFAULT_INTL_CONFIG>;
195
195
  //#endregion
196
196
  //#region packages/intl/message.d.ts
197
197
  type FormatMessageFn<T> = ({ locale, formats, messages, defaultLocale, defaultFormats, fallbackOnEmptyString, onError, timeZone, defaultRichTextElements }: {
@@ -205,28 +205,28 @@ type FormatMessageFn<T> = ({ locale, formats, messages, defaultLocale, defaultFo
205
205
  fallbackOnEmptyString?: boolean;
206
206
  onError: OnErrorFn;
207
207
  }, state: Formatters$1 & Pick<Formatters, "getMessageFormat">, messageDescriptor: MessageDescriptor, values?: Record<string, PrimitiveType | T | FormatXMLElementFn<T>>, opts?: Options) => T extends string ? string : Array<T | string> | string | T;
208
- declare const formatMessage: FormatMessageFn<any>;
208
+ export declare const formatMessage: FormatMessageFn<any>;
209
209
  //#endregion
210
210
  //#region packages/intl/dateTime.d.ts
211
- declare function formatDate(config: {
211
+ export declare function formatDate(config: {
212
212
  locale: string;
213
213
  timeZone?: string;
214
214
  formats: CustomFormats;
215
215
  onError: OnErrorFn;
216
216
  }, getDateTimeFormat: Formatters["getDateTimeFormat"], value: Parameters<IntlFormatters["formatDate"]>[0], options?: Parameters<IntlFormatters["formatDate"]>[1]): string;
217
- declare function formatTime(config: {
217
+ export declare function formatTime(config: {
218
218
  locale: string;
219
219
  timeZone?: string;
220
220
  formats: CustomFormats;
221
221
  onError: OnErrorFn;
222
222
  }, getDateTimeFormat: Formatters["getDateTimeFormat"], value: Parameters<IntlFormatters["formatTime"]>[0], options?: Parameters<IntlFormatters["formatTime"]>[1]): string;
223
- declare function formatDateToParts(config: {
223
+ export declare function formatDateToParts(config: {
224
224
  locale: string;
225
225
  timeZone?: string;
226
226
  formats: CustomFormats;
227
227
  onError: OnErrorFn;
228
228
  }, getDateTimeFormat: Formatters["getDateTimeFormat"], value: Parameters<IntlFormatters["formatDate"]>[0], options?: Parameters<IntlFormatters["formatDate"]>[1]): Intl.DateTimeFormatPart[];
229
- declare function formatTimeToParts(config: {
229
+ export declare function formatTimeToParts(config: {
230
230
  locale: string;
231
231
  timeZone?: string;
232
232
  formats: CustomFormats;
@@ -234,37 +234,37 @@ declare function formatTimeToParts(config: {
234
234
  }, getDateTimeFormat: Formatters["getDateTimeFormat"], value: Parameters<IntlFormatters["formatTimeToParts"]>[0], options?: Parameters<IntlFormatters["formatTimeToParts"]>[1]): Intl.DateTimeFormatPart[];
235
235
  //#endregion
236
236
  //#region packages/intl/displayName.d.ts
237
- declare function formatDisplayName({ locale, onError }: {
237
+ export declare function formatDisplayName({ locale, onError }: {
238
238
  locale: string;
239
239
  onError: OnErrorFn;
240
240
  }, getDisplayNames: Formatters["getDisplayNames"], value: Parameters<IntlFormatters["formatDisplayName"]>[0], options: Parameters<IntlFormatters["formatDisplayName"]>[1]): string | undefined;
241
241
  //#endregion
242
242
  //#region packages/intl/list.d.ts
243
- declare function formatList(opts: {
243
+ export declare function formatList(opts: {
244
244
  locale: string;
245
245
  onError: OnErrorFn;
246
246
  }, getListFormat: Formatters["getListFormat"], values: Iterable<string>, options: Parameters<IntlFormatters["formatList"]>[1]): string;
247
247
  //#endregion
248
248
  //#region packages/intl/plural.d.ts
249
- declare function formatPlural({ locale, onError }: {
249
+ export declare function formatPlural({ locale, onError }: {
250
250
  locale: string;
251
251
  onError: OnErrorFn;
252
252
  }, getPluralRules: Formatters["getPluralRules"], value: Parameters<IntlFormatters["formatPlural"]>[0], options?: Parameters<IntlFormatters["formatPlural"]>[1]): Intl.LDMLPluralRule;
253
253
  //#endregion
254
254
  //#region packages/intl/relativeTime.d.ts
255
- declare function formatRelativeTime(config: {
255
+ export declare function formatRelativeTime(config: {
256
256
  locale: string;
257
257
  formats: CustomFormats;
258
258
  onError: OnErrorFn;
259
259
  }, getRelativeTimeFormat: Formatters["getRelativeTimeFormat"], value: Parameters<IntlFormatters["formatRelativeTime"]>[0], unit?: Parameters<IntlFormatters["formatRelativeTime"]>[1], options?: Parameters<IntlFormatters["formatRelativeTime"]>[2]): string;
260
260
  //#endregion
261
261
  //#region packages/intl/number.d.ts
262
- declare function formatNumber(config: {
262
+ export declare function formatNumber(config: {
263
263
  locale: string;
264
264
  formats: CustomFormats;
265
265
  onError: OnErrorFn;
266
266
  }, getNumberFormat: Formatters["getNumberFormat"], value: Parameters<IntlFormatters["formatNumber"]>[0], options?: Parameters<IntlFormatters["formatNumber"]>[1]): string;
267
- declare function formatNumberToParts(config: {
267
+ export declare function formatNumberToParts(config: {
268
268
  locale: string;
269
269
  formats: CustomFormats;
270
270
  onError: OnErrorFn;
@@ -279,11 +279,11 @@ interface CreateIntlFn<T = string, C extends IntlConfig<T> = IntlConfig<T>, S ex
279
279
  * @param config intl config
280
280
  * @param cache cache for formatter instances to prevent memory leak
281
281
  */
282
- declare function createIntl<T = string>(config: IntlConfig<T>, cache?: IntlCache): IntlShape<T>;
282
+ export declare function createIntl<T = string>(config: IntlConfig<T>, cache?: IntlCache): IntlShape<T>;
283
283
  //#endregion
284
284
  //#region packages/intl/index.d.ts
285
- declare function defineMessages<K extends keyof any, T = MessageDescriptor, U extends Record<K, T> = Record<K, T>>(msgs: U): U;
286
- declare function defineMessage<T>(msg: T): T;
285
+ export declare function defineMessages<K extends keyof any, T = MessageDescriptor, U extends Record<K, T> = Record<K, T>>(msgs: U): U;
286
+ export declare function defineMessage<T>(msg: T): T;
287
287
  //#endregion
288
- export { type CreateIntlFn, CustomFormatConfig, CustomFormats, DEFAULT_INTL_CONFIG, FormatDateOptions, FormatDateTimeRangeOptions, FormatDisplayNameOptions, FormatListOptions, type FormatMessageFn, FormatNumberOptions, FormatPluralOptions, FormatRelativeTimeOptions, FormatTimeOptions, Formatters, IntlCache, IntlConfig, IntlError, IntlErrorCode, IntlFormatError, IntlFormatters, IntlShape, InvalidConfigError, MessageDescriptor, MessageFormatError, MissingDataError, MissingTranslationError, OnErrorFn, OnWarnFn, Part, ResolvedIntlConfig, UnsupportedFormatterError, createFormatters, createIntl, createIntlCache, defineMessage, defineMessages, filterProps, formatDate, formatDateToParts, formatDisplayName, formatList, formatMessage, formatNumber, formatNumberToParts, formatPlural, formatRelativeTime, formatTime, formatTimeToParts, getNamedFormat };
288
+ export type { CreateIntlFn, FormatMessageFn };
289
289
  //# sourceMappingURL=index.d.ts.map
package/index.js CHANGED
@@ -199,13 +199,21 @@ function deepMergeFormatsAndSetTimeZone(f1, timeZone) {
199
199
  time: deepMergeOptions(setTimeZoneInOptions(mfFormats.time, timeZone), setTimeZoneInOptions(f1.time || {}, timeZone))
200
200
  };
201
201
  }
202
+ function getMessageDescriptorContext(messageDescriptor) {
203
+ const { defaultMessage } = messageDescriptor;
204
+ try {
205
+ return defaultMessage !== void 0 ? `\nDefault Message: ${typeof defaultMessage === "string" ? defaultMessage : JSON.stringify(defaultMessage)}` : `\nMessage Descriptor: ${JSON.stringify(messageDescriptor)}`;
206
+ } catch {
207
+ return "";
208
+ }
209
+ }
202
210
  const formatMessage = ({ locale, formats, messages, defaultLocale, defaultFormats, fallbackOnEmptyString, onError, timeZone, defaultRichTextElements }, state, messageDescriptor = { id: "" }, values, opts) => {
203
211
  const { id: msgId, defaultMessage } = messageDescriptor;
204
- invariant(!!msgId, `[@formatjs/intl] An \`id\` must be provided to format a message. You can either:
212
+ if (!msgId) invariant(false, `[@formatjs/intl] An \`id\` must be provided to format a message. You can either:
205
213
  1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.github.io/docs/tooling/babel-plugin)
206
214
  or [@formatjs/ts-transformer](https://formatjs.github.io/docs/tooling/ts-transformer) OR
207
215
  2. Configure your \`eslint\` config to include [eslint-plugin-formatjs](https://formatjs.github.io/docs/tooling/linter#enforce-id)
208
- to autofix this issue`);
216
+ to autofix this issue${getMessageDescriptorContext(messageDescriptor)}`);
209
217
  const id = String(msgId);
210
218
  const message = messages && Object.prototype.hasOwnProperty.call(messages, id) && messages[id];
211
219
  if (Array.isArray(message) && message.length === 1 && message[0].type === TYPE.literal) return message[0].value;
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getFormatter","getFormatter"],"sources":["../error.ts","../utils.ts","../message.ts","../dateTime.ts","../displayName.ts","../list.ts","../plural.ts","../relativeTime.ts","../number.ts","../create-intl.ts","../index.ts"],"sourcesContent":["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 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 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 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 | 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\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 invariant(\n !!msgId,\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`\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 {\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 {type MessageFormatElement} from '@formatjs/icu-messageformat-parser'\nimport {\n formatDate,\n formatDateTimeRange,\n formatDateToParts,\n formatTime,\n formatTimeToParts,\n} from '#packages/intl/dateTime.js'\nimport {formatDisplayName} from '#packages/intl/displayName.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'\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 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","import {type MessageDescriptor} from '#packages/intl/types.js'\nexport * from '#packages/intl/types.js'\n\nexport function defineMessages<\n K extends keyof any,\n T = MessageDescriptor,\n U extends Record<K, T> = Record<K, T>,\n>(msgs: U): U {\n return msgs\n}\n\nexport function defineMessage<T>(msg: T): T {\n return msg\n}\n\nexport {\n createIntlCache,\n filterProps,\n DEFAULT_INTL_CONFIG,\n createFormatters,\n getNamedFormat,\n} from '#packages/intl/utils.js'\nexport * from '#packages/intl/error.js'\nexport {formatMessage} from '#packages/intl/message.js'\nexport type {FormatMessageFn} from '#packages/intl/message.js'\nexport {\n formatDate,\n formatDateToParts,\n formatTime,\n formatTimeToParts,\n} from '#packages/intl/dateTime.js'\nexport {formatDisplayName} from '#packages/intl/displayName.js'\nexport {formatList} from '#packages/intl/list.js'\nexport {formatPlural} from '#packages/intl/plural.js'\nexport {formatRelativeTime} from '#packages/intl/relativeTime.js'\nexport {formatNumber, formatNumberToParts} from '#packages/intl/number.js'\nexport {createIntl} from '#packages/intl/create-intl.js'\nexport type {CreateIntlFn} from '#packages/intl/create-intl.js'\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["getFormatter","getFormatter"],"sources":["../error.ts","../utils.ts","../message.ts","../dateTime.ts","../displayName.ts","../list.ts","../plural.ts","../relativeTime.ts","../number.ts","../create-intl.ts","../index.ts"],"sourcesContent":["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 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 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 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 | 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 {\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 {type MessageFormatElement} from '@formatjs/icu-messageformat-parser'\nimport {\n formatDate,\n formatDateTimeRange,\n formatDateToParts,\n formatTime,\n formatTimeToParts,\n} from '#packages/intl/dateTime.js'\nimport {formatDisplayName} from '#packages/intl/displayName.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'\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 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","import {type MessageDescriptor} from '#packages/intl/types.js'\nexport * from '#packages/intl/types.js'\n\nexport function defineMessages<\n K extends keyof any,\n T = MessageDescriptor,\n U extends Record<K, T> = Record<K, T>,\n>(msgs: U): U {\n return msgs\n}\n\nexport function defineMessage<T>(msg: T): T {\n return msg\n}\n\nexport {\n createIntlCache,\n filterProps,\n DEFAULT_INTL_CONFIG,\n createFormatters,\n getNamedFormat,\n} from '#packages/intl/utils.js'\nexport * from '#packages/intl/error.js'\nexport {formatMessage} from '#packages/intl/message.js'\nexport type {FormatMessageFn} from '#packages/intl/message.js'\nexport {\n formatDate,\n formatDateToParts,\n formatTime,\n formatTimeToParts,\n} from '#packages/intl/dateTime.js'\nexport {formatDisplayName} from '#packages/intl/displayName.js'\nexport {formatList} from '#packages/intl/list.js'\nexport {formatPlural} from '#packages/intl/plural.js'\nexport {formatRelativeTime} from '#packages/intl/relativeTime.js'\nexport {formatNumber, formatNumberToParts} from '#packages/intl/number.js'\nexport {createIntl} from '#packages/intl/create-intl.js'\nexport type {CreateIntlFn} from '#packages/intl/create-intl.js'\n"],"mappings":";;;;AAEA,IAAY,gBAAL,yBAAA,eAAA;CACL,cAAA,kBAAA;CACA,cAAA,2BAAA;CACA,cAAA,oBAAA;CACA,cAAA,kBAAA;CACA,cAAA,yBAAA;;AACF,EAAA,CAAA,CAAA;AAEA,IAAa,YAAb,MAAa,kBAEH,MAAM;CAGd,YAAY,MAAS,SAAiB,WAA6B;EACjE,MAAM,MAAM,YACR,qBAAqB,QACnB,YACA,IAAI,MAAM,OAAO,SAAS,CAAC,IAC7B,KAAA;EACJ,MACE,yBAAyB,KAAK,IAAI,QAAQ;EAC9C,MAAM,KAAK,IAAI,QAAQ,IAAI,IAAI,UAAU,IACvC;EACA,KAAK,OAAO;EAEZ,IAAI,OAAO,MAAM,sBAAsB,YAErC,MAAM,kBAAkB,MAAM,SAAS;CAE3C;AACF;AAEA,IAAa,4BAAb,cAA+C,UAA+C;CAC5F,YAAY,SAAiB,WAA6B;EACxD,MAAA,yBAA2C,SAAS,SAAS;CAC/D;AACF;AAEA,IAAa,qBAAb,cAAwC,UAAwC;CAC9E,YAAY,SAAiB,WAA6B;EACxD,MAAA,kBAAoC,SAAS,SAAS;CACxD;AACF;AAEA,IAAa,mBAAb,cAAsC,UAAsC;CAC1E,YAAY,SAAiB,WAA6B;EACxD,MAAA,gBAAkC,SAAS,SAAS;CACtD;AACF;AAEA,IAAa,kBAAb,cAAqC,UAAsC;CAGzE,YAAY,SAAiB,QAAgB,WAA6B;EACxE,MAAA,gBAEE,GAAG,QAAQ;UACP,OAAO;GAEX,SACF;EACA,KAAK,SAAS;CAChB;AACF;AAEA,IAAa,qBAAb,cAAwC,gBAAgB;CAGtD,YACE,SACA,QACA,YACA,WACA;EACA,MACE,GAAG,QAAQ;aACJ,YAAY,GAAG;mBACT,YAAY,eAAe;eAC/B,YAAY,YAAY;GAEjC,QACA,SACF;EACA,KAAK,aAAa;EAClB,KAAK,SAAS;CAChB;AACF;AAEA,IAAa,0BAAb,cAA6C,UAA6C;CAExF,YAAY,YAA+B,QAAgB;EACzD,MAAA,uBAEE,qBAAqB,WAAW,GAAG,gBAAgB,OAAO,WACxD,WAAW,iBACP,oBACE,OAAO,WAAW,mBAAmB,WACjC,WAAW,iBACX,WAAW,eACR,KAAK,MAAW,EAAE,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CAC7C,KAAK,EACb,KACD,KACL,cACH;EACA,KAAK,aAAa;CACpB;AACF;;;AChGA,SAAgB,UACd,WACA,SACA,MAAW,OACQ;CACnB,IAAI,CAAC,WACH,MAAM,IAAI,IAAI,OAAO;AAEzB;AAEA,SAAgB,YACd,OACA,WACA,WAAuB,CAAC,GACZ;CACZ,OAAO,UAAU,QACd,UAAU,SAAS;EAClB,IAAI,QAAQ,OACV,SAAS,QAAQ,MAAM;OAClB,IAAI,QAAQ,UACjB,SAAS,QAAQ,SAAS;EAG5B,OAAO;CACT,GACA,CAAC,CACH;AACF;AAEA,MAAM,uBAAiC,UAAS;CAE9C,IAAI,QAAQ,IAAI,aAAa,cAC3B,QAAQ,MAAM,KAAK;AAEvB;AAEA,MAAM,sBAAgC,YAAoB;CAExD,IAAI,QAAQ,IAAI,aAAa,cAC3B,QAAQ,KAAK,OAAO;AAExB;AAEA,MAAa,sBAUT;CACF,SAAS,CAAC;CACV,UAAU,CAAC;CACX,UAAU,KAAA;CAEV,eAAe;CACf,gBAAgB,CAAC;CAEjB,uBAAuB;CAEvB,SAAS;CACT,QAAQ;AACV;AAEA,SAAgB,kBAA6B;CAC3C,OAAO;EACL,UAAU,CAAC;EACX,QAAQ,CAAC;EACT,SAAS,CAAC;EACV,cAAc,CAAC;EACf,aAAa,CAAC;EACd,MAAM,CAAC;EACP,cAAc,CAAC;CACjB;AACF;AAEA,SAAS,uBACP,OACkB;CAClB,OAAO,EACL,SAAS;EACP,OAAO;GACL,IAAI,KAAK;IACP,OAAO,MAAM;GACf;GACA,IAAI,KAAK,OAAO;IACd,MAAM,OAAO;GACf;EACF;CACF,EACF;AACF;;;;;AAMA,SAAgB,iBACd,QAAmB,gBAAgB,GACvB;CACZ,MAAM,qBAAsB,KAAa;CACzC,MAAM,aAAc,KAAa;CACjC,MAAM,eAAgB,KAAa;CACnC,MAAM,oBAAoB,SACvB,GAAG,SAAS,IAAI,KAAK,eAAe,GAAG,IAAI,GAC5C;EACE,OAAO,uBAAuB,MAAM,QAAQ;EAC5C,UAAU,WAAW;CACvB,CACF;CACA,MAAM,kBAAkB,SAAS,GAAG,SAAS,IAAI,KAAK,aAAa,GAAG,IAAI,GAAG;EAC3E,OAAO,uBAAuB,MAAM,MAAM;EAC1C,UAAU,WAAW;CACvB,CAAC;CACD,MAAM,iBAAiB,SAAS,GAAG,SAAS,IAAI,KAAK,YAAY,GAAG,IAAI,GAAG;EACzE,OAAO,uBAAuB,MAAM,WAAW;EAC/C,UAAU,WAAW;CACvB,CAAC;CACD,OAAO;EACL;EACA;EACA,kBAAkB,SACf,SAAS,SAAS,iBAAiB,SAClC,IAAI,kBAAkB,SAAS,SAAS,iBAAiB;GACvD,YAAY;IACV;IACA;IACA;GACF;GACA,GAAG;EACL,CAAC,GACH;GACE,OAAO,uBAAuB,MAAM,OAAO;GAC3C,UAAU,WAAW;EACvB,CACF;EACA,uBAAuB,SACpB,GAAG,SAAS,IAAI,mBAAmB,GAAG,IAAI,GAC3C;GACE,OAAO,uBAAuB,MAAM,YAAY;GAChD,UAAU,WAAW;EACvB,CACF;EACA;EACA,eAAe,SAAS,GAAG,SAAS,IAAI,WAAW,GAAG,IAAI,GAAG;GAC3D,OAAO,uBAAuB,MAAM,IAAI;GACxC,UAAU,WAAW;EACvB,CAAC;EACD,iBAAiB,SAAS,GAAG,SAAS,IAAI,aAAa,GAAG,IAAI,GAAG;GAC/D,OAAO,uBAAuB,MAAM,YAAY;GAChD,UAAU,WAAW;EACvB,CAAC;CACH;AACF;AAEA,SAAgB,eACd,SACA,MACA,MACA,SAKY;CACZ,MAAM,aAAa,WAAW,QAAQ;CACtC,IAAI;CACJ,IAAI,YACF,SAAS,WAAW;CAEtB,IAAI,QACF,OAAO;CAGT,QAAQ,IAAI,0BAA0B,MAAM,KAAK,iBAAiB,MAAM,CAAC;AAC3E;;;ACvKA,SAAS,qBACP,MACA,UAC4C;CAC5C,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,QACtB,KAAiD,MAAM;EACtD,IAAI,KAAK;GACP;GACA,GAAG,KAAK;EACV;EACA,OAAO;CACT,GACA,CAAC,CACH;AACF;AAEA,SAAS,iBACP,OACA,OAC4C;CAE5C,OADa,OAAO,KAAK;EAAC,GAAG;EAAO,GAAG;CAAK,CAClC,CAAC,CAAC,QAAQ,KAAiD,MAAM;EACzE,IAAI,KAAK;GACP,GAAG,MAAM;GACT,GAAG,MAAM;EACX;EACA,OAAO;CACT,GAAG,CAAC,CAAC;AACP;AAEA,SAAS,+BACP,IACA,UACe;CACf,IAAI,CAAC,UACH,OAAO;CAET,MAAM,YAAY,kBAAkB;CACpC,OAAO;EACL,GAAG;EACH,GAAG;EACH,MAAM,iBACJ,qBAAqB,UAAU,MAAM,QAAQ,GAC7C,qBAAqB,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAC9C;EACA,MAAM,iBACJ,qBAAqB,UAAU,MAAM,QAAQ,GAC7C,qBAAqB,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAC9C;CACF;AACF;AA8BA,SAAS,4BACP,mBACQ;CACR,MAAM,EAAC,mBAAkB;CACzB,IAAI;EACF,OAAO,mBAAmB,KAAA,IACtB,sBACE,OAAO,mBAAmB,WACtB,iBACA,KAAK,UAAU,cAAc,MAEnC,yBAAyB,KAAK,UAAU,iBAAiB;CAC/D,QAAQ;EACN,OAAO;CACT;AACF;AAEA,MAAa,iBACX,EACE,QACA,SACA,UACA,eACA,gBACA,uBACA,SACA,UACA,2BAEF,OACA,oBAAoB,EAAC,IAAI,GAAE,GAC3B,QACA,SACG;CACH,MAAM,EAAC,IAAI,OAAO,mBAAkB;CAGpC,IAAI,CAAC,OACH,UACE,OACA;;;;uBAIiB,4BAA4B,iBAAiB,GAChE;CAEF,MAAM,KAAK,OAAO,KAAK;CACvB,MAAM,UAIJ,YACA,OAAO,UAAU,eAAe,KAAK,UAAU,EAAE,KACjD,SAAS;CAGX,IACE,MAAM,QAAQ,OAAO,KACrB,QAAQ,WAAW,KACnB,QAAQ,EAAE,CAAC,SAAS,KAAK,SAEzB,OAAO,QAAQ,EAAE,CAAC;CAGpB,SAAS;EACP,GAAG;EACH,GAAG;CACL;CACA,UAAU,+BAA+B,SAAS,QAAQ;CAC1D,iBAAiB,+BAA+B,gBAAgB,QAAQ;CAExE,IAAI,CAAC,SAAS;EACZ,IAAI,0BAA0B,SAAS,YAAY,IACjD,OAAO;EAGT,IACE,CAAC,kBACA,UAAU,OAAO,YAAY,MAAM,cAAc,YAAY,GAK9D,QAAQ,IAAI,wBAAwB,mBAAmB,MAAM,CAAC;EAEhE,IAAI,gBACF,IAAI;GAQF,OAPkB,MAAM,iBACtB,gBACA,eACA,gBACA,IAGa,CAAC,CAAC,OAAO,MAAM;EAChC,SAAS,GAAG;GACV,QACE,IAAI,mBACF,0CAA0C,GAAG,wCAC7C,QACA,mBACA,CACF,CACF;GACA,OAAO,OAAO,mBAAmB,WAAW,iBAAiB;EAC/D;EAEF,OAAO;CACT;CAGA,IAAI;EAMF,OALkB,MAAM,iBAAiB,SAAS,QAAQ,SAAS;GACjE,YAAY;GACZ,GAAG;EACL,CAEe,CAAC,CAAC,OAAY,MAAM;CACrC,SAAS,GAAG;EACV,QACE,IAAI,mBACF,8BAA8B,GAAG,WAC/B,iBAAiB,oBAAoB,KACtC,gBACD,QACA,mBACA,CACF,CACF;CACF;CAEA,IAAI,gBACF,IAAI;EAQF,OAPkB,MAAM,iBACtB,gBACA,eACA,gBACA,IAGa,CAAC,CAAC,OAAO,MAAM;CAChC,SAAS,GAAG;EACV,QACE,IAAI,mBACF,8CAA8C,GAAG,gCACjD,QACA,mBACA,CACF,CACF;CACF;CAGF,IAAI,OAAO,YAAY,UACrB,OAAO;CAET,IAAI,OAAO,mBAAmB,UAC5B,OAAO;CAET,OAAO;AACT;;;AC/PA,MAAM,2BAAoE;CACxE;CAEA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;AACF;AAEA,SAAgBA,eACd,EACE,QACA,SACA,SACA,YAOF,MACA,mBACA,UAAuD,CAAC,GACnC;CACrB,MAAM,EAAC,WAAU;CACjB,MAAM,WAAW;EACf,GAAI,YAAY,EAAC,SAAQ;EACzB,GAAI,UAAU,eAAe,SAAU,MAAM,QAAQ,OAAO;CAC9D;CAEA,IAAI,kBAAkB,YACpB,SACA,0BACA,QACF;CAEA,IACE,SAAS,UACT,CAAC,gBAAgB,QACjB,CAAC,gBAAgB,UACjB,CAAC,gBAAgB,UACjB,CAAC,gBAAgB,aACjB,CAAC,gBAAgB,WAGjB,kBAAkB;EAAC,GAAG;EAAiB,MAAM;EAAW,QAAQ;CAAS;CAG3E,OAAO,kBAAkB,QAAQ,eAAe;AAClD;AAEA,SAAgB,WACd,QAMA,mBACA,OACA,UAAuD,CAAC,GAChD;CACR,MAAM,OAAO,OAAO,UAAU,WAAW,IAAI,KAAK,SAAS,CAAC,IAAI;CAChE,IAAI;EACF,OAAOA,eAAa,QAAQ,QAAQ,mBAAmB,OAAO,CAAC,CAAC,OAAO,IAAI;CAC7E,SAAS,GAAG;EACV,OAAO,QACL,IAAI,gBAAgB,0BAA0B,OAAO,QAAQ,CAAC,CAChE;CACF;CAEA,OAAO,OAAO,IAAI;AACpB;AAEA,SAAgB,WACd,QAMA,mBACA,OACA,UAAuD,CAAC,GAChD;CACR,MAAM,OAAO,OAAO,UAAU,WAAW,IAAI,KAAK,SAAS,CAAC,IAAI;CAEhE,IAAI;EACF,OAAOA,eAAa,QAAQ,QAAQ,mBAAmB,OAAO,CAAC,CAAC,OAAO,IAAI;CAC7E,SAAS,GAAG;EACV,OAAO,QACL,IAAI,gBAAgB,0BAA0B,OAAO,QAAQ,CAAC,CAChE;CACF;CAEA,OAAO,OAAO,IAAI;AACpB;AAEA,SAAgB,oBACd,QAMA,mBACA,MACA,IACA,UAAgE,CAAC,GACzD;CACR,MAAM,WAAW,OAAO,SAAS,WAAW,IAAI,KAAK,QAAQ,CAAC,IAAI;CAClE,MAAM,SAAS,OAAO,OAAO,WAAW,IAAI,KAAK,MAAM,CAAC,IAAI;CAE5D,IAAI;EACF,OAAOA,eACL,QACA,iBACA,mBACA,OACF,CAAC,CAAC,YAAY,UAAU,MAAM;CAChC,SAAS,GAAG;EACV,OAAO,QACL,IAAI,gBAAgB,qCAAqC,OAAO,QAAQ,CAAC,CAC3E;CACF;CAEA,OAAO,OAAO,QAAQ;AACxB;AAEA,SAAgB,kBACd,QAMA,mBACA,OACA,UAAuD,CAAC,GAC7B;CAC3B,MAAM,OAAO,OAAO,UAAU,WAAW,IAAI,KAAK,SAAS,CAAC,IAAI;CAChE,IAAI;EACF,OAAOA,eACL,QACA,QACA,mBACA,OACF,CAAC,CAAC,cAAc,IAAI;CACtB,SAAS,GAAG;EACV,OAAO,QACL,IAAI,gBAAgB,0BAA0B,OAAO,QAAQ,CAAC,CAChE;CACF;CAEA,OAAO,CAAC;AACV;AAEA,SAAgB,kBACd,QAMA,mBACA,OACA,UAA8D,CAAC,GACpC;CAC3B,MAAM,OAAO,OAAO,UAAU,WAAW,IAAI,KAAK,SAAS,CAAC,IAAI;CAEhE,IAAI;EACF,OAAOA,eACL,QACA,QACA,mBACA,OACF,CAAC,CAAC,cAAc,IAAI;CACtB,SAAS,GAAG;EACV,OAAO,QACL,IAAI,gBAAgB,0BAA0B,OAAO,QAAQ,CAAC,CAChE;CACF;CAEA,OAAO,CAAC;AACV;;;ACxMA,MAAM,uBAA8D;CAClE;CACA;CACA;CACA;AACF;AAEA,SAAgB,kBACd,EACE,QACA,WAKF,iBACA,OACA,SACoB;CAEpB,IAAI,CAD4C,KAAa,cAE3D,QACE,IAAI,YACF;;GAGA,UAAU,gBACZ,CACF;CAEF,MAAM,kBAAkB,YACtB,SACA,oBACF;CACA,IAAI;EACF,OAAO,gBAAgB,QAAQ,eAAe,CAAC,CAAC,GAAG,KAAK;CAC1D,SAAS,GAAG;EACV,QAAQ,IAAI,gBAAgB,kCAAkC,QAAQ,CAAC,CAAC;CAC1E;AACF;;;ACvCA,MAAM,sBAA2D,CAC/D,QACA,OACF;AAEA,MAAM,MAAM,KAAK,IAAI;AAErB,SAAS,cAAc,GAAmB;CACxC,OAAO,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB;AAWA,SAAgB,WACd,MAIA,eACA,QACA,UAAuD,CAAC,GACxB;CAChC,MAAM,UAAU,kBACd,MACA,eACA,QACA,OACF,CAAC,CAAC,QAAQ,KAAwB,OAAO;EACvC,MAAM,MAAM,GAAG;EACf,IAAI,OAAO,QAAQ,UACjB,IAAI,KAAK,GAAG;OACP,IAAI,OAAO,IAAI,IAAI,SAAS,OAAO,UACxC,IAAI,IAAI,SAAS,MAAM;OAEvB,IAAI,KAAK,GAAG;EAEd,OAAO;CACT,GAAG,CAAC,CAAC;CACL,OAAO,QAAQ,WAAW,IAAI,QAAQ,KAAK,QAAQ,WAAW,IAAI,KAAK;AACzE;AAWA,SAAgB,kBACd,EACE,QACA,WAKF,eACA,QACA,UAAuD,CAAC,GAC7C;CAEX,IAAI,CADuC,KAAK,YAE9C,QACE,IAAI,YACF;;GAGA,UAAU,gBACZ,CACF;CAEF,MAAM,kBAAkB,YACtB,SACA,mBACF;CAEA,IAAI;EACF,MAAM,aAAgC,CAAC;EACvC,MAAM,mBAAmB,MAAM,KAAK,MAAM,CAAC,CAAC,KAAK,GAAG,MAAM;GACxD,IAAI,OAAO,MAAM,YAAY,MAAM,MAAM;IACvC,MAAM,KAAK,cAAc,CAAC;IAC1B,WAAW,MAAM;IACjB,OAAO;GACT;GACA,OAAO,OAAO,CAAC;EACjB,CAAC;EACD,OAAO,cAAc,QAAQ,eAAe,CAAC,CAC1C,cAAc,gBAAgB,CAAC,CAC/B,KACC,SACG,KAAK,SAAS,YACX,OACA;GAAC,GAAG;GAAM,OAAO,WAAW,KAAK,UAAU,KAAK;EAAK,CAC7D;CACJ,SAAS,GAAG;EACV,QAAQ,IAAI,gBAAgB,0BAA0B,QAAQ,CAAC,CAAC;CAClE;CAGA,OAAO;AACT;;;AC9GA,MAAM,wBAA8D,CAAC,MAAM;AAE3E,SAAgB,aACd,EACE,QACA,WAKF,gBACA,OACA,UAAyD,CAAC,GACrC;CACrB,IAAI,CAAC,KAAK,aACR,QACE,IAAI,YACF;;GAGA,UAAU,gBACZ,CACF;CAEF,MAAM,kBAAkB,YACtB,SACA,qBACF;CAEA,IAAI;EACF,OAAO,eAAe,QAAQ,eAAe,CAAC,CAAC,OAC7C,KACF;CACF,SAAS,GAAG;EACV,QAAQ,IAAI,gBAAgB,4BAA4B,QAAQ,CAAC,CAAC;CACpE;CAEA,OAAO;AACT;;;ACpCA,MAAM,+BAEF,CAAC,WAAW,OAAO;AAEvB,SAASC,eACP,EACE,QACA,SACA,WAMF,uBACA,UAA+D,CAAC,GACvC;CACzB,MAAM,EAAC,WAAU;CAEjB,MAAM,WACH,CAAC,CAAC,UAAU,eAAe,SAAS,YAAY,QAAQ,OAAO,KAAM,CAAC;CAOzE,OAAO,sBAAsB,QANL,YACtB,SACA,8BACA,QAGiD,CAAC;AACtD;AAEA,SAAgB,mBACd,QAKA,uBACA,OACA,MACA,UAA+D,CAAC,GACxD;CACR,IAAI,CAAC,MACH,OAAO;CAGT,IAAI,CADuB,KAAK,oBAE9B,OAAO,QACL,IAAI,YACF;;GAGA,UAAU,gBACZ,CACF;CAEF,IAAI;EACF,OAAOA,eAAa,QAAQ,uBAAuB,OAAO,CAAC,CAAC,OAC1D,OACA,IACF;CACF,SAAS,GAAG;EACV,OAAO,QACL,IAAI,gBAAgB,mCAAmC,OAAO,QAAQ,CAAC,CACzE;CACF;CAEA,OAAO,OAAO,KAAK;AACrB;;;ACpEA,MAAM,wBAA0D;CAC9D;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;AACF;AAEA,SAAgB,aACd,EACE,QACA,SACA,WAOF,iBACA,UAAyD,CAAC,GACvC;CACnB,MAAM,EAAC,WAAU;CACjB,MAAM,WAAa,UACjB,eAAe,SAAU,UAAU,QAAQ,OAAO,KAClD,CAAC;CAOH,OAAO,gBAAgB,QANC,YACtB,SACA,uBACA,QAG2C,CAAC;AAChD;AAEA,SAAgB,aACd,QAMA,iBACA,OACA,UAAyD,CAAC,GAClD;CACR,IAAI;EACF,OAAO,aAAa,QAAQ,iBAAiB,OAAO,CAAC,CAAC,OAAO,KAAK;CACpE,SAAS,GAAG;EACV,OAAO,QACL,IAAI,gBAAgB,4BAA4B,OAAO,QAAQ,CAAC,CAClE;CACF;CAEA,OAAO,OAAO,KAAK;AACrB;AAEA,SAAgB,oBACd,QAKA,iBACA,OACA,UAAyD,CAAC,GACjC;CACzB,IAAI;EACF,OAAO,aAAa,QAAQ,iBAAiB,OAAO,CAAC,CAAC,cACpD,KACF;CACF,SAAS,GAAG;EACV,OAAO,QACL,IAAI,gBAAgB,4BAA4B,OAAO,QAAQ,CAAC,CAClE;CACF;CAEA,OAAO,CAAC;AACV;;;AC/EA,SAAS,sBACP,UACoD;CAGpD,OAAO,QAFc,WAAW,SAAS,OAAO,KAAK,QAAQ,CAAC,CAAC,MAAM,KAAA,OAEtC;AACjC;AAEA,SAAS,qBAAiC,QAAuB;CAC/D,IACE,OAAO,UACP,OAAO,2BACP,sBAAsB,OAAO,YAAY,CAAC,CAAC,GAE3C,OAAO,OAAO;;0FAEwE;AAE1F;;;;;;AAOA,SAAgB,WACd,QACA,OACc;CACd,MAAM,aAAa,iBAAiB,KAAK;CACzC,MAAM,iBAAwC;EAC5C,GAAG;EACH,GAAG;CACL;CAEA,MAAM,EAAC,QAAQ,eAAe,YAAW;CACzC,IAAI,CAAC,QAAQ;EACX,IAAI,SACF,QACE,IAAI,mBACF,uCAAuC,cAAc,6FACvD,CACF;EAOF,eAAe,SAAS,eAAe,iBAAiB;CAC1D,OAAO,IAAI,CAAC,KAAK,aAAa,mBAAmB,MAAM,CAAC,CAAC,UAAU,SACjE,QACE,IAAI,iBACF,oCAAoC,OAAO,iDAAiD,cAAc,oGAC5G,CACF;MACK,IACL,CAAC,KAAK,eAAe,mBAAmB,MAAM,CAAC,CAAC,UAChD,SAEA,QACE,IAAI,iBACF,oCAAoC,OAAO,mDAAmD,cAAc,oGAC9G,CACF;CAGF,qBAAqB,cAAc;CACnC,OAAO;EACL,GAAG;EACH;EACA,cAAc,aAAa,KACzB,MACA,gBACA,WAAW,eACb;EACA,qBAAqB,oBAAoB,KACvC,MACA,gBACA,WAAW,eACb;EACA,oBAAoB,mBAAmB,KACrC,MACA,gBACA,WAAW,qBACb;EACA,YAAY,WAAW,KACrB,MACA,gBACA,WAAW,iBACb;EACA,mBAAmB,kBAAkB,KACnC,MACA,gBACA,WAAW,iBACb;EACA,YAAY,WAAW,KACrB,MACA,gBACA,WAAW,iBACb;EACA,qBAAqB,oBAAoB,KACvC,MACA,gBACA,WAAW,iBACb;EACA,mBAAmB,kBAAkB,KACnC,MACA,gBACA,WAAW,iBACb;EACA,cAAc,aAAa,KACzB,MACA,gBACA,WAAW,cACb;EACA,eAAe,cAAc,KAAK,MAAM,gBAAgB,UAAU;EAClE,IAAI,cAAc,KAAK,MAAM,gBAAgB,UAAU;EACvD,YAAY,WAAW,KAAK,MAAM,gBAAgB,WAAW,aAAa;EAC1E,mBAAmB,kBAAkB,KACnC,MACA,gBACA,WAAW,aACb;EACA,mBAAmB,kBAAkB,KACnC,MACA,gBACA,WAAW,eACb;CACF;AACF;;;AC9JA,SAAgB,eAId,MAAY;CACZ,OAAO;AACT;AAEA,SAAgB,cAAiB,KAAW;CAC1C,OAAO;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@formatjs/intl",
3
- "version": "4.1.17",
3
+ "version": "4.1.19",
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.15",
35
- "intl-messageformat": "11.2.12"
34
+ "@formatjs/icu-messageformat-parser": "3.5.17",
35
+ "intl-messageformat": "11.2.14"
36
36
  }
37
37
  }