87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			87 lines
		
	
	
		
			2.1 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; |