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'],
|
||||
});
|
||||
});
|
||||
|
||||
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 mainEntryPointImportPath: string;
|
||||
let secondaryEntryPointImportPaths: string[];
|
||||
let serverEntryPointImportPath: string;
|
||||
if (tree.exists(tsConfigPath)) {
|
||||
tsConfig = readJson(tree, tsConfigPath);
|
||||
const sourceRoot =
|
||||
@ -68,6 +69,19 @@ export function updateImports(
|
||||
!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(
|
||||
@ -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) {
|
||||
if (schema.updateImportPath && projectRef.to) {
|
||||
const replaceProjectRef = new RegExp(projectRef.from, 'g');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user