UNPKG

webpack-config

Version:

Helps to load, extend and merge webpack configs

118 lines (108 loc) 3.2 kB
import { Container, Transient } from 'constitute'; import Config from './Config'; import ConfigCache from './ConfigCache'; import ConfigEnvironment from './ConfigEnvironment'; import ConfigPatternCache from './ConfigPatternCache'; import ConfigStringResolver from './ConfigStringResolver'; import ConfigPathResolver from './ConfigPathResolver'; import ConfigLoader from './ConfigLoader'; import ConfigFactory from './ConfigFactory'; import ConfigOptionsResolver from './ConfigOptionsResolver'; import ConfigDefaultsCommand from './ConfigDefaultsCommand'; import ConfigMergeCommand from './ConfigMergeCommand'; import ConfigExtendCommand from './ConfigExtendCommand'; import ConfigCommandFactory from './ConfigCommandFactory'; /** * @private * @type {WeakMap} */ const CONTAINER = new WeakMap(); /** * @class */ class ConfigContainer { /** * @constructor */ constructor() { CONTAINER.set(this, new Container()); this.setUp(); } /** * @protected * @type {Container} */ get container() { return CONTAINER.get(this); } /** * @protected * @returns {void} */ setUp() { const container = this.container; container.bindValue(ConfigContainer, this); container.bindValue(ConfigEnvironment, new ConfigEnvironment(Object.entries(process.env))); container.bindClass(ConfigCache, ConfigCache, [ ConfigEnvironment ]); container.bindValue(ConfigPatternCache, new ConfigPatternCache()); container.bindClass(ConfigStringResolver, ConfigStringResolver, [ ConfigEnvironment, ConfigPatternCache ]); container.bindClass(ConfigPathResolver, ConfigPathResolver, [ ConfigStringResolver ]); container.bindClass(ConfigLoader, ConfigLoader, [ ConfigPathResolver, ConfigCache, ConfigFactory ]); container.bindClass(ConfigFactory, ConfigFactory, [ ConfigContainer ]); container.bindClass(Config, Config, Transient.with([ ConfigCommandFactory ])); container.bindClass(ConfigOptionsResolver, ConfigOptionsResolver, [ ConfigStringResolver ]); container.bindClass(ConfigDefaultsCommand, ConfigDefaultsCommand, [ ConfigOptionsResolver ]); container.bindClass(ConfigMergeCommand, ConfigMergeCommand, [ ConfigOptionsResolver ]); container.bindClass(ConfigExtendCommand, ConfigExtendCommand, [ ConfigOptionsResolver, ConfigLoader, ConfigFactory ]); container.bindClass(ConfigCommandFactory, ConfigCommandFactory, [ ConfigContainer ]); } /** * @param {*} T * @returns {*} */ resolve(T) { return this.container.constitute(T); } /** * @param {*} T * @returns {Proxy<T>} */ proxy(T) { return new Proxy(function() {}, { construct: () => { return this.resolve(T); } }); } } export default ConfigContainer;