| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | 
							- /*
 
-  MIT License http://www.opensource.org/licenses/mit-license.php
 
-  Author Joel Denning @joeldenning
 
-  */
 
- "use strict";
 
- const { ConcatSource } = require("webpack-sources");
 
- const Template = require("./Template");
 
- /** @typedef {import("./Compilation")} Compilation */
 
- /**
 
-  * @typedef {Object} SystemMainTemplatePluginOptions
 
-  * @param {string=} name the library name
 
-  */
 
- class SystemMainTemplatePlugin {
 
- 	/**
 
- 	 * @param {SystemMainTemplatePluginOptions} options the plugin options
 
- 	 */
 
- 	constructor(options) {
 
- 		this.name = options.name;
 
- 	}
 
- 	/**
 
- 	 * @param {Compilation} compilation the compilation instance
 
- 	 * @returns {void}
 
- 	 */
 
- 	apply(compilation) {
 
- 		const { mainTemplate, chunkTemplate } = compilation;
 
- 		const onRenderWithEntry = (source, chunk, hash) => {
 
- 			const externals = chunk
 
- 				.getModules()
 
- 				.filter(m => m.external && m.externalType === "system");
 
- 			// The name this bundle should be registered as with System
 
- 			const name = this.name
 
- 				? `${JSON.stringify(
 
- 						mainTemplate.getAssetPath(this.name, { hash, chunk })
 
- 				  )}, `
 
- 				: "";
 
- 			// The array of dependencies that are external to webpack and will be provided by System
 
- 			const systemDependencies = JSON.stringify(
 
- 				externals.map(m =>
 
- 					typeof m.request === "object" ? m.request.amd : m.request
 
- 				)
 
- 			);
 
- 			// The name of the variable provided by System for exporting
 
- 			const dynamicExport = "__WEBPACK_DYNAMIC_EXPORT__";
 
- 			// An array of the internal variable names for the webpack externals
 
- 			const externalWebpackNames = externals.map(
 
- 				m => `__WEBPACK_EXTERNAL_MODULE_${Template.toIdentifier(`${m.id}`)}__`
 
- 			);
 
- 			// Declaring variables for the internal variable names for the webpack externals
 
- 			const externalVarDeclarations =
 
- 				externalWebpackNames.length > 0
 
- 					? `var ${externalWebpackNames.join(", ")};`
 
- 					: "";
 
- 			// The system.register format requires an array of setter functions for externals.
 
- 			const setters =
 
- 				externalWebpackNames.length === 0
 
- 					? ""
 
- 					: Template.asString([
 
- 							"setters: [",
 
- 							Template.indent(
 
- 								externalWebpackNames
 
- 									.map(external =>
 
- 										Template.asString([
 
- 											"function(module) {",
 
- 											Template.indent(`${external} = module;`),
 
- 											"}"
 
- 										])
 
- 									)
 
- 									.join(",\n")
 
- 							),
 
- 							"],"
 
- 					  ]);
 
- 			return new ConcatSource(
 
- 				Template.asString([
 
- 					`System.register(${name}${systemDependencies}, function(${dynamicExport}) {`,
 
- 					Template.indent([
 
- 						externalVarDeclarations,
 
- 						"return {",
 
- 						Template.indent([
 
- 							setters,
 
- 							"execute: function() {",
 
- 							Template.indent(`${dynamicExport}(`)
 
- 						])
 
- 					])
 
- 				]) + "\n",
 
- 				source,
 
- 				"\n" +
 
- 					Template.asString([
 
- 						Template.indent([
 
- 							Template.indent([Template.indent([");"]), "}"]),
 
- 							"};"
 
- 						]),
 
- 						"})"
 
- 					])
 
- 			);
 
- 		};
 
- 		for (const template of [mainTemplate, chunkTemplate]) {
 
- 			template.hooks.renderWithEntry.tap(
 
- 				"SystemMainTemplatePlugin",
 
- 				onRenderWithEntry
 
- 			);
 
- 		}
 
- 		mainTemplate.hooks.globalHashPaths.tap(
 
- 			"SystemMainTemplatePlugin",
 
- 			paths => {
 
- 				if (this.name) {
 
- 					paths.push(this.name);
 
- 				}
 
- 				return paths;
 
- 			}
 
- 		);
 
- 		mainTemplate.hooks.hash.tap("SystemMainTemplatePlugin", hash => {
 
- 			hash.update("exports system");
 
- 			if (this.name) {
 
- 				hash.update(this.name);
 
- 			}
 
- 		});
 
- 	}
 
- }
 
- module.exports = SystemMainTemplatePlugin;
 
 
  |