aboutsummaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/ResolverFactory.js
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/webpack/lib/ResolverFactory.js
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/webpack/lib/ResolverFactory.js')
-rw-r--r--node_modules/webpack/lib/ResolverFactory.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/ResolverFactory.js b/node_modules/webpack/lib/ResolverFactory.js
new file mode 100644
index 00000000..47028ee7
--- /dev/null
+++ b/node_modules/webpack/lib/ResolverFactory.js
@@ -0,0 +1,64 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+ */
+"use strict";
+
+const { Tapable, HookMap, SyncHook, SyncWaterfallHook } = require("tapable");
+const Factory = require("enhanced-resolve").ResolverFactory;
+
+module.exports = class ResolverFactory extends Tapable {
+ constructor() {
+ super();
+ this.hooks = {
+ resolveOptions: new HookMap(
+ () => new SyncWaterfallHook(["resolveOptions"])
+ ),
+ resolver: new HookMap(() => new SyncHook(["resolver", "resolveOptions"]))
+ };
+ this._pluginCompat.tap("ResolverFactory", options => {
+ let match;
+ match = /^resolve-options (.+)$/.exec(options.name);
+ if (match) {
+ this.hooks.resolveOptions.tap(
+ match[1],
+ options.fn.name || "unnamed compat plugin",
+ options.fn
+ );
+ return true;
+ }
+ match = /^resolver (.+)$/.exec(options.name);
+ if (match) {
+ this.hooks.resolver.tap(
+ match[1],
+ options.fn.name || "unnamed compat plugin",
+ options.fn
+ );
+ return true;
+ }
+ });
+ this.cache1 = new WeakMap();
+ this.cache2 = new Map();
+ }
+
+ get(type, resolveOptions) {
+ const cachedResolver = this.cache1.get(resolveOptions);
+ if (cachedResolver) return cachedResolver();
+ const ident = `${type}|${JSON.stringify(resolveOptions)}`;
+ const resolver = this.cache2.get(ident);
+ if (resolver) return resolver;
+ const newResolver = this._create(type, resolveOptions);
+ this.cache2.set(ident, newResolver);
+ return newResolver;
+ }
+
+ _create(type, resolveOptions) {
+ resolveOptions = this.hooks.resolveOptions.for(type).call(resolveOptions);
+ const resolver = Factory.createResolver(resolveOptions);
+ if (!resolver) {
+ throw new Error("No resolver created");
+ }
+ this.hooks.resolver.for(type).call(resolver, resolveOptions);
+ return resolver;
+ }
+};