ng-checkup 0.9.1 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -7
- package/dist/angularjs.d.ts +136 -0
- package/dist/angularjs.js +292 -0
- package/dist/angularjs.js.map +1 -0
- package/dist/cache.d.ts +8 -2
- package/dist/cache.js +3 -3
- package/dist/cache.js.map +1 -1
- package/dist/checks/angularjs.d.ts +98 -0
- package/dist/checks/angularjs.js +284 -0
- package/dist/checks/angularjs.js.map +1 -0
- package/dist/checks/change-detection.js +3 -1
- package/dist/checks/change-detection.js.map +1 -1
- package/dist/checks/circular-deps.js +6 -1
- package/dist/checks/circular-deps.js.map +1 -1
- package/dist/checks/context.d.ts +3 -0
- package/dist/checks/context.js.map +1 -1
- package/dist/checks/version.js +3 -1
- package/dist/checks/version.js.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/files.d.ts +7 -0
- package/dist/files.js +24 -6
- package/dist/files.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +19 -5
- package/dist/index.js.map +1 -1
- package/dist/migration.d.ts +40 -0
- package/dist/migration.js +116 -0
- package/dist/migration.js.map +1 -0
- package/dist/report/html.js +49 -6
- package/dist/report/html.js.map +1 -1
- package/dist/report/markdown.js +10 -0
- package/dist/report/markdown.js.map +1 -1
- package/dist/report/notes.d.ts +2 -1
- package/dist/report/notes.js +4 -1
- package/dist/report/notes.js.map +1 -1
- package/dist/report/terminal.js +10 -0
- package/dist/report/terminal.js.map +1 -1
- package/dist/scan.d.ts +6 -3
- package/dist/scan.js +9 -4
- package/dist/scan.js.map +1 -1
- package/dist/template-text.d.ts +12 -0
- package/dist/template-text.js +17 -0
- package/dist/template-text.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/watch.js +1 -1
- package/dist/watch.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { AngularJsFileFacts, Registration } from '../angularjs.js';
|
|
2
|
+
import type { CheckResult } from '../types.js';
|
|
3
|
+
import { type AnalysisContext } from './context.js';
|
|
4
|
+
/**
|
|
5
|
+
* AngularJS packages with what replaces each in Angular. Every one of them is
|
|
6
|
+
* a dependency the migration has to retire, and the replacement decides how
|
|
7
|
+
* much of the code around it changes.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ANGULARJS_PACKAGES: Array<{
|
|
10
|
+
name: string;
|
|
11
|
+
replacement: string;
|
|
12
|
+
}>;
|
|
13
|
+
/** What the AngularJS check and the migration plan both need, counted once. */
|
|
14
|
+
export interface AngularJsSummary {
|
|
15
|
+
/** AngularJS code is present, or AngularJS is a dependency (see `hasAngularJs`). */
|
|
16
|
+
present: boolean;
|
|
17
|
+
/** AngularJS code exists, as opposed to leftover packages only. */
|
|
18
|
+
hasCode: boolean;
|
|
19
|
+
version?: string;
|
|
20
|
+
versionSource?: string;
|
|
21
|
+
/** How the two frameworks run together, undefined for an app without Angular. */
|
|
22
|
+
hybrid?: 'UpgradeModule' | 'downgradeModule' | 'UpgradeAdapter';
|
|
23
|
+
angularMajor?: number;
|
|
24
|
+
/** Non-test files with AngularJS code. */
|
|
25
|
+
files: AngularJsFileFacts[];
|
|
26
|
+
registrations: Array<Registration & {
|
|
27
|
+
path: string;
|
|
28
|
+
}>;
|
|
29
|
+
components: number;
|
|
30
|
+
directives: number;
|
|
31
|
+
controllers: number;
|
|
32
|
+
services: number;
|
|
33
|
+
filters: number;
|
|
34
|
+
/** Components, directives and controllers. */
|
|
35
|
+
uiUnits: number;
|
|
36
|
+
/** Angular components in the same codebase, which is what "migrated" is measured against. */
|
|
37
|
+
angularComponents: number;
|
|
38
|
+
angularServices: number;
|
|
39
|
+
downgradedComponents: number;
|
|
40
|
+
downgradedServices: number;
|
|
41
|
+
upgradedComponents: number;
|
|
42
|
+
upgradedServices: number;
|
|
43
|
+
scopeFiles: AngularJsFileFacts[];
|
|
44
|
+
scopeEvents: number;
|
|
45
|
+
watchers: number;
|
|
46
|
+
compiles: number;
|
|
47
|
+
legacyDirectives: Array<{
|
|
48
|
+
path: string;
|
|
49
|
+
line: number;
|
|
50
|
+
keys: string[];
|
|
51
|
+
}>;
|
|
52
|
+
routes: number;
|
|
53
|
+
/** Templates with AngularJS attributes. */
|
|
54
|
+
templates: Array<{
|
|
55
|
+
path: string;
|
|
56
|
+
controllers: number;
|
|
57
|
+
includes: number;
|
|
58
|
+
}>;
|
|
59
|
+
templateControllers: number;
|
|
60
|
+
includes: number;
|
|
61
|
+
/** AngularJS code files written in JavaScript. */
|
|
62
|
+
javascriptFiles: number;
|
|
63
|
+
packages: Array<{
|
|
64
|
+
name: string;
|
|
65
|
+
replacement: string;
|
|
66
|
+
}>;
|
|
67
|
+
bower: boolean;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* True when the repository has anything AngularJS: code, templates, or the
|
|
71
|
+
* `angular` or `@angular/upgrade` package. The AngularJS check is only added
|
|
72
|
+
* to a report when it is, since for every other Angular app it would be a
|
|
73
|
+
* thirteenth line saying "not applicable".
|
|
74
|
+
*/
|
|
75
|
+
export declare function hasAngularJs(context: AnalysisContext): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Counts everything AngularJS in the context. Registrations whose call chain
|
|
78
|
+
* does not start at `angular.module()` (`app.controller()` on a module
|
|
79
|
+
* imported from another file) count only when the repository shows AngularJS
|
|
80
|
+
* elsewhere, so a Vue app's `Vue.component('x', …)` never does.
|
|
81
|
+
*/
|
|
82
|
+
export declare function summarizeAngularJs(context: AnalysisContext): AngularJsSummary;
|
|
83
|
+
/**
|
|
84
|
+
* How much AngularJS is left and what stands in the way of moving it.
|
|
85
|
+
*
|
|
86
|
+
* AngularJS reached end of life on 31 December 2021, and nothing in it
|
|
87
|
+
* carries over to Angular: every controller, directive, service, filter and
|
|
88
|
+
* template is rewritten or wrapped. So the check counts what there is to
|
|
89
|
+
* move, in the units a migration moves (components and directives, services,
|
|
90
|
+
* filters, templates), and names what makes a unit hard to move:
|
|
91
|
+
* controllers, `$scope`, scope events, runtime `$compile`, and directive
|
|
92
|
+
* features `UpgradeComponent` rejects. For a hybrid app it also measures how
|
|
93
|
+
* far the migration has come.
|
|
94
|
+
*
|
|
95
|
+
* Every count is a measure, so a baseline holds a running migration to
|
|
96
|
+
* "AngularJS only ever shrinks".
|
|
97
|
+
*/
|
|
98
|
+
export declare function angularJsCheck(context: AnalysisContext): CheckResult;
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { applicationFiles, countCalls, filesImporting, formatCount, percent, plural, verb } from './context.js';
|
|
2
|
+
/**
|
|
3
|
+
* AngularJS packages with what replaces each in Angular. Every one of them is
|
|
4
|
+
* a dependency the migration has to retire, and the replacement decides how
|
|
5
|
+
* much of the code around it changes.
|
|
6
|
+
*/
|
|
7
|
+
export const ANGULARJS_PACKAGES = [
|
|
8
|
+
{ name: 'angular-route', replacement: 'the Angular Router' },
|
|
9
|
+
{ name: 'angular-ui-router', replacement: '`@uirouter/angular` (with `@uirouter/angular-hybrid` during the migration) or the Angular Router' },
|
|
10
|
+
{ name: '@uirouter/angularjs', replacement: '`@uirouter/angular` (with `@uirouter/angular-hybrid` during the migration) or the Angular Router' },
|
|
11
|
+
{ name: 'angular-resource', replacement: '`HttpClient`' },
|
|
12
|
+
{ name: 'restangular', replacement: '`HttpClient`' },
|
|
13
|
+
{ name: 'angular-animate', replacement: 'CSS transitions, or `@angular/animations`' },
|
|
14
|
+
{ name: 'angular-sanitize', replacement: 'Angular\'s built-in sanitization' },
|
|
15
|
+
{ name: 'angular-cookies', replacement: 'a small cookie service, such as `ngx-cookie-service`' },
|
|
16
|
+
{ name: 'angular-messages', replacement: 'validation messages from reactive forms' },
|
|
17
|
+
{ name: 'angular-translate', replacement: '`@ngx-translate/core`, or `@angular/localize`' },
|
|
18
|
+
{ name: 'angular-gettext', replacement: '`@angular/localize`, or `@ngx-translate/core`' },
|
|
19
|
+
{ name: 'angular-material', replacement: '`@angular/material` (AngularJS Material is end of life since January 2022)' },
|
|
20
|
+
{ name: 'angular-ui-bootstrap', replacement: '`@ng-bootstrap/ng-bootstrap` or `ngx-bootstrap`' },
|
|
21
|
+
{ name: 'angular-strap', replacement: '`@ng-bootstrap/ng-bootstrap` or `ngx-bootstrap`' },
|
|
22
|
+
{ name: 'angular-ui-grid', replacement: 'AG Grid or the Angular Material table' },
|
|
23
|
+
{ name: 'ui-grid', replacement: 'AG Grid or the Angular Material table' },
|
|
24
|
+
{ name: 'angular-mocks', replacement: '`TestBed`' },
|
|
25
|
+
];
|
|
26
|
+
/** The registrations a migration moves, grouped the way the plan moves them. */
|
|
27
|
+
const UI_KINDS = new Set(['component', 'directive', 'controller']);
|
|
28
|
+
const SERVICE_KINDS = new Set(['service', 'factory', 'provider']);
|
|
29
|
+
/** Above this share of components already on Angular, a hybrid app is graded fair instead of poor. */
|
|
30
|
+
const MOSTLY_MIGRATED = 80;
|
|
31
|
+
/**
|
|
32
|
+
* True when the repository has anything AngularJS: code, templates, or the
|
|
33
|
+
* `angular` or `@angular/upgrade` package. The AngularJS check is only added
|
|
34
|
+
* to a report when it is, since for every other Angular app it would be a
|
|
35
|
+
* thirteenth line saying "not applicable".
|
|
36
|
+
*/
|
|
37
|
+
export function hasAngularJs(context) {
|
|
38
|
+
return summarizeAngularJs(context).present;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Counts everything AngularJS in the context. Registrations whose call chain
|
|
42
|
+
* does not start at `angular.module()` (`app.controller()` on a module
|
|
43
|
+
* imported from another file) count only when the repository shows AngularJS
|
|
44
|
+
* elsewhere, so a Vue app's `Vue.component('x', …)` never does.
|
|
45
|
+
*/
|
|
46
|
+
export function summarizeAngularJs(context) {
|
|
47
|
+
const { angularJs, workspace } = context;
|
|
48
|
+
const files = angularJs.files.filter((file) => !file.isSpec);
|
|
49
|
+
const evidence = files.some((file) => file.moduleDefinitions.length > 0 || file.registrations.some((registration) => registration.rooted)) ||
|
|
50
|
+
angularJs.version !== undefined ||
|
|
51
|
+
angularJs.templates.some((template) => template.stats.apps > 0);
|
|
52
|
+
const registrations = files.flatMap((file) => file.registrations.filter((registration) => !registration.downgraded && (registration.rooted || evidence)).map((registration) => ({ ...registration, path: file.path })));
|
|
53
|
+
const count = (kind) => registrations.filter((registration) => registration.kind === kind).length;
|
|
54
|
+
const application = applicationFiles(context);
|
|
55
|
+
const upgradeImports = application.flatMap((file) => file.imports.filter((fact) => fact.specifier === '@angular/upgrade/static' || fact.specifier === '@angular/upgrade'));
|
|
56
|
+
const imported = (name) => upgradeImports.some((fact) => fact.bindings.some((binding) => binding.imported === name));
|
|
57
|
+
const hybrid = imported('downgradeModule') ? 'downgradeModule' : imported('UpgradeModule') ? 'UpgradeModule' : imported('UpgradeAdapter') ? 'UpgradeAdapter' : undefined;
|
|
58
|
+
const downgradedRegistrations = files.flatMap((file) => file.registrations.filter((registration) => registration.downgraded));
|
|
59
|
+
// Templates alone never make an app AngularJS: an `ng-foo="…"` attribute can be anything in a page that
|
|
60
|
+
// has no other trace of AngularJS. They count once the code or the dependencies say AngularJS.
|
|
61
|
+
const templates = angularJs.templates.filter((template) => template.stats.attributes > 0 && (evidence || registrations.length > 0)).map((template) => ({ path: template.path, controllers: template.stats.controllers, includes: template.stats.includes }));
|
|
62
|
+
const packages = ANGULARJS_PACKAGES.filter((entry) => entry.name in workspace.dependencies);
|
|
63
|
+
const scopeFiles = files.filter((file) => file.scopeLines.length > 0);
|
|
64
|
+
const hasCode = registrations.length > 0 || templates.length > 0 || files.some((file) => file.moduleDefinitions.length > 0);
|
|
65
|
+
const sum = (pick) => files.reduce((total, file) => total + pick(file), 0);
|
|
66
|
+
return {
|
|
67
|
+
present: hasCode || evidence || 'angular' in workspace.dependencies || '@angular/upgrade' in workspace.dependencies || packages.length > 0,
|
|
68
|
+
hasCode,
|
|
69
|
+
...(angularJs.version ? { version: angularJs.version.version, versionSource: angularJs.version.source } : {}),
|
|
70
|
+
...(hybrid ? { hybrid } : {}),
|
|
71
|
+
...(workspace.angular.major !== undefined ? { angularMajor: workspace.angular.major } : {}),
|
|
72
|
+
files,
|
|
73
|
+
registrations,
|
|
74
|
+
components: count('component'),
|
|
75
|
+
directives: count('directive'),
|
|
76
|
+
controllers: count('controller'),
|
|
77
|
+
services: registrations.filter((registration) => SERVICE_KINDS.has(registration.kind)).length,
|
|
78
|
+
filters: count('filter'),
|
|
79
|
+
uiUnits: registrations.filter((registration) => UI_KINDS.has(registration.kind)).length,
|
|
80
|
+
angularComponents: application.reduce((total, file) => total + file.components.length, 0),
|
|
81
|
+
angularServices: application.reduce((total, file) => total + file.injectables, 0),
|
|
82
|
+
downgradedComponents: Math.max(countCalls(application, '@angular/upgrade/static#downgradeComponent'), downgradedRegistrations.filter((registration) => registration.kind === 'directive').length),
|
|
83
|
+
downgradedServices: Math.max(countCalls(application, '@angular/upgrade/static#downgradeInjectable'), downgradedRegistrations.filter((registration) => registration.kind !== 'directive').length),
|
|
84
|
+
upgradedComponents: sum((file) => file.upgradedComponents),
|
|
85
|
+
upgradedServices: sum((file) => file.upgradedServices),
|
|
86
|
+
scopeFiles,
|
|
87
|
+
scopeEvents: sum((file) => file.scopeEventLines.length),
|
|
88
|
+
watchers: sum((file) => file.watcherLines.length),
|
|
89
|
+
compiles: sum((file) => file.compileLines.length),
|
|
90
|
+
legacyDirectives: files.flatMap((file) => file.legacyDirectives.map((directive) => ({ path: file.path, ...directive }))),
|
|
91
|
+
routes: sum((file) => file.routeLines.length),
|
|
92
|
+
templates,
|
|
93
|
+
templateControllers: templates.reduce((total, template) => total + template.controllers, 0),
|
|
94
|
+
includes: templates.reduce((total, template) => total + template.includes, 0),
|
|
95
|
+
javascriptFiles: files.filter((file) => file.language === 'js').length,
|
|
96
|
+
packages,
|
|
97
|
+
bower: angularJs.bower,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* How much AngularJS is left and what stands in the way of moving it.
|
|
102
|
+
*
|
|
103
|
+
* AngularJS reached end of life on 31 December 2021, and nothing in it
|
|
104
|
+
* carries over to Angular: every controller, directive, service, filter and
|
|
105
|
+
* template is rewritten or wrapped. So the check counts what there is to
|
|
106
|
+
* move, in the units a migration moves (components and directives, services,
|
|
107
|
+
* filters, templates), and names what makes a unit hard to move:
|
|
108
|
+
* controllers, `$scope`, scope events, runtime `$compile`, and directive
|
|
109
|
+
* features `UpgradeComponent` rejects. For a hybrid app it also measures how
|
|
110
|
+
* far the migration has come.
|
|
111
|
+
*
|
|
112
|
+
* Every count is a measure, so a baseline holds a running migration to
|
|
113
|
+
* "AngularJS only ever shrinks".
|
|
114
|
+
*/
|
|
115
|
+
export function angularJsCheck(context) {
|
|
116
|
+
const s = summarizeAngularJs(context);
|
|
117
|
+
const examples = context.maxExamples;
|
|
118
|
+
const findings = [];
|
|
119
|
+
const versionLabel = s.version ? `AngularJS ${s.version}` : 'AngularJS';
|
|
120
|
+
const migrated = percent(s.angularComponents, s.angularComponents + s.uiUnits);
|
|
121
|
+
if (s.hasCode || 'angular' in context.workspace.dependencies) {
|
|
122
|
+
findings.push({
|
|
123
|
+
severity: 'high',
|
|
124
|
+
message: `${versionLabel} is end of life since January 2022`,
|
|
125
|
+
detail: 'Google ended AngularJS support on 31 December 2021: no security fixes, no fixes for new browsers, only paid third-party extended support. Nothing in AngularJS carries over to Angular; every controller, directive, service and template is rewritten or wrapped, which is why the migration goes piece by piece, with both frameworks running side by side in between.',
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
const minor = s.version ? /^\D*1\.(\d+)/.exec(s.version)?.[1] : undefined;
|
|
129
|
+
if (minor !== undefined && Number(minor) < 8) {
|
|
130
|
+
findings.push({
|
|
131
|
+
severity: Number(minor) < 5 ? 'medium' : 'low',
|
|
132
|
+
message: `Move to AngularJS 1.8 before anything else (now ${s.version})`,
|
|
133
|
+
detail: Number(minor) < 5
|
|
134
|
+
? '`.component()`, one-way bindings and lifecycle hooks arrived in 1.5, and the preparation steps of every migration path assume them. 1.8 is the last release.'
|
|
135
|
+
: '1.8 is the last release. The steps from 1.5 are small and remove the deprecated behaviour (such as `$http` success/error callbacks) that the migration would otherwise carry along.',
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (s.controllers > 0) {
|
|
139
|
+
const list = s.registrations.filter((registration) => registration.kind === 'controller');
|
|
140
|
+
findings.push({
|
|
141
|
+
severity: 'medium',
|
|
142
|
+
message: `${plural(s.controllers, 'controller')} registered with \`.controller()\`${s.templateControllers > 0 ? `, ${formatCount(s.templateControllers)} bound with \`ng-controller\`` : ''}`,
|
|
143
|
+
detail: 'A controller lives in a template or a route, and ngUpgrade bridges neither: only components and component-like directives can be upgraded to Angular or downgraded from it. Turning each controller into a `.component()` with explicit bindings is the first step of every migration path, and it ships on AngularJS alone.',
|
|
144
|
+
files: refs(list, examples),
|
|
145
|
+
count: list.length,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
if (s.legacyDirectives.length > 0) {
|
|
149
|
+
findings.push({
|
|
150
|
+
severity: 'medium',
|
|
151
|
+
message: `${plural(s.legacyDirectives.length, 'directive')} ${verb(s.legacyDirectives.length, 'uses', 'use')} \`compile\`, \`replace\` or \`terminal\``,
|
|
152
|
+
detail: '`UpgradeComponent` refuses these features (it throws "unsupported feature"), so these directives cannot be wrapped for use in Angular; they are rewritten, or reshaped as components first. `replace: true` has been deprecated since AngularJS 1.3.',
|
|
153
|
+
files: s.legacyDirectives.slice(0, examples).map(({ path, line }) => ({ path, line })),
|
|
154
|
+
count: s.legacyDirectives.length,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
if (s.scopeFiles.length > 0) {
|
|
158
|
+
findings.push({
|
|
159
|
+
severity: 'medium',
|
|
160
|
+
message: `\`$scope\` in ${plural(s.scopeFiles.length, 'file')}`,
|
|
161
|
+
detail: 'Angular has no scope. State kept on `$scope` moves to the controller (`controllerAs`, `bindToController`) and to component bindings first, still on AngularJS; what remains is what the Angular version of each file has to redesign.',
|
|
162
|
+
files: s.scopeFiles.slice(0, examples).map((file) => ({ path: file.path, line: file.scopeLines[0] })),
|
|
163
|
+
count: s.scopeFiles.length,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
if (s.scopeEvents > 0) {
|
|
167
|
+
const withEvents = s.files.filter((file) => file.scopeEventLines.length > 0);
|
|
168
|
+
findings.push({
|
|
169
|
+
severity: 'medium',
|
|
170
|
+
message: `${plural(s.scopeEvents, 'scope event')} (\`$broadcast\`, \`$emit\`, \`$rootScope.$on\`) used as a message bus`,
|
|
171
|
+
detail: 'An event reaches whatever listens anywhere in the scope tree, invisible to the code that sends it, and in a hybrid app it stops at the framework border. A shared service with an RxJS `Subject`, made available to AngularJS with `downgradeInjectable`, carries the same messages to both sides.',
|
|
172
|
+
files: withEvents.slice(0, examples).map((file) => ({ path: file.path, line: file.scopeEventLines[0] })),
|
|
173
|
+
count: withEvents.length,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
if (s.compiles > 0) {
|
|
177
|
+
const withCompile = s.files.filter((file) => file.compileLines.length > 0);
|
|
178
|
+
findings.push({
|
|
179
|
+
severity: 'medium',
|
|
180
|
+
message: `${plural(s.compiles, 'runtime `$compile` call')}`,
|
|
181
|
+
detail: 'Templates compiled at runtime have no direct Angular equivalent, since Angular compiles ahead of time and needs its components known at build time. These usually become dynamic components (`ViewContainerRef.createComponent`), or a redesign.',
|
|
182
|
+
files: withCompile.slice(0, examples).map((file) => ({ path: file.path, line: file.compileLines[0] })),
|
|
183
|
+
count: withCompile.length,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
if (s.watchers > 0) {
|
|
187
|
+
const withWatchers = s.files.filter((file) => file.watcherLines.length > 0);
|
|
188
|
+
findings.push({
|
|
189
|
+
severity: 'low',
|
|
190
|
+
message: `${plural(s.watchers, '`$watch` call')}`,
|
|
191
|
+
detail: 'Each becomes a `computed` signal, an `effect`, or an input that reacts to change. A deep watch (`$watch(…, true)`) usually points at shared mutable state, which is worth untangling before the move rather than during it.',
|
|
192
|
+
files: withWatchers.slice(0, examples).map((file) => ({ path: file.path, line: file.watcherLines[0] })),
|
|
193
|
+
count: withWatchers.length,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
if (s.includes > 0) {
|
|
197
|
+
const withIncludes = s.templates.filter((template) => template.includes > 0);
|
|
198
|
+
findings.push({
|
|
199
|
+
severity: 'low',
|
|
200
|
+
message: `\`ng-include\` in ${plural(withIncludes.length, 'template')}`,
|
|
201
|
+
detail: 'A template pulled in at runtime shares the scope of its parent, so its real inputs are whatever it happens to read. Each becomes a component with explicit inputs.',
|
|
202
|
+
files: withIncludes.slice(0, examples).map((template) => ({ path: template.path })),
|
|
203
|
+
count: withIncludes.length,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
if (s.packages.length > 0) {
|
|
207
|
+
findings.push({
|
|
208
|
+
severity: 'medium',
|
|
209
|
+
message: `${plural(s.packages.length, 'AngularJS package')} to replace`,
|
|
210
|
+
detail: s.packages.map((entry) => `\`${entry.name}\`: ${entry.replacement}`).join('; ') + '.',
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
if (s.hybrid === 'UpgradeAdapter') {
|
|
214
|
+
findings.push({
|
|
215
|
+
severity: 'medium',
|
|
216
|
+
message: 'The hybrid app runs on `UpgradeAdapter`',
|
|
217
|
+
detail: '`UpgradeAdapter` from `@angular/upgrade` is deprecated since Angular 5 and works only with the JIT compiler. `UpgradeModule` (or `downgradeModule`) from `@angular/upgrade/static` replaces it and runs ahead of time.',
|
|
218
|
+
files: filesImporting(applicationFiles(context), ['@angular/upgrade']).slice(0, examples),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
if (s.bower) {
|
|
222
|
+
findings.push({
|
|
223
|
+
severity: 'low',
|
|
224
|
+
message: 'Dependencies are installed with Bower',
|
|
225
|
+
detail: 'Bower is deprecated since 2017. Angular is installed from npm and built with the Angular CLI, so moving the dependencies to npm and a bundler is part of the preparation.',
|
|
226
|
+
files: [{ path: 'bower.json' }],
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
if (s.hasCode && s.javascriptFiles > 0 && s.javascriptFiles === s.files.length) {
|
|
230
|
+
findings.push({
|
|
231
|
+
severity: 'low',
|
|
232
|
+
message: `The AngularJS code is plain JavaScript (${plural(s.javascriptFiles, 'file')})`,
|
|
233
|
+
detail: 'Angular is written in TypeScript. Bringing TypeScript into the AngularJS code first (renaming files, `@types/angular`) makes every later step type-checked, and the services can then move to Angular almost unchanged.',
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
if (s.hybrid) {
|
|
237
|
+
findings.push({
|
|
238
|
+
severity: 'info',
|
|
239
|
+
message: `Hybrid app on \`${s.hybrid}\`: ${migrated}% of components on Angular`,
|
|
240
|
+
detail: `${plural(s.angularComponents, 'Angular component')} and ${plural(s.uiUnits, 'AngularJS component, directive and controller', 'AngularJS components, directives and controllers')}. Across the border: ${formatCount(s.downgradedComponents)} downgraded and ${formatCount(s.upgradedComponents)} upgraded components, ${formatCount(s.downgradedServices)} downgraded and ${formatCount(s.upgradedServices)} upgraded services.`,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
if (!s.hasCode) {
|
|
244
|
+
findings.push({
|
|
245
|
+
severity: 'low',
|
|
246
|
+
message: 'AngularJS packages are installed but no AngularJS code was found',
|
|
247
|
+
detail: `Unless AngularJS code lives outside this repository, the packages are leftovers of a finished migration: ${['angular', '@angular/upgrade', ...s.packages.map((entry) => entry.name)].filter((name) => name in context.workspace.dependencies).map((name) => `\`${name}\``).join(', ')}.`,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
const grade = !s.hasCode ? 'fair' : s.hybrid && migrated >= MOSTLY_MIGRATED ? 'fair' : 'poor';
|
|
251
|
+
const summary = !s.hasCode
|
|
252
|
+
? 'AngularJS packages without AngularJS code: leftovers to remove.'
|
|
253
|
+
: s.hybrid
|
|
254
|
+
? `Hybrid ${versionLabel} and Angular${s.angularMajor !== undefined ? ` ${s.angularMajor}` : ''}: ${migrated}% of components on Angular, ${plural(s.uiUnits, 'AngularJS component')} left.`
|
|
255
|
+
: `${versionLabel} app: ${plural(s.uiUnits, 'component, directive and controller', 'components, directives and controllers')}, ${plural(s.services, 'service')} and ${plural(s.templates.length, 'template')} to migrate.`;
|
|
256
|
+
return {
|
|
257
|
+
id: 'angularjs',
|
|
258
|
+
title: 'AngularJS migration',
|
|
259
|
+
grade,
|
|
260
|
+
summary,
|
|
261
|
+
metrics: [
|
|
262
|
+
{ label: 'AngularJS', value: s.version ?? 'unknown', hint: s.versionSource ?? 'version not found' },
|
|
263
|
+
{ label: 'Mode', value: s.hybrid ? `Hybrid (${s.hybrid})` : s.hasCode ? 'AngularJS only' : 'Leftovers' },
|
|
264
|
+
{ label: 'Components left', value: formatCount(s.uiUnits), hint: `${formatCount(s.components)} components, ${formatCount(s.directives)} directives, ${formatCount(s.controllers)} controllers` },
|
|
265
|
+
{ label: 'Services left', value: formatCount(s.services), hint: `and ${plural(s.filters, 'filter')}` },
|
|
266
|
+
{ label: 'Templates', value: formatCount(s.templates.length), hint: 'with AngularJS syntax' },
|
|
267
|
+
...(s.hybrid || s.angularComponents > 0 ? [{ label: 'Migrated', value: `${migrated}%`, hint: `${formatCount(s.angularComponents)} of ${formatCount(s.angularComponents + s.uiUnits)} components on Angular` }] : []),
|
|
268
|
+
],
|
|
269
|
+
findings,
|
|
270
|
+
measures: [
|
|
271
|
+
{ id: 'angularjs-components', label: 'AngularJS components, directives and controllers', value: s.uiUnits },
|
|
272
|
+
{ id: 'angularjs-controllers', label: 'AngularJS controllers', value: s.controllers },
|
|
273
|
+
{ id: 'angularjs-services', label: 'AngularJS services, factories and providers', value: s.services },
|
|
274
|
+
{ id: 'angularjs-filters', label: 'AngularJS filters', value: s.filters },
|
|
275
|
+
{ id: 'angularjs-templates', label: 'Templates with AngularJS syntax', value: s.templates.length },
|
|
276
|
+
{ id: 'scope-files', label: 'Files using $scope', value: s.scopeFiles.length },
|
|
277
|
+
],
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
/** Example locations of some registrations. */
|
|
281
|
+
function refs(list, max) {
|
|
282
|
+
return list.slice(0, max).map(({ path, line }) => ({ path, line }));
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=angularjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angularjs.js","sourceRoot":"","sources":["../../src/checks/angularjs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAwB,MAAM,cAAc,CAAC;AAEtI;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAiD;IAC9E,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE;IAC5D,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,kGAAkG,EAAE;IAC9I,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,kGAAkG,EAAE;IAChJ,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE;IACzD,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE;IACpD,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,2CAA2C,EAAE;IACrF,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,kCAAkC,EAAE;IAC7E,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,sDAAsD,EAAE;IAChG,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,yCAAyC,EAAE;IACpF,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,+CAA+C,EAAE;IAC3F,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,+CAA+C,EAAE;IACzF,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,4EAA4E,EAAE;IACvH,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,iDAAiD,EAAE;IAChG,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,iDAAiD,EAAE;IACzF,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACjF,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACzE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE;CACpD,CAAC;AAEF,gFAAgF;AAChF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAuB,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AACzF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAExF,sGAAsG;AACtG,MAAM,eAAe,GAAG,EAAE,CAAC;AA8C3B;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,OAAwB;IACnD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAwB;IACzD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,QAAQ,GACZ,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACzH,SAAS,CAAC,OAAO,KAAK,SAAS;QAC/B,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxN,MAAM,KAAK,GAAG,CAAC,IAA0B,EAAU,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IAEhI,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,yBAAyB,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,CAAC,CAAC,CAAC;IAC3K,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;IACtI,MAAM,MAAM,GAA+B,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAErM,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9H,wGAAwG;IACxG,+FAA+F;IAC/F,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7P,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,YAAY,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5H,MAAM,GAAG,GAAG,CAAC,IAA0C,EAAU,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAEzH,OAAO;QACL,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,SAAS,IAAI,SAAS,CAAC,YAAY,IAAI,kBAAkB,IAAI,SAAS,CAAC,YAAY,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC1I,OAAO;QACP,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7G,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,KAAK;QACL,aAAa;QACb,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC;QAC9B,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC;QAC9B,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QAChC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QAC7F,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;QACxB,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QACvF,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACzF,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACjF,oBAAoB,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,4CAA4C,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;QACjM,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,6CAA6C,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;QAChM,kBAAkB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC1D,gBAAgB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACtD,UAAU;QACV,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QACvD,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACjD,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACjD,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;QACxH,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAC7C,SAAS;QACT,mBAAmB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3F,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7E,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM;QACtE,QAAQ;QACR,KAAK,EAAE,SAAS,CAAC,KAAK;KACvB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;IACrC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAE/E,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAC7D,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,GAAG,YAAY,oCAAoC;YAC5D,MAAM,EACJ,0WAA0W;SAC7W,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;YAC9C,OAAO,EAAE,mDAAmD,CAAC,CAAC,OAAO,GAAG;YACxE,MAAM,EACJ,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;gBACf,CAAC,CAAC,8JAA8J;gBAChK,CAAC,CAAC,qLAAqL;SAC5L,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAC1F,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,qCAAqC,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7L,MAAM,EACJ,8TAA8T;YAChU,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC3B,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,2CAA2C;YACvJ,MAAM,EAAE,sPAAsP;YAC9P,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACtF,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM;SACjC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,iBAAiB,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YAC/D,MAAM,EACJ,uOAAuO;YACzO,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrG,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7E,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,wEAAwE;YACxH,MAAM,EACJ,oSAAoS;YACtS,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxG,KAAK,EAAE,UAAU,CAAC,MAAM;SACzB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3E,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,yBAAyB,CAAC,EAAE;YAC3D,MAAM,EAAE,kPAAkP;YAC1P,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtG,KAAK,EAAE,WAAW,CAAC,MAAM;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5E,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE;YACjD,MAAM,EAAE,6NAA6N;YACrO,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvG,KAAK,EAAE,YAAY,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC7E,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,qBAAqB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;YACvE,MAAM,EAAE,oKAAoK;YAC5K,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACnF,KAAK,EAAE,YAAY,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,aAAa;YACvE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;SAC9F,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,yCAAyC;YAClD,MAAM,EAAE,wNAAwN;YAChO,KAAK,EAAE,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;SAC1F,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,uCAAuC;YAChD,MAAM,EAAE,2KAA2K;YACnL,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/E,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,2CAA2C,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG;YACxF,MAAM,EAAE,yNAAyN;SAClO,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,mBAAmB,CAAC,CAAC,MAAM,OAAO,QAAQ,4BAA4B;YAC/E,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,+CAA+C,EAAE,kDAAkD,CAAC,wBAAwB,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,yBAAyB,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,mBAAmB,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,qBAAqB;SAC1a,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,kEAAkE;YAC3E,MAAM,EAAE,4GAA4G,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;SAClS,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACrG,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO;QACxB,CAAC,CAAC,iEAAiE;QACnE,CAAC,CAAC,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,UAAU,YAAY,eAAe,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,+BAA+B,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,qBAAqB,CAAC,QAAQ;YAC3L,CAAC,CAAC,GAAG,YAAY,SAAS,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,qCAAqC,EAAE,wCAAwC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,cAAc,CAAC;IAE/N,OAAO;QACL,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,qBAAqB;QAC5B,KAAK;QACL,OAAO;QACP,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,IAAI,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa,IAAI,mBAAmB,EAAE;YACnG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE;YACxG,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,EAAE;YAChM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtG,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE;YAC7F,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,QAAQ,GAAG,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACrN;QACD,QAAQ;QACR,QAAQ,EAAE;YACR,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,kDAAkD,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;YAC3G,EAAE,EAAE,EAAE,uBAAuB,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE;YACrF,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,6CAA6C,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE;YACrG,EAAE,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;YACzE,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,iCAAiC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE;YAClG,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE;SAC/E;KACF,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,SAAS,IAAI,CAAC,IAA2C,EAAE,GAAW;IACpE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -30,7 +30,9 @@ export function changeDetectionCheck(context) {
|
|
|
30
30
|
const ngZoneFiles = application.filter((file) => file.imports.some((fact) => fact.specifier === '@angular/core' && fact.bindings.some((binding) => binding.imported === 'NgZone' && !binding.typeOnly)));
|
|
31
31
|
const zoneHelpers = countCalls(specFiles(context), ...ZONE_TEST_HELPERS);
|
|
32
32
|
const findings = [];
|
|
33
|
-
|
|
33
|
+
// Without @angular/core and without components there is nothing that runs on zone.js:
|
|
34
|
+
// an AngularJS app would otherwise be told to go zoneless.
|
|
35
|
+
if (!zoneless && (major === undefined ? components.length > 0 : major >= 20)) {
|
|
34
36
|
findings.push({
|
|
35
37
|
severity: 'medium',
|
|
36
38
|
message: 'Change detection still runs on zone.js',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-detection.js","sourceRoot":"","sources":["../../src/checks/change-detection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAwB,MAAM,cAAc,CAAC;AAE5J,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;AAEnK;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAwB;IAC3D,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9C,MAAM,iBAAiB,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,EAAE,CAAC;IAC7D,MAAM,QAAQ,GAAG,iBAAiB;QAChC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,0CAA0C,CAAC,KAAK,CAAC;QAC3E,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,8CAA8C,EAAE,0DAA0D,CAAC,GAAG,CAAC,CAAC;IAC5I,MAAM,UAAU,GACd,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,YAAY;QAC3C,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACxE,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEhG,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACvH,MAAM,eAAe,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,EAAE,CAAC;IAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IAC1F,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzM,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,iBAAiB,CAAC,CAAC;IAEzE,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"change-detection.js","sourceRoot":"","sources":["../../src/checks/change-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { formatCount, plural } from './context.js';
|
|
1
|
+
import { applicationFiles, formatCount, plural } from './context.js';
|
|
2
2
|
/** How many tangles get a finding of their own; the rest are summarised in one line. */
|
|
3
3
|
const LISTED_TANGLES = 5;
|
|
4
4
|
/**
|
|
@@ -13,6 +13,11 @@ const LISTED_TANGLES = 5;
|
|
|
13
13
|
*/
|
|
14
14
|
export function circularDepsCheck(context) {
|
|
15
15
|
const tangles = context.tangles;
|
|
16
|
+
// No TypeScript application code (an AngularJS app in plain JavaScript):
|
|
17
|
+
// "no cycles" would be a good grade earned by having nothing to look at.
|
|
18
|
+
if (applicationFiles(context).length === 0) {
|
|
19
|
+
return { id: 'circular-deps', title: 'Circular dependencies', grade: 'info', summary: 'No TypeScript application code to check.', metrics: [], findings: [] };
|
|
20
|
+
}
|
|
16
21
|
const filesInTangles = tangles.reduce((sum, tangle) => sum + tangle.files.length, 0);
|
|
17
22
|
const largest = tangles[0]?.files.length ?? 0;
|
|
18
23
|
const findings = tangles.slice(0, LISTED_TANGLES).map((tangle) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circular-deps.js","sourceRoot":"","sources":["../../src/checks/circular-deps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAwB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"circular-deps.js","sourceRoot":"","sources":["../../src/checks/circular-deps.ts"],"names":[],"mappings":"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"}
|
package/dist/checks/context.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AngularJsFacts } from '../angularjs.js';
|
|
1
2
|
import type { BundleStats } from '../bundle.js';
|
|
2
3
|
import type ts from 'typescript';
|
|
3
4
|
import type { PackageCompatibility } from '../compatibility.js';
|
|
@@ -18,6 +19,8 @@ export interface AnalysisContext {
|
|
|
18
19
|
sources: SourceFileFacts[];
|
|
19
20
|
/** External template files and inline `template:` strings. */
|
|
20
21
|
templates: TemplateFact[];
|
|
22
|
+
/** AngularJS code, templates and version. Empty lists for an app without AngularJS. */
|
|
23
|
+
angularJs: AngularJsFacts;
|
|
21
24
|
/** Empty when no typings could be read, neither installed nor from the registry. */
|
|
22
25
|
deprecations: DeprecationIndex;
|
|
23
26
|
/** Where the typings behind `deprecations` came from, and which imported packages had none. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/checks/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/checks/context.ts"],"names":[],"mappings":"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"}
|
package/dist/checks/version.js
CHANGED
|
@@ -41,7 +41,9 @@ export function versionCheck(context) {
|
|
|
41
41
|
id: 'version',
|
|
42
42
|
title: 'Angular version & tooling',
|
|
43
43
|
grade: 'info',
|
|
44
|
-
summary:
|
|
44
|
+
summary: context.angularJs.version || context.angularJs.files.length > 0
|
|
45
|
+
? 'No `@angular/core` yet: the app runs on AngularJS (see AngularJS migration).'
|
|
46
|
+
: 'No `@angular/core` dependency found in package.json.',
|
|
45
47
|
metrics: [{ label: 'Latest Angular', value: latestAngular.major, hint: latestLabel }],
|
|
46
48
|
findings: [],
|
|
47
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/checks/version.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAwB,MAAM,cAAc,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA4D;IAC3F,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,6EAA6E,EAAE;IAC7H,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,kGAAkG,EAAE;IACzJ,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,4DAA4D,EAAE;IAC1G,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,kEAAkE,EAAE;IAC5G,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,8EAA8E,EAAE;IAC3H,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,iFAAiF,EAAE;CAC/H,CAAC;AAEF;;;;GAIG;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAE1E,kHAAkH;AAClH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,uCAAuC,EAAE,6BAA6B,EAAE,0CAA0C,CAAC,CAAC,CAAC;AAEvJ;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAAwB;IACnD,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;IACxC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,2BAA2B,CAAC;IAEvG,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,2BAA2B;YAClC,KAAK,EAAE,MAAM;YACb,OAAO,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/checks/version.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -41,7 +41,8 @@ Options:
|
|
|
41
41
|
--json Print the report as JSON to stdout instead of the summary
|
|
42
42
|
-v, --verbose Print every finding with its files
|
|
43
43
|
--plan Add an upgrade plan to the latest Angular, one major
|
|
44
|
-
at a time, with the migrations this code needs
|
|
44
|
+
at a time, with the migrations this code needs, and
|
|
45
|
+
the migration plan for AngularJS code
|
|
45
46
|
-p, --project <name> Analyse one project of an Angular CLI or Nx workspace.
|
|
46
47
|
Without it, a multi-project workspace also gets a
|
|
47
48
|
per-project table
|