2017-05-03 15:35:00 +02:00
/ *
MIT License http : //www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @ sokra
* /
2018-09-20 02:56:13 +02:00
"use strict" ;
2017-05-03 15:35:00 +02:00
2018-09-20 02:56:13 +02:00
const DescriptionFileUtils = require ( "./DescriptionFileUtils" ) ;
const getInnerRequest = require ( "./getInnerRequest" ) ;
2017-05-03 15:35:00 +02:00
2018-09-20 02:56:13 +02:00
module . exports = class AliasFieldPlugin {
constructor ( source , field , target ) {
this . source = source ;
this . field = field ;
this . target = target ;
}
2017-05-03 15:35:00 +02:00
2018-09-20 02:56:13 +02:00
apply ( resolver ) {
const target = resolver . ensureHook ( this . target ) ;
resolver . getHook ( this . source ) . tapAsync ( "AliasFieldPlugin" , ( request , resolveContext , callback ) => {
if ( ! request . descriptionFileData ) return callback ( ) ;
const innerRequest = getInnerRequest ( resolver , request ) ;
if ( ! innerRequest ) return callback ( ) ;
const fieldData = DescriptionFileUtils . getField ( request . descriptionFileData , this . field ) ;
if ( typeof fieldData !== "object" ) {
if ( resolveContext . log ) resolveContext . log ( "Field '" + this . field + "' doesn't contain a valid alias configuration" ) ;
return callback ( ) ;
}
const data1 = fieldData [ innerRequest ] ;
const data2 = fieldData [ innerRequest . replace ( /^\.\// , "" ) ] ;
const data = typeof data1 !== "undefined" ? data1 : data2 ;
if ( data === innerRequest ) return callback ( ) ;
if ( data === undefined ) return callback ( ) ;
if ( data === false ) {
const ignoreObj = Object . assign ( { } , request , {
path : false
} ) ;
return callback ( null , ignoreObj ) ;
}
const obj = Object . assign ( { } , request , {
path : request . descriptionFileRoot ,
request : data
2017-05-03 15:35:00 +02:00
} ) ;
2018-09-20 02:56:13 +02:00
resolver . doResolve ( target , obj , "aliased from description file " + request . descriptionFilePath + " with mapping '" + innerRequest + "' to '" + data + "'" , resolveContext , ( err , result ) => {
if ( err ) return callback ( err ) ;
2017-05-03 15:35:00 +02:00
2018-09-20 02:56:13 +02:00
// Don't allow other aliasing or raw request
if ( result === undefined ) return callback ( null , null ) ;
callback ( null , result ) ;
} ) ;
} ) ;
}
2017-05-03 15:35:00 +02:00
} ;