123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- const Cache = require("../Cache");
- /** @typedef {import("webpack-sources").Source} Source */
- /** @typedef {import("../Cache").Etag} Etag */
- /** @typedef {import("../Compiler")} Compiler */
- /** @typedef {import("../Module")} Module */
- class MemoryCachePlugin {
- /**
- * Apply the plugin
- * @param {Compiler} compiler the compiler instance
- * @returns {void}
- */
- apply(compiler) {
- /** @type {Map<string, { etag: Etag | null, data: any }>} */
- const cache = new Map();
- compiler.cache.hooks.store.tap(
- { name: "MemoryCachePlugin", stage: Cache.STAGE_MEMORY },
- (identifier, etag, data) => {
- cache.set(identifier, { etag, data });
- }
- );
- compiler.cache.hooks.get.tap(
- { name: "MemoryCachePlugin", stage: Cache.STAGE_MEMORY },
- (identifier, etag, gotHandlers) => {
- const cacheEntry = cache.get(identifier);
- if (cacheEntry === null) {
- return null;
- } else if (cacheEntry !== undefined) {
- return cacheEntry.etag === etag ? cacheEntry.data : null;
- }
- gotHandlers.push((result, callback) => {
- if (result === undefined) {
- cache.set(identifier, null);
- } else {
- cache.set(identifier, { etag, data: result });
- }
- return callback();
- });
- }
- );
- compiler.cache.hooks.shutdown.tap(
- { name: "MemoryCachePlugin", stage: Cache.STAGE_MEMORY },
- () => {
- cache.clear();
- }
- );
- }
- }
- module.exports = MemoryCachePlugin;
|