85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// tslint:disable:file-header
 | 
						|
 | 
						|
/**
 | 
						|
 * 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;
 |