diff options
| author | ST-DDT <[email protected]> | 2023-01-13 21:30:46 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-01-13 21:30:46 +0100 |
| commit | 788fce048f0233552df47f3407c06d8f83c32b0c (patch) | |
| tree | 2d26f017fd1c9b3b7ac1acd272dd280c37bd482a /src/utils | |
| parent | 47b2cfc76b790647e398bf9883368a10b2ff5a68 (diff) | |
| download | faker-788fce048f0233552df47f3407c06d8f83c32b0c.tar.xz faker-788fce048f0233552df47f3407c06d8f83c32b0c.zip | |
feat(locales): add mergeLocales utility (#1707)
Diffstat (limited to 'src/utils')
| -rw-r--r-- | src/utils/merge-locales.ts | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/utils/merge-locales.ts b/src/utils/merge-locales.ts new file mode 100644 index 00000000..f5149306 --- /dev/null +++ b/src/utils/merge-locales.ts @@ -0,0 +1,37 @@ +import type { LocaleDefinition } from '..'; + +/** + * Merges the given locales into one locale. + * The locales are merged in the order they are given. + * The first locale that provides an entry for a category will be used for that. + * Mutating the category entries in the returned locale will also mutate the entries in the respective source locale. + * + * @param locales The locales to merge. + * @returns The newly merged locale. + * + * @example + * const de_CH_with_fallbacks = mergeLocales([ de_CH, de, en ]); + */ +export function mergeLocales(locales: LocaleDefinition[]): LocaleDefinition { + const merged: LocaleDefinition = {} as LocaleDefinition; + + for (const locale of locales) { + for (const key in locale) { + if (merged[key] === undefined) { + if (typeof locale[key] === 'object') { + merged[key] = { ...locale[key] }; + } else { + merged[key] = locale[key]; + } + } else { + if (typeof locale[key] === 'object') { + merged[key] = { ...locale[key], ...merged[key] }; + } else { + // Primitive values cannot be merged + } + } + } + } + + return merged; +} |
