aboutsummaryrefslogtreecommitdiff
path: root/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js')
-rw-r--r--node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js b/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js
new file mode 100644
index 0000000..3c6337a
--- /dev/null
+++ b/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js
@@ -0,0 +1,67 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/** @typedef {import("./Resolver")} Resolver */
+/** @typedef {import("./Resolver").ResolveRequest} ResolveRequest */
+/** @typedef {import("./Resolver").ResolveStepHook} ResolveStepHook */
+/** @typedef {{[k: string]: any}} Cache */
+
+function getCacheId(request, withContext) {
+ return JSON.stringify({
+ context: withContext ? request.context : "",
+ path: request.path,
+ query: request.query,
+ fragment: request.fragment,
+ request: request.request
+ });
+}
+
+module.exports = class UnsafeCachePlugin {
+ /**
+ * @param {string | ResolveStepHook} source source
+ * @param {function(ResolveRequest): boolean} filterPredicate filterPredicate
+ * @param {Cache} cache cache
+ * @param {boolean} withContext withContext
+ * @param {string | ResolveStepHook} target target
+ */
+ constructor(source, filterPredicate, cache, withContext, target) {
+ this.source = source;
+ this.filterPredicate = filterPredicate;
+ this.withContext = withContext;
+ this.cache = cache;
+ this.target = target;
+ }
+
+ /**
+ * @param {Resolver} resolver the resolver
+ * @returns {void}
+ */
+ apply(resolver) {
+ const target = resolver.ensureHook(this.target);
+ resolver
+ .getHook(this.source)
+ .tapAsync("UnsafeCachePlugin", (request, resolveContext, callback) => {
+ if (!this.filterPredicate(request)) return callback();
+ const cacheId = getCacheId(request, this.withContext);
+ const cacheEntry = this.cache[cacheId];
+ if (cacheEntry) {
+ return callback(null, cacheEntry);
+ }
+ resolver.doResolve(
+ target,
+ request,
+ null,
+ resolveContext,
+ (err, result) => {
+ if (err) return callback(err);
+ if (result) return callback(null, (this.cache[cacheId] = result));
+ callback();
+ }
+ );
+ });
+ }
+};