fix(js): detect helpers correctly when pnpm external nodes are suffixed with version (#17694)
This commit is contained in:
parent
99265e404b
commit
335c2d5160
@ -133,12 +133,9 @@ describe('js e2e', () => {
|
||||
|
||||
const rootPackageJson = readJson(`package.json`);
|
||||
|
||||
expect(
|
||||
satisfies(
|
||||
readJson(`dist/libs/${lib}/package.json`).peerDependencies.tslib,
|
||||
rootPackageJson.dependencies.tslib
|
||||
)
|
||||
).toBeTruthy();
|
||||
expect(readJson(`dist/libs/${lib}/package.json`)).toHaveProperty(
|
||||
'peerDependencies.tslib'
|
||||
);
|
||||
|
||||
updateJson(`libs/${lib}/tsconfig.json`, (json) => {
|
||||
json.compilerOptions = { ...json.compilerOptions, importHelpers: false };
|
||||
|
||||
44
packages/js/src/utils/compiler-helper-dependency.spec.ts
Normal file
44
packages/js/src/utils/compiler-helper-dependency.spec.ts
Normal file
@ -0,0 +1,44 @@
|
||||
import {
|
||||
getHelperDependency,
|
||||
HelperDependency,
|
||||
} from './compiler-helper-dependency';
|
||||
import { join } from 'path';
|
||||
|
||||
describe('getHelperDependency', () => {
|
||||
it('should support pnpm external nodes where the name is suffixed with the version', () => {
|
||||
const helperDependency = HelperDependency.tsc;
|
||||
const configPath = join(__dirname, 'test-fixtures', 'tsconfig.json');
|
||||
const dependencies = [];
|
||||
const projectGraph = {
|
||||
nodes: {},
|
||||
externalNodes: {
|
||||
'tslib@2.0.0': {
|
||||
name: 'npm:tslib@2.0.0' as const,
|
||||
type: 'npm' as const,
|
||||
data: {
|
||||
packageName: 'tslib',
|
||||
version: '2.0.0',
|
||||
},
|
||||
},
|
||||
},
|
||||
dependencies: {},
|
||||
};
|
||||
|
||||
const result = getHelperDependency(
|
||||
helperDependency,
|
||||
configPath,
|
||||
dependencies,
|
||||
projectGraph
|
||||
);
|
||||
|
||||
expect(result).toEqual({
|
||||
name: 'npm:tslib',
|
||||
outputs: [],
|
||||
node: {
|
||||
name: 'npm:tslib@2.0.0',
|
||||
type: 'npm',
|
||||
data: { packageName: 'tslib', version: '2.0.0' },
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -1,7 +1,8 @@
|
||||
import {
|
||||
logger,
|
||||
ProjectGraph,
|
||||
ProjectGraphDependency,
|
||||
type ProjectGraph,
|
||||
type ProjectGraphDependency,
|
||||
type ProjectGraphExternalNode,
|
||||
readJsonFile,
|
||||
} from '@nx/devkit';
|
||||
import { DependentBuildableProjectNode } from './buildable-libs-utils';
|
||||
@ -38,6 +39,7 @@ const jsExecutors = {
|
||||
* @param {HelperDependency} helperDependency
|
||||
* @param {string} configPath
|
||||
* @param {DependentBuildableProjectNode[]} dependencies
|
||||
* @param {ProjectGraph} projectGraph
|
||||
* @param {boolean=false} returnDependencyIfFound
|
||||
*/
|
||||
export function getHelperDependency(
|
||||
@ -71,7 +73,18 @@ export function getHelperDependency(
|
||||
|
||||
if (!isHelperNeeded) return null;
|
||||
|
||||
const libNode = projectGraph.externalNodes[helperDependency];
|
||||
let libNode: ProjectGraphExternalNode | null = projectGraph[helperDependency];
|
||||
|
||||
// If libNode is not found due to the version suffix from pnpm lockfile, try to match it by package name.
|
||||
if (!libNode) {
|
||||
for (const nodeName of Object.keys(projectGraph.externalNodes)) {
|
||||
const node = projectGraph.externalNodes[nodeName];
|
||||
if (`npm:${node.data.packageName}` === helperDependency) {
|
||||
libNode = node;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!libNode) {
|
||||
logger.warn(
|
||||
|
||||
5
packages/js/src/utils/test-fixtures/tsconfig.json
Normal file
5
packages/js/src/utils/test-fixtures/tsconfig.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"importHelpers": true
|
||||
}
|
||||
}
|
||||
@ -9,7 +9,7 @@
|
||||
"exclude": [
|
||||
"**/*.spec.ts",
|
||||
"**/*.test.ts",
|
||||
"./src/utils/typescript/test-fixtures/**/*.ts",
|
||||
"./src/**/test-fixtures/**/*",
|
||||
"jest.config.ts"
|
||||
],
|
||||
"include": ["**/*.ts"]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user