aboutsummaryrefslogtreecommitdiff
path: root/node_modules/enhanced-resolve/lib/PnpPlugin.js
diff options
context:
space:
mode:
authorMinteck <nekostarfan@gmail.com>2021-08-24 14:41:48 +0200
committerMinteck <nekostarfan@gmail.com>2021-08-24 14:41:48 +0200
commitd25e11bee6ca5ca523884da132d18e1400e077b9 (patch)
tree8af39fde19f7ed640a60fb397c7edd647dff1c4c /node_modules/enhanced-resolve/lib/PnpPlugin.js
downloadkartik-iridium-d25e11bee6ca5ca523884da132d18e1400e077b9.tar.gz
kartik-iridium-d25e11bee6ca5ca523884da132d18e1400e077b9.tar.bz2
kartik-iridium-d25e11bee6ca5ca523884da132d18e1400e077b9.zip
Initial commit
Diffstat (limited to 'node_modules/enhanced-resolve/lib/PnpPlugin.js')
-rw-r--r--node_modules/enhanced-resolve/lib/PnpPlugin.js103
1 files changed, 103 insertions, 0 deletions
diff --git a/node_modules/enhanced-resolve/lib/PnpPlugin.js b/node_modules/enhanced-resolve/lib/PnpPlugin.js
new file mode 100644
index 0000000..cecb7dd
--- /dev/null
+++ b/node_modules/enhanced-resolve/lib/PnpPlugin.js
@@ -0,0 +1,103 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Maƫl Nison @arcanis
+*/
+
+"use strict";
+
+/** @typedef {import("./Resolver")} Resolver */
+/** @typedef {import("./Resolver").ResolveStepHook} ResolveStepHook */
+/**
+ * @typedef {Object} PnpApiImpl
+ * @property {function(string, string, object): string} resolveToUnqualified
+ */
+
+module.exports = class PnpPlugin {
+ /**
+ * @param {string | ResolveStepHook} source source
+ * @param {PnpApiImpl} pnpApi pnpApi
+ * @param {string | ResolveStepHook} target target
+ */
+ constructor(source, pnpApi, target) {
+ this.source = source;
+ this.pnpApi = pnpApi;
+ this.target = target;
+ }
+
+ /**
+ * @param {Resolver} resolver the resolver
+ * @returns {void}
+ */
+ apply(resolver) {
+ const target = resolver.ensureHook(this.target);
+ resolver
+ .getHook(this.source)
+ .tapAsync("PnpPlugin", (request, resolveContext, callback) => {
+ const req = request.request;
+ if (!req) return callback();
+
+ // The trailing slash indicates to PnP that this value is a folder rather than a file
+ const issuer = `${request.path}/`;
+
+ const packageMatch = /^(@[^/]+\/)?[^/]+/.exec(req);
+ if (!packageMatch) return callback();
+
+ const packageName = packageMatch[0];
+ const innerRequest = `.${req.slice(packageName.length)}`;
+
+ let resolution;
+ let apiResolution;
+ try {
+ resolution = this.pnpApi.resolveToUnqualified(packageName, issuer, {
+ considerBuiltins: false
+ });
+ if (resolveContext.fileDependencies) {
+ apiResolution = this.pnpApi.resolveToUnqualified("pnpapi", issuer, {
+ considerBuiltins: false
+ });
+ }
+ } catch (error) {
+ if (
+ error.code === "MODULE_NOT_FOUND" &&
+ error.pnpCode === "UNDECLARED_DEPENDENCY"
+ ) {
+ // This is not a PnP managed dependency.
+ // Try to continue resolving with our alternatives
+ if (resolveContext.log) {
+ resolveContext.log(`request is not managed by the pnpapi`);
+ for (const line of error.message.split("\n").filter(Boolean))
+ resolveContext.log(` ${line}`);
+ }
+ return callback();
+ }
+ return callback(error);
+ }
+
+ if (resolution === packageName) return callback();
+
+ if (apiResolution && resolveContext.fileDependencies) {
+ resolveContext.fileDependencies.add(apiResolution);
+ }
+
+ const obj = {
+ ...request,
+ path: resolution,
+ request: innerRequest,
+ ignoreSymlinks: true,
+ fullySpecified: request.fullySpecified && innerRequest !== "."
+ };
+ resolver.doResolve(
+ target,
+ obj,
+ `resolved by pnp to ${resolution}`,
+ resolveContext,
+ (err, result) => {
+ if (err) return callback(err);
+ if (result) return callback(null, result);
+ // Skip alternatives
+ return callback(null, null);
+ }
+ );
+ });
+ }
+};