Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
60 lines
2.2 KiB
Plaintext
60 lines
2.2 KiB
Plaintext
import { cache } from 'react';
|
|
import { initializeConfig, _createIntlFormatters, _createCache } from 'use-intl/core';
|
|
import { isPromise } from '../../shared/utils.js';
|
|
import { getRequestLocale } from './RequestLocale.js';
|
|
import getRuntimeConfig from 'next-intl/config';
|
|
import validateLocale from './validateLocale.js';
|
|
|
|
// This is automatically inherited by `NextIntlClientProvider` if
|
|
// the component is rendered from a Server Component
|
|
function getDefaultTimeZoneImpl() {
|
|
return Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
}
|
|
const getDefaultTimeZone = cache(getDefaultTimeZoneImpl);
|
|
async function receiveRuntimeConfigImpl(getConfig, localeOverride) {
|
|
if (typeof getConfig !== 'function') {
|
|
throw new Error(`Invalid i18n request configuration detected.
|
|
|
|
Please verify that:
|
|
1. In case you've specified a custom location in your Next.js config, make sure that the path is correct.
|
|
2. You have a default export in your i18n request configuration file.
|
|
|
|
See also: https://next-intl.dev/docs/usage/configuration#i18n-request
|
|
`);
|
|
}
|
|
const params = {
|
|
locale: localeOverride,
|
|
// In case the consumer doesn't read `params.locale` and instead provides the
|
|
// `locale` (either in a single-language workflow or because the locale is
|
|
// read from the user settings), don't attempt to read the request locale.
|
|
get requestLocale() {
|
|
return localeOverride ? Promise.resolve(localeOverride) : getRequestLocale();
|
|
}
|
|
};
|
|
let result = getConfig(params);
|
|
if (isPromise(result)) {
|
|
result = await result;
|
|
}
|
|
if (!result.locale) {
|
|
throw new Error('No locale was returned from `getRequestConfig`.\n\nSee https://next-intl.dev/docs/usage/configuration#i18n-request');
|
|
}
|
|
{
|
|
validateLocale(result.locale);
|
|
}
|
|
return result;
|
|
}
|
|
const receiveRuntimeConfig = cache(receiveRuntimeConfigImpl);
|
|
const getFormatters = cache(_createIntlFormatters);
|
|
const getCache = cache(_createCache);
|
|
async function getConfigImpl(localeOverride) {
|
|
const runtimeConfig = await receiveRuntimeConfig(getRuntimeConfig, localeOverride);
|
|
return {
|
|
...initializeConfig(runtimeConfig),
|
|
_formatters: getFormatters(getCache()),
|
|
timeZone: runtimeConfig.timeZone || getDefaultTimeZone()
|
|
};
|
|
}
|
|
const getConfig = cache(getConfigImpl);
|
|
|
|
export { getConfig as default };
|