| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | 
							- /*
 
- 	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
 
- 				);
 
- 			});
 
- 	}
 
- };
 
 
  |