diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-08-14 05:01:11 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-08-14 05:02:09 +0200 |
commit | 363723fc84f7b8477592e0105aeb331ec9a017af (patch) | |
tree | 29f92724f34131bac64d6a318dd7e30612e631c7 /node_modules/os-locale/index.js | |
parent | 5634e77ad96bfe1818f6b6ee70b7379652e5487f (diff) |
node_modules
Diffstat (limited to 'node_modules/os-locale/index.js')
-rw-r--r-- | node_modules/os-locale/index.js | 160 |
1 files changed, 67 insertions, 93 deletions
diff --git a/node_modules/os-locale/index.js b/node_modules/os-locale/index.js index 2c8a0065d..1ada7a494 100644 --- a/node_modules/os-locale/index.js +++ b/node_modules/os-locale/index.js @@ -1,127 +1,101 @@ 'use strict'; -var childProcess = require('child_process'); -var execFileSync = childProcess.execFileSync; -var lcid = require('lcid'); -var defaultOpts = {spawn: true}; -var cache; - -function fallback() { - cache = 'en_US'; - return cache; -} +const execa = require('execa'); +const lcid = require('lcid'); +const mem = require('mem'); + +const defaultOpts = {spawn: true}; +const defaultLocale = 'en_US'; function getEnvLocale(env) { env = env || process.env; - var ret = env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE; - cache = getLocale(ret); - return ret; + return env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE; } function parseLocale(x) { - var env = x.split('\n').reduce(function (env, def) { + const env = x.split('\n').reduce((env, def) => { def = def.split('='); - env[def[0]] = def[1]; + env[def[0]] = def[1].replace(/^"|"$/g, ''); return env; }, {}); return getEnvLocale(env); } function getLocale(str) { - return (str && str.replace(/[.:].*/, '')) || fallback(); + return (str && str.replace(/[.:].*/, '')); } -module.exports = function (opts, cb) { - if (typeof opts === 'function') { - cb = opts; - opts = defaultOpts; - } else { - opts = opts || defaultOpts; - } +function getAppleLocale() { + return execa.stdout('defaults', ['read', '-g', 'AppleLocale']); +} + +function getAppleLocaleSync() { + return execa.sync('defaults', ['read', '-g', 'AppleLocale']).stdout; +} - if (cache || getEnvLocale() || opts.spawn === false) { - setImmediate(cb, null, cache); - return; +function getUnixLocale() { + if (process.platform === 'darwin') { + return getAppleLocale(); } - var getAppleLocale = function () { - childProcess.execFile('defaults', ['read', '-g', 'AppleLocale'], function (err, stdout) { - if (err) { - fallback(); - return; - } + return execa.stdout('locale') + .then(stdout => getLocale(parseLocale(stdout))); +} - cache = stdout.trim() || fallback(); - cb(null, cache); - }); - }; +function getUnixLocaleSync() { + if (process.platform === 'darwin') { + return getAppleLocaleSync(); + } - if (process.platform === 'win32') { - childProcess.execFile('wmic', ['os', 'get', 'locale'], function (err, stdout) { - if (err) { - fallback(); - return; - } + return getLocale(parseLocale(execa.sync('locale').stdout)); +} - var lcidCode = parseInt(stdout.replace('Locale', ''), 16); - cache = lcid.from(lcidCode) || fallback(); - cb(null, cache); +function getWinLocale() { + return execa.stdout('wmic', ['os', 'get', 'locale']) + .then(stdout => { + const lcidCode = parseInt(stdout.replace('Locale', ''), 16); + return lcid.from(lcidCode); }); - } else { - childProcess.execFile('locale', function (err, stdout) { - if (err) { - fallback(); - return; - } - - var res = parseLocale(stdout); - - if (!res && process.platform === 'darwin') { - getAppleLocale(); - return; - } +} - cache = getLocale(res); - cb(null, cache); - }); - } -}; +function getWinLocaleSync() { + const stdout = execa.sync('wmic', ['os', 'get', 'locale']).stdout; + const lcidCode = parseInt(stdout.replace('Locale', ''), 16); + return lcid.from(lcidCode); +} -module.exports.sync = function (opts) { +module.exports = mem(opts => { opts = opts || defaultOpts; + const envLocale = getEnvLocale(); + let thenable; - if (cache || getEnvLocale() || !execFileSync || opts.spawn === false) { - return cache; - } - - if (process.platform === 'win32') { - var stdout; - - try { - stdout = execFileSync('wmic', ['os', 'get', 'locale'], {encoding: 'utf8'}); - } catch (err) { - return fallback(); - } - - var lcidCode = parseInt(stdout.replace('Locale', ''), 16); - cache = lcid.from(lcidCode) || fallback(); - return cache; + if (envLocale || opts.spawn === false) { + thenable = Promise.resolve(getLocale(envLocale)); + } else if (process.platform === 'win32') { + thenable = getWinLocale(); + } else { + thenable = getUnixLocale(); } - var res; + return thenable.then(locale => locale || defaultLocale) + .catch(() => defaultLocale); +}); - try { - res = parseLocale(execFileSync('locale', {encoding: 'utf8'})); - } catch (err) {} +module.exports.sync = mem(opts => { + opts = opts || defaultOpts; + const envLocale = getEnvLocale(); + let res; - if (!res && process.platform === 'darwin') { + if (envLocale || opts.spawn === false) { + res = getLocale(envLocale); + } else { try { - cache = execFileSync('defaults', ['read', '-g', 'AppleLocale'], {encoding: 'utf8'}).trim() || fallback(); - return cache; - } catch (err) { - return fallback(); - } + if (process.platform === 'win32') { + res = getWinLocaleSync(); + } else { + res = getUnixLocaleSync(); + } + } catch (err) {} } - cache = getLocale(res); - return cache; -}; + return res || defaultLocale; +}); |