| /** |
| * @fileoverview Environments manager |
| * @author Nicholas C. Zakas |
| */ |
| "use strict"; |
| |
| //------------------------------------------------------------------------------ |
| // Requirements |
| //------------------------------------------------------------------------------ |
| |
| const envs = require("../../conf/environments"); |
| |
| //------------------------------------------------------------------------------ |
| // Public Interface |
| //------------------------------------------------------------------------------ |
| |
| class Environments { |
| |
| /** |
| * create env context |
| */ |
| constructor() { |
| this._environments = new Map(); |
| |
| this.load(); |
| } |
| |
| /** |
| * Loads the default environments. |
| * @returns {void} |
| * @private |
| */ |
| load() { |
| Object.keys(envs).forEach(envName => { |
| this._environments.set(envName, envs[envName]); |
| }); |
| } |
| |
| /** |
| * Gets the environment with the given name. |
| * @param {string} name The name of the environment to retrieve. |
| * @returns {Object?} The environment object or null if not found. |
| */ |
| get(name) { |
| return this._environments.get(name) || null; |
| } |
| |
| /** |
| * Gets all the environment present |
| * @returns {Object} The environment object for each env name |
| */ |
| getAll() { |
| return Array.from(this._environments).reduce((coll, env) => { |
| coll[env[0]] = env[1]; |
| return coll; |
| }, {}); |
| } |
| |
| /** |
| * Defines an environment. |
| * @param {string} name The name of the environment. |
| * @param {Object} env The environment settings. |
| * @returns {void} |
| */ |
| define(name, env) { |
| this._environments.set(name, env); |
| } |
| |
| /** |
| * Imports all environments from a plugin. |
| * @param {Object} plugin The plugin object. |
| * @param {string} pluginName The name of the plugin. |
| * @returns {void} |
| */ |
| importPlugin(plugin, pluginName) { |
| if (plugin.environments) { |
| Object.keys(plugin.environments).forEach(envName => { |
| this.define(`${pluginName}/${envName}`, plugin.environments[envName]); |
| }); |
| } |
| } |
| } |
| |
| module.exports = Environments; |