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