You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							76 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							76 lines
						
					
					
						
							1.9 KiB
						
					
					
				/* | 
						|
MIT License http://www.opensource.org/licenses/mit-license.php | 
						|
Author Tobias Koppers @sokra | 
						|
*/ | 
						|
"use strict"; | 
						|
 | 
						|
const DescriptionFileUtils = require("./DescriptionFileUtils"); | 
						|
 | 
						|
module.exports = class DescriptionFilePlugin { | 
						|
	constructor(source, filenames, target) { | 
						|
		this.source = source; | 
						|
		this.filenames = [].concat(filenames); | 
						|
		this.target = target; | 
						|
	} | 
						|
 | 
						|
	apply(resolver) { | 
						|
		const target = resolver.ensureHook(this.target); | 
						|
		resolver | 
						|
			.getHook(this.source) | 
						|
			.tapAsync( | 
						|
				"DescriptionFilePlugin", | 
						|
				(request, resolveContext, callback) => { | 
						|
					const directory = request.path; | 
						|
					DescriptionFileUtils.loadDescriptionFile( | 
						|
						resolver, | 
						|
						directory, | 
						|
						this.filenames, | 
						|
						resolveContext, | 
						|
						(err, result) => { | 
						|
							if (err) return callback(err); | 
						|
							if (!result) { | 
						|
								if (resolveContext.missing) { | 
						|
									this.filenames.forEach(filename => { | 
						|
										resolveContext.missing.add( | 
						|
											resolver.join(directory, filename) | 
						|
										); | 
						|
									}); | 
						|
								} | 
						|
								if (resolveContext.log) | 
						|
									resolveContext.log("No description file found"); | 
						|
								return callback(); | 
						|
							} | 
						|
							const relativePath = | 
						|
								"." + | 
						|
								request.path | 
						|
									.substr(result.directory.length) | 
						|
									.replace(/\\/g, "/"); | 
						|
							const obj = Object.assign({}, request, { | 
						|
								descriptionFilePath: result.path, | 
						|
								descriptionFileData: result.content, | 
						|
								descriptionFileRoot: result.directory, | 
						|
								relativePath: relativePath | 
						|
							}); | 
						|
							resolver.doResolve( | 
						|
								target, | 
						|
								obj, | 
						|
								"using description file: " + | 
						|
									result.path + | 
						|
									" (relative path: " + | 
						|
									relativePath + | 
						|
									")", | 
						|
								resolveContext, | 
						|
								(err, result) => { | 
						|
									if (err) return callback(err); | 
						|
 | 
						|
									// Don't allow other processing | 
						|
									if (result === undefined) return callback(null, null); | 
						|
									callback(null, result); | 
						|
								} | 
						|
							); | 
						|
						} | 
						|
					); | 
						|
				} | 
						|
			); | 
						|
	} | 
						|
};
 | 
						|
 |