Skip to content

Commit 86d2416

Browse files
committedMar 18, 2025·
fix(@schematics/angular): add @angular/ssr dependency only when provideServerRendering import has been updated
Prior to this commit, the dependency was always added.
1 parent b66d36b commit 86d2416

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed
 

‎packages/schematics/angular/migrations/replace-provide-server-rendering-import/migration.ts

+12-6
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,7 @@ function* visit(directory: DirEntry): IterableIterator<[fileName: string, conten
3939

4040
export default function (): Rule {
4141
return async (tree) => {
42-
addPackageJsonDependency(tree, {
43-
name: '@angular/ssr',
44-
version: latestVersions.AngularSSR,
45-
type: NodeDependencyType.Default,
46-
overwrite: false,
47-
});
42+
let angularSSRAdded = false;
4843

4944
for (const [filePath, content] of visit(tree.root)) {
5045
let updatedContent = content;
@@ -104,6 +99,17 @@ export default function (): Rule {
10499

105100
if (content !== updatedContent) {
106101
tree.overwrite(filePath, updatedContent);
102+
103+
if (!angularSSRAdded) {
104+
addPackageJsonDependency(tree, {
105+
name: '@angular/ssr',
106+
version: latestVersions.AngularSSR,
107+
type: NodeDependencyType.Default,
108+
overwrite: false,
109+
});
110+
111+
angularSSRAdded = true;
112+
}
107113
}
108114
}
109115
};

‎packages/schematics/angular/migrations/replace-provide-server-rendering-import/migration_spec.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ describe(`Migration to use the 'provideServerRendering' from '@angular/ssr'`, ()
2323
tree.create(
2424
'/package.json',
2525
JSON.stringify({
26-
dependencies: {
27-
'@angular/ssr': '0.0.0',
28-
},
26+
dependencies: {},
2927
}),
3028
);
3129
});
@@ -72,4 +70,22 @@ describe(`Migration to use the 'provideServerRendering' from '@angular/ssr'`, ()
7270
);
7371
expect(content.match(/@angular\/ssr/g) || []).toHaveSize(1);
7472
});
73+
74+
it(`should add '@angular/ssr' when import has been changed`, async () => {
75+
tree.create('test.ts', `import { provideServerRendering } from '@angular/platform-server';`);
76+
const newTree = await schematicRunner.runSchematic(schematicName, {}, tree);
77+
const { dependencies } = newTree.readJson('package.json') as {
78+
dependencies: Record<string, string>;
79+
};
80+
expect(dependencies['@angular/ssr']).toBeDefined();
81+
});
82+
83+
it(`should not add '@angular/ssr' dependency if no imports have been updated`, async () => {
84+
tree.create('test.ts', `import { provideClientHydration } from '@angular/platform-browser';`);
85+
const newTree = await schematicRunner.runSchematic(schematicName, {}, tree);
86+
const { dependencies } = newTree.readJson('package.json') as {
87+
dependencies: Record<string, string>;
88+
};
89+
expect(dependencies['@angular/ssr']).toBeUndefined();
90+
});
7591
});

0 commit comments

Comments
 (0)
Please sign in to comment.