| /* |
| MIT License http://www.opensource.org/licenses/mit-license.php |
| Author Tobias Koppers @sokra |
| */ |
| "use strict"; |
| |
| const ResolverFactory = require("./ResolverFactory"); |
| |
| const NodeJsInputFileSystem = require("./NodeJsInputFileSystem"); |
| const CachedInputFileSystem = require("./CachedInputFileSystem"); |
| |
| const nodeFileSystem = new CachedInputFileSystem( |
| new NodeJsInputFileSystem(), |
| 4000 |
| ); |
| |
| const nodeContext = { |
| environments: ["node+es3+es5+process+native"] |
| }; |
| |
| const asyncResolver = ResolverFactory.createResolver({ |
| extensions: [".js", ".json", ".node"], |
| fileSystem: nodeFileSystem |
| }); |
| module.exports = function resolve( |
| context, |
| path, |
| request, |
| resolveContext, |
| callback |
| ) { |
| if (typeof context === "string") { |
| callback = resolveContext; |
| resolveContext = request; |
| request = path; |
| path = context; |
| context = nodeContext; |
| } |
| if (typeof callback !== "function") { |
| callback = resolveContext; |
| } |
| asyncResolver.resolve(context, path, request, resolveContext, callback); |
| }; |
| |
| const syncResolver = ResolverFactory.createResolver({ |
| extensions: [".js", ".json", ".node"], |
| useSyncFileSystemCalls: true, |
| fileSystem: nodeFileSystem |
| }); |
| module.exports.sync = function resolveSync(context, path, request) { |
| if (typeof context === "string") { |
| request = path; |
| path = context; |
| context = nodeContext; |
| } |
| return syncResolver.resolveSync(context, path, request); |
| }; |
| |
| const asyncContextResolver = ResolverFactory.createResolver({ |
| extensions: [".js", ".json", ".node"], |
| resolveToContext: true, |
| fileSystem: nodeFileSystem |
| }); |
| module.exports.context = function resolveContext( |
| context, |
| path, |
| request, |
| resolveContext, |
| callback |
| ) { |
| if (typeof context === "string") { |
| callback = resolveContext; |
| resolveContext = request; |
| request = path; |
| path = context; |
| context = nodeContext; |
| } |
| if (typeof callback !== "function") { |
| callback = resolveContext; |
| } |
| asyncContextResolver.resolve( |
| context, |
| path, |
| request, |
| resolveContext, |
| callback |
| ); |
| }; |
| |
| const syncContextResolver = ResolverFactory.createResolver({ |
| extensions: [".js", ".json", ".node"], |
| resolveToContext: true, |
| useSyncFileSystemCalls: true, |
| fileSystem: nodeFileSystem |
| }); |
| module.exports.context.sync = function resolveContextSync( |
| context, |
| path, |
| request |
| ) { |
| if (typeof context === "string") { |
| request = path; |
| path = context; |
| context = nodeContext; |
| } |
| return syncContextResolver.resolveSync(context, path, request); |
| }; |
| |
| const asyncLoaderResolver = ResolverFactory.createResolver({ |
| extensions: [".js", ".json", ".node"], |
| moduleExtensions: ["-loader"], |
| mainFields: ["loader", "main"], |
| fileSystem: nodeFileSystem |
| }); |
| module.exports.loader = function resolveLoader( |
| context, |
| path, |
| request, |
| resolveContext, |
| callback |
| ) { |
| if (typeof context === "string") { |
| callback = resolveContext; |
| resolveContext = request; |
| request = path; |
| path = context; |
| context = nodeContext; |
| } |
| if (typeof callback !== "function") { |
| callback = resolveContext; |
| } |
| asyncLoaderResolver.resolve(context, path, request, resolveContext, callback); |
| }; |
| |
| const syncLoaderResolver = ResolverFactory.createResolver({ |
| extensions: [".js", ".json", ".node"], |
| moduleExtensions: ["-loader"], |
| mainFields: ["loader", "main"], |
| useSyncFileSystemCalls: true, |
| fileSystem: nodeFileSystem |
| }); |
| module.exports.loader.sync = function resolveLoaderSync( |
| context, |
| path, |
| request |
| ) { |
| if (typeof context === "string") { |
| request = path; |
| path = context; |
| context = nodeContext; |
| } |
| return syncLoaderResolver.resolveSync(context, path, request); |
| }; |
| |
| module.exports.create = function create(options) { |
| options = Object.assign( |
| { |
| fileSystem: nodeFileSystem |
| }, |
| options |
| ); |
| const resolver = ResolverFactory.createResolver(options); |
| return function(context, path, request, resolveContext, callback) { |
| if (typeof context === "string") { |
| callback = resolveContext; |
| resolveContext = request; |
| request = path; |
| path = context; |
| context = nodeContext; |
| } |
| if (typeof callback !== "function") { |
| callback = resolveContext; |
| } |
| resolver.resolve(context, path, request, resolveContext, callback); |
| }; |
| }; |
| |
| module.exports.create.sync = function createSync(options) { |
| options = Object.assign( |
| { |
| useSyncFileSystemCalls: true, |
| fileSystem: nodeFileSystem |
| }, |
| options |
| ); |
| const resolver = ResolverFactory.createResolver(options); |
| return function(context, path, request) { |
| if (typeof context === "string") { |
| request = path; |
| path = context; |
| context = nodeContext; |
| } |
| return resolver.resolveSync(context, path, request); |
| }; |
| }; |
| |
| // Export Resolver, FileSystems and Plugins |
| module.exports.ResolverFactory = ResolverFactory; |
| |
| module.exports.NodeJsInputFileSystem = NodeJsInputFileSystem; |
| module.exports.CachedInputFileSystem = CachedInputFileSystem; |