100 lines
2.2 KiB
JavaScript
100 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
var has = Object.prototype.hasOwnProperty;
|
|
|
|
/**
|
|
* Gather environment variables from various locations.
|
|
*
|
|
* @param {Object} environment The default environment variables.
|
|
* @returns {Object} environment.
|
|
* @api public
|
|
*/
|
|
function env(environment) {
|
|
environment = environment || {};
|
|
|
|
if ('object' === typeof process && 'object' === typeof process.env) {
|
|
env.merge(environment, process.env);
|
|
}
|
|
|
|
if ('undefined' !== typeof window) {
|
|
if ('string' === window.name && window.name.length) {
|
|
env.merge(environment, env.parse(window.name));
|
|
}
|
|
|
|
if (window.localStorage) {
|
|
try { env.merge(environment, env.parse(window.localStorage.env || window.localStorage.debug)); }
|
|
catch (e) {}
|
|
}
|
|
|
|
if (
|
|
'object' === typeof window.location
|
|
&& 'string' === typeof window.location.hash
|
|
&& window.location.hash.length
|
|
) {
|
|
env.merge(environment, env.parse(window.location.hash.charAt(0) === '#'
|
|
? window.location.hash.slice(1)
|
|
: window.location.hash
|
|
));
|
|
}
|
|
}
|
|
|
|
//
|
|
// Also add lower case variants to the object for easy access.
|
|
//
|
|
var key, lower;
|
|
for (key in environment) {
|
|
lower = key.toLowerCase();
|
|
|
|
if (!(lower in environment)) {
|
|
environment[lower] = environment[key];
|
|
}
|
|
}
|
|
|
|
return environment;
|
|
}
|
|
|
|
/**
|
|
* A poor man's merge utility.
|
|
*
|
|
* @param {Object} base Object where the add object is merged in.
|
|
* @param {Object} add Object that needs to be added to the base object.
|
|
* @returns {Object} base
|
|
* @api private
|
|
*/
|
|
env.merge = function merge(base, add) {
|
|
for (var key in add) {
|
|
if (has.call(add, key)) {
|
|
base[key] = add[key];
|
|
}
|
|
}
|
|
|
|
return base;
|
|
};
|
|
|
|
/**
|
|
* A poor man's query string parser.
|
|
*
|
|
* @param {String} query The query string that needs to be parsed.
|
|
* @returns {Object} Key value mapped query string.
|
|
* @api private
|
|
*/
|
|
env.parse = function parse(query) {
|
|
var parser = /([^=?&]+)=([^&]*)/g
|
|
, result = {}
|
|
, part;
|
|
|
|
if (!query) return result;
|
|
|
|
for (;
|
|
part = parser.exec(query);
|
|
result[decodeURIComponent(part[1])] = decodeURIComponent(part[2])
|
|
);
|
|
|
|
return result.env || result;
|
|
};
|
|
|
|
//
|
|
// Expose the module
|
|
//
|
|
module.exports = env;
|