| /* | 
|     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; |