75 lines
2.4 KiB
TypeScript
75 lines
2.4 KiB
TypeScript
|
/**
|
||
|
* @license
|
||
|
* Copyright Google LLC All Rights Reserved.
|
||
|
*
|
||
|
* Use of this source code is governed by an MIT-style license that can be
|
||
|
* found in the LICENSE file at https://angular.io/license
|
||
|
*/
|
||
|
|
||
|
import {CldrLocaleData} from './cldr-data';
|
||
|
import {fileHeader} from './file-header';
|
||
|
import {stringify} from './object-stringify';
|
||
|
|
||
|
export type BaseCurrencySymbols = [
|
||
|
string
|
||
|
]|[string | undefined, string]|[string, undefined, number]|[string | undefined, string, number];
|
||
|
|
||
|
export type BaseCurrencies = {
|
||
|
[code: string]: BaseCurrencySymbols|undefined;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Generate a file that contains the list of currencies, their symbols and digits.
|
||
|
*/
|
||
|
export function generateBaseCurrenciesFile(baseLocaleData: CldrLocaleData) {
|
||
|
const baseCurrencies = generateBaseCurrencies(baseLocaleData);
|
||
|
|
||
|
return `${fileHeader}
|
||
|
export type CurrenciesSymbols = [string] | [string | undefined, string];
|
||
|
|
||
|
/** @internal */
|
||
|
export const CURRENCIES_EN: {[code: string]: CurrenciesSymbols | [string | undefined, string | undefined, number]} = ${
|
||
|
stringify(baseCurrencies)};
|
||
|
`;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Generate a list of currencies to be used as a base for other currencies
|
||
|
* e.g.: {'ARS': [, '$'], 'AUD': ['A$', '$'], ...}
|
||
|
*/
|
||
|
export function generateBaseCurrencies(localeData: CldrLocaleData) {
|
||
|
const currenciesData = localeData.main('numbers/currencies');
|
||
|
const fractions = localeData.get(`supplemental/currencyData/fractions`);
|
||
|
const currencies: BaseCurrencies = {};
|
||
|
|
||
|
Object.keys(currenciesData).forEach(key => {
|
||
|
let symbolsArray = [];
|
||
|
const symbol = currenciesData[key].symbol;
|
||
|
const symbolNarrow = currenciesData[key]['symbol-alt-narrow'];
|
||
|
if (symbol && symbol !== key) {
|
||
|
symbolsArray.push(symbol);
|
||
|
}
|
||
|
if (symbolNarrow && symbolNarrow !== symbol) {
|
||
|
if (symbolsArray.length > 0) {
|
||
|
symbolsArray.push(symbolNarrow);
|
||
|
} else {
|
||
|
symbolsArray = [undefined, symbolNarrow];
|
||
|
}
|
||
|
}
|
||
|
if (fractions[key] && fractions[key]['_digits']) {
|
||
|
const digits = parseInt(fractions[key]['_digits'], 10);
|
||
|
if (symbolsArray.length === 2) {
|
||
|
symbolsArray.push(digits);
|
||
|
} else if (symbolsArray.length === 1) {
|
||
|
symbolsArray = [...symbolsArray, undefined, digits];
|
||
|
} else {
|
||
|
symbolsArray = [undefined, undefined, digits];
|
||
|
}
|
||
|
}
|
||
|
if (symbolsArray.length > 0) {
|
||
|
currencies[key] = symbolsArray as BaseCurrencySymbols;
|
||
|
}
|
||
|
});
|
||
|
return currencies;
|
||
|
}
|