UNPKG

1.94 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5"use strict";
6
7const DescriptionFileUtils = require("./DescriptionFileUtils");
8const getInnerRequest = require("./getInnerRequest");
9
10module.exports = class AliasFieldPlugin {
11 constructor(source, field, target) {
12 this.source = source;
13 this.field = field;
14 this.target = target;
15 }
16
17 apply(resolver) {
18 const target = resolver.ensureHook(this.target);
19 resolver.getHook(this.source).tapAsync("AliasFieldPlugin", (request, resolveContext, callback) => {
20 if(!request.descriptionFileData) return callback();
21 const innerRequest = getInnerRequest(resolver, request);
22 if(!innerRequest) return callback();
23 const fieldData = DescriptionFileUtils.getField(request.descriptionFileData, this.field);
24 if(typeof fieldData !== "object") {
25 if(resolveContext.log) resolveContext.log("Field '" + this.field + "' doesn't contain a valid alias configuration");
26 return callback();
27 }
28 const data1 = fieldData[innerRequest];
29 const data2 = fieldData[innerRequest.replace(/^\.\//, "")];
30 const data = typeof data1 !== "undefined" ? data1 : data2;
31 if(data === innerRequest) return callback();
32 if(data === undefined) return callback();
33 if(data === false) {
34 const ignoreObj = Object.assign({}, request, {
35 path: false
36 });
37 return callback(null, ignoreObj);
38 }
39 const obj = Object.assign({}, request, {
40 path: request.descriptionFileRoot,
41 request: data
42 });
43 resolver.doResolve(target, obj, "aliased from description file " + request.descriptionFilePath + " with mapping '" + innerRequest + "' to '" + data + "'", resolveContext, (err, result) => {
44 if(err) return callback(err);
45
46 // Don't allow other aliasing or raw request
47 if(result === undefined) return callback(null, null);
48 callback(null, result);
49 });
50 });
51 }
52};