diff options
Diffstat (limited to 'node_modules/enhanced-resolve/lib/MainFieldPlugin.js')
-rw-r--r-- | node_modules/enhanced-resolve/lib/MainFieldPlugin.js | 100 |
1 files changed, 52 insertions, 48 deletions
diff --git a/node_modules/enhanced-resolve/lib/MainFieldPlugin.js b/node_modules/enhanced-resolve/lib/MainFieldPlugin.js index 45ecd4b23..3bcd36ce5 100644 --- a/node_modules/enhanced-resolve/lib/MainFieldPlugin.js +++ b/node_modules/enhanced-resolve/lib/MainFieldPlugin.js @@ -1,48 +1,52 @@ -/*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
-*/
-var path = require("path");
-
-function MainFieldPlugin(source, options, target) {
- this.source = source;
- this.options = options;
- this.target = target;
-}
-module.exports = MainFieldPlugin;
-
-MainFieldPlugin.prototype.apply = function(resolver) {
- var target = this.target;
- var options = this.options;
- resolver.plugin(this.source, function mainField(request, callback) {
- if(request.path !== request.descriptionFileRoot) return callback();
- var content = request.descriptionFileData;
- var filename = path.basename(request.descriptionFilePath);
- var mainModule;
- var field = options.name;
- if(Array.isArray(field)) {
- var current = content;
- for(var j = 0; j < field.length; j++) {
- if(current === null || typeof current !== "object") {
- current = null;
- break;
- }
- current = current[field[j]];
- }
- if(typeof current === "string") {
- mainModule = current;
- }
- } else {
- if(typeof content[field] === "string") {
- mainModule = content[field];
- }
- }
- if(!mainModule) return callback();
- if(options.forceRelative && !/^\.\.?\//.test(mainModule))
- mainModule = "./" + mainModule;
- var obj = Object.assign({}, request, {
- request: mainModule
- });
- return resolver.doResolve(target, obj, "use " + mainModule + " from " + options.name + " in " + filename, callback);
- });
-};
+/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +const path = require("path"); + +module.exports = class MainFieldPlugin { + constructor(source, options, target) { + this.source = source; + this.options = options; + this.target = target; + } + + apply(resolver) { + const target = resolver.ensureHook(this.target); + resolver.getHook(this.source).tapAsync("MainFieldPlugin", (request, resolveContext, callback) => { + if(request.path !== request.descriptionFileRoot) return callback(); + if(request.alreadyTriedMainField === request.descriptionFilePath) return callback(); + const content = request.descriptionFileData; + const filename = path.basename(request.descriptionFilePath); + let mainModule; + const field = this.options.name; + if(Array.isArray(field)) { + let current = content; + for(let j = 0; j < field.length; j++) { + if(current === null || typeof current !== "object") { + current = null; + break; + } + current = current[field[j]]; + } + if(typeof current === "string") { + mainModule = current; + } + } else { + if(typeof content[field] === "string") { + mainModule = content[field]; + } + } + if(!mainModule) return callback(); + if(this.options.forceRelative && !/^\.\.?\//.test(mainModule)) + mainModule = "./" + mainModule; + const obj = Object.assign({}, request, { + request: mainModule, + alreadyTriedMainField: request.descriptionFilePath + }); + return resolver.doResolve(target, obj, "use " + mainModule + " from " + this.options.name + " in " + filename, resolveContext, callback); + }); + } +}; |