@intlayer/core
Version:
Includes core Intlayer functions like translation, dictionary, and utility functions shared across multiple packages.
124 lines (122 loc) • 4.54 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
const require_localization_getPrefix = require('./getPrefix.cjs');
let _intlayer_config_built = require("@intlayer/config/built");
let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
//#region src/localization/localeMapper.ts
/**
* Map the locale data to an array of objects
*
* @example
* ```ts
* const routes = localeMap((localizedData) =>
* ({
* path: localizedData.urlPrefix,
* name: localizedData.locale,
* isDefault: localizedData.isDefault,
* locales: localizedData.locales,
* defaultLocale: localizedData.defaultLocale,
* }),
* );
*
* // Result
* [
* { path: '/', name: 'en', isDefault: true, locales: ['en'], defaultLocale: 'en', urlPrefix: '' },
* { path: '/fr', name: 'fr', isDefault: false, locales: ['fr'], defaultLocale: 'en', urlPrefix: '/fr' },
* { path: '/es', name: 'es', isDefault: false, locales: ['es'], defaultLocale: 'en', urlPrefix: '/es' },
* ]
* ```
*
* @param mapper - The mapper function that returns an object
* @returns An array of objects
*/
const localeMap = (mapper, locales = _intlayer_config_built.internationalization.locales ?? [], defaultLocale = _intlayer_config_built.internationalization.defaultLocale ?? _intlayer_config_defaultValues.DEFAULT_LOCALE, mode = _intlayer_config_built.routing?.mode ?? "prefix-no-default") => (locales ?? []).map((locale) => mapper({
locale,
defaultLocale,
locales,
isDefault: locale === defaultLocale,
urlPrefix: require_localization_getPrefix.getPrefix(locale, {
defaultLocale,
mode,
locales
}).localePrefix ? `/${locale}` : ""
}));
/**
* Flatten the locale map into a single array of objects
*
* @example
* ```ts
* const routes = localeMap((localizedData) =>
* [{
* path: localizedData.urlPrefix,
* name: localizedData.locale,
* isDefault: localizedData.isDefault,
* locales: localizedData.locales,
* defaultLocale: localizedData.defaultLocale,
* }],
* );
*
* // Result
* [
* path: '/', name: 'en', isDefault: true, locales: ['en'], defaultLocale: 'en', urlPrefix: '' ,
* path: '/fr', name: 'fr', isDefault: false, locales: ['fr'], defaultLocale: 'en', urlPrefix: '/fr' ,
* path: '/es', name: 'es', isDefault: false, locales: ['es'], defaultLocale: 'en', urlPrefix: '/es' ,
* ]
* ```
*
* @param mapper - The mapper function that returns an array of objects
* @returns An array of objects
*/
const localeFlatMap = (mapper, locales = _intlayer_config_built.internationalization.locales ?? [], defaultLocale = _intlayer_config_built.internationalization.defaultLocale ?? _intlayer_config_defaultValues.DEFAULT_LOCALE, mode = _intlayer_config_built.routing?.mode ?? "prefix-no-default") => locales.flatMap((locale) => mapper({
locale,
defaultLocale,
locales,
isDefault: locale === defaultLocale,
urlPrefix: require_localization_getPrefix.getPrefix(locale, {
defaultLocale,
mode,
locales
}).localePrefix ? `/${locale}` : ""
}));
/**
* Creates a record object mapping locales to values transformed by the mapper function
*
* @example
* ```ts
* const translations = localeRecord(({ locale }) =>
* require(`./translations/${locale}.json`)
* );
*
* // Result
*
* en: ... , // Content of translations/en.json
* fr: ... , // Content of translations/fr.json
* es: ...
*
* ```
*
* @param mapper - Function that takes locale data and returns a value for that locale
* @param locales - Array of locale codes to map over (defaults to configured locales)
* @param defaultLocale - The default locale (defaults to configured default)
* @param mode - URL routing mode for locale handling (defaults to configured value)
* @returns Record mapping locale codes to mapped values
*/
const localeRecord = (mapper, locales = _intlayer_config_built.internationalization.locales ?? [], defaultLocale = _intlayer_config_built.internationalization.defaultLocale ?? _intlayer_config_defaultValues.DEFAULT_LOCALE, mode = _intlayer_config_built.routing?.mode ?? "prefix-no-default") => (locales ?? []).reduce((acc, locale) => {
acc[locale] = mapper({
locale,
defaultLocale,
locales,
isDefault: locale === defaultLocale,
urlPrefix: require_localization_getPrefix.getPrefix(locale, {
defaultLocale,
mode,
locales
}).localePrefix ? `/${locale}` : ""
});
return acc;
}, {});
//#endregion
exports.localeFlatMap = localeFlatMap;
exports.localeMap = localeMap;
exports.localeRecord = localeRecord;
//# sourceMappingURL=localeMapper.cjs.map