simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

HarmonyModulesPlugin.js (4071B)


      1 /*
      2 	MIT License http://www.opensource.org/licenses/mit-license.php
      3 	Author Tobias Koppers @sokra
      4 */
      5 
      6 "use strict";
      7 
      8 const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
      9 const HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
     10 const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency");
     11 const HarmonyExportExpressionDependency = require("./HarmonyExportExpressionDependency");
     12 const HarmonyExportHeaderDependency = require("./HarmonyExportHeaderDependency");
     13 const HarmonyExportImportedSpecifierDependency = require("./HarmonyExportImportedSpecifierDependency");
     14 const HarmonyExportSpecifierDependency = require("./HarmonyExportSpecifierDependency");
     15 const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
     16 const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
     17 
     18 const HarmonyDetectionParserPlugin = require("./HarmonyDetectionParserPlugin");
     19 const HarmonyExportDependencyParserPlugin = require("./HarmonyExportDependencyParserPlugin");
     20 const HarmonyImportDependencyParserPlugin = require("./HarmonyImportDependencyParserPlugin");
     21 const HarmonyTopLevelThisParserPlugin = require("./HarmonyTopLevelThisParserPlugin");
     22 
     23 /** @typedef {import("../Compiler")} Compiler */
     24 
     25 class HarmonyModulesPlugin {
     26 	constructor(options) {
     27 		this.options = options;
     28 	}
     29 
     30 	/**
     31 	 * Apply the plugin
     32 	 * @param {Compiler} compiler the compiler instance
     33 	 * @returns {void}
     34 	 */
     35 	apply(compiler) {
     36 		compiler.hooks.compilation.tap(
     37 			"HarmonyModulesPlugin",
     38 			(compilation, { normalModuleFactory }) => {
     39 				compilation.dependencyTemplates.set(
     40 					HarmonyCompatibilityDependency,
     41 					new HarmonyCompatibilityDependency.Template()
     42 				);
     43 
     44 				compilation.dependencyFactories.set(
     45 					HarmonyImportSideEffectDependency,
     46 					normalModuleFactory
     47 				);
     48 				compilation.dependencyTemplates.set(
     49 					HarmonyImportSideEffectDependency,
     50 					new HarmonyImportSideEffectDependency.Template()
     51 				);
     52 
     53 				compilation.dependencyFactories.set(
     54 					HarmonyImportSpecifierDependency,
     55 					normalModuleFactory
     56 				);
     57 				compilation.dependencyTemplates.set(
     58 					HarmonyImportSpecifierDependency,
     59 					new HarmonyImportSpecifierDependency.Template()
     60 				);
     61 
     62 				compilation.dependencyTemplates.set(
     63 					HarmonyExportHeaderDependency,
     64 					new HarmonyExportHeaderDependency.Template()
     65 				);
     66 
     67 				compilation.dependencyTemplates.set(
     68 					HarmonyExportExpressionDependency,
     69 					new HarmonyExportExpressionDependency.Template()
     70 				);
     71 
     72 				compilation.dependencyTemplates.set(
     73 					HarmonyExportSpecifierDependency,
     74 					new HarmonyExportSpecifierDependency.Template()
     75 				);
     76 
     77 				compilation.dependencyFactories.set(
     78 					HarmonyExportImportedSpecifierDependency,
     79 					normalModuleFactory
     80 				);
     81 				compilation.dependencyTemplates.set(
     82 					HarmonyExportImportedSpecifierDependency,
     83 					new HarmonyExportImportedSpecifierDependency.Template()
     84 				);
     85 
     86 				compilation.dependencyTemplates.set(
     87 					HarmonyAcceptDependency,
     88 					new HarmonyAcceptDependency.Template()
     89 				);
     90 
     91 				compilation.dependencyFactories.set(
     92 					HarmonyAcceptImportDependency,
     93 					normalModuleFactory
     94 				);
     95 				compilation.dependencyTemplates.set(
     96 					HarmonyAcceptImportDependency,
     97 					new HarmonyAcceptImportDependency.Template()
     98 				);
     99 
    100 				const handler = (parser, parserOptions) => {
    101 					// TODO webpack 6: rename harmony to esm or module
    102 					if (parserOptions.harmony !== undefined && !parserOptions.harmony)
    103 						return;
    104 
    105 					new HarmonyDetectionParserPlugin(this.options).apply(parser);
    106 					new HarmonyImportDependencyParserPlugin(parserOptions).apply(parser);
    107 					new HarmonyExportDependencyParserPlugin(parserOptions).apply(parser);
    108 					new HarmonyTopLevelThisParserPlugin().apply(parser);
    109 				};
    110 
    111 				normalModuleFactory.hooks.parser
    112 					.for("javascript/auto")
    113 					.tap("HarmonyModulesPlugin", handler);
    114 				normalModuleFactory.hooks.parser
    115 					.for("javascript/esm")
    116 					.tap("HarmonyModulesPlugin", handler);
    117 			}
    118 		);
    119 	}
    120 }
    121 module.exports = HarmonyModulesPlugin;