summaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/cache/MemoryCachePlugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/webpack/lib/cache/MemoryCachePlugin.js')
-rw-r--r--node_modules/webpack/lib/cache/MemoryCachePlugin.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/cache/MemoryCachePlugin.js b/node_modules/webpack/lib/cache/MemoryCachePlugin.js
new file mode 100644
index 00000000..cec61acd
--- /dev/null
+++ b/node_modules/webpack/lib/cache/MemoryCachePlugin.js
@@ -0,0 +1,57 @@
+/*
+ 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;