Skip to content

Commit f631c29

Browse files
committed
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 f631c29

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

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

Lines changed: 12 additions & 6 deletions
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

Lines changed: 23 additions & 3 deletions
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
});
@@ -39,6 +37,10 @@ describe(`Migration to use the 'provideServerRendering' from '@angular/ssr'`, ()
3937
const content = newTree.readContent('test.ts');
4038
expect(content).toContain("import { provideServerRendering } from '@angular/ssr';");
4139
expect(content).toContain("import { otherFunction } from '@angular/platform-server';");
40+
const { dependencies } = newTree.readJson('package.json') as {
41+
dependencies: Record<string, string>;
42+
};
43+
expect(dependencies['@angular/ssr']).toBeDefined();
4244
});
4345

4446
it('should not replace provideServerRendering that is imported from @angular/ssr', async () => {
@@ -72,4 +74,22 @@ describe(`Migration to use the 'provideServerRendering' from '@angular/ssr'`, ()
7274
);
7375
expect(content.match(/@angular\/ssr/g) || []).toHaveSize(1);
7476
});
77+
78+
it(`should add '@angular/ssr' when import has been changed`, async () => {
79+
tree.create('test.ts', `import { provideServerRendering } from '@angular/platform-server';`);
80+
const newTree = await schematicRunner.runSchematic(schematicName, {}, tree);
81+
const { dependencies } = newTree.readJson('package.json') as {
82+
dependencies: Record<string, string>;
83+
};
84+
expect(dependencies['@angular/ssr']).toBeDefined();
85+
});
86+
87+
it(`should not add '@angular/ssr' dependency if no imports have been updated`, async () => {
88+
tree.create('test.ts', `import { provideClientHydration } from '@angular/platform-browser';`);
89+
const newTree = await schematicRunner.runSchematic(schematicName, {}, tree);
90+
const { dependencies } = newTree.readJson('package.json') as {
91+
dependencies: Record<string, string>;
92+
};
93+
expect(dependencies['@angular/ssr']).toBeUndefined();
94+
});
7595
});

0 commit comments

Comments
 (0)