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