|
|
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
-
- const { Tapable, SyncWaterfallHook, SyncHook } = require("tapable");
-
- /** @typedef {import("webpack-sources").Source} Source */
- /** @typedef {import("./Module")} Module */
-
- module.exports = class ModuleTemplate extends Tapable {
- constructor(runtimeTemplate, type) {
- super();
- this.runtimeTemplate = runtimeTemplate;
- this.type = type;
- this.hooks = {
- content: new SyncWaterfallHook([
- "source",
- "module",
- "options",
- "dependencyTemplates"
- ]),
- module: new SyncWaterfallHook([
- "source",
- "module",
- "options",
- "dependencyTemplates"
- ]),
- render: new SyncWaterfallHook([
- "source",
- "module",
- "options",
- "dependencyTemplates"
- ]),
- package: new SyncWaterfallHook([
- "source",
- "module",
- "options",
- "dependencyTemplates"
- ]),
- hash: new SyncHook(["hash"])
- };
- }
-
- /**
- * @param {Module} module the module
- * @param {TODO} dependencyTemplates templates for dependencies
- * @param {TODO} options render options
- * @returns {Source} the source
- */
- render(module, dependencyTemplates, options) {
- try {
- const moduleSource = module.source(
- dependencyTemplates,
- this.runtimeTemplate,
- this.type
- );
- const moduleSourcePostContent = this.hooks.content.call(
- moduleSource,
- module,
- options,
- dependencyTemplates
- );
- const moduleSourcePostModule = this.hooks.module.call(
- moduleSourcePostContent,
- module,
- options,
- dependencyTemplates
- );
- const moduleSourcePostRender = this.hooks.render.call(
- moduleSourcePostModule,
- module,
- options,
- dependencyTemplates
- );
- return this.hooks.package.call(
- moduleSourcePostRender,
- module,
- options,
- dependencyTemplates
- );
- } catch (e) {
- e.message = `${module.identifier()}\n${e.message}`;
- throw e;
- }
- }
-
- updateHash(hash) {
- hash.update("1");
- this.hooks.hash.call(hash);
- }
- };
|