Skip to content

Commit aea7205

Browse files
authored
fix(transformers): adopt ts 4.8 changes for replace-resource (#1739)
Fixes #1732
1 parent 4494966 commit aea7205

File tree

6 files changed

+97
-44
lines changed

6 files changed

+97
-44
lines changed

.eslintrc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ module.exports = {
3333
],
3434
'@typescript-eslint/comma-spacing': 'error',
3535
'@typescript-eslint/no-redeclare': 'error',
36-
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
36+
'@typescript-eslint/no-unused-vars': 'off',
3737
'@typescript-eslint/prefer-ts-expect-error': 'error',
3838
'import/order': [
3939
'error',

examples/example-app-v14/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"@angular/platform-browser": "^14.2.0",
2121
"@angular/platform-browser-dynamic": "^14.2.0",
2222
"@angular/router": "^14.2.0",
23-
"angular-in-memory-web-api": "^0.13.0",
23+
"angular-in-memory-web-api": "^0.14.0",
2424
"rxjs": "~7.5.6",
2525
"tslib": "^2.4.0",
2626
"zone.js": "^0.11.8"
@@ -33,6 +33,6 @@
3333
"@types/node": "^16.11.56",
3434
"jest": "^28.1.3",
3535
"jest-preset-angular": "^12.2.0",
36-
"typescript": "~4.6.4"
36+
"typescript": "^4.8.2"
3737
}
3838
}

examples/example-app-v14/yarn.lock

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2981,16 +2981,16 @@ __metadata:
29812981
languageName: node
29822982
linkType: hard
29832983

2984-
"angular-in-memory-web-api@npm:^0.13.0":
2985-
version: 0.13.0
2986-
resolution: "angular-in-memory-web-api@npm:0.13.0"
2984+
"angular-in-memory-web-api@npm:^0.14.0":
2985+
version: 0.14.0
2986+
resolution: "angular-in-memory-web-api@npm:0.14.0"
29872987
dependencies:
29882988
tslib: ^2.3.0
29892989
peerDependencies:
2990-
"@angular/common": ^13.0.0
2991-
"@angular/core": ^13.0.0
2990+
"@angular/common": ^14.0.0
2991+
"@angular/core": ^14.0.0
29922992
rxjs: ^6.5.3 || ^7.4.0
2993-
checksum: 4ff21b69340112199fe6a4b2e7c1f5ccf357f48cf28c743f22971c87f3e5c916155f16fc1429a3e446ab63b3f2d7e3e0675948a291f3b600f6d4699a3dfb54b7
2993+
checksum: 9ebf14c385e32dac9a7d5e3bbaca4cda775738dc6e38098bbfbe1e445c3057e8f0a91f3df307b6d7424faa567959ac4e2e40db158f9cad6225e3ba32bc6a0d23
29942994
languageName: node
29952995
linkType: hard
29962996

@@ -4742,12 +4742,12 @@ __metadata:
47424742
"@angular/router": ^14.2.0
47434743
"@types/jest": ^27.5.2
47444744
"@types/node": ^16.11.56
4745-
angular-in-memory-web-api: ^0.13.0
4745+
angular-in-memory-web-api: ^0.14.0
47464746
jest: ^28.1.3
47474747
jest-preset-angular: ^12.2.0
47484748
rxjs: ~7.5.6
47494749
tslib: ^2.4.0
4750-
typescript: ~4.6.4
4750+
typescript: ^4.8.2
47514751
zone.js: ^0.11.8
47524752
languageName: unknown
47534753
linkType: soft
@@ -9446,23 +9446,23 @@ __metadata:
94469446
languageName: node
94479447
linkType: hard
94489448

9449-
"typescript@npm:~4.6.4":
9450-
version: 4.6.4
9451-
resolution: "typescript@npm:4.6.4"
9449+
"typescript@npm:^4.8.2":
9450+
version: 4.8.2
9451+
resolution: "typescript@npm:4.8.2"
94529452
bin:
94539453
tsc: bin/tsc
94549454
tsserver: bin/tsserver
9455-
checksum: e7bfcc39cd4571a63a54e5ea21f16b8445268b9900bf55aee0e02ad981be576acc140eba24f1af5e3c1457767c96cea6d12861768fb386cf3ffb34013718631a
9455+
checksum: 7f5b81d0d558c9067f952c7af52ab7f19c2e70a916817929e4a5b256c93990bf3178eccb1ac8a850bc75df35f6781b6f4cb3370ce20d8b1ded92ed462348f628
94569456
languageName: node
94579457
linkType: hard
94589458

9459-
"typescript@patch:typescript@~4.6.4#~builtin<compat/typescript>":
9460-
version: 4.6.4
9461-
resolution: "typescript@patch:typescript@npm%3A4.6.4#~builtin<compat/typescript>::version=4.6.4&hash=a1c5e5"
9459+
"typescript@patch:typescript@^4.8.2#~builtin<compat/typescript>":
9460+
version: 4.8.2
9461+
resolution: "typescript@patch:typescript@npm%3A4.8.2#~builtin<compat/typescript>::version=4.8.2&hash=a1c5e5"
94629462
bin:
94639463
tsc: bin/tsc
94649464
tsserver: bin/tsserver
9465-
checksum: 1cb434fbc637d347be90e3a0c6cd05e33c38f941713c8786d3031faf1842c2c148ba91d2fac01e7276b0ae3249b8633f1660e32686cc7a8c6a8fd5361dc52c66
9465+
checksum: 5cb0f02f414f5405f4b0e7ee1fd7fa9177b6a8783c9017b6cad85f56ce4c4f93e0e6f2ce37e863cb597d44227cd009474c9fbd85bf7a50004e5557426cb58079
94669466
languageName: node
94679467
linkType: hard
94689468

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@
101101
"rimraf": "^3.0.2",
102102
"rxjs": "^7.5.6",
103103
"tslib": "^2.4.0",
104-
"typescript": "^4.7.4",
104+
"typescript": "^4.8.2",
105105
"zone.js": "^0.11.8"
106106
},
107107
"packageManager": "[email protected]"

src/transformers/replace-resources.ts

Lines changed: 68 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,20 @@ import ts from 'typescript';
1010

1111
import { STYLES, STYLE_URLS, TEMPLATE_URL, TEMPLATE, REQUIRE, COMPONENT } from '../constants';
1212

13+
const isAfterVersion = (targetMajor: number, targetMinor: number): boolean => {
14+
const [major, minor] = ts.versionMajorMinor.split('.').map((part) => parseInt(part));
15+
16+
if (major < targetMajor) {
17+
return false;
18+
} else if (major > targetMajor) {
19+
return true;
20+
} else {
21+
return minor >= targetMinor;
22+
}
23+
};
24+
25+
const IS_TS_48 = isAfterVersion(4, 8);
26+
1327
const shouldTransform = (fileName: string) => !fileName.endsWith('.ngfactory.ts') && !fileName.endsWith('.ngstyle.ts');
1428
/**
1529
* Source https://github.com/angular/angular-cli/blob/master/packages/ngtools/webpack/src/transformers/replace_resources.ts
@@ -52,21 +66,7 @@ export function replaceResources({ program }: TsCompilerInstance): ts.Transforme
5266

5367
const visitNode: ts.Visitor = (node: ts.Node) => {
5468
if (ts.isClassDeclaration(node)) {
55-
const decorators = ts.visitNodes(node.decorators, (node) =>
56-
ts.isDecorator(node)
57-
? visitDecorator(nodeFactory, node, typeChecker, resourceImportDeclarations, moduleKind)
58-
: node,
59-
);
60-
61-
return nodeFactory.updateClassDeclaration(
62-
node,
63-
decorators,
64-
node.modifiers,
65-
node.name,
66-
node.typeParameters,
67-
node.heritageClauses,
68-
node.members,
69-
);
69+
return visitClassDeclaration(nodeFactory, typeChecker, node, resourceImportDeclarations, moduleKind);
7070
}
7171

7272
return ts.visitEachChild(node, visitNode, context);
@@ -94,6 +94,59 @@ export function replaceResources({ program }: TsCompilerInstance): ts.Transforme
9494
};
9595
}
9696

97+
function visitClassDeclaration(
98+
nodeFactory: ts.NodeFactory,
99+
typeChecker: ts.TypeChecker,
100+
node: ts.ClassDeclaration,
101+
resourceImportDeclarations: ts.ImportDeclaration[],
102+
moduleKind: ts.ModuleKind | undefined,
103+
): ts.ClassDeclaration {
104+
let decorators: ts.Decorator[] | undefined;
105+
let modifiers: ts.Modifier[] | undefined;
106+
107+
if (IS_TS_48) {
108+
node.modifiers?.forEach((modifier) => {
109+
if (ts.isDecorator(modifier)) {
110+
decorators ??= [];
111+
decorators.push(modifier);
112+
} else {
113+
modifiers = modifiers ??= [];
114+
modifiers.push(modifier);
115+
}
116+
});
117+
} else {
118+
decorators = node.decorators as unknown as ts.Decorator[];
119+
modifiers = node.modifiers as unknown as ts.Modifier[];
120+
}
121+
122+
if (!decorators || !decorators.length) {
123+
return node;
124+
}
125+
126+
decorators = decorators.map((current) =>
127+
visitDecorator(nodeFactory, current, typeChecker, resourceImportDeclarations, moduleKind),
128+
);
129+
130+
return IS_TS_48
131+
? nodeFactory.updateClassDeclaration(
132+
node,
133+
[...decorators, ...(modifiers ?? [])],
134+
node.name,
135+
node.typeParameters,
136+
node.heritageClauses,
137+
node.members,
138+
)
139+
: nodeFactory.updateClassDeclaration(
140+
node,
141+
decorators,
142+
modifiers,
143+
node.name,
144+
node.typeParameters,
145+
node.heritageClauses,
146+
node.members,
147+
);
148+
}
149+
97150
function visitDecorator(
98151
nodeFactory: ts.NodeFactory,
99152
node: ts.Decorator,

yarn.lock

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7409,7 +7409,7 @@ __metadata:
74097409
rxjs: ^7.5.6
74107410
ts-jest: ^28.0.0
74117411
tslib: ^2.4.0
7412-
typescript: ^4.7.4
7412+
typescript: ^4.8.2
74137413
zone.js: ^0.11.8
74147414
peerDependencies:
74157415
"@angular-devkit/build-angular": ">=0.1102.19 <15.0.0"
@@ -11198,23 +11198,23 @@ __metadata:
1119811198
languageName: node
1119911199
linkType: hard
1120011200

11201-
"typescript@npm:^4.6.4, typescript@npm:^4.7.4":
11202-
version: 4.7.4
11203-
resolution: "typescript@npm:4.7.4"
11201+
"typescript@npm:^4.6.4, typescript@npm:^4.8.2":
11202+
version: 4.8.2
11203+
resolution: "typescript@npm:4.8.2"
1120411204
bin:
1120511205
tsc: bin/tsc
1120611206
tsserver: bin/tsserver
11207-
checksum: 5750181b1cd7e6482c4195825547e70f944114fb47e58e4aa7553e62f11b3f3173766aef9c281783edfd881f7b8299cf35e3ca8caebe73d8464528c907a164df
11207+
checksum: 7f5b81d0d558c9067f952c7af52ab7f19c2e70a916817929e4a5b256c93990bf3178eccb1ac8a850bc75df35f6781b6f4cb3370ce20d8b1ded92ed462348f628
1120811208
languageName: node
1120911209
linkType: hard
1121011210

11211-
"typescript@patch:typescript@^4.6.4#~builtin<compat/typescript>, typescript@patch:typescript@^4.7.4#~builtin<compat/typescript>":
11212-
version: 4.7.4
11213-
resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=a1c5e5"
11211+
"typescript@patch:typescript@^4.6.4#~builtin<compat/typescript>, typescript@patch:typescript@^4.8.2#~builtin<compat/typescript>":
11212+
version: 4.8.2
11213+
resolution: "typescript@patch:typescript@npm%3A4.8.2#~builtin<compat/typescript>::version=4.8.2&hash=a1c5e5"
1121411214
bin:
1121511215
tsc: bin/tsc
1121611216
tsserver: bin/tsserver
11217-
checksum: 9096d8f6c16cb80ef3bf96fcbbd055bf1c4a43bd14f3b7be45a9fbe7ada46ec977f604d5feed3263b4f2aa7d4c7477ce5f9cd87de0d6feedec69a983f3a4f93e
11217+
checksum: 5cb0f02f414f5405f4b0e7ee1fd7fa9177b6a8783c9017b6cad85f56ce4c4f93e0e6f2ce37e863cb597d44227cd009474c9fbd85bf7a50004e5557426cb58079
1121811218
languageName: node
1121911219
linkType: hard
1122011220

0 commit comments

Comments
 (0)