webpack/lib/HotUpdateChunkTemplate.js

41 lines
1.5 KiB
JavaScript
Raw Normal View History

/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
const Template = require("./Template");
2017-04-21 16:05:56 +08:00
const Chunk = require("./Chunk");
2017-12-07 16:42:33 +08:00
const Tapable = require("tapable").Tapable;
2017-11-29 01:43:01 +08:00
const SyncWaterfallHook = require("tapable").SyncWaterfallHook;
const SyncHook = require("tapable").SyncHook;
2017-12-07 16:42:33 +08:00
module.exports = class HotUpdateChunkTemplate extends Tapable {
constructor(outputOptions) {
2017-12-07 16:42:33 +08:00
super();
this.outputOptions = outputOptions || {};
2017-11-29 01:43:01 +08:00
this.hooks = {
modules: new SyncWaterfallHook(["source", "modules", "removedModules", "moduleTemplate", "dependencyTemplates"]),
render: new SyncWaterfallHook(["source", "modules", "removedModules", "hash", "id", "moduleTemplate", "dependencyTemplates"]),
hash: new SyncHook(["hash"]),
};
}
render(id, modules, removedModules, hash, moduleTemplate, dependencyTemplates) {
2017-04-21 16:05:56 +08:00
const hotUpdateChunk = new Chunk();
hotUpdateChunk.id = id;
hotUpdateChunk.setModules(modules);
hotUpdateChunk.removedModules = removedModules;
2017-12-07 16:42:33 +08:00
const modulesSource = Template.renderChunkModules(hotUpdateChunk, () => true, moduleTemplate, dependencyTemplates);
2017-11-29 01:43:01 +08:00
const core = this.hooks.modules.call(modulesSource, modules, removedModules, moduleTemplate, dependencyTemplates);
const source = this.hooks.render.call(core, modules, removedModules, hash, id, moduleTemplate, dependencyTemplates);
return source;
}
updateHash(hash) {
hash.update("HotUpdateChunkTemplate");
hash.update("1");
2017-11-29 01:43:01 +08:00
this.hooks.hash.call(hash);
}
};