Skip to content
This repository has been archived by the owner on Jun 18, 2019. It is now read-only.

Commit

Permalink
fix(ConfigNameResolver): fixes an issues with unknown environment v…
Browse files Browse the repository at this point in the history
…ariables
  • Loading branch information
mdreizin authored Aug 8, 2016
1 parent 2e772df commit 2fc6a1e
Show file tree
Hide file tree
Showing 14 changed files with 153 additions and 209 deletions.
1 change: 0 additions & 1 deletion src/ConfigCache.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ class ConfigCache extends Map {
}

/**
* @protected
* @readonly
* @type {ConfigEnvironment}
*/
Expand Down
8 changes: 4 additions & 4 deletions src/ConfigContainer.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import Config from './Config';
import ConfigCache from './ConfigCache';
import ConfigEnvironment from './ConfigEnvironment';
import ConfigPatternCache from './ConfigPatternCache';
import ConfigNameResolver from './ConfigNameResolver';
import ConfigStringResolver from './ConfigStringResolver';
import ConfigPathResolver from './ConfigPathResolver';
import ConfigLoader from './ConfigLoader';
import ConfigFinder from './ConfigFinder';
Expand Down Expand Up @@ -57,12 +57,12 @@ class ConfigContainer {
ConfigEnvironment
]);
container.bindValue(ConfigPatternCache, new ConfigPatternCache());
container.bindClass(ConfigNameResolver, ConfigNameResolver, [
container.bindClass(ConfigStringResolver, ConfigStringResolver, [
ConfigEnvironment,
ConfigPatternCache
]);
container.bindClass(ConfigPathResolver, ConfigPathResolver, [
ConfigNameResolver
ConfigStringResolver
]);
container.bindClass(ConfigLoader, ConfigLoader, [
ConfigPathResolver,
Expand All @@ -85,7 +85,7 @@ class ConfigContainer {
ConfigFactory
]));
container.bindClass(ConfigOptionsResolver, ConfigOptionsResolver, [
ConfigNameResolver
ConfigStringResolver
]);
container.bindClass(ConfigDefaultsCommand, ConfigDefaultsCommand, [
ConfigOptionsResolver
Expand Down
1 change: 0 additions & 1 deletion src/ConfigFinder.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ class ConfigFinder {
}

/**
* @protected
* @readonly
* @type {ConfigPathResolver}
*/
Expand Down
16 changes: 8 additions & 8 deletions src/ConfigOptionsResolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,26 @@ import RecursiveIterator from 'recursive-iterator';
* @private
* @type {WeakMap}
*/
const NAME_RESOLVER = new WeakMap();
const STRING_RESOLVER = new WeakMap();

/**
* @class
*/
class ConfigOptionsResolver {
/**
* @constructor
* @param {ConfigNameResolver} nameResolver
* @param {ConfigStringResolver} stringResolver
*/
constructor(nameResolver) {
NAME_RESOLVER.set(this, nameResolver);
constructor(stringResolver) {
STRING_RESOLVER.set(this, stringResolver);
}

/**
* @readonly
* @type {ConfigNameResolver}
* @type {ConfigStringResolver}
*/
get nameResolver() {
return NAME_RESOLVER.get(this);
get stringResolver() {
return STRING_RESOLVER.get(this);
}

/**
Expand All @@ -61,7 +61,7 @@ class ConfigOptionsResolver {

for (const {parent, node, key} of new RecursiveIterator(value, 1, true)) {
if (isString(node)) {
parent[key] = this.nameResolver.resolve(node);
parent[key] = this.stringResolver.resolve(node);
}
}

Expand Down
44 changes: 44 additions & 0 deletions src/ConfigPathDefaultResolvers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import {
resolve
} from 'path';

/**
* @private
* @type {String}
*/
const MODULE_PREFIX = 'webpack-config';

export default [
/**
* `require('<module-name>')`
* @param {String} value
* @returns {String|Error}
*/
value => {
try {
return require.resolve(value);
} catch (err) {
return err;
}
},

/**
* `require('webpack-config-<name>')`
* @param {String} value
* @returns {String|Error}
*/
value => {
try {
return require.resolve(`${MODULE_PREFIX}-${value}`);
} catch (err) {
return err;
}
},

/**
* `path.resolve('<file-name>')`
* @param {String} value
* @returns {String}
*/
value => resolve(value)
];
81 changes: 15 additions & 66 deletions src/ConfigPathResolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,109 +2,58 @@ import {
isString,
isError
} from 'lodash';
import {
resolve
} from 'path';
import DEFAULT_RESOLVERS from './ConfigPathDefaultResolvers';

/**
* @private
* @type {WeakMap}
*/
const NAME_RESOLVER = new WeakMap();

/**
* @private
* @type {String}
*/
const MODULE_PREFIX = 'webpack-config';

/* eslint-disable valid-jsdoc */
/**
* @private
* @type {Function[]}
*/
const DEFAULT_RESOLVERS = [
/**
* `require('<module-name>')`
* @param {String} value
* @returns {String|Error}
*/
value => {
try {
return require.resolve(value);
} catch (err) {
return err;
}
},

/**
* `require('webpack-config-<name>')`
* @param {String} value
* @returns {String|Error}
*/
value => {
try {
return require.resolve(`${MODULE_PREFIX}-${value}`);
} catch (err) {
return err;
}
},

/**
* `path.resolve('<file-name>')`
* @param {String} value
* @returns {String}
*/
value => resolve(value)
];
/* eslint-enable valid-jsdoc */
const PATH_RESOLVERS = new WeakMap();

/**
* @private
* @type {WeakMap}
*/
const RESOLVERS = new WeakMap();
const STRING_RESOLVER = new WeakMap();

/**
* @class
*/
class ConfigPathResolver {
/**
* @constructor
* @param {ConfigNameResolver} nameResolver
* @param {Function[]} [resolvers]
* @param {ConfigStringResolver} stringResolver
* @param {Function[]} [pathResolvers]
*/
constructor(nameResolver, resolvers = DEFAULT_RESOLVERS) {
NAME_RESOLVER.set(this, nameResolver);
RESOLVERS.set(this, resolvers);
constructor(stringResolver, pathResolvers = DEFAULT_RESOLVERS) {
STRING_RESOLVER.set(this, stringResolver);
PATH_RESOLVERS.set(this, pathResolvers);
}

/**
* @protected
* @readonly
* @type {ConfigNameResolver}
* @type {ConfigStringResolver}
*/
get nameResolver() {
return NAME_RESOLVER.get(this);
get stringResolver() {
return STRING_RESOLVER.get(this);
}

/**
* @protected
* @readonly
* @type {Function[]}
*/
get resolvers() {
return RESOLVERS.get(this);
get pathResolvers() {
return PATH_RESOLVERS.get(this);
}

/**
* @param {String} value
* @returns {String}
*/
resolve(value) {
value = this.nameResolver.resolve(value);
value = this.stringResolver.resolve(value);

for (const resolver of this.resolvers) {
for (const resolver of this.pathResolvers) {
const resolvedValue = resolver(value),
throwsError = isError(value) || value instanceof Error;

Expand Down
16 changes: 11 additions & 5 deletions src/ConfigNameResolver.js → src/ConfigStringResolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const PATTERN_CACHE = new WeakMap();
/**
* @class
*/
class ConfigNameResolver {
class ConfigStringResolver {
/**
* @constructor
* @param {ConfigEnvironment} environment
Expand All @@ -25,7 +25,6 @@ class ConfigNameResolver {
}

/**
* @protected
* @readonly
* @type {ConfigEnvironment}
*/
Expand All @@ -34,7 +33,6 @@ class ConfigNameResolver {
}

/**
* @protected
* @readonly
* @type {ConfigPatternCache}
*/
Expand All @@ -53,8 +51,16 @@ class ConfigNameResolver {
options[key] = this.environment.valueOf(key);
}

return this.patternCache.eval(value, options);
let resolvedValue;

try {
resolvedValue = this.patternCache.eval(value, options);
} catch (e) {
resolvedValue = value;
}

return resolvedValue;
}
}

export default ConfigNameResolver;
export default ConfigStringResolver;
59 changes: 0 additions & 59 deletions src/container.js

This file was deleted.

Loading

0 comments on commit 2fc6a1e

Please sign in to comment.