aboutsummaryrefslogtreecommitdiff
path: root/node_modules/os-locale/index.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-08-14 05:01:11 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-08-14 05:02:09 +0200
commit363723fc84f7b8477592e0105aeb331ec9a017af (patch)
tree29f92724f34131bac64d6a318dd7e30612e631c7 /node_modules/os-locale/index.js
parent5634e77ad96bfe1818f6b6ee70b7379652e5487f (diff)
node_modules
Diffstat (limited to 'node_modules/os-locale/index.js')
-rw-r--r--node_modules/os-locale/index.js160
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;
+});