Revert back to downloading cldr-data directly as the npm package seems to no longer be maintained and additionally, it carries a ~350mb cost in our node modules that is unnecessarily downloaded by most developers and on CI. PR Close #39341
		
			
				
	
	
		
			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;
 |