diff options
Diffstat (limited to 'node_modules/enhanced-resolve/lib/ResolverFactory.js')
-rw-r--r-- | node_modules/enhanced-resolve/lib/ResolverFactory.js | 180 |
1 files changed, 104 insertions, 76 deletions
diff --git a/node_modules/enhanced-resolve/lib/ResolverFactory.js b/node_modules/enhanced-resolve/lib/ResolverFactory.js index cd167aaf7..4e935a72d 100644 --- a/node_modules/enhanced-resolve/lib/ResolverFactory.js +++ b/node_modules/enhanced-resolve/lib/ResolverFactory.js @@ -2,99 +2,104 @@ MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
-var Resolver = require("./Resolver");
-
-var SyncAsyncFileSystemDecorator = require("./SyncAsyncFileSystemDecorator");
-
-var ParsePlugin = require("./ParsePlugin");
-var DescriptionFilePlugin = require("./DescriptionFilePlugin");
-var NextPlugin = require("./NextPlugin");
-var TryNextPlugin = require("./TryNextPlugin");
-var ModuleKindPlugin = require("./ModuleKindPlugin");
-var FileKindPlugin = require("./FileKindPlugin");
-var JoinRequestPlugin = require("./JoinRequestPlugin");
-var ModulesInHierachicDirectoriesPlugin = require("./ModulesInHierachicDirectoriesPlugin");
-var ModulesInRootPlugin = require("./ModulesInRootPlugin");
-var AliasPlugin = require("./AliasPlugin");
-var AliasFieldPlugin = require("./AliasFieldPlugin");
-var ConcordExtensionsPlugin = require("./ConcordExtensionsPlugin");
-var ConcordMainPlugin = require("./ConcordMainPlugin");
-var ConcordModulesPlugin = require("./ConcordModulesPlugin");
-var DirectoryExistsPlugin = require("./DirectoryExistsPlugin");
-var FileExistsPlugin = require("./FileExistsPlugin");
-var SymlinkPlugin = require("./SymlinkPlugin");
-var MainFieldPlugin = require("./MainFieldPlugin");
-var UseFilePlugin = require("./UseFilePlugin");
-var AppendPlugin = require("./AppendPlugin");
-var ResultPlugin = require("./ResultPlugin");
-var ModuleAppendPlugin = require("./ModuleAppendPlugin");
-var UnsafeCachePlugin = require("./UnsafeCachePlugin");
+"use strict";
+
+const Resolver = require("./Resolver");
+
+const SyncAsyncFileSystemDecorator = require("./SyncAsyncFileSystemDecorator");
+
+const ParsePlugin = require("./ParsePlugin");
+const DescriptionFilePlugin = require("./DescriptionFilePlugin");
+const NextPlugin = require("./NextPlugin");
+const TryNextPlugin = require("./TryNextPlugin");
+const ModuleKindPlugin = require("./ModuleKindPlugin");
+const FileKindPlugin = require("./FileKindPlugin");
+const JoinRequestPlugin = require("./JoinRequestPlugin");
+const ModulesInHierachicDirectoriesPlugin = require("./ModulesInHierachicDirectoriesPlugin");
+const ModulesInRootPlugin = require("./ModulesInRootPlugin");
+const AliasPlugin = require("./AliasPlugin");
+const AliasFieldPlugin = require("./AliasFieldPlugin");
+const ConcordExtensionsPlugin = require("./ConcordExtensionsPlugin");
+const ConcordMainPlugin = require("./ConcordMainPlugin");
+const ConcordModulesPlugin = require("./ConcordModulesPlugin");
+const DirectoryExistsPlugin = require("./DirectoryExistsPlugin");
+const FileExistsPlugin = require("./FileExistsPlugin");
+const SymlinkPlugin = require("./SymlinkPlugin");
+const MainFieldPlugin = require("./MainFieldPlugin");
+const UseFilePlugin = require("./UseFilePlugin");
+const AppendPlugin = require("./AppendPlugin");
+const ResultPlugin = require("./ResultPlugin");
+const ModuleAppendPlugin = require("./ModuleAppendPlugin");
+const UnsafeCachePlugin = require("./UnsafeCachePlugin");
exports.createResolver = function(options) {
//// OPTIONS ////
// A list of directories to resolve modules from, can be absolute path or folder name
- var modules = options.modules || ["node_modules"];
+ let modules = options.modules || ["node_modules"];
// A list of description files to read from
- var descriptionFiles = options.descriptionFiles || ["package.json"];
+ const descriptionFiles = options.descriptionFiles || ["package.json"];
// A list of additional resolve plugins which should be applied
// The slice is there to create a copy, because otherwise pushing into plugins
// changes the original options.plugins array, causing duplicate plugins
- var plugins = (options.plugins && options.plugins.slice()) || [];
+ const plugins = (options.plugins && options.plugins.slice()) || [];
// A list of main fields in description files
- var mainFields = options.mainFields || ["main"];
+ let mainFields = options.mainFields || ["main"];
// A list of alias fields in description files
- var aliasFields = options.aliasFields || [];
+ const aliasFields = options.aliasFields || [];
// A list of main files in directories
- var mainFiles = options.mainFiles || ["index"];
+ const mainFiles = options.mainFiles || ["index"];
// A list of extensions which should be tried for files
- var extensions = options.extensions || [".js", ".json", ".node"];
+ let extensions = options.extensions || [".js", ".json", ".node"];
// Enforce that a extension from extensions must be used
- var enforceExtension = options.enforceExtension || false;
+ const enforceExtension = options.enforceExtension || false;
// A list of module extensions which should be tried for modules
- var moduleExtensions = options.moduleExtensions || [];
+ let moduleExtensions = options.moduleExtensions || [];
// Enforce that a extension from moduleExtensions must be used
- var enforceModuleExtension = options.enforceModuleExtension || false;
+ const enforceModuleExtension = options.enforceModuleExtension || false;
// A list of module alias configurations or an object which maps key to value
- var alias = options.alias || [];
+ let alias = options.alias || [];
// Resolve symlinks to their symlinked location
- var symlinks = typeof options.symlinks !== "undefined" ? options.symlinks : true;
+ const symlinks = typeof options.symlinks !== "undefined" ? options.symlinks : true;
// Resolve to a context instead of a file
- var resolveToContext = options.resolveToContext || false;
+ const resolveToContext = options.resolveToContext || false;
// Use this cache object to unsafely cache the successful requests
- var unsafeCache = options.unsafeCache || false;
+ let unsafeCache = options.unsafeCache || false;
// Whether or not the unsafeCache should include request context as part of the cache key.
- var cacheWithContext = typeof options.cacheWithContext !== "undefined" ? options.cacheWithContext : true;
+ const cacheWithContext = typeof options.cacheWithContext !== "undefined" ? options.cacheWithContext : true;
+
+ // Enable concord description file instructions
+ const enableConcord = options.concord || false;
// A function which decides whether a request should be cached or not.
// an object is passed with `path` and `request` properties.
- var cachePredicate = options.cachePredicate || function() {
+ const cachePredicate = options.cachePredicate || function() {
return true;
};
// The file system which should be used
- var fileSystem = options.fileSystem;
+ const fileSystem = options.fileSystem;
- // Use only the sync variants of the file system calls
- var useSyncFileSystemCalls = options.useSyncFileSystemCalls;
+ // Use only the sync constiants of the file system calls
+ const useSyncFileSystemCalls = options.useSyncFileSystemCalls;
// A prepared Resolver to which the plugins are attached
- var resolver = options.resolver;
+ let resolver = options.resolver;
//// options processing ////
@@ -105,12 +110,12 @@ exports.createResolver = function(options) { extensions = [].concat(extensions);
moduleExtensions = [].concat(moduleExtensions);
- modules = mergeFilteredToArray([].concat(modules), function(item) {
+ modules = mergeFilteredToArray([].concat(modules), item => {
return !isAbsolutePath(item);
});
- mainFields = mainFields.map(function(item) {
- if(typeof item === "string") {
+ mainFields = mainFields.map(item => {
+ if(typeof item === "string" || Array.isArray(item)) {
item = {
name: item,
forceRelative: true
@@ -120,9 +125,9 @@ exports.createResolver = function(options) { });
if(typeof alias === "object" && !Array.isArray(alias)) {
- alias = Object.keys(alias).map(function(key) {
- var onlyModule = false;
- var obj = alias[key];
+ alias = Object.keys(alias).map(key => {
+ let onlyModule = false;
+ let obj = alias[key];
if(/\$$/.test(key)) {
onlyModule = true;
key = key.substr(0, key.length - 1);
@@ -146,6 +151,21 @@ exports.createResolver = function(options) { //// pipeline ////
+ resolver.ensureHook("resolve");
+ resolver.ensureHook("parsedResolve");
+ resolver.ensureHook("describedResolve");
+ resolver.ensureHook("rawModule");
+ resolver.ensureHook("module");
+ resolver.ensureHook("relative");
+ resolver.ensureHook("describedRelative");
+ resolver.ensureHook("directory");
+ resolver.ensureHook("existingDirectory");
+ resolver.ensureHook("undescribedRawFile");
+ resolver.ensureHook("rawFile");
+ resolver.ensureHook("file");
+ resolver.ensureHook("existingFile");
+ resolver.ensureHook("resolved");
+
// resolve
if(unsafeCache) {
plugins.push(new UnsafeCachePlugin("resolve", cachePredicate, unsafeCache, cacheWithContext, "new-resolve"));
@@ -159,25 +179,26 @@ exports.createResolver = function(options) { plugins.push(new NextPlugin("after-parsed-resolve", "described-resolve"));
// described-resolve
- alias.forEach(function(item) {
- plugins.push(new AliasPlugin("described-resolve", item, "resolve"));
- });
- plugins.push(new ConcordModulesPlugin("described-resolve", {}, "resolve"));
- aliasFields.forEach(function(item) {
+ if(alias.length > 0)
+ plugins.push(new AliasPlugin("described-resolve", alias, "resolve"));
+ if(enableConcord) {
+ plugins.push(new ConcordModulesPlugin("described-resolve", {}, "resolve"));
+ }
+ aliasFields.forEach(item => {
plugins.push(new AliasFieldPlugin("described-resolve", item, "resolve"));
});
plugins.push(new ModuleKindPlugin("after-described-resolve", "raw-module"));
plugins.push(new JoinRequestPlugin("after-described-resolve", "relative"));
// raw-module
- moduleExtensions.forEach(function(item) {
+ moduleExtensions.forEach(item => {
plugins.push(new ModuleAppendPlugin("raw-module", item, "module"));
});
if(!enforceModuleExtension)
plugins.push(new TryNextPlugin("raw-module", null, "module"));
// module
- modules.forEach(function(item) {
+ modules.forEach(item => {
if(Array.isArray(item))
plugins.push(new ModulesInHierachicDirectoriesPlugin("module", item, "resolve"));
else
@@ -203,11 +224,13 @@ exports.createResolver = function(options) { } else {
// existing-directory
- plugins.push(new ConcordMainPlugin("existing-directory", {}, "resolve"));
- mainFields.forEach(function(item) {
+ if(enableConcord) {
+ plugins.push(new ConcordMainPlugin("existing-directory", {}, "resolve"));
+ }
+ mainFields.forEach(item => {
plugins.push(new MainFieldPlugin("existing-directory", item, "resolve"));
});
- mainFiles.forEach(function(item) {
+ mainFiles.forEach(item => {
plugins.push(new UseFilePlugin("existing-directory", item, "undescribed-raw-file"));
});
@@ -216,19 +239,23 @@ exports.createResolver = function(options) { plugins.push(new NextPlugin("after-undescribed-raw-file", "raw-file"));
// raw-file
- if(!enforceExtension)
+ if(!enforceExtension) {
plugins.push(new TryNextPlugin("raw-file", "no extension", "file"));
- plugins.push(new ConcordExtensionsPlugin("raw-file", {}, "file"));
- extensions.forEach(function(item) {
+ }
+ if(enableConcord) {
+ plugins.push(new ConcordExtensionsPlugin("raw-file", {}, "file"));
+ }
+ extensions.forEach(item => {
plugins.push(new AppendPlugin("raw-file", item, "file"));
});
// file
- alias.forEach(function(item) {
- plugins.push(new AliasPlugin("file", item, "resolve"));
- });
- plugins.push(new ConcordModulesPlugin("file", {}, "resolve"));
- aliasFields.forEach(function(item) {
+ if(alias.length > 0)
+ plugins.push(new AliasPlugin("file", alias, "resolve"));
+ if(enableConcord) {
+ plugins.push(new ConcordModulesPlugin("file", {}, "resolve"));
+ }
+ aliasFields.forEach(item => {
plugins.push(new AliasFieldPlugin("file", item, "resolve"));
});
if(symlinks)
@@ -241,20 +268,21 @@ exports.createResolver = function(options) { }
// resolved
- plugins.push(new ResultPlugin("resolved"));
+ plugins.push(new ResultPlugin(resolver.hooks.resolved));
//// RESOLVER ////
- plugins.forEach(function(plugin) {
- resolver.apply(plugin);
+ plugins.forEach(plugin => {
+ plugin.apply(resolver);
});
+
return resolver;
};
function mergeFilteredToArray(array, filter) {
- return array.reduce(function(array, item) {
+ return array.reduce((array, item) => {
if(filter(item)) {
- var lastElement = array[array.length - 1];
+ const lastElement = array[array.length - 1];
if(Array.isArray(lastElement)) {
lastElement.push(item);
} else {
|