123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- "use strict";
- module.exports = class PnpPlugin {
-
- constructor(source, pnpApi, target, alternateTarget) {
- this.source = source;
- this.pnpApi = pnpApi;
- this.target = target;
- this.alternateTarget = alternateTarget;
- }
-
- apply(resolver) {
-
- const target = resolver.ensureHook(this.target);
- const alternateTarget = resolver.ensureHook(this.alternateTarget);
- resolver
- .getHook(this.source)
- .tapAsync("PnpPlugin", (request, resolveContext, callback) => {
- const req = request.request;
- if (!req) return callback();
-
- 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 (resolution === null) {
-
-
- resolver.doResolve(
- alternateTarget,
- request,
- "issuer is not managed by a pnpapi",
- resolveContext,
- (err, result) => {
- if (err) return callback(err);
- if (result) return callback(null, result);
-
- return callback(null, null);
- }
- );
- return;
- }
- if (resolveContext.fileDependencies) {
- apiResolution = this.pnpApi.resolveToUnqualified("pnpapi", issuer, {
- considerBuiltins: false
- });
- }
- } catch ( error) {
- if (
-
- (error).code === "MODULE_NOT_FOUND" &&
-
- (error).pnpCode === "UNDECLARED_DEPENDENCY"
- ) {
-
-
- 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);
-
- return callback(null, null);
- }
- );
- });
- }
- };
|