pnp-webpack-plugin
Advanced tools
Comparing version 1.6.4 to 1.7.0
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", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
12840
9
235
14
1