Socket
Socket
Sign inDemoInstall

pnp-webpack-plugin

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pnp-webpack-plugin - npm Package Compare versions

Comparing version 1.6.4 to 1.7.0

resolver.js

147

index.js
const path = require(`path`);
const {resolveModuleName} = require(`ts-pnp`);
const {makeResolver} = require('./resolver');

@@ -8,5 +9,3 @@ function nothing() {

function getModuleLocator(module) {
const pnp = require(`pnpapi`);
function getModuleLocator(module, pnpapi) {
const moduleLocation = typeof module === `string`

@@ -19,3 +18,3 @@ ? module

const moduleLocator = pnp.findPackageLocator(moduleLocation);
const moduleLocator = pnpapi.findPackageLocator(moduleLocation);

@@ -28,6 +27,5 @@ if (!moduleLocator)

function getDependencyLocator(sourceLocator, name) {
const pnp = require(`pnpapi`);
function getDependencyLocator(sourceLocator, name, pnpapi) {
const {packageDependencies} = pnp.getPackageInformation(sourceLocator);
const {packageDependencies} = pnpapi.getPackageInformation(sourceLocator);
const reference = packageDependencies.get(name);

@@ -38,96 +36,4 @@

function getSourceLocation(sourceLocator) {
if (!sourceLocator)
return null;
const pnp = require(`pnpapi`);
const sourceInformation = pnp.getPackageInformation(sourceLocator);
if (!sourceInformation)
throw new Error(`Couldn't find the package to use as resolution source`);
if (!sourceInformation.packageLocation)
throw new Error(`The package to use as resolution source seem to not have been installed - maybe it's a devDependency not installed in prod?`);
return sourceInformation.packageLocation.replace(/\/?$/, `/`);
}
function makeResolver(sourceLocator, filter) {
const sourceLocation = getSourceLocation(sourceLocator);
return resolver => {
const BACKWARD_PATH = /^\.\.([\\\/]|$)/;
const resolvedHook = resolver.ensureHook(`resolve`);
// Prevents the SymlinkPlugin from kicking in. We need the symlinks to be preserved because that's how we deal with peer dependencies ambiguities.
resolver.getHook(`file`).intercept({
register: tapInfo => {
return tapInfo.name !== `SymlinkPlugin` ? tapInfo : Object.assign({}, tapInfo, {fn: (request, resolveContext, callback) => {
callback();
}});
}
});
resolver.getHook(`after-module`).tapAsync(`PnpResolver`, (request, resolveContext, callback) => {
// rethrow pnp errors if we have any for this request
return callback(resolveContext.pnpErrors && resolveContext.pnpErrors.get(request.context.issuer));
});
// Register a plugin that will resolve bare imports into the package location on the filesystem before leaving the rest of the resolution to Webpack
resolver.getHook(`before-module`).tapAsync(`PnpResolver`, (requestContext, resolveContext, callback) => {
const pnp = require(`pnpapi`);
let request = requestContext.request;
let issuer = requestContext.context.issuer;
// When using require.context, issuer seems to be false (cf https://github.com/webpack/webpack-dev-server/blob/d0725c98fb752d8c0b1e8c9067e526e22b5f5134/client-src/default/index.js#L94)
if (!issuer) {
issuer = `${requestContext.path}/`;
// We only support issuer when they're absolute paths. I'm not sure the opposite can ever happen, but better check here.
} else if (!path.isAbsolute(issuer)) {
throw new Error(`Cannot successfully resolve this dependency - issuer not supported (${issuer})`);
}
if (filter) {
const relative = path.relative(filter, issuer);
if (path.isAbsolute(relative) || BACKWARD_PATH.test(relative)) {
return callback(null);
}
}
let resolutionIssuer = sourceLocation || issuer;
let resolution;
try {
resolution = pnp.resolveToUnqualified(request, resolutionIssuer, {considerBuiltins: false});
} catch (error) {
if (resolveContext.missingDependencies)
resolveContext.missingDependencies.add(requestContext.path);
if (resolveContext.log)
resolveContext.log(error.message);
resolveContext.pnpErrors = resolveContext.pnpErrors || new Map();
resolveContext.pnpErrors.set(issuer, error);
return callback();
}
resolver.doResolve(
resolvedHook,
Object.assign({}, requestContext, {
request: resolution,
}),
null,
resolveContext,
callback
);
});
};
}
module.exports = process.versions.pnp ? {
apply: makeResolver(null),
apply: makeResolver({pnpapi: require(`pnpapi`)}),
} : {

@@ -138,3 +44,3 @@ apply: nothing,

module.exports.makePlugin = (locator, filter) => process.versions.pnp ? {
apply: makeResolver(locator, filter),
apply: makeResolver({sourceLocator: locator, filter, pnpapi: require(`pnpapi`)}),
} : {

@@ -144,10 +50,19 @@ apply: nothing,

module.exports.moduleLoader = module => process.versions.pnp ? {
apply: makeResolver(getModuleLocator(module)),
} : {
apply: nothing,
module.exports.moduleLoader = (module) => {
if (process.versions.pnp) {
const pnpapi = require(`pnpapi`);
return {
apply: makeResolver({
sourceLocator: getModuleLocator(module, pnpapi),
pnpapi,
}),
};
}
return {
apply: nothing,
};
};
module.exports.topLevelLoader = process.versions.pnp ? {
apply: makeResolver({name: null, reference: null}),
apply: makeResolver({sourceLocator: {name: null, reference: null}, pnpapi: require(`pnpapi`)}),
} : {

@@ -157,6 +72,18 @@ apply: nothing,

module.exports.bind = (filter, module, dependency) => process.versions.pnp ? {
apply: makeResolver(dependency ? getDependencyLocator(getModuleLocator(module), dependency) : getModuleLocator(module), filter),
} : {
apply: nothing,
module.exports.bind = (filter, module, dependency) => {
if (process.versions.pnp) {
const pnpapi = require(`pnpapi`);
return {
apply: makeResolver({
sourceLocator: dependency
? getDependencyLocator(getModuleLocator(module, pnpapi), dependency, pnpapi)
: getModuleLocator(module, pnpapi),
filter,
pnpapi,
}),
};
}
return {
apply: nothing,
};
};

@@ -163,0 +90,0 @@

{
"name": "pnp-webpack-plugin",
"version": "1.6.4",
"version": "1.7.0",
"description": "plug'n'play resolver for Webpack",

@@ -5,0 +5,0 @@ "license": "MIT",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc