83 lines
2.1 KiB
JavaScript
83 lines
2.1 KiB
JavaScript
|
/**
|
||
|
* Npm module for Unicode CLDR JSON data
|
||
|
*
|
||
|
* @license
|
||
|
* Copyright 2013 Rafael Xavier de Souza
|
||
|
* Released under the MIT license
|
||
|
* https://github.com/rxaviers/cldr-data-npm/blob/master/LICENSE-MIT
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
const JSON_EXTENSION = /^(.*)\.json$/;
|
||
|
|
||
|
const assert = require('assert');
|
||
|
const _fs = require('fs');
|
||
|
const _path = require('path');
|
||
|
|
||
|
function argsToArray(arg) {
|
||
|
return [].slice.call(arg, 0);
|
||
|
}
|
||
|
|
||
|
function jsonFiles(dirName) {
|
||
|
const fileList = _fs.readdirSync(_path.join(__dirname, 'cldr-data', dirName));
|
||
|
|
||
|
return fileList.reduce(function(sum, file) {
|
||
|
if (JSON_EXTENSION.test(file)) {
|
||
|
return sum.concat(file.match(JSON_EXTENSION)[1]);
|
||
|
}
|
||
|
}, []);
|
||
|
}
|
||
|
|
||
|
function cldrData(path /*, ...*/) {
|
||
|
assert(
|
||
|
typeof path === 'string', 'must include path (e.g., ' +
|
||
|
'"main/en/numbers" or "supplemental/likelySubtags")');
|
||
|
|
||
|
if (arguments.length > 1) {
|
||
|
return argsToArray(arguments).reduce(function(sum, path) {
|
||
|
sum.push(cldrData(path));
|
||
|
return sum;
|
||
|
}, []);
|
||
|
}
|
||
|
return require('./cldr-data/' + path);
|
||
|
}
|
||
|
|
||
|
function mainPathsFor(locales) {
|
||
|
return locales.reduce(function(sum, locale) {
|
||
|
const mainFiles = jsonFiles(_path.join('main', locale));
|
||
|
mainFiles.forEach(function(mainFile) { sum.push(_path.join('main', locale, mainFile)); });
|
||
|
return sum;
|
||
|
}, []);
|
||
|
}
|
||
|
|
||
|
function supplementalPaths() {
|
||
|
const supplementalFiles = jsonFiles('supplemental');
|
||
|
|
||
|
return supplementalFiles.map(function(supplementalFile) {
|
||
|
return _path.join('supplemental', supplementalFile);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
Object.defineProperty(
|
||
|
cldrData, 'availableLocales',
|
||
|
{get: function() { return cldrData('availableLocales').availableLocales; }});
|
||
|
|
||
|
cldrData.all = function() {
|
||
|
const paths = supplementalPaths().concat(mainPathsFor(this.availableLocales));
|
||
|
return cldrData.apply({}, paths);
|
||
|
};
|
||
|
|
||
|
cldrData.entireMainFor = function(locale /*, ...*/) {
|
||
|
assert(
|
||
|
typeof locale === 'string', 'must include locale (e.g., ' +
|
||
|
'"en")');
|
||
|
return cldrData.apply({}, mainPathsFor(argsToArray(arguments)));
|
||
|
};
|
||
|
|
||
|
cldrData.entireSupplemental = function() {
|
||
|
return cldrData.apply({}, supplementalPaths());
|
||
|
};
|
||
|
|
||
|
module.exports = cldrData;
|