123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
-
- /** @typedef {import("./NormalModule")} NormalModule */
- /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
- /** @typedef {import("webpack-sources").Source} Source */
- /** @typedef {import("./Dependency").DependencyTemplate} DependencyTemplate */
-
- /**
- *
- */
- class Generator {
- static byType(map) {
- return new ByTypeGenerator(map);
- }
-
- /**
- * @abstract
- * @param {NormalModule} module module for which the code should be generated
- * @param {Map<Function, DependencyTemplate>} dependencyTemplates mapping from dependencies to templates
- * @param {RuntimeTemplate} runtimeTemplate the runtime template
- * @param {string} type which kind of code should be generated
- * @returns {Source} generated code
- */
- generate(module, dependencyTemplates, runtimeTemplate, type) {
- throw new Error("Generator.generate: must be overridden");
- }
- }
-
- class ByTypeGenerator extends Generator {
- constructor(map) {
- super();
- this.map = map;
- }
-
- /**
- * @param {NormalModule} module module for which the code should be generated
- * @param {Map<Function, DependencyTemplate>} dependencyTemplates mapping from dependencies to templates
- * @param {RuntimeTemplate} runtimeTemplate the runtime template
- * @param {string} type which kind of code should be generated
- * @returns {Source} generated code
- */
- generate(module, dependencyTemplates, runtimeTemplate, type) {
- const generator = this.map[type];
- if (!generator) {
- throw new Error(`Generator.byType: no generator specified for ${type}`);
- }
- return generator.generate(
- module,
- dependencyTemplates,
- runtimeTemplate,
- type
- );
- }
- }
-
- module.exports = Generator;
|