use-intl 2.4.0 → 2.4.1-alpha.1

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.
@@ -22,7 +22,8 @@ function _extends() {
22
22
  function _inheritsLoose(subClass, superClass) {
23
23
  subClass.prototype = Object.create(superClass.prototype);
24
24
  subClass.prototype.constructor = subClass;
25
- subClass.__proto__ = superClass;
25
+
26
+ _setPrototypeOf(subClass, superClass);
26
27
  }
27
28
 
28
29
  function _getPrototypeOf(o) {
@@ -47,7 +48,7 @@ function _isNativeReflectConstruct() {
47
48
  if (typeof Proxy === "function") return true;
48
49
 
49
50
  try {
50
- Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
51
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
51
52
  return true;
52
53
  } catch (e) {
53
54
  return false;
@@ -126,6 +127,8 @@ function _objectWithoutPropertiesLoose(source, excluded) {
126
127
 
127
128
  var IntlContext = /*#__PURE__*/createContext(undefined);
128
129
 
130
+ var _excluded = ["children", "onError", "getMessageFallback"];
131
+
129
132
  function defaultGetMessageFallback(_ref) {
130
133
  var key = _ref.key,
131
134
  namespace = _ref.namespace;
@@ -144,7 +147,7 @@ function IntlProvider(_ref2) {
144
147
  onError = _ref2$onError === void 0 ? defaultOnError : _ref2$onError,
145
148
  _ref2$getMessageFallb = _ref2.getMessageFallback,
146
149
  getMessageFallback = _ref2$getMessageFallb === void 0 ? defaultGetMessageFallback : _ref2$getMessageFallb,
147
- contextValues = _objectWithoutPropertiesLoose(_ref2, ["children", "onError", "getMessageFallback"]);
150
+ contextValues = _objectWithoutPropertiesLoose(_ref2, _excluded);
148
151
 
149
152
  return React.createElement(IntlContext.Provider, {
150
153
  value: _extends({}, contextValues, {
@@ -154,6 +157,16 @@ function IntlProvider(_ref2) {
154
157
  }, children);
155
158
  }
156
159
 
160
+ function useIntlContext() {
161
+ var context = useContext(IntlContext);
162
+
163
+ if (!context) {
164
+ throw new Error(process.env.NODE_ENV !== "production" ? 'No intl context found. Have you configured the provider?' : undefined);
165
+ }
166
+
167
+ return context;
168
+ }
169
+
157
170
  var IntlErrorCode;
158
171
 
159
172
  (function (IntlErrorCode) {
@@ -177,6 +190,8 @@ var IntlError = /*#__PURE__*/function (_Error) {
177
190
  }
178
191
 
179
192
  _this = _Error.call(this, message) || this;
193
+ _this.code = void 0;
194
+ _this.originalMessage = void 0;
180
195
  _this.code = code;
181
196
 
182
197
  if (originalMessage) {
@@ -219,16 +234,6 @@ function convertFormatsToIntlMessageFormat(formats, timeZone) {
219
234
  });
220
235
  }
221
236
 
222
- function useIntlContext() {
223
- var context = useContext(IntlContext);
224
-
225
- if (!context) {
226
- throw new Error(process.env.NODE_ENV !== "production" ? 'No intl context found. Have you configured the provider?' : undefined);
227
- }
228
-
229
- return context;
230
- }
231
-
232
237
  function resolvePath(messages, idPath, namespace) {
233
238
  if (!messages) {
234
239
  throw new Error(process.env.NODE_ENV !== "production" ? "No messages available at `" + namespace + "`." : undefined);
@@ -271,23 +276,13 @@ function prepareTranslationValues(values) {
271
276
  });
272
277
  return transformedValues;
273
278
  }
274
- /**
275
- * Translates messages from the given namespace by using the ICU syntax.
276
- * See https://formatjs.io/docs/core-concepts/icu-syntax.
277
- *
278
- * If no namespace is provided, all available messages are returned.
279
- * The namespace can also indicate nesting by using a dot
280
- * (e.g. `namespace.Component`).
281
- */
282
-
283
279
 
284
- function useTranslations(namespace) {
280
+ function useTranslationsImpl(allMessages, namespace) {
285
281
  var _useIntlContext = useIntlContext(),
286
282
  defaultTranslationValues = _useIntlContext.defaultTranslationValues,
287
283
  globalFormats = _useIntlContext.formats,
288
284
  getMessageFallback = _useIntlContext.getMessageFallback,
289
285
  locale = _useIntlContext.locale,
290
- allMessages = _useIntlContext.messages,
291
286
  onError = _useIntlContext.onError,
292
287
  timeZone = _useIntlContext.timeZone;
293
288
 
@@ -431,10 +426,30 @@ function useTranslations(namespace) {
431
426
  };
432
427
 
433
428
  return translateFn;
434
- }, [getMessageFallback, globalFormats, locale, messagesOrError, namespace, onError, timeZone, defaultTranslationValues]);
429
+ }, [onError, getMessageFallback, namespace, messagesOrError, locale, globalFormats, timeZone, defaultTranslationValues]);
435
430
  return translate;
436
431
  }
437
432
 
433
+ /**
434
+ * Translates messages from the given namespace by using the ICU syntax.
435
+ * See https://formatjs.io/docs/core-concepts/icu-syntax.
436
+ *
437
+ * If no namespace is provided, all available messages are returned.
438
+ * The namespace can also indicate nesting by using a dot
439
+ * (e.g. `namespace.Component`).
440
+ */
441
+
442
+ function useTranslations(namespace) {
443
+ // @ts-ignore
444
+ var messages = useIntlContext().messages;
445
+ if (!messages) throw new Error('TODO'); // We have to wrap the actual hook so the type inference for the optional
446
+ // namespace works correctly. See https://stackoverflow.com/a/71529575/343045
447
+
448
+ return useTranslationsImpl({
449
+ __private: messages
450
+ }, namespace ? "__private." + namespace : '__private');
451
+ }
452
+
438
453
  var MINUTE = 60;
439
454
  var HOUR = MINUTE * 60;
440
455
  var DAY = HOUR * 24;
@@ -1 +1 @@
1
- {"version":3,"file":"use-intl.esm.js","sources":["../src/IntlContext.tsx","../src/IntlProvider.tsx","../src/IntlError.tsx","../src/convertFormatsToIntlMessageFormat.tsx","../src/useIntlContext.tsx","../src/useTranslations.tsx","../src/useIntl.tsx","../src/useLocale.tsx","../src/useNow.tsx","../src/useTimeZone.tsx"],"sourcesContent":["import {createContext} from 'react';\nimport Formats from './Formats';\nimport IntlError from './IntlError';\nimport IntlMessages from './IntlMessages';\nimport {RichTranslationValues} from './TranslationValues';\n\nexport type IntlContextShape = {\n messages?: IntlMessages;\n locale: string;\n formats?: Partial<Formats>;\n timeZone?: string;\n onError(error: IntlError): void;\n getMessageFallback(info: {\n error: IntlError;\n key: string;\n namespace?: string;\n }): string;\n now?: Date;\n defaultTranslationValues?: RichTranslationValues;\n};\n\nconst IntlContext = createContext<IntlContextShape | undefined>(undefined);\n\nexport default IntlContext;\n","import React, {ReactNode} from 'react';\nimport Formats from './Formats';\nimport IntlContext from './IntlContext';\nimport IntlMessages from './IntlMessages';\nimport {RichTranslationValues} from './TranslationValues';\nimport {IntlError} from '.';\n\ntype Props = {\n /** All messages that will be available in your components. */\n messages?: IntlMessages;\n /** A valid Unicode locale tag (e.g. \"en\" or \"en-GB\"). */\n locale: string;\n /** Global formats can be provided to achieve consistent\n * formatting across components. */\n formats?: Partial<Formats>;\n /** A time zone as defined in [the tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) which will be applied when formatting dates and times. If this is absent, the user time zone will be used. You can override this by supplying an explicit time zone to `formatDateTime`. */\n timeZone?: string;\n /** This callback will be invoked when an error is encountered during\n * resolving a message or formatting it. This defaults to `console.error` to\n * keep your app running. You can customize the handling by taking\n * `error.code` into account. */\n onError?(error: IntlError): void;\n /** Will be called when a message couldn't be resolved or formatting it led to\n * an error. This defaults to `${namespace}.${key}` You can use this to\n * customize what will be rendered in this case. */\n getMessageFallback?(info: {\n namespace?: string;\n key: string;\n error: IntlError;\n }): string;\n /** All components that use the provided hooks should be within this tree. */\n children: ReactNode;\n /**\n * Providing this value will have two effects:\n * 1. It will be used as the default for the `now` argument of\n * `useIntl().formatRelativeTime` if no explicit value is provided.\n * 2. It will be returned as a static value from the `useNow` hook. Note\n * however that when `updateInterval` is configured on the `useNow` hook,\n * the global `now` value will only be used for the initial render, but\n * afterwards the current date will be returned continuously.\n */\n now?: Date;\n /** Global default values for translation values and rich text elements.\n * Can be used for consistent usage or styling of rich text elements.\n * Defaults will be overidden by locally provided values. */\n defaultTranslationValues?: RichTranslationValues;\n};\n\nfunction defaultGetMessageFallback({\n key,\n namespace\n}: {\n key: string;\n namespace?: string;\n}) {\n return [namespace, key].filter((part) => part != null).join('.');\n}\n\nfunction defaultOnError(error: IntlError) {\n console.error(error);\n}\n\nexport default function IntlProvider({\n children,\n onError = defaultOnError,\n getMessageFallback = defaultGetMessageFallback,\n ...contextValues\n}: Props) {\n return (\n <IntlContext.Provider\n value={{...contextValues, onError, getMessageFallback}}\n >\n {children}\n </IntlContext.Provider>\n );\n}\n","export enum IntlErrorCode {\n MISSING_MESSAGE = 'MISSING_MESSAGE',\n MISSING_FORMAT = 'MISSING_FORMAT',\n INSUFFICIENT_PATH = 'INSUFFICIENT_PATH',\n INVALID_MESSAGE = 'INVALID_MESSAGE',\n FORMATTING_ERROR = 'FORMATTING_ERROR'\n}\n\nexport default class IntlError extends Error {\n public readonly code: IntlErrorCode;\n public readonly originalMessage: string | undefined;\n\n constructor(code: IntlErrorCode, originalMessage?: string) {\n let message: string = code;\n if (originalMessage) {\n message += ': ' + originalMessage;\n }\n super(message);\n\n this.code = code;\n if (originalMessage) {\n this.originalMessage = originalMessage;\n }\n }\n}\n","import {Formats as IntlFormats} from 'intl-messageformat';\nimport DateTimeFormatOptions from './DateTimeFormatOptions';\nimport Formats from './Formats';\n\nfunction setTimeZoneInFormats(\n formats: Record<string, DateTimeFormatOptions> | undefined,\n timeZone: string\n) {\n if (!formats) return formats;\n\n // The only way to set a time zone with `intl-messageformat` is to merge it into the formats\n // https://github.com/formatjs/formatjs/blob/8256c5271505cf2606e48e3c97ecdd16ede4f1b5/packages/intl/src/message.ts#L15\n return Object.keys(formats).reduce(\n (acc: Record<string, DateTimeFormatOptions>, key) => {\n acc[key] = {\n timeZone,\n ...formats[key]\n };\n return acc;\n },\n {}\n );\n}\n\n/**\n * `intl-messageformat` uses separate keys for `date` and `time`, but there's\n * only one native API: `Intl.DateTimeFormat`. Additionally you might want to\n * include both a time and a date in a value, therefore the separation doesn't\n * seem so useful. We offer a single `dateTime` namespace instead, but we have\n * to convert the format before `intl-messageformat` can be used.\n */\nexport default function convertFormatsToIntlMessageFormat(\n formats: Partial<Formats>,\n timeZone?: string\n): Partial<IntlFormats> {\n const formatsWithTimeZone = timeZone\n ? {...formats, dateTime: setTimeZoneInFormats(formats.dateTime, timeZone)}\n : formats;\n\n return {\n ...formatsWithTimeZone,\n date: formatsWithTimeZone?.dateTime,\n time: formatsWithTimeZone?.dateTime\n };\n}\n","import {useContext} from 'react';\nimport IntlContext from './IntlContext';\n\nexport default function useIntlContext() {\n const context = useContext(IntlContext);\n\n if (!context) {\n throw new Error(\n __DEV__\n ? 'No intl context found. Have you configured the provider?'\n : undefined\n );\n }\n\n return context;\n}\n","import IntlMessageFormat from 'intl-messageformat';\nimport {\n cloneElement,\n isValidElement,\n ReactElement,\n ReactNode,\n ReactNodeArray,\n useMemo,\n useRef\n} from 'react';\nimport Formats from './Formats';\nimport IntlError, {IntlErrorCode} from './IntlError';\nimport IntlMessages from './IntlMessages';\nimport TranslationValues, {RichTranslationValues} from './TranslationValues';\nimport convertFormatsToIntlMessageFormat from './convertFormatsToIntlMessageFormat';\nimport useIntlContext from './useIntlContext';\n\nfunction resolvePath(\n messages: IntlMessages | undefined,\n idPath: string,\n namespace?: string\n) {\n if (!messages) {\n throw new Error(\n __DEV__ ? `No messages available at \\`${namespace}\\`.` : undefined\n );\n }\n\n let message = messages;\n\n idPath.split('.').forEach((part) => {\n const next = (message as any)[part];\n\n if (part == null || next == null) {\n throw new Error(\n __DEV__\n ? `Could not resolve \\`${idPath}\\` in ${\n namespace ? `\\`${namespace}\\`` : 'messages'\n }.`\n : undefined\n );\n }\n\n message = next;\n });\n\n return message;\n}\n\nfunction prepareTranslationValues(values: RichTranslationValues) {\n if (Object.keys(values).length === 0) return undefined;\n\n // Workaround for https://github.com/formatjs/formatjs/issues/1467\n const transformedValues: RichTranslationValues = {};\n Object.keys(values).forEach((key) => {\n let index = 0;\n const value = values[key];\n\n let transformed;\n if (typeof value === 'function') {\n transformed = (children: ReactNode) => {\n const result = value(children);\n\n return isValidElement(result)\n ? cloneElement(result, {key: key + index++})\n : result;\n };\n } else {\n transformed = value;\n }\n\n transformedValues[key] = transformed;\n });\n\n return transformedValues;\n}\n\n/**\n * Translates messages from the given namespace by using the ICU syntax.\n * See https://formatjs.io/docs/core-concepts/icu-syntax.\n *\n * If no namespace is provided, all available messages are returned.\n * The namespace can also indicate nesting by using a dot\n * (e.g. `namespace.Component`).\n */\nexport default function useTranslations(namespace?: string) {\n const {\n defaultTranslationValues,\n formats: globalFormats,\n getMessageFallback,\n locale,\n messages: allMessages,\n onError,\n timeZone\n } = useIntlContext();\n\n const cachedFormatsByLocaleRef = useRef<\n Record<string, Record<string, IntlMessageFormat>>\n >({});\n\n const messagesOrError = useMemo(() => {\n try {\n if (!allMessages) {\n throw new Error(\n __DEV__ ? `No messages were configured on the provider.` : undefined\n );\n }\n\n const retrievedMessages = namespace\n ? resolvePath(allMessages, namespace)\n : allMessages;\n\n if (!retrievedMessages) {\n throw new Error(\n __DEV__\n ? `No messages for namespace \\`${namespace}\\` found.`\n : undefined\n );\n }\n\n return retrievedMessages;\n } catch (error) {\n const intlError = new IntlError(\n IntlErrorCode.MISSING_MESSAGE,\n (error as Error).message\n );\n onError(intlError);\n return intlError;\n }\n }, [allMessages, namespace, onError]);\n\n const translate = useMemo(() => {\n function getFallbackFromErrorAndNotify(\n key: string,\n code: IntlErrorCode,\n message?: string\n ) {\n const error = new IntlError(code, message);\n onError(error);\n return getMessageFallback({error, key, namespace});\n }\n\n function translateBaseFn(\n /** Use a dot to indicate a level of nesting (e.g. `namespace.nestedLabel`). */\n key: string,\n /** Key value pairs for values to interpolate into the message. */\n values?: RichTranslationValues,\n /** Provide custom formats for numbers, dates and times. */\n formats?: Partial<Formats>\n ): string | ReactElement | ReactNodeArray {\n const cachedFormatsByLocale = cachedFormatsByLocaleRef.current;\n\n if (messagesOrError instanceof IntlError) {\n // We have already warned about this during render\n return getMessageFallback({\n error: messagesOrError,\n key,\n namespace\n });\n }\n const messages = messagesOrError;\n\n const cacheKey = [namespace, key]\n .filter((part) => part != null)\n .join('.');\n\n let messageFormat;\n if (cachedFormatsByLocale[locale]?.[cacheKey]) {\n messageFormat = cachedFormatsByLocale[locale][cacheKey];\n } else {\n let message;\n try {\n message = resolvePath(messages, key, namespace);\n } catch (error) {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.MISSING_MESSAGE,\n (error as Error).message\n );\n }\n\n if (typeof message === 'object') {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.INSUFFICIENT_PATH,\n __DEV__\n ? `Insufficient path specified for \\`${key}\\` in \\`${\n namespace ? `\\`${namespace}\\`` : 'messages'\n }\\`.`\n : undefined\n );\n }\n\n try {\n messageFormat = new IntlMessageFormat(\n message,\n locale,\n convertFormatsToIntlMessageFormat(\n {...globalFormats, ...formats},\n timeZone\n )\n );\n } catch (error) {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.INVALID_MESSAGE,\n (error as Error).message\n );\n }\n\n if (!cachedFormatsByLocale[locale]) {\n cachedFormatsByLocale[locale] = {};\n }\n cachedFormatsByLocale[locale][cacheKey] = messageFormat;\n }\n\n try {\n const formattedMessage = messageFormat.format(\n prepareTranslationValues({...defaultTranslationValues, ...values})\n );\n\n if (formattedMessage == null) {\n throw new Error(\n __DEV__\n ? `Unable to format \\`${key}\\` in ${\n namespace ? `namespace \\`${namespace}\\`` : 'messages'\n }`\n : undefined\n );\n }\n\n // Limit the function signature to return strings or React elements\n return isValidElement(formattedMessage) ||\n // Arrays of React elements\n Array.isArray(formattedMessage) ||\n typeof formattedMessage === 'string'\n ? formattedMessage\n : String(formattedMessage);\n } catch (error) {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.FORMATTING_ERROR,\n (error as Error).message\n );\n }\n }\n\n function translateFn(\n /** Use a dot to indicate a level of nesting (e.g. `namespace.nestedLabel`). */\n key: string,\n /** Key value pairs for values to interpolate into the message. */\n values?: TranslationValues,\n /** Provide custom formats for numbers, dates and times. */\n formats?: Partial<Formats>\n ): string {\n const message = translateBaseFn(key, values, formats);\n\n if (typeof message !== 'string') {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.INVALID_MESSAGE,\n __DEV__\n ? `The message \\`${key}\\` in ${\n namespace ? `namespace \\`${namespace}\\`` : 'messages'\n } didn't resolve to a string. If you want to format rich text, use \\`t.rich\\` instead.`\n : undefined\n );\n }\n\n return message;\n }\n\n translateFn.rich = translateBaseFn;\n\n translateFn.raw = (\n /** Use a dot to indicate a level of nesting (e.g. `namespace.nestedLabel`). */\n key: string\n ): any => {\n if (messagesOrError instanceof IntlError) {\n // We have already warned about this during render\n return getMessageFallback({\n error: messagesOrError,\n key,\n namespace\n });\n }\n const messages = messagesOrError;\n\n try {\n return resolvePath(messages, key, namespace);\n } catch (error) {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.MISSING_MESSAGE,\n (error as Error).message\n );\n }\n };\n\n return translateFn;\n }, [\n getMessageFallback,\n globalFormats,\n locale,\n messagesOrError,\n namespace,\n onError,\n timeZone,\n defaultTranslationValues\n ]);\n\n return translate;\n}\n","import DateTimeFormatOptions from './DateTimeFormatOptions';\nimport IntlError, {IntlErrorCode} from './IntlError';\nimport useIntlContext from './useIntlContext';\n\nconst MINUTE = 60;\nconst HOUR = MINUTE * 60;\nconst DAY = HOUR * 24;\nconst WEEK = DAY * 7;\nconst MONTH = DAY * (365 / 12); // Approximation\nconst YEAR = DAY * 365;\n\nfunction getRelativeTimeFormatConfig(seconds: number) {\n const absValue = Math.abs(seconds);\n let value, unit: Intl.RelativeTimeFormatUnit;\n\n // We have to round the resulting values, as `Intl.RelativeTimeFormat`\n // will include fractions like '2.1 hours ago'.\n\n if (absValue < MINUTE) {\n unit = 'second';\n value = Math.round(seconds);\n } else if (absValue < HOUR) {\n unit = 'minute';\n value = Math.round(seconds / MINUTE);\n } else if (absValue < DAY) {\n unit = 'hour';\n value = Math.round(seconds / HOUR);\n } else if (absValue < WEEK) {\n unit = 'day';\n value = Math.round(seconds / DAY);\n } else if (absValue < MONTH) {\n unit = 'week';\n value = Math.round(seconds / WEEK);\n } else if (absValue < YEAR) {\n unit = 'month';\n value = Math.round(seconds / MONTH);\n } else {\n unit = 'year';\n value = Math.round(seconds / YEAR);\n }\n\n return {value, unit};\n}\n\nexport default function useIntl() {\n const {formats, locale, now: globalNow, onError, timeZone} = useIntlContext();\n\n function resolveFormatOrOptions<Options>(\n typeFormats: Record<string, Options> | undefined,\n formatOrOptions?: string | Options\n ) {\n let options;\n if (typeof formatOrOptions === 'string') {\n const formatName = formatOrOptions;\n options = typeFormats?.[formatName];\n\n if (!options) {\n const error = new IntlError(\n IntlErrorCode.MISSING_FORMAT,\n __DEV__\n ? `Format \\`${formatName}\\` is not available. You can configure it on the provider or provide custom options.`\n : undefined\n );\n onError(error);\n throw error;\n }\n } else {\n options = formatOrOptions;\n }\n\n return options;\n }\n\n function getFormattedValue<Value, Options>(\n value: Value,\n formatOrOptions: string | Options | undefined,\n typeFormats: Record<string, Options> | undefined,\n formatter: (options?: Options) => string\n ) {\n let options;\n try {\n options = resolveFormatOrOptions(typeFormats, formatOrOptions);\n } catch (error) {\n return String(value);\n }\n\n try {\n return formatter(options);\n } catch (error) {\n onError(\n new IntlError(IntlErrorCode.FORMATTING_ERROR, (error as Error).message)\n );\n return String(value);\n }\n }\n\n function formatDateTime(\n /** If a number is supplied, this is interpreted as a UTC timestamp. */\n value: Date | number,\n /** If a time zone is supplied, the `value` is converted to that time zone.\n * Otherwise the user time zone will be used. */\n formatOrOptions?: string | DateTimeFormatOptions\n ) {\n return getFormattedValue(\n value,\n formatOrOptions,\n formats?.dateTime,\n (options) => {\n if (timeZone && !options?.timeZone) {\n options = {...options, timeZone};\n }\n\n return new Intl.DateTimeFormat(locale, options).format(value);\n }\n );\n }\n\n function formatNumber(\n value: number,\n formatOrOptions?: string | Intl.NumberFormatOptions\n ) {\n return getFormattedValue(\n value,\n formatOrOptions,\n formats?.number,\n (options) => new Intl.NumberFormat(locale, options).format(value)\n );\n }\n\n function formatRelativeTime(\n /** The date time that needs to be formatted. */\n date: number | Date,\n /** The reference point in time to which `date` will be formatted in relation to. */\n now?: number | Date\n ) {\n try {\n if (!now) {\n if (globalNow) {\n now = globalNow;\n } else {\n throw new Error(\n __DEV__\n ? `The \\`now\\` parameter wasn't provided to \\`formatRelativeTime\\` and there was no global fallback configured on the provider.`\n : undefined\n );\n }\n }\n\n const dateDate = date instanceof Date ? date : new Date(date);\n const nowDate = now instanceof Date ? now : new Date(now);\n\n const seconds = (dateDate.getTime() - nowDate.getTime()) / 1000;\n const {unit, value} = getRelativeTimeFormatConfig(seconds);\n\n return new Intl.RelativeTimeFormat(locale, {\n numeric: 'auto'\n }).format(value, unit);\n } catch (error) {\n onError(\n new IntlError(IntlErrorCode.FORMATTING_ERROR, (error as Error).message)\n );\n return String(date);\n }\n }\n\n return {formatDateTime, formatNumber, formatRelativeTime};\n}\n","import useIntlContext from './useIntlContext';\n\nexport default function useLocale() {\n return useIntlContext().locale;\n}\n","import {useState, useEffect} from 'react';\nimport useIntlContext from './useIntlContext';\n\ntype Options = {\n updateInterval?: number;\n};\n\nfunction getNow() {\n return new Date();\n}\n\n/**\n * Reading the current date via `new Date()` in components should be avoided, as\n * it causes components to be impure and can lead to flaky tests. Instead, this\n * hook can be used.\n *\n * By default, it returns the time when the component mounts. If `updateInterval`\n * is specified, the value will be updated based on the interval.\n *\n * You can however also return a static value from this hook, if you\n * configure the `now` parameter on the context provider. Note however,\n * that if `updateInterval` is configured in this case, the component\n * will initialize with the global value, but will afterwards update\n * continuously based on the interval.\n *\n * For unit tests, this can be mocked to a constant value. For end-to-end\n * testing, an environment parameter can be passed to the `now` parameter\n * of the provider to mock this to a static value.\n */\nexport default function useNow(options?: Options) {\n const updateInterval = options?.updateInterval;\n\n const {now: globalNow} = useIntlContext();\n const [now, setNow] = useState(globalNow || getNow());\n\n useEffect(() => {\n if (!updateInterval) return;\n\n const intervalId = setInterval(() => {\n setNow(getNow());\n }, updateInterval);\n\n return () => {\n clearInterval(intervalId);\n };\n }, [globalNow, updateInterval]);\n\n return now;\n}\n","import useIntlContext from './useIntlContext';\n\nexport default function useTimeZone() {\n return useIntlContext().timeZone;\n}\n"],"names":["IntlContext","createContext","undefined","defaultGetMessageFallback","key","namespace","filter","part","join","defaultOnError","error","console","IntlProvider","children","onError","getMessageFallback","contextValues","React","Provider","value","IntlErrorCode","IntlError","code","originalMessage","message","Error","setTimeZoneInFormats","formats","timeZone","Object","keys","reduce","acc","convertFormatsToIntlMessageFormat","formatsWithTimeZone","dateTime","date","time","useIntlContext","context","useContext","resolvePath","messages","idPath","split","forEach","next","prepareTranslationValues","values","length","transformedValues","index","transformed","result","isValidElement","cloneElement","useTranslations","defaultTranslationValues","globalFormats","locale","allMessages","cachedFormatsByLocaleRef","useRef","messagesOrError","useMemo","retrievedMessages","intlError","MISSING_MESSAGE","translate","getFallbackFromErrorAndNotify","translateBaseFn","cachedFormatsByLocale","current","cacheKey","messageFormat","INSUFFICIENT_PATH","IntlMessageFormat","INVALID_MESSAGE","formattedMessage","format","Array","isArray","String","FORMATTING_ERROR","translateFn","rich","raw","MINUTE","HOUR","DAY","WEEK","MONTH","YEAR","getRelativeTimeFormatConfig","seconds","absValue","Math","abs","unit","round","useIntl","globalNow","now","resolveFormatOrOptions","typeFormats","formatOrOptions","options","formatName","MISSING_FORMAT","getFormattedValue","formatter","formatDateTime","Intl","DateTimeFormat","formatNumber","number","NumberFormat","formatRelativeTime","dateDate","Date","nowDate","getTime","RelativeTimeFormat","numeric","useLocale","getNow","useNow","updateInterval","useState","setNow","useEffect","intervalId","setInterval","clearInterval","useTimeZone"],"mappings":"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"}
1
+ {"version":3,"file":"use-intl.esm.js","sources":["../src/IntlContext.tsx","../src/IntlProvider.tsx","../src/useIntlContext.tsx","../src/IntlError.tsx","../src/convertFormatsToIntlMessageFormat.tsx","../src/useTranslationsImpl.tsx","../src/useTranslations.tsx","../src/useIntl.tsx","../src/useLocale.tsx","../src/useNow.tsx","../src/useTimeZone.tsx"],"sourcesContent":["import {createContext} from 'react';\nimport Formats from './Formats';\nimport IntlError from './IntlError';\nimport IntlMessages from './IntlMessages';\nimport {RichTranslationValues} from './TranslationValues';\n\nexport type IntlContextShape = {\n messages?: IntlMessages;\n locale: string;\n formats?: Partial<Formats>;\n timeZone?: string;\n onError(error: IntlError): void;\n getMessageFallback(info: {\n error: IntlError;\n key: string;\n namespace?: string;\n }): string;\n now?: Date;\n defaultTranslationValues?: RichTranslationValues;\n};\n\nconst IntlContext = createContext<IntlContextShape | undefined>(undefined);\n\nexport default IntlContext;\n","import React, {ReactNode} from 'react';\nimport Formats from './Formats';\nimport IntlContext from './IntlContext';\nimport IntlMessages from './IntlMessages';\nimport {RichTranslationValues} from './TranslationValues';\nimport {IntlError} from '.';\n\ntype Props = {\n /** All messages that will be available in your components. */\n messages?: IntlMessages;\n /** A valid Unicode locale tag (e.g. \"en\" or \"en-GB\"). */\n locale: string;\n /** Global formats can be provided to achieve consistent\n * formatting across components. */\n formats?: Partial<Formats>;\n /** A time zone as defined in [the tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) which will be applied when formatting dates and times. If this is absent, the user time zone will be used. You can override this by supplying an explicit time zone to `formatDateTime`. */\n timeZone?: string;\n /** This callback will be invoked when an error is encountered during\n * resolving a message or formatting it. This defaults to `console.error` to\n * keep your app running. You can customize the handling by taking\n * `error.code` into account. */\n onError?(error: IntlError): void;\n /** Will be called when a message couldn't be resolved or formatting it led to\n * an error. This defaults to `${namespace}.${key}` You can use this to\n * customize what will be rendered in this case. */\n getMessageFallback?(info: {\n namespace?: string;\n key: string;\n error: IntlError;\n }): string;\n /** All components that use the provided hooks should be within this tree. */\n children: ReactNode;\n /**\n * Providing this value will have two effects:\n * 1. It will be used as the default for the `now` argument of\n * `useIntl().formatRelativeTime` if no explicit value is provided.\n * 2. It will be returned as a static value from the `useNow` hook. Note\n * however that when `updateInterval` is configured on the `useNow` hook,\n * the global `now` value will only be used for the initial render, but\n * afterwards the current date will be returned continuously.\n */\n now?: Date;\n /** Global default values for translation values and rich text elements.\n * Can be used for consistent usage or styling of rich text elements.\n * Defaults will be overidden by locally provided values. */\n defaultTranslationValues?: RichTranslationValues;\n};\n\nfunction defaultGetMessageFallback({\n key,\n namespace\n}: {\n key: string;\n namespace?: string;\n}) {\n return [namespace, key].filter((part) => part != null).join('.');\n}\n\nfunction defaultOnError(error: IntlError) {\n console.error(error);\n}\n\nexport default function IntlProvider({\n children,\n onError = defaultOnError,\n getMessageFallback = defaultGetMessageFallback,\n ...contextValues\n}: Props) {\n return (\n <IntlContext.Provider\n value={{...contextValues, onError, getMessageFallback}}\n >\n {children}\n </IntlContext.Provider>\n );\n}\n","import {useContext} from 'react';\nimport IntlContext from './IntlContext';\n\nexport default function useIntlContext() {\n const context = useContext(IntlContext);\n\n if (!context) {\n throw new Error(\n __DEV__\n ? 'No intl context found. Have you configured the provider?'\n : undefined\n );\n }\n\n return context;\n}\n","export enum IntlErrorCode {\n MISSING_MESSAGE = 'MISSING_MESSAGE',\n MISSING_FORMAT = 'MISSING_FORMAT',\n INSUFFICIENT_PATH = 'INSUFFICIENT_PATH',\n INVALID_MESSAGE = 'INVALID_MESSAGE',\n FORMATTING_ERROR = 'FORMATTING_ERROR'\n}\n\nexport default class IntlError extends Error {\n public readonly code: IntlErrorCode;\n public readonly originalMessage: string | undefined;\n\n constructor(code: IntlErrorCode, originalMessage?: string) {\n let message: string = code;\n if (originalMessage) {\n message += ': ' + originalMessage;\n }\n super(message);\n\n this.code = code;\n if (originalMessage) {\n this.originalMessage = originalMessage;\n }\n }\n}\n","import {Formats as IntlFormats} from 'intl-messageformat';\nimport DateTimeFormatOptions from './DateTimeFormatOptions';\nimport Formats from './Formats';\n\nfunction setTimeZoneInFormats(\n formats: Record<string, DateTimeFormatOptions> | undefined,\n timeZone: string\n) {\n if (!formats) return formats;\n\n // The only way to set a time zone with `intl-messageformat` is to merge it into the formats\n // https://github.com/formatjs/formatjs/blob/8256c5271505cf2606e48e3c97ecdd16ede4f1b5/packages/intl/src/message.ts#L15\n return Object.keys(formats).reduce(\n (acc: Record<string, DateTimeFormatOptions>, key) => {\n acc[key] = {\n timeZone,\n ...formats[key]\n };\n return acc;\n },\n {}\n );\n}\n\n/**\n * `intl-messageformat` uses separate keys for `date` and `time`, but there's\n * only one native API: `Intl.DateTimeFormat`. Additionally you might want to\n * include both a time and a date in a value, therefore the separation doesn't\n * seem so useful. We offer a single `dateTime` namespace instead, but we have\n * to convert the format before `intl-messageformat` can be used.\n */\nexport default function convertFormatsToIntlMessageFormat(\n formats: Partial<Formats>,\n timeZone?: string\n): Partial<IntlFormats> {\n const formatsWithTimeZone = timeZone\n ? {...formats, dateTime: setTimeZoneInFormats(formats.dateTime, timeZone)}\n : formats;\n\n return {\n ...formatsWithTimeZone,\n date: formatsWithTimeZone?.dateTime,\n time: formatsWithTimeZone?.dateTime\n };\n}\n","import IntlMessageFormat from 'intl-messageformat';\nimport {\n cloneElement,\n isValidElement,\n ReactElement,\n ReactNode,\n ReactNodeArray,\n useMemo,\n useRef\n} from 'react';\nimport Formats from './Formats';\nimport IntlError, {IntlErrorCode} from './IntlError';\nimport IntlMessages from './IntlMessages';\nimport TranslationValues, {RichTranslationValues} from './TranslationValues';\nimport convertFormatsToIntlMessageFormat from './convertFormatsToIntlMessageFormat';\nimport useIntlContext from './useIntlContext';\nimport MessageKeys from './utils/MessageKeys';\nimport NestedKeyOf from './utils/NestedKeyOf';\nimport NestedValueOf from './utils/NestedValueOf';\n\nfunction resolvePath(\n messages: IntlMessages | undefined,\n idPath: string,\n namespace?: string\n) {\n if (!messages) {\n throw new Error(\n __DEV__ ? `No messages available at \\`${namespace}\\`.` : undefined\n );\n }\n\n let message = messages;\n\n idPath.split('.').forEach((part) => {\n const next = (message as any)[part];\n\n if (part == null || next == null) {\n throw new Error(\n __DEV__\n ? `Could not resolve \\`${idPath}\\` in ${\n namespace ? `\\`${namespace}\\`` : 'messages'\n }.`\n : undefined\n );\n }\n\n message = next;\n });\n\n return message;\n}\n\nfunction prepareTranslationValues(values: RichTranslationValues) {\n if (Object.keys(values).length === 0) return undefined;\n\n // Workaround for https://github.com/formatjs/formatjs/issues/1467\n const transformedValues: RichTranslationValues = {};\n Object.keys(values).forEach((key) => {\n let index = 0;\n const value = values[key];\n\n let transformed;\n if (typeof value === 'function') {\n transformed = (children: ReactNode) => {\n const result = value(children);\n\n return isValidElement(result)\n ? cloneElement(result, {key: key + index++})\n : result;\n };\n } else {\n transformed = value;\n }\n\n transformedValues[key] = transformed;\n });\n\n return transformedValues;\n}\n\nexport default function useTranslationsImpl<\n Messages extends IntlMessages,\n NestedKey extends NestedKeyOf<Messages>\n>(allMessages: Messages, namespace: NestedKey) {\n const {\n defaultTranslationValues,\n formats: globalFormats,\n getMessageFallback,\n locale,\n onError,\n timeZone\n } = useIntlContext();\n\n const cachedFormatsByLocaleRef = useRef<\n Record<string, Record<string, IntlMessageFormat>>\n >({});\n\n const messagesOrError = useMemo(() => {\n try {\n if (!allMessages) {\n throw new Error(\n __DEV__ ? `No messages were configured on the provider.` : undefined\n );\n }\n\n const retrievedMessages = namespace\n ? resolvePath(allMessages, namespace)\n : allMessages;\n\n if (!retrievedMessages) {\n throw new Error(\n __DEV__\n ? `No messages for namespace \\`${namespace}\\` found.`\n : undefined\n );\n }\n\n return retrievedMessages;\n } catch (error) {\n const intlError = new IntlError(\n IntlErrorCode.MISSING_MESSAGE,\n (error as Error).message\n );\n onError(intlError);\n return intlError;\n }\n }, [allMessages, namespace, onError]);\n\n const translate = useMemo(() => {\n function getFallbackFromErrorAndNotify(\n key: string,\n code: IntlErrorCode,\n message?: string\n ) {\n const error = new IntlError(code, message);\n onError(error);\n return getMessageFallback({error, key, namespace});\n }\n\n function translateBaseFn(\n /** Use a dot to indicate a level of nesting (e.g. `namespace.nestedLabel`). */\n key: string,\n /** Key value pairs for values to interpolate into the message. */\n values?: RichTranslationValues,\n /** Provide custom formats for numbers, dates and times. */\n formats?: Partial<Formats>\n ): string | ReactElement | ReactNodeArray {\n const cachedFormatsByLocale = cachedFormatsByLocaleRef.current;\n\n if (messagesOrError instanceof IntlError) {\n // We have already warned about this during render\n return getMessageFallback({\n error: messagesOrError,\n key,\n namespace\n });\n }\n const messages = messagesOrError;\n\n const cacheKey = [namespace, key]\n .filter((part) => part != null)\n .join('.');\n\n let messageFormat;\n if (cachedFormatsByLocale[locale]?.[cacheKey]) {\n messageFormat = cachedFormatsByLocale[locale][cacheKey];\n } else {\n let message;\n try {\n message = resolvePath(messages, key, namespace);\n } catch (error) {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.MISSING_MESSAGE,\n (error as Error).message\n );\n }\n\n if (typeof message === 'object') {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.INSUFFICIENT_PATH,\n __DEV__\n ? `Insufficient path specified for \\`${key}\\` in \\`${\n namespace ? `\\`${namespace}\\`` : 'messages'\n }\\`.`\n : undefined\n );\n }\n\n try {\n messageFormat = new IntlMessageFormat(\n message,\n locale,\n convertFormatsToIntlMessageFormat(\n {...globalFormats, ...formats},\n timeZone\n )\n );\n } catch (error) {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.INVALID_MESSAGE,\n (error as Error).message\n );\n }\n\n if (!cachedFormatsByLocale[locale]) {\n cachedFormatsByLocale[locale] = {};\n }\n cachedFormatsByLocale[locale][cacheKey] = messageFormat;\n }\n\n try {\n const formattedMessage = messageFormat.format(\n prepareTranslationValues({...defaultTranslationValues, ...values})\n );\n\n if (formattedMessage == null) {\n throw new Error(\n __DEV__\n ? `Unable to format \\`${key}\\` in ${\n namespace ? `namespace \\`${namespace}\\`` : 'messages'\n }`\n : undefined\n );\n }\n\n // Limit the function signature to return strings or React elements\n return isValidElement(formattedMessage) ||\n // Arrays of React elements\n Array.isArray(formattedMessage) ||\n typeof formattedMessage === 'string'\n ? formattedMessage\n : String(formattedMessage);\n } catch (error) {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.FORMATTING_ERROR,\n (error as Error).message\n );\n }\n }\n\n function translateFn<\n TargetKey extends MessageKeys<\n NestedValueOf<Messages, NestedKey>,\n NestedKeyOf<NestedValueOf<Messages, NestedKey>>\n >\n >(\n /** Use a dot to indicate a level of nesting (e.g. `namespace.nestedLabel`). */\n key: TargetKey,\n /** Key value pairs for values to interpolate into the message. */\n values?: TranslationValues,\n /** Provide custom formats for numbers, dates and times. */\n formats?: Partial<Formats>\n ): string {\n const message = translateBaseFn(key, values, formats);\n\n if (typeof message !== 'string') {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.INVALID_MESSAGE,\n __DEV__\n ? `The message \\`${key}\\` in ${\n namespace ? `namespace \\`${namespace}\\`` : 'messages'\n } didn't resolve to a string. If you want to format rich text, use \\`t.rich\\` instead.`\n : undefined\n );\n }\n\n return message;\n }\n\n translateFn.rich = translateBaseFn;\n\n translateFn.raw = (\n /** Use a dot to indicate a level of nesting (e.g. `namespace.nestedLabel`). */\n key: string\n ): any => {\n if (messagesOrError instanceof IntlError) {\n // We have already warned about this during render\n return getMessageFallback({\n error: messagesOrError,\n key,\n namespace\n });\n }\n const messages = messagesOrError;\n\n try {\n return resolvePath(messages, key, namespace);\n } catch (error) {\n return getFallbackFromErrorAndNotify(\n key,\n IntlErrorCode.MISSING_MESSAGE,\n (error as Error).message\n );\n }\n };\n\n return translateFn;\n }, [\n onError,\n getMessageFallback,\n namespace,\n messagesOrError,\n locale,\n globalFormats,\n timeZone,\n defaultTranslationValues\n ]);\n\n return translate;\n}\n","import GlobalMessages from './GlobalMessages';\nimport useIntlContext from './useIntlContext';\nimport useTranslationsImpl from './useTranslationsImpl';\nimport NamespaceKeys from './utils/NamespaceKeys';\nimport NestedKeyOf from './utils/NestedKeyOf';\n\n/**\n * Translates messages from the given namespace by using the ICU syntax.\n * See https://formatjs.io/docs/core-concepts/icu-syntax.\n *\n * If no namespace is provided, all available messages are returned.\n * The namespace can also indicate nesting by using a dot\n * (e.g. `namespace.Component`).\n */\nexport default function useTranslations<\n NestedKey extends NamespaceKeys<GlobalMessages, NestedKeyOf<GlobalMessages>>\n>(namespace?: NestedKey) {\n // @ts-ignore\n const messages = useIntlContext().messages as GlobalMessages;\n if (!messages) throw new Error('TODO')\n\n // We have to wrap the actual hook so the type inference for the optional\n // namespace works correctly. See https://stackoverflow.com/a/71529575/343045\n return useTranslationsImpl<\n // @ts-ignore\n {__private: GlobalMessages},\n NamespaceKeys<GlobalMessages, NestedKeyOf<GlobalMessages>> extends NestedKey\n ? '__private'\n : `__private.${NestedKey}`\n >(\n {__private: messages},\n namespace ? `__private.${namespace}` : '__private'\n );\n}\n","import DateTimeFormatOptions from './DateTimeFormatOptions';\nimport IntlError, {IntlErrorCode} from './IntlError';\nimport useIntlContext from './useIntlContext';\n\nconst MINUTE = 60;\nconst HOUR = MINUTE * 60;\nconst DAY = HOUR * 24;\nconst WEEK = DAY * 7;\nconst MONTH = DAY * (365 / 12); // Approximation\nconst YEAR = DAY * 365;\n\nfunction getRelativeTimeFormatConfig(seconds: number) {\n const absValue = Math.abs(seconds);\n let value, unit: Intl.RelativeTimeFormatUnit;\n\n // We have to round the resulting values, as `Intl.RelativeTimeFormat`\n // will include fractions like '2.1 hours ago'.\n\n if (absValue < MINUTE) {\n unit = 'second';\n value = Math.round(seconds);\n } else if (absValue < HOUR) {\n unit = 'minute';\n value = Math.round(seconds / MINUTE);\n } else if (absValue < DAY) {\n unit = 'hour';\n value = Math.round(seconds / HOUR);\n } else if (absValue < WEEK) {\n unit = 'day';\n value = Math.round(seconds / DAY);\n } else if (absValue < MONTH) {\n unit = 'week';\n value = Math.round(seconds / WEEK);\n } else if (absValue < YEAR) {\n unit = 'month';\n value = Math.round(seconds / MONTH);\n } else {\n unit = 'year';\n value = Math.round(seconds / YEAR);\n }\n\n return {value, unit};\n}\n\nexport default function useIntl() {\n const {formats, locale, now: globalNow, onError, timeZone} = useIntlContext();\n\n function resolveFormatOrOptions<Options>(\n typeFormats: Record<string, Options> | undefined,\n formatOrOptions?: string | Options\n ) {\n let options;\n if (typeof formatOrOptions === 'string') {\n const formatName = formatOrOptions;\n options = typeFormats?.[formatName];\n\n if (!options) {\n const error = new IntlError(\n IntlErrorCode.MISSING_FORMAT,\n __DEV__\n ? `Format \\`${formatName}\\` is not available. You can configure it on the provider or provide custom options.`\n : undefined\n );\n onError(error);\n throw error;\n }\n } else {\n options = formatOrOptions;\n }\n\n return options;\n }\n\n function getFormattedValue<Value, Options>(\n value: Value,\n formatOrOptions: string | Options | undefined,\n typeFormats: Record<string, Options> | undefined,\n formatter: (options?: Options) => string\n ) {\n let options;\n try {\n options = resolveFormatOrOptions(typeFormats, formatOrOptions);\n } catch (error) {\n return String(value);\n }\n\n try {\n return formatter(options);\n } catch (error) {\n onError(\n new IntlError(IntlErrorCode.FORMATTING_ERROR, (error as Error).message)\n );\n return String(value);\n }\n }\n\n function formatDateTime(\n /** If a number is supplied, this is interpreted as a UTC timestamp. */\n value: Date | number,\n /** If a time zone is supplied, the `value` is converted to that time zone.\n * Otherwise the user time zone will be used. */\n formatOrOptions?: string | DateTimeFormatOptions\n ) {\n return getFormattedValue(\n value,\n formatOrOptions,\n formats?.dateTime,\n (options) => {\n if (timeZone && !options?.timeZone) {\n options = {...options, timeZone};\n }\n\n return new Intl.DateTimeFormat(locale, options).format(value);\n }\n );\n }\n\n function formatNumber(\n value: number,\n formatOrOptions?: string | Intl.NumberFormatOptions\n ) {\n return getFormattedValue(\n value,\n formatOrOptions,\n formats?.number,\n (options) => new Intl.NumberFormat(locale, options).format(value)\n );\n }\n\n function formatRelativeTime(\n /** The date time that needs to be formatted. */\n date: number | Date,\n /** The reference point in time to which `date` will be formatted in relation to. */\n now?: number | Date\n ) {\n try {\n if (!now) {\n if (globalNow) {\n now = globalNow;\n } else {\n throw new Error(\n __DEV__\n ? `The \\`now\\` parameter wasn't provided to \\`formatRelativeTime\\` and there was no global fallback configured on the provider.`\n : undefined\n );\n }\n }\n\n const dateDate = date instanceof Date ? date : new Date(date);\n const nowDate = now instanceof Date ? now : new Date(now);\n\n const seconds = (dateDate.getTime() - nowDate.getTime()) / 1000;\n const {unit, value} = getRelativeTimeFormatConfig(seconds);\n\n return new Intl.RelativeTimeFormat(locale, {\n numeric: 'auto'\n }).format(value, unit);\n } catch (error) {\n onError(\n new IntlError(IntlErrorCode.FORMATTING_ERROR, (error as Error).message)\n );\n return String(date);\n }\n }\n\n return {formatDateTime, formatNumber, formatRelativeTime};\n}\n","import useIntlContext from './useIntlContext';\n\nexport default function useLocale() {\n return useIntlContext().locale;\n}\n","import {useState, useEffect} from 'react';\nimport useIntlContext from './useIntlContext';\n\ntype Options = {\n updateInterval?: number;\n};\n\nfunction getNow() {\n return new Date();\n}\n\n/**\n * Reading the current date via `new Date()` in components should be avoided, as\n * it causes components to be impure and can lead to flaky tests. Instead, this\n * hook can be used.\n *\n * By default, it returns the time when the component mounts. If `updateInterval`\n * is specified, the value will be updated based on the interval.\n *\n * You can however also return a static value from this hook, if you\n * configure the `now` parameter on the context provider. Note however,\n * that if `updateInterval` is configured in this case, the component\n * will initialize with the global value, but will afterwards update\n * continuously based on the interval.\n *\n * For unit tests, this can be mocked to a constant value. For end-to-end\n * testing, an environment parameter can be passed to the `now` parameter\n * of the provider to mock this to a static value.\n */\nexport default function useNow(options?: Options) {\n const updateInterval = options?.updateInterval;\n\n const {now: globalNow} = useIntlContext();\n const [now, setNow] = useState(globalNow || getNow());\n\n useEffect(() => {\n if (!updateInterval) return;\n\n const intervalId = setInterval(() => {\n setNow(getNow());\n }, updateInterval);\n\n return () => {\n clearInterval(intervalId);\n };\n }, [globalNow, updateInterval]);\n\n return now;\n}\n","import useIntlContext from './useIntlContext';\n\nexport default function useTimeZone() {\n return useIntlContext().timeZone;\n}\n"],"names":["IntlContext","createContext","undefined","defaultGetMessageFallback","key","namespace","filter","part","join","defaultOnError","error","console","IntlProvider","children","onError","getMessageFallback","contextValues","React","Provider","value","useIntlContext","context","useContext","Error","IntlErrorCode","IntlError","code","originalMessage","message","setTimeZoneInFormats","formats","timeZone","Object","keys","reduce","acc","convertFormatsToIntlMessageFormat","formatsWithTimeZone","dateTime","date","time","resolvePath","messages","idPath","split","forEach","next","prepareTranslationValues","values","length","transformedValues","index","transformed","result","isValidElement","cloneElement","useTranslationsImpl","allMessages","defaultTranslationValues","globalFormats","locale","cachedFormatsByLocaleRef","useRef","messagesOrError","useMemo","retrievedMessages","intlError","MISSING_MESSAGE","translate","getFallbackFromErrorAndNotify","translateBaseFn","cachedFormatsByLocale","current","cacheKey","messageFormat","INSUFFICIENT_PATH","IntlMessageFormat","INVALID_MESSAGE","formattedMessage","format","Array","isArray","String","FORMATTING_ERROR","translateFn","rich","raw","useTranslations","__private","MINUTE","HOUR","DAY","WEEK","MONTH","YEAR","getRelativeTimeFormatConfig","seconds","absValue","Math","abs","unit","round","useIntl","globalNow","now","resolveFormatOrOptions","typeFormats","formatOrOptions","options","formatName","MISSING_FORMAT","getFormattedValue","formatter","formatDateTime","Intl","DateTimeFormat","formatNumber","number","NumberFormat","formatRelativeTime","dateDate","Date","nowDate","getTime","RelativeTimeFormat","numeric","useLocale","getNow","useNow","updateInterval","useState","setNow","useEffect","intervalId","setInterval","clearInterval","useTimeZone"],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- import { ReactElement, ReactNode, ReactNodeArray } from 'react';
2
- import Formats from './Formats';
1
+ /// <reference types="react" />
2
+ import GlobalMessages from './GlobalMessages';
3
+ import NamespaceKeys from './utils/NamespaceKeys';
4
+ import NestedKeyOf from './utils/NestedKeyOf';
3
5
  /**
4
6
  * Translates messages from the given namespace by using the ICU syntax.
5
7
  * See https://formatjs.io/docs/core-concepts/icu-syntax.
@@ -8,8 +10,12 @@ import Formats from './Formats';
8
10
  * The namespace can also indicate nesting by using a dot
9
11
  * (e.g. `namespace.Component`).
10
12
  */
11
- export default function useTranslations(namespace?: string): {
12
- (key: string, values?: Record<string, string | number | boolean | Date | null | undefined> | undefined, formats?: Partial<Formats> | undefined): string;
13
- rich: (key: string, values?: Record<string, string | number | boolean | Date | ((children: ReactNode) => ReactNode) | null | undefined> | undefined, formats?: Partial<Formats> | undefined) => string | ReactElement | ReactNodeArray;
13
+ export default function useTranslations<NestedKey extends NamespaceKeys<GlobalMessages, NestedKeyOf<GlobalMessages>>>(namespace?: NestedKey): {
14
+ <TargetKey extends import("./utils/MessageKeys").default<import("./utils/NestedValueOf").default<{
15
+ __private: GlobalMessages;
16
+ }, NamespaceKeys<GlobalMessages, "About" | "B" | "About.title" | "About.lastUpdated" | "About.nested" | "About.nested.hello" | "B.c" | "B.d" | "B.d.e"> extends NestedKey ? "__private" : `__private.${NestedKey}`>, NestedKeyOf<import("./utils/NestedValueOf").default<{
17
+ __private: GlobalMessages;
18
+ }, NamespaceKeys<GlobalMessages, "About" | "B" | "About.title" | "About.lastUpdated" | "About.nested" | "About.nested.hello" | "B.c" | "B.d" | "B.d.e"> extends NestedKey ? "__private" : `__private.${NestedKey}`>>>>(key: TargetKey, values?: import("./TranslationValues").default | undefined, formats?: Partial<import("./Formats").default> | undefined): string;
19
+ rich: (key: string, values?: import("./TranslationValues").RichTranslationValues | undefined, formats?: Partial<import("./Formats").default> | undefined) => string | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | import("react").ReactNodeArray;
14
20
  raw(key: string): any;
15
21
  };
@@ -0,0 +1,12 @@
1
+ import { ReactElement, ReactNodeArray } from 'react';
2
+ import Formats from './Formats';
3
+ import IntlMessages from './IntlMessages';
4
+ import TranslationValues, { RichTranslationValues } from './TranslationValues';
5
+ import MessageKeys from './utils/MessageKeys';
6
+ import NestedKeyOf from './utils/NestedKeyOf';
7
+ import NestedValueOf from './utils/NestedValueOf';
8
+ export default function useTranslationsImpl<Messages extends IntlMessages, NestedKey extends NestedKeyOf<Messages>>(allMessages: Messages, namespace: NestedKey): {
9
+ <TargetKey extends MessageKeys<NestedValueOf<Messages, NestedKey>, NestedKeyOf<NestedValueOf<Messages, NestedKey>>>>(key: TargetKey, values?: TranslationValues | undefined, formats?: Partial<Formats> | undefined): string;
10
+ rich: (key: string, values?: RichTranslationValues | undefined, formats?: Partial<Formats> | undefined) => string | ReactElement | ReactNodeArray;
11
+ raw(key: string): any;
12
+ };
@@ -0,0 +1,5 @@
1
+ import NestedValueOf from './NestedValueOf';
2
+ declare type MessageKeys<ObjectType, Keys extends string> = {
3
+ [Property in Keys]: NestedValueOf<ObjectType, Property> extends string ? Property : never;
4
+ }[Keys];
5
+ export default MessageKeys;
@@ -0,0 +1,5 @@
1
+ import NestedValueOf from './NestedValueOf';
2
+ declare type NamespaceKeys<ObjectType, Keys extends string> = {
3
+ [Property in Keys]: NestedValueOf<ObjectType, Property> extends string ? never : Property;
4
+ }[Keys];
5
+ export default NamespaceKeys;
@@ -0,0 +1,4 @@
1
+ declare type NestedKeyOf<ObjectType> = ObjectType extends object ? {
2
+ [Key in keyof ObjectType]: `${Key & string}` | `${Key & string}.${NestedKeyOf<ObjectType[Key]>}`;
3
+ }[keyof ObjectType] : never;
4
+ export default NestedKeyOf;
@@ -0,0 +1,2 @@
1
+ declare type NestedValueOf<ObjectType, Property extends string> = Property extends `${infer Key}.${infer Rest}` ? Key extends keyof ObjectType ? NestedValueOf<ObjectType[Key], Rest> : never : Property extends keyof ObjectType ? ObjectType[Property] : never;
2
+ export default NestedValueOf;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "use-intl",
3
- "version": "2.4.0",
3
+ "version": "2.4.1-alpha.1",
4
4
  "sideEffects": false,
5
5
  "author": "Jan Amann <jan@amann.me>",
6
6
  "description": "Minimal, but complete solution for managing internationalization in React apps.",
@@ -10,11 +10,11 @@
10
10
  "url": "https://github.com/amannn/next-intl/tree/main/packages/use-intl"
11
11
  },
12
12
  "scripts": {
13
- "start": "tsdx watch",
14
- "build": "tsdx build",
15
- "test": "TZ=Europe/Berlin tsdx test",
13
+ "start": "dts watch",
14
+ "build": "dts build",
15
+ "test": "TZ=Europe/Berlin dts test",
16
16
  "lint": "eslint src test && tsc",
17
- "prepublishOnly": "yarn test && yarn lint && yarn build"
17
+ "prepublishOnly_": "yarn test && yarn lint && yarn build"
18
18
  },
19
19
  "main": "dist/index.js",
20
20
  "module": "dist/use-intl.esm.js",
@@ -44,6 +44,7 @@
44
44
  "@testing-library/react": "^11.1.2",
45
45
  "@types/react": "^17.0.33",
46
46
  "date-fns": "^2.16.1",
47
+ "dts-cli": "1.4.0",
47
48
  "eslint": "7.4.0",
48
49
  "eslint-config-molindo": "5.0.1",
49
50
  "react": "^17.0.0",
@@ -55,5 +56,5 @@
55
56
  "engines": {
56
57
  "node": ">=10"
57
58
  },
58
- "gitHead": "658412af82f8105c370f20805ade24f9f02cad73"
59
+ "gitHead": "28819c45eb57d2ec3d7de1752a005db5c55efc63"
59
60
  }
@@ -0,0 +1,14 @@
1
+ // This module is intended to be overridden
2
+ // by the consumer for optional type safety
3
+
4
+ // type Messages = typeof import('./en.json');
5
+
6
+ // eslint-disable-next-line @typescript-eslint/ban-types
7
+ type Unknown = {};
8
+
9
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
10
+ interface GlobalMessages
11
+ // Messages,
12
+ extends Unknown {}
13
+
14
+ export default GlobalMessages;
@@ -1,3 +1,5 @@
1
- type IntlMessages = {[id: string]: IntlMessages | string};
1
+ type IntlMessages = {
2
+ [id: string]: IntlMessages | string;
3
+ };
2
4
 
3
5
  export default IntlMessages;
package/src/en.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "About": {
3
+ "title": "About",
4
+ "lastUpdated": "This example was updated {lastUpdatedRelative} ({lastUpdated, date, short}).",
5
+ "nested": {
6
+ "hello": "Hello"
7
+ }
8
+ },
9
+ "Index": {
10
+ "title": "Home",
11
+ "description": "<p>Only the minimum of <code>{locale}</code> messages are loaded to render this page.</p><p>These namespaces are available:</p>"
12
+ },
13
+ "Navigation": {
14
+ "index": "Home",
15
+ "about": "About",
16
+ "switchLocale": "Switch to {locale, select, de {German} en {English}}"
17
+ },
18
+ "NotFound": {
19
+ "title": "Sorry, this page could not be found."
20
+ },
21
+ "PageLayout": {
22
+ "pageTitle": "next-intl"
23
+ },
24
+ "Test": {
25
+ "nested": {
26
+ "hello": "Hello",
27
+ "another": {
28
+ "level": "Level"
29
+ }
30
+ }
31
+ }
32
+ }
package/src/index.tsx CHANGED
@@ -1,5 +1,6 @@
1
1
  export {default as IntlProvider} from './IntlProvider';
2
2
  export {default as IntlMessages} from './IntlMessages';
3
+ export {default as GlobalMessages} from './GlobalMessages';
3
4
  export {default as useTranslations} from './useTranslations';
4
5
  export {
5
6
  default as TranslationValues,