fix(nextjs): Moving a library using @nx/workspace:move should update … (#23311)
## Current When you using `@nx/workspace:move` after create a Next.js library the server path remains unchanged. ## Expected The server path is changed as well as the main entry point for the library path. Fixes: #20821
This commit is contained in:
parent
61255ce540
commit
d879279fc1
@ -493,4 +493,41 @@ export MyExtendedClass extends MyClass {};`
|
|||||||
'@proj/my-source': ['my-destination/src/index.ts'],
|
'@proj/my-source': ['my-destination/src/index.ts'],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should update project ref in the root tsconfig file if it contains a secondary entry point for Next.js's server", async () => {
|
||||||
|
await libraryGenerator(tree, {
|
||||||
|
name: 'my-source',
|
||||||
|
projectNameAndRootFormat: 'as-provided',
|
||||||
|
});
|
||||||
|
|
||||||
|
tree.write('my-source/src/server.ts', '');
|
||||||
|
|
||||||
|
updateJson(tree, '/tsconfig.base.json', (json) => {
|
||||||
|
json.compilerOptions.paths['@proj/my-source/server'] = [
|
||||||
|
'my-source/src/server.ts',
|
||||||
|
];
|
||||||
|
return json;
|
||||||
|
});
|
||||||
|
|
||||||
|
const projectConfig = readProjectConfiguration(tree, 'my-source');
|
||||||
|
updateImports(
|
||||||
|
tree,
|
||||||
|
await normalizeSchema(
|
||||||
|
tree,
|
||||||
|
{
|
||||||
|
...schema,
|
||||||
|
updateImportPath: false,
|
||||||
|
},
|
||||||
|
projectConfig
|
||||||
|
),
|
||||||
|
|
||||||
|
projectConfig
|
||||||
|
);
|
||||||
|
|
||||||
|
const tsConfig = readJson(tree, '/tsconfig.base.json');
|
||||||
|
expect(tsConfig.compilerOptions.paths).toEqual({
|
||||||
|
'@proj/my-source': ['my-destination/src/index.ts'],
|
||||||
|
'@proj/my-source/server': ['my-destination/src/server.ts'],
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -47,6 +47,7 @@ export function updateImports(
|
|||||||
let tsConfig: any;
|
let tsConfig: any;
|
||||||
let mainEntryPointImportPath: string;
|
let mainEntryPointImportPath: string;
|
||||||
let secondaryEntryPointImportPaths: string[];
|
let secondaryEntryPointImportPaths: string[];
|
||||||
|
let serverEntryPointImportPath: string;
|
||||||
if (tree.exists(tsConfigPath)) {
|
if (tree.exists(tsConfigPath)) {
|
||||||
tsConfig = readJson(tree, tsConfigPath);
|
tsConfig = readJson(tree, tsConfigPath);
|
||||||
const sourceRoot =
|
const sourceRoot =
|
||||||
@ -68,6 +69,19 @@ export function updateImports(
|
|||||||
!x.startsWith(ensureTrailingSlash(sourceRoot))
|
!x.startsWith(ensureTrailingSlash(sourceRoot))
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Next.js libs have a custom path for the server we need to update that as well
|
||||||
|
// example "paths": { @acme/lib/server : ['libs/lib/src/server.ts'] }
|
||||||
|
serverEntryPointImportPath = Object.keys(
|
||||||
|
tsConfig.compilerOptions?.paths ?? {}
|
||||||
|
).find((path) =>
|
||||||
|
tsConfig.compilerOptions.paths[path].some(
|
||||||
|
(x) =>
|
||||||
|
x.startsWith(ensureTrailingSlash(sourceRoot)) &&
|
||||||
|
x.includes('server') &&
|
||||||
|
path.endsWith('server')
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
mainEntryPointImportPath ??= normalizePathSlashes(
|
mainEntryPointImportPath ??= normalizePathSlashes(
|
||||||
@ -94,6 +108,20 @@ export function updateImports(
|
|||||||
})),
|
})),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if (
|
||||||
|
serverEntryPointImportPath &&
|
||||||
|
schema.importPath &&
|
||||||
|
serverEntryPointImportPath.startsWith(mainEntryPointImportPath)
|
||||||
|
) {
|
||||||
|
projectRefs.push({
|
||||||
|
from: serverEntryPointImportPath,
|
||||||
|
to: serverEntryPointImportPath.replace(
|
||||||
|
mainEntryPointImportPath,
|
||||||
|
schema.importPath
|
||||||
|
),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
for (const projectRef of projectRefs) {
|
for (const projectRef of projectRefs) {
|
||||||
if (schema.updateImportPath && projectRef.to) {
|
if (schema.updateImportPath && projectRef.to) {
|
||||||
const replaceProjectRef = new RegExp(projectRef.from, 'g');
|
const replaceProjectRef = new RegExp(projectRef.from, 'g');
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user