diff --git a/lib/cache/ResolverCachePlugin.js b/lib/cache/ResolverCachePlugin.js index 413ed5004..50e33ffbc 100644 --- a/lib/cache/ResolverCachePlugin.js +++ b/lib/cache/ResolverCachePlugin.js @@ -6,6 +6,7 @@ "use strict"; const LazySet = require("../util/LazySet"); +const makeSerializable = require("../util/makeSerializable"); /** @typedef {import("enhanced-resolve/lib/Resolver")} Resolver */ /** @typedef {import("../Compiler")} Compiler */ @@ -13,14 +14,39 @@ const LazySet = require("../util/LazySet"); /** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */ /** @template T @typedef {import("../util/LazySet")} LazySet */ -/** - * @typedef {Object} CacheEntry - * @property {Object} result - * @property {LazySet} fileDependencies - * @property {LazySet} contextDependencies - * @property {LazySet} missingDependencies - * @property {Snapshot} snapshot - */ +class CacheEntry { + constructor( + result, + fileDependencies, + contextDependencies, + missingDependencies, + snapshot + ) { + this.result = result; + this.fileDependencies = fileDependencies; + this.contextDependencies = contextDependencies; + this.missingDependencies = missingDependencies; + this.snapshot = snapshot; + } + + serialize({ write }) { + write(this.result); + write(this.fileDependencies); + write(this.contextDependencies); + write(this.missingDependencies); + write(this.snapshot); + } + + deserialize({ read }) { + this.result = read(); + this.fileDependencies = read(); + this.contextDependencies = read(); + this.missingDependencies = read(); + this.snapshot = read(); + } +} + +makeSerializable(CacheEntry, "webpack/lib/cache/ResolverCachePlugin"); /** * @template T @@ -146,13 +172,13 @@ class ResolverCachePlugin { cache.store( identifier, null, - /** @type {CacheEntry} */ { + new CacheEntry( result, - fileDependencies: newResolveContext.fileDependencies, - contextDependencies: newResolveContext.contextDependencies, - missingDependencies: newResolveContext.missingDependencies, + newResolveContext.fileDependencies, + newResolveContext.contextDependencies, + newResolveContext.missingDependencies, snapshot - }, + ), storeErr => { if (storeErr) return callback(storeErr); if (result) return callback(null, result); diff --git a/lib/util/internalSerializables.js b/lib/util/internalSerializables.js index e5616f599..004d78235 100644 --- a/lib/util/internalSerializables.js +++ b/lib/util/internalSerializables.js @@ -16,6 +16,7 @@ module.exports = { ContextModule: () => require("../ContextModule"), "cache/PackFileCacheStrategy": () => require("../cache/PackFileCacheStrategy"), + "cache/ResolverCachePlugin": () => require("../cache/ResolverCachePlugin"), "dependencies/AMDDefineDependency": () => require("../dependencies/AMDDefineDependency"), "dependencies/AMDRequireArrayDependency": () =>