64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
						|
	Author Tobias Koppers @sokra
 | 
						|
*/
 | 
						|
"use strict";
 | 
						|
 | 
						|
const path = require("path");
 | 
						|
const asyncLib = require("async");
 | 
						|
 | 
						|
class LibManifestPlugin {
 | 
						|
	constructor(options) {
 | 
						|
		this.options = options;
 | 
						|
	}
 | 
						|
 | 
						|
	apply(compiler) {
 | 
						|
		compiler.plugin("emit", (compilation, callback) => {
 | 
						|
			asyncLib.forEach(compilation.chunks, (chunk, callback) => {
 | 
						|
				if(!chunk.isInitial()) {
 | 
						|
					callback();
 | 
						|
					return;
 | 
						|
				}
 | 
						|
				const targetPath = compilation.getPath(this.options.path, {
 | 
						|
					hash: compilation.hash,
 | 
						|
					chunk
 | 
						|
				});
 | 
						|
				const name = this.options.name && compilation.getPath(this.options.name, {
 | 
						|
					hash: compilation.hash,
 | 
						|
					chunk
 | 
						|
				});
 | 
						|
				const manifest = {
 | 
						|
					name,
 | 
						|
					type: this.options.type,
 | 
						|
					content: chunk.mapModules(module => {
 | 
						|
						if(module.libIdent) {
 | 
						|
							const ident = module.libIdent({
 | 
						|
								context: this.options.context || compiler.options.context
 | 
						|
							});
 | 
						|
							if(ident) {
 | 
						|
								return {
 | 
						|
									ident,
 | 
						|
									data: {
 | 
						|
										id: module.id,
 | 
						|
										meta: module.meta,
 | 
						|
										exports: Array.isArray(module.providedExports) ? module.providedExports : undefined
 | 
						|
									}
 | 
						|
								};
 | 
						|
							}
 | 
						|
						}
 | 
						|
					}).filter(Boolean).reduce((obj, item) => {
 | 
						|
						obj[item.ident] = item.data;
 | 
						|
						return obj;
 | 
						|
					}, Object.create(null))
 | 
						|
				};
 | 
						|
				const content = new Buffer(JSON.stringify(manifest), "utf8"); //eslint-disable-line
 | 
						|
				compiler.outputFileSystem.mkdirp(path.dirname(targetPath), err => {
 | 
						|
					if(err) return callback(err);
 | 
						|
					compiler.outputFileSystem.writeFile(targetPath, content, callback);
 | 
						|
				});
 | 
						|
			}, callback);
 | 
						|
		});
 | 
						|
	}
 | 
						|
}
 | 
						|
module.exports = LibManifestPlugin;
 |