Skip to content

Commit 745670f

Browse files
alan-agius4mgechev
authored andcommitted
feat(@schematics/angular): remove dependency on tsickle (#15603)
With this change we remove the requirement to add tsickle as a dependency when having a workspace library. Since the CTOR downlevel transformer which was previously provided via tsickle is now in ng-packagr version 5.5.1+ We migrate existing libraries to remove the need for tsickle.
1 parent 643ff77 commit 745670f

File tree

8 files changed

+141
-10
lines changed

8 files changed

+141
-10
lines changed

packages/schematics/angular/library/files/tsconfig.lib.json.template

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
]
1313
},
1414
"angularCompilerOptions": {
15-
"annotateForClosureCompiler": true,
1615
"skipTemplateCodegen": true,
1716
"strictMetadataEmit": true,
1817
"enableResourceInlining": true

packages/schematics/angular/library/index.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,6 @@ function addDependenciesToPackageJson() {
103103
name: 'ng-packagr',
104104
version: latestVersions.ngPackagr,
105105
},
106-
{
107-
type: NodeDependencyType.Dev,
108-
name: 'tsickle',
109-
version: latestVersions.tsickle,
110-
},
111106
{
112107
type: NodeDependencyType.Default,
113108
name: 'tslib',

packages/schematics/angular/migrations/update-8/update-dependencies.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export function updateDependencies() {
1717
'@angular-devkit/build-ng-packagr': latestVersions.DevkitBuildNgPackagr,
1818
'@angular-devkit/build-webpack': latestVersions.DevkitBuildWebpack,
1919
'zone.js': latestVersions.ZoneJs,
20-
tsickle: latestVersions.tsickle,
20+
tsickle: '^0.37.0',
2121
'ng-packagr': latestVersions.ngPackagr,
2222
'web-animations-js': '^2.3.2',
2323
};

packages/schematics/angular/migrations/update-9/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { Rule, chain } from '@angular-devkit/schematics';
1010
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
1111
import { updateLibraries } from './ivy-libraries';
1212
import { updateNGSWConfig } from './ngsw-config';
13+
import { removeTsickle } from './remove-tsickle';
1314
import { updateApplicationTsConfigs } from './update-app-tsconfigs';
1415
import { updateDependencies } from './update-dependencies';
1516
import { updateServerMainFile } from './update-server-main-file';
@@ -24,6 +25,7 @@ export default function(): Rule {
2425
updateApplicationTsConfigs(),
2526
updateDependencies(),
2627
updateServerMainFile(),
28+
removeTsickle(),
2729
(tree, context) => {
2830
const packageChanges = tree.actions.some(a => a.path.endsWith('/package.json'));
2931
if (packageChanges) {
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* @license
3+
* Copyright Google Inc. All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.io/license
7+
*/
8+
import { JsonParseMode, parseJsonAst } from '@angular-devkit/core';
9+
import { Rule, Tree } from '@angular-devkit/schematics';
10+
import { removePackageJsonDependency } from '../../utility/dependencies';
11+
import { findPropertyInAstObject, removePropertyInAstObject } from '../../utility/json-utils';
12+
import { Builders } from '../../utility/workspace-models';
13+
import { getAllOptions, getTargets, getWorkspace } from './utils';
14+
15+
/**
16+
* Remove tsickle from libraries
17+
*/
18+
export function removeTsickle(): Rule {
19+
return (tree: Tree) => {
20+
removePackageJsonDependency(tree, 'tsickle');
21+
22+
const workspace = getWorkspace(tree);
23+
24+
for (const { target } of getTargets(workspace, 'build', Builders.NgPackagr)) {
25+
for (const options of getAllOptions(target)) {
26+
const tsConfigOption = findPropertyInAstObject(options, 'tsConfig');
27+
if (!tsConfigOption || tsConfigOption.kind !== 'string') {
28+
continue;
29+
}
30+
31+
const tsConfigContent = tree.read(tsConfigOption.value);
32+
if (!tsConfigContent) {
33+
continue;
34+
}
35+
36+
const tsConfigAst = parseJsonAst(tsConfigContent.toString(), JsonParseMode.Loose);
37+
if (!tsConfigAst || tsConfigAst.kind !== 'object') {
38+
continue;
39+
}
40+
41+
const ngCompilerOptions = findPropertyInAstObject(tsConfigAst, 'angularCompilerOptions');
42+
if (ngCompilerOptions && ngCompilerOptions.kind === 'object') {
43+
// remove annotateForClosureCompiler option
44+
const recorder = tree.beginUpdate(tsConfigOption.value);
45+
removePropertyInAstObject(recorder, ngCompilerOptions, 'annotateForClosureCompiler');
46+
tree.commitUpdate(recorder);
47+
}
48+
}
49+
}
50+
51+
return tree;
52+
};
53+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/**
2+
* @license
3+
* Copyright Google Inc. All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.io/license
7+
*/
8+
9+
import { EmptyTree } from '@angular-devkit/schematics';
10+
import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing';
11+
12+
// tslint:disable:no-big-function
13+
describe('Migration to version 9', () => {
14+
describe('Remove tsickle and annotateForClosureCompiler', () => {
15+
const schematicRunner = new SchematicTestRunner(
16+
'migrations',
17+
require.resolve('../migration-collection.json'),
18+
);
19+
20+
let tree: UnitTestTree;
21+
22+
beforeEach(async () => {
23+
tree = new UnitTestTree(new EmptyTree());
24+
tree = await schematicRunner
25+
.runExternalSchematicAsync(
26+
require.resolve('../../collection.json'),
27+
'workspace',
28+
{
29+
name: 'migration-test',
30+
version: '1.2.3',
31+
directory: '.',
32+
},
33+
tree,
34+
)
35+
.toPromise();
36+
tree = await schematicRunner
37+
.runExternalSchematicAsync(
38+
require.resolve('../../collection.json'),
39+
'library',
40+
{
41+
name: 'migration-lib',
42+
},
43+
tree,
44+
)
45+
.toPromise();
46+
});
47+
48+
it(`should remove 'annotateForClosureCompiler' from library tsconfig`, async () => {
49+
const libTsConfig = 'migration-lib/tsconfig.lib.json';
50+
51+
const tsconfig = {
52+
compilerOptions: {},
53+
angularCompilerOptions: {
54+
enableIvy: false,
55+
skipTemplateCodegen: true,
56+
annotateForClosureCompiler: true,
57+
},
58+
};
59+
60+
tree.overwrite(libTsConfig, JSON.stringify(tsconfig, undefined, 2));
61+
62+
const tree2 = await schematicRunner.runSchematicAsync('migration-09', {}, tree.branch()).toPromise();
63+
const { angularCompilerOptions } = JSON.parse(tree2.readContent(libTsConfig));
64+
expect(angularCompilerOptions).toEqual({ enableIvy: false, skipTemplateCodegen: true });
65+
});
66+
67+
it('should remove all dependencies on tsickle', async () => {
68+
const packageJson = {
69+
dependencies: {
70+
'tsickle': '0.0.0',
71+
},
72+
devDependencies: {
73+
'tsickle': '0.0.0',
74+
},
75+
};
76+
77+
tree.overwrite('/package.json', JSON.stringify(packageJson, undefined, 2));
78+
const tree2 = await schematicRunner.runSchematicAsync('migration-09', {}, tree.branch()).toPromise();
79+
const { dependencies, devDependencies } = JSON.parse(tree2.readContent('/package.json'));
80+
expect(dependencies['tsickle']).toBeUndefined();
81+
expect(devDependencies['tsickle']).toBeUndefined();
82+
});
83+
});
84+
});

packages/schematics/angular/migrations/update-9/update-dependencies.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ export function updateDependencies() {
1717
'@angular-devkit/build-ng-packagr': latestVersions.DevkitBuildNgPackagr,
1818
'@angular-devkit/build-webpack': latestVersions.DevkitBuildWebpack,
1919
'zone.js': latestVersions.ZoneJs,
20-
tsickle: latestVersions.tsickle,
2120
'ng-packagr': latestVersions.ngPackagr,
2221
'web-animations-js': '^2.3.2',
2322
};

packages/schematics/angular/utility/latest-versions.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,5 @@ export const latestVersions = {
2020
DevkitBuildWebpack: '~0.900.0-next.4',
2121
AngularPWA: '~0.900.0-next.4',
2222

23-
tsickle: '^0.37.0',
24-
ngPackagr: '^5.4.0',
23+
ngPackagr: '^5.5.1',
2524
};

0 commit comments

Comments
 (0)