ng-checkup 0.2.0 → 0.4.0
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 +75 -13
- package/dist/angular-versions.d.ts +14 -0
- package/dist/angular-versions.js +157 -0
- package/dist/angular-versions.js.map +1 -0
- package/dist/baseline.d.ts +72 -0
- package/dist/baseline.js +82 -0
- package/dist/baseline.js.map +1 -0
- package/dist/checks/change-detection.js +5 -0
- package/dist/checks/change-detection.js.map +1 -1
- package/dist/checks/circular-deps.js +3 -0
- package/dist/checks/circular-deps.js.map +1 -1
- package/dist/checks/components.js +5 -0
- package/dist/checks/components.js.map +1 -1
- package/dist/checks/deprecated-apis.js +5 -0
- package/dist/checks/deprecated-apis.js.map +1 -1
- package/dist/checks/state.js +5 -0
- package/dist/checks/state.js.map +1 -1
- package/dist/checks/testing.js +3 -0
- package/dist/checks/testing.js.map +1 -1
- package/dist/checks/type-safety.js +8 -0
- package/dist/checks/type-safety.js.map +1 -1
- package/dist/checks/version.js +5 -0
- package/dist/checks/version.js.map +1 -1
- package/dist/cli.d.ts +28 -6
- package/dist/cli.js +100 -12
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +6 -2
- package/dist/config.js +13 -3
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +17 -3
- package/dist/init.js +32 -13
- package/dist/init.js.map +1 -1
- package/dist/plan.d.ts +69 -0
- package/dist/plan.js +183 -0
- package/dist/plan.js.map +1 -0
- package/dist/report/html.js +55 -0
- package/dist/report/html.js.map +1 -1
- package/dist/report/markdown.js +32 -0
- package/dist/report/markdown.js.map +1 -1
- package/dist/report/terminal.js +40 -0
- package/dist/report/terminal.js.map +1 -1
- package/dist/types.d.ts +25 -0
- package/package.json +1 -1
- package/schematics/ng-add/index.cjs +7 -2
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,sFAAsF;AACtF,MAAM,CAAC,MAAM,WAAW,GAAG,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,9 @@ export { renderHtml } from './report/html.js';
|
|
|
5
5
|
export { renderMarkdown } from './report/markdown.js';
|
|
6
6
|
export { overallScore, topPriorities } from './report/summary.js';
|
|
7
7
|
export { CONFIG_FILE, loadConfig, type CheckupConfig } from './config.js';
|
|
8
|
+
export { buildPlan, type PlanItem, type PlanRequirement, type UpgradePlan, type UpgradeStep } from './plan.js';
|
|
9
|
+
export { ANGULAR_VERSIONS, type AngularVersionInfo } from './angular-versions.js';
|
|
10
|
+
export { BASELINE_FILE, baselineIncreases, compareWithBaseline, createBaseline, readBaseline, serializeBaseline, type Baseline, type BaselineComparison, type MeasureDelta, } from './baseline.js';
|
|
8
11
|
export { planInit, type InitChange, type InitOptions, type InitPlan } from './init.js';
|
|
9
12
|
/**
|
|
10
13
|
* The newest Angular major this release of the tool knows about. Used only
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import { buildDeprecationIndex } from './deprecations.js';
|
|
|
12
12
|
import { ignoreMatcher } from './config.js';
|
|
13
13
|
import { collectFiles } from './files.js';
|
|
14
14
|
import { findTangles, readCompilerOptions } from './graph.js';
|
|
15
|
+
import { buildPlan } from './plan.js';
|
|
15
16
|
import { scanSourceFile, scanTemplateFile } from './scan.js';
|
|
16
17
|
import { asRecord, majorOf, readJson, readWorkspace } from './workspace.js';
|
|
17
18
|
// The renderers and the score are public so a script can turn a report from
|
|
@@ -21,6 +22,9 @@ export { renderHtml } from './report/html.js';
|
|
|
21
22
|
export { renderMarkdown } from './report/markdown.js';
|
|
22
23
|
export { overallScore, topPriorities } from './report/summary.js';
|
|
23
24
|
export { CONFIG_FILE, loadConfig } from './config.js';
|
|
25
|
+
export { buildPlan } from './plan.js';
|
|
26
|
+
export { ANGULAR_VERSIONS } from './angular-versions.js';
|
|
27
|
+
export { BASELINE_FILE, baselineIncreases, compareWithBaseline, createBaseline, readBaseline, serializeBaseline, } from './baseline.js';
|
|
24
28
|
export { planInit } from './init.js';
|
|
25
29
|
/**
|
|
26
30
|
* The newest Angular major this release of the tool knows about. Used only
|
|
@@ -49,6 +53,7 @@ export async function runCheckup(root, options = {}) {
|
|
|
49
53
|
const context = await buildContext(absoluteRoot, options);
|
|
50
54
|
const checks = CHECKS.map((check) => check(context));
|
|
51
55
|
const application = context.sources.filter((file) => !file.isSpec);
|
|
56
|
+
const plan = options.plan ? buildPlan(context.workspace, checks, context.latestAngular.major) : undefined;
|
|
52
57
|
return {
|
|
53
58
|
tool: TOOL,
|
|
54
59
|
generatedAt: new Date().toISOString(),
|
|
@@ -63,6 +68,7 @@ export async function runCheckup(root, options = {}) {
|
|
|
63
68
|
},
|
|
64
69
|
checks,
|
|
65
70
|
durationMs: Date.now() - started,
|
|
71
|
+
...(plan ? { plan } : {}),
|
|
66
72
|
};
|
|
67
73
|
}
|
|
68
74
|
/** Gathers everything the checks read. Exported for tests that want to inspect the facts. */
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG5E,4EAA4E;AAC5E,8EAA8E;AAC9E,6BAA6B;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAoD,MAAM,WAAW,CAAC;AAEvF;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAY,CAAC,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAExK,yGAAyG;AACzG,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,UAA0B,EAAE;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts
CHANGED
|
@@ -24,6 +24,12 @@ export interface InitOptions {
|
|
|
24
24
|
version: string;
|
|
25
25
|
/** Replace an existing `checkup` script that runs something else. */
|
|
26
26
|
force?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Serialised baseline of the code as it is now, computed by the caller
|
|
29
|
+
* (the planner never analyses). Written when no baseline exists, and it
|
|
30
|
+
* switches the CI step to `--fail-on regression`.
|
|
31
|
+
*/
|
|
32
|
+
baseline?: string;
|
|
27
33
|
}
|
|
28
34
|
/** One file to write. Content is the whole new file. */
|
|
29
35
|
export interface InitChange {
|
|
@@ -51,7 +57,13 @@ export type PackageManager = 'npm' | 'pnpm' | 'yarn';
|
|
|
51
57
|
* 1. a `checkup` script in `package.json` (and `ng-checkup` in `devDependencies`),
|
|
52
58
|
* 2. `ng-checkup.config.json` with the local report and an empty `ignore` list,
|
|
53
59
|
* 3. the generated reports in `.gitignore`, when there is one,
|
|
54
|
-
* 4. a CI step: a GitHub Actions workflow, or a GitLab CI file to `include
|
|
60
|
+
* 4. a CI step: a GitHub Actions workflow, or a GitLab CI file to `include`,
|
|
61
|
+
* 5. a baseline of today's numbers, when the caller supplies one.
|
|
62
|
+
*
|
|
63
|
+
* With a baseline the CI step runs `--fail-on regression`: it fails only
|
|
64
|
+
* when a number gets worse, so a ten-year-old codebase can adopt it on day
|
|
65
|
+
* one instead of being red until every legacy finding is fixed. Without one
|
|
66
|
+
* it falls back to `--fail-on poor`.
|
|
55
67
|
*
|
|
56
68
|
* Idempotent: on a repository that already has all of it, the plan is empty.
|
|
57
69
|
* It never overwrites a file the user wrote: an existing workflow, config or
|
|
@@ -66,10 +78,12 @@ export type PackageManager = 'npm' | 'pnpm' | 'yarn';
|
|
|
66
78
|
export declare function planInit(files: InitFileSystem, options: InitOptions): InitPlan;
|
|
67
79
|
/** The package manager, from its lockfile. npm when there is none or only npm's. */
|
|
68
80
|
export declare function detectPackageManager(files: InitFileSystem): PackageManager;
|
|
81
|
+
/** What the CI step fails on: a worse number against the baseline, or a poor area without one. */
|
|
82
|
+
export type CiFailOn = 'regression' | 'poor';
|
|
69
83
|
/** A GitHub Actions workflow for the repository's package manager. */
|
|
70
|
-
export declare function githubWorkflow(manager: PackageManager): string;
|
|
84
|
+
export declare function githubWorkflow(manager: PackageManager, failOn?: CiFailOn): string;
|
|
71
85
|
/** A GitLab CI job file for the repository's package manager, meant to be `include`d. */
|
|
72
|
-
export declare function gitlabJob(manager: PackageManager): string;
|
|
86
|
+
export declare function gitlabJob(manager: PackageManager, failOn?: CiFailOn): string;
|
|
73
87
|
/**
|
|
74
88
|
* Serialises `value` with the indentation and final newline of `original`,
|
|
75
89
|
* so `init` changes only the lines it means to and a `git diff` of
|
package/dist/init.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BASELINE_FILE } from './baseline.js';
|
|
1
2
|
import { CONFIG_FILE } from './config.js';
|
|
2
3
|
/** The script `init` adds. Reports come from the config file, so the script stays this short. */
|
|
3
4
|
const CHECKUP_SCRIPT = 'ng-checkup';
|
|
@@ -10,7 +11,13 @@ const CI_REPORTS = ['checkup.md', 'checkup.html'];
|
|
|
10
11
|
* 1. a `checkup` script in `package.json` (and `ng-checkup` in `devDependencies`),
|
|
11
12
|
* 2. `ng-checkup.config.json` with the local report and an empty `ignore` list,
|
|
12
13
|
* 3. the generated reports in `.gitignore`, when there is one,
|
|
13
|
-
* 4. a CI step: a GitHub Actions workflow, or a GitLab CI file to `include
|
|
14
|
+
* 4. a CI step: a GitHub Actions workflow, or a GitLab CI file to `include`,
|
|
15
|
+
* 5. a baseline of today's numbers, when the caller supplies one.
|
|
16
|
+
*
|
|
17
|
+
* With a baseline the CI step runs `--fail-on regression`: it fails only
|
|
18
|
+
* when a number gets worse, so a ten-year-old codebase can adopt it on day
|
|
19
|
+
* one instead of being red until every legacy finding is fixed. Without one
|
|
20
|
+
* it falls back to `--fail-on poor`.
|
|
14
21
|
*
|
|
15
22
|
* Idempotent: on a repository that already has all of it, the plan is empty.
|
|
16
23
|
* It never overwrites a file the user wrote: an existing workflow, config or
|
|
@@ -83,21 +90,33 @@ export function planInit(files, options) {
|
|
|
83
90
|
changes.push({ path: '.gitignore', action: 'update', content: `${gitignore}${separator}\n# ng-checkup reports\n${missing.join('\n')}\n`, summary: 'Keeps the generated reports out of git' });
|
|
84
91
|
}
|
|
85
92
|
}
|
|
93
|
+
// 5. The baseline (written before the CI step, which depends on it).
|
|
94
|
+
const hasBaseline = files.exists(BASELINE_FILE);
|
|
95
|
+
if (!hasBaseline && options.baseline !== undefined) {
|
|
96
|
+
changes.push({ path: BASELINE_FILE, action: 'create', content: options.baseline, summary: "Today's numbers; CI fails only when one gets worse. Commit it" });
|
|
97
|
+
}
|
|
98
|
+
const failOn = hasBaseline || options.baseline !== undefined ? 'regression' : 'poor';
|
|
86
99
|
// 4. CI.
|
|
87
100
|
const ci = resolveCi(files, options.ci ?? 'auto');
|
|
88
101
|
if (ci === 'github') {
|
|
89
102
|
const path = '.github/workflows/ng-checkup.yml';
|
|
90
|
-
if (files.exists(path))
|
|
103
|
+
if (files.exists(path)) {
|
|
91
104
|
notes.push(`Kept the existing ${path}.`);
|
|
105
|
+
if (failOn === 'regression' && (files.read(path) ?? '').includes('--fail-on poor'))
|
|
106
|
+
notes.push(`${path} still runs --fail-on poor. With a baseline, --fail-on regression lets existing code pass and fails only when a number gets worse.`);
|
|
107
|
+
}
|
|
92
108
|
else
|
|
93
|
-
changes.push({ path, action: 'create', content: githubWorkflow(packageManager), summary: 'Runs the checkup on every pull request and uploads the reports' });
|
|
109
|
+
changes.push({ path, action: 'create', content: githubWorkflow(packageManager, failOn), summary: 'Runs the checkup on every pull request and uploads the reports' });
|
|
94
110
|
}
|
|
95
111
|
else if (ci === 'gitlab') {
|
|
96
112
|
const path = 'ng-checkup.gitlab-ci.yml';
|
|
97
|
-
if (files.exists(path))
|
|
113
|
+
if (files.exists(path)) {
|
|
98
114
|
notes.push(`Kept the existing ${path}.`);
|
|
115
|
+
if (failOn === 'regression' && (files.read(path) ?? '').includes('--fail-on poor'))
|
|
116
|
+
notes.push(`${path} still runs --fail-on poor. With a baseline, --fail-on regression lets existing code pass and fails only when a number gets worse.`);
|
|
117
|
+
}
|
|
99
118
|
else
|
|
100
|
-
changes.push({ path, action: 'create', content: gitlabJob(packageManager), summary: 'A GitLab CI job that runs the checkup and keeps the reports as artifacts' });
|
|
119
|
+
changes.push({ path, action: 'create', content: gitlabJob(packageManager, failOn), summary: 'A GitLab CI job that runs the checkup and keeps the reports as artifacts' });
|
|
101
120
|
if (!(files.read('.gitlab-ci.yml') ?? '').includes(path)) {
|
|
102
121
|
notes.push(`Add this to your .gitlab-ci.yml to run it:\n include:\n - local: ${path}`);
|
|
103
122
|
}
|
|
@@ -149,15 +168,15 @@ function binCommand(manager) {
|
|
|
149
168
|
return 'yarn ng-checkup';
|
|
150
169
|
return 'npx ng-checkup';
|
|
151
170
|
}
|
|
152
|
-
/** The CI invocation
|
|
153
|
-
function ciRun(manager) {
|
|
154
|
-
return `${binCommand(manager)} --fail-on
|
|
171
|
+
/** The CI invocation, keeping both report formats. */
|
|
172
|
+
function ciRun(manager, failOn) {
|
|
173
|
+
return `${binCommand(manager)} --fail-on ${failOn} ${CI_REPORTS.map((report) => `--report ${report}`).join(' ')}`;
|
|
155
174
|
}
|
|
156
175
|
/** A GitHub Actions workflow for the repository's package manager. */
|
|
157
|
-
export function githubWorkflow(manager) {
|
|
176
|
+
export function githubWorkflow(manager, failOn = 'poor') {
|
|
158
177
|
const pnpmSetup = manager === 'pnpm' ? ' - uses: pnpm/action-setup@v4\n' : '';
|
|
159
178
|
return `# Added by ng-checkup init. Grades the Angular codebase on every pull request
|
|
160
|
-
# and fails the job when an area turns poor. Reports: see the run's artifacts.
|
|
179
|
+
# and fails the job ${failOn === 'regression' ? 'when a number gets worse than ng-checkup.baseline.json' : 'when an area turns poor'}. Reports: see the run's artifacts.
|
|
161
180
|
name: ng-checkup
|
|
162
181
|
|
|
163
182
|
on:
|
|
@@ -175,7 +194,7 @@ ${pnpmSetup} - uses: actions/setup-node@v4
|
|
|
175
194
|
node-version: 22
|
|
176
195
|
cache: ${manager}
|
|
177
196
|
- run: ${installCommand(manager, true)}
|
|
178
|
-
- run: ${ciRun(manager)}
|
|
197
|
+
- run: ${ciRun(manager, failOn)}
|
|
179
198
|
- uses: actions/upload-artifact@v4
|
|
180
199
|
if: always()
|
|
181
200
|
with:
|
|
@@ -185,7 +204,7 @@ ${CI_REPORTS.map((report) => ` ${report}`).join('\n')}
|
|
|
185
204
|
`;
|
|
186
205
|
}
|
|
187
206
|
/** A GitLab CI job file for the repository's package manager, meant to be `include`d. */
|
|
188
|
-
export function gitlabJob(manager) {
|
|
207
|
+
export function gitlabJob(manager, failOn = 'poor') {
|
|
189
208
|
const corepack = manager === 'pnpm' ? ' - corepack enable\n' : '';
|
|
190
209
|
return `# Added by ng-checkup init. Include it from .gitlab-ci.yml:
|
|
191
210
|
# include:
|
|
@@ -194,7 +213,7 @@ ng-checkup:
|
|
|
194
213
|
image: node:22
|
|
195
214
|
script:
|
|
196
215
|
${corepack} - ${installCommand(manager, true)}
|
|
197
|
-
- ${ciRun(manager)}
|
|
216
|
+
- ${ciRun(manager, failOn)}
|
|
198
217
|
artifacts:
|
|
199
218
|
when: always
|
|
200
219
|
expose_as: ng-checkup report
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/plan.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { type AngularVersionInfo } from './angular-versions.js';
|
|
2
|
+
import type { CheckResult } from './types.js';
|
|
3
|
+
import { type WorkspaceInfo } from './workspace.js';
|
|
4
|
+
/** One requirement of a step, checked against what the project has now. */
|
|
5
|
+
export interface PlanRequirement {
|
|
6
|
+
name: 'Node.js' | 'TypeScript' | 'RxJS' | 'zone.js';
|
|
7
|
+
/** The range the target major accepts, from the registry snapshot. */
|
|
8
|
+
range: string;
|
|
9
|
+
/** The project's version today, when known (installed first, then the package.json range). Never known for Node.js. */
|
|
10
|
+
current?: string;
|
|
11
|
+
/**
|
|
12
|
+
* False when `current` is outside `range`: this step has to move it.
|
|
13
|
+
* Undefined when it cannot be judged (Node.js, or no version known).
|
|
14
|
+
*/
|
|
15
|
+
satisfied?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** One thing to do in a step, specific to this codebase. */
|
|
18
|
+
export interface PlanItem {
|
|
19
|
+
title: string;
|
|
20
|
+
/** The command that does it, when there is one. */
|
|
21
|
+
command?: string;
|
|
22
|
+
detail?: string;
|
|
23
|
+
/** How many places in the code it touches, when the analysis counted them. */
|
|
24
|
+
count?: number;
|
|
25
|
+
}
|
|
26
|
+
/** Moving from one major to the next. */
|
|
27
|
+
export interface UpgradeStep {
|
|
28
|
+
/** The major this step reaches. */
|
|
29
|
+
to: number;
|
|
30
|
+
/** The last released version of that major. */
|
|
31
|
+
version: string;
|
|
32
|
+
command: string;
|
|
33
|
+
requirements: PlanRequirement[];
|
|
34
|
+
items: PlanItem[];
|
|
35
|
+
}
|
|
36
|
+
/** The way from the installed Angular to the target. Attached to `Report.plan`. */
|
|
37
|
+
export interface UpgradePlan {
|
|
38
|
+
from: number;
|
|
39
|
+
to: number;
|
|
40
|
+
/** Things to settle before the first `ng update`. */
|
|
41
|
+
before: PlanItem[];
|
|
42
|
+
steps: UpgradeStep[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Plans the upgrade from the installed Angular major to `target`, one major
|
|
46
|
+
* at a time as `ng update` requires.
|
|
47
|
+
*
|
|
48
|
+
* Each step carries what is the same for everyone (the command, and the
|
|
49
|
+
* Node.js / TypeScript / RxJS / zone.js ranges from the registry snapshot in
|
|
50
|
+
* `angular-versions.ts`) and what is specific to this codebase: the
|
|
51
|
+
* migrations its findings call for, scheduled at the first step where
|
|
52
|
+
* Angular ships them, with the count of places each one touches. A migration
|
|
53
|
+
* the code does not need is left out, which is what makes the plan read as
|
|
54
|
+
* this project's and not as the Angular changelog.
|
|
55
|
+
*
|
|
56
|
+
* Deliberately gives no time estimate. Counts are measured; days would be a
|
|
57
|
+
* guess dressed up as data.
|
|
58
|
+
*
|
|
59
|
+
* @returns Undefined when the Angular version is unknown, or already at or
|
|
60
|
+
* past the target.
|
|
61
|
+
*/
|
|
62
|
+
export declare function buildPlan(workspace: WorkspaceInfo, checks: CheckResult[], target: number, versions?: AngularVersionInfo[]): UpgradePlan | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Whether `version` falls in an npm range of the shapes Angular publishes:
|
|
65
|
+
* alternatives joined by `||`, each a space-separated set of comparators
|
|
66
|
+
* (`>=4.8.2 <5.0`, `^14.20.0`, `~0.15.0`, `>=18.10.0`, `6.0.x`). Enough for
|
|
67
|
+
* the requirement ranges in the snapshot, not a general semver implementation.
|
|
68
|
+
*/
|
|
69
|
+
export declare function satisfies(version: [number, number, number], range: string): boolean;
|
package/dist/plan.js
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { ANGULAR_VERSIONS } from './angular-versions.js';
|
|
2
|
+
import { readInstalledVersion } from './workspace.js';
|
|
3
|
+
/**
|
|
4
|
+
* Plans the upgrade from the installed Angular major to `target`, one major
|
|
5
|
+
* at a time as `ng update` requires.
|
|
6
|
+
*
|
|
7
|
+
* Each step carries what is the same for everyone (the command, and the
|
|
8
|
+
* Node.js / TypeScript / RxJS / zone.js ranges from the registry snapshot in
|
|
9
|
+
* `angular-versions.ts`) and what is specific to this codebase: the
|
|
10
|
+
* migrations its findings call for, scheduled at the first step where
|
|
11
|
+
* Angular ships them, with the count of places each one touches. A migration
|
|
12
|
+
* the code does not need is left out, which is what makes the plan read as
|
|
13
|
+
* this project's and not as the Angular changelog.
|
|
14
|
+
*
|
|
15
|
+
* Deliberately gives no time estimate. Counts are measured; days would be a
|
|
16
|
+
* guess dressed up as data.
|
|
17
|
+
*
|
|
18
|
+
* @returns Undefined when the Angular version is unknown, or already at or
|
|
19
|
+
* past the target.
|
|
20
|
+
*/
|
|
21
|
+
export function buildPlan(workspace, checks, target, versions = ANGULAR_VERSIONS) {
|
|
22
|
+
const from = workspace.angular.major;
|
|
23
|
+
if (from === undefined || from >= target)
|
|
24
|
+
return undefined;
|
|
25
|
+
const measure = (check, id) => checks.find((result) => result.id === check)?.measures?.find((entry) => entry.id === id)?.value ?? 0;
|
|
26
|
+
const metric = (check, label) => {
|
|
27
|
+
const value = checks.find((result) => result.id === check)?.metrics.find((entry) => entry.label === label)?.value;
|
|
28
|
+
return value === undefined ? undefined : String(value);
|
|
29
|
+
};
|
|
30
|
+
const dependencies = workspace.dependencies;
|
|
31
|
+
const has = (name) => name in dependencies;
|
|
32
|
+
const current = {
|
|
33
|
+
typescript: readInstalledVersion(workspace.root, 'typescript') ?? dependencies['typescript'],
|
|
34
|
+
rxjs: readInstalledVersion(workspace.root, 'rxjs') ?? dependencies['rxjs'],
|
|
35
|
+
zoneJs: readInstalledVersion(workspace.root, 'zone.js') ?? dependencies['zone.js'],
|
|
36
|
+
};
|
|
37
|
+
const before = [];
|
|
38
|
+
const overdue = checks.find((result) => result.id === 'deprecated-apis')?.findings.filter((finding) => finding.severity === 'high') ?? [];
|
|
39
|
+
if (overdue.length > 0) {
|
|
40
|
+
before.push({ title: 'Replace APIs deprecated two or more majors ago', detail: 'Any of the next steps may remove them. The deprecated-APIs section lists each one with its replacement.', count: overdue.reduce((sum, finding) => sum + (finding.count ?? 1), 0) });
|
|
41
|
+
}
|
|
42
|
+
if (has('tslint') || has('codelyzer')) {
|
|
43
|
+
before.push({ title: 'Move from TSLint to ESLint', command: 'ng add @angular-eslint/schematics', detail: 'TSLint is deprecated and later versions of the Angular CLI no longer support it.' });
|
|
44
|
+
}
|
|
45
|
+
if (measure('circular-deps', 'files-in-cycles') > 0) {
|
|
46
|
+
before.push({ title: 'Break the import cycles', detail: 'A cycle that works by luck of load order is the first thing a new compiler or bundler breaks, and the failure looks unrelated to the upgrade.', count: measure('circular-deps', 'files-in-cycles') });
|
|
47
|
+
}
|
|
48
|
+
const steps = [];
|
|
49
|
+
/** Each project-specific migration is scheduled once, at the first step where it exists. */
|
|
50
|
+
const scheduled = new Set();
|
|
51
|
+
const once = (key, step, availableFrom, item) => {
|
|
52
|
+
if (!item || scheduled.has(key) || step < availableFrom)
|
|
53
|
+
return [];
|
|
54
|
+
scheduled.add(key);
|
|
55
|
+
return [item];
|
|
56
|
+
};
|
|
57
|
+
const moduleComponents = measure('components', 'module-components');
|
|
58
|
+
const legacyControlFlow = Math.max(measure('components', 'legacy-control-flow'), measure('deprecated-apis', 'legacy-template-directives'));
|
|
59
|
+
const decoratorBindings = measure('components', 'decorator-inputs-outputs');
|
|
60
|
+
const eagerComponents = measure('change-detection', 'eager-components');
|
|
61
|
+
const zoneHelpers = measure('change-detection', 'zone-test-helpers');
|
|
62
|
+
const webpackBuilders = measure('version', 'webpack-builders');
|
|
63
|
+
const onKarma = (metric('testing', 'Unit-test runner') ?? '').includes('Karma');
|
|
64
|
+
const zoneless = metric('change-detection', 'Mode') === 'Zoneless';
|
|
65
|
+
const ngrx = Object.keys(dependencies).filter((name) => name.startsWith('@ngrx/'));
|
|
66
|
+
/**
|
|
67
|
+
* Requirements the project has had to move already. From that step on the
|
|
68
|
+
* project's original version says nothing (it was upgraded), so later steps
|
|
69
|
+
* show the range alone instead of repeating "now 4.3.5" ten times.
|
|
70
|
+
*/
|
|
71
|
+
const moved = new Set();
|
|
72
|
+
const track = (entry) => {
|
|
73
|
+
if (entry.satisfied === false)
|
|
74
|
+
moved.add(entry.name);
|
|
75
|
+
return entry;
|
|
76
|
+
};
|
|
77
|
+
for (let major = from + 1; major <= target; major++) {
|
|
78
|
+
// A major newer than this release's snapshot still gets a step, without requirements.
|
|
79
|
+
const info = versions.find((entry) => entry.major === major) ?? { major, version: `${major}.x`, node: null, typescript: null, rxjs: null, zoneJs: null };
|
|
80
|
+
const unknown = !versions.some((entry) => entry.major === major);
|
|
81
|
+
const packages = [`@angular/core@${major}`, `@angular/cli@${major}`];
|
|
82
|
+
if (has('@angular/material'))
|
|
83
|
+
packages.push(`@angular/material@${major}`);
|
|
84
|
+
else if (has('@angular/cdk'))
|
|
85
|
+
packages.push(`@angular/cdk@${major}`);
|
|
86
|
+
const requirements = [];
|
|
87
|
+
if (info.node)
|
|
88
|
+
requirements.push({ name: 'Node.js', range: info.node });
|
|
89
|
+
if (info.typescript)
|
|
90
|
+
requirements.push(track(requirement('TypeScript', info.typescript, moved.has('TypeScript') ? undefined : current.typescript)));
|
|
91
|
+
if (info.rxjs && has('rxjs'))
|
|
92
|
+
requirements.push(track(requirement('RxJS', info.rxjs, moved.has('RxJS') ? undefined : current.rxjs)));
|
|
93
|
+
if (info.zoneJs && has('zone.js') && !zoneless)
|
|
94
|
+
requirements.push(track(requirement('zone.js', info.zoneJs, moved.has('zone.js') ? undefined : current.zoneJs)));
|
|
95
|
+
const items = [
|
|
96
|
+
...(unknown ? [{ title: 'Check the requirements for this major', detail: 'It was released after this version of ng-checkup. Node.js and TypeScript ranges: angular.dev/reference/versions.' }] : []),
|
|
97
|
+
...(ngrx.length > 0 && major >= 8 ? [{ title: `Update NgRx to ${major} in the same step`, command: `ng update ${ngrx.map((name) => `${name}@${major}`).join(' ')}`, detail: 'NgRx versions follow Angular majors. If that major is not released yet, wait for it before this step.' }] : []),
|
|
98
|
+
...(has('@angular/flex-layout') && major === 16
|
|
99
|
+
? [{ title: 'Replace @angular/flex-layout first', detail: 'Its last release targets Angular 15, so it blocks this step. Use CSS flexbox and grid, or a maintained layout library.' }]
|
|
100
|
+
: []),
|
|
101
|
+
...(has('@angular/material') && from < 15 && major === 15
|
|
102
|
+
? [{ title: 'Angular Material moves to the MDC-based components', detail: 'The old ones stay available as MatLegacy* until 17. Budget time for visual review: spacing, typography and density change.' }]
|
|
103
|
+
: []),
|
|
104
|
+
...(has('@angular/material') && from < 17 && major === 17
|
|
105
|
+
? [{ title: 'The MatLegacy* components are removed', detail: 'Anything still imported from the legacy entry points has to move to the MDC-based components before this step.' }]
|
|
106
|
+
: []),
|
|
107
|
+
...once('standalone', major, 16, moduleComponents > 0 ? { title: 'Convert NgModule components to standalone', command: 'ng generate @angular/core:standalone', detail: 'Three passes: convert declarations, remove unneeded NgModules, switch to standalone bootstrap.', count: moduleComponents } : undefined),
|
|
108
|
+
...once('control-flow', major, 17, legacyControlFlow > 0 ? { title: 'Move templates to built-in control flow', command: 'ng generate @angular/core:control-flow', count: legacyControlFlow } : undefined),
|
|
109
|
+
...once('application-builder', major, 18, webpackBuilders > 0 ? { title: 'Switch to the esbuild application builder', command: 'ng update @angular/cli --name use-application-builder', count: webpackBuilders } : undefined),
|
|
110
|
+
...once('signal-inputs', major, 19, decoratorBindings > 0 ? { title: 'Convert @Input() and @Output() to signal inputs and outputs', command: 'ng generate @angular/core:signal-input-migration && ng generate @angular/core:output-migration', count: decoratorBindings } : undefined),
|
|
111
|
+
...once('vitest', major, 21, onKarma ? { title: 'Move unit tests from Karma to Vitest', detail: 'Vitest is the Angular CLI default from 21 (@angular/build:unit-test). Jasmine-specific calls (spyOn, jasmine.*) need rewriting.' } : undefined),
|
|
112
|
+
...once('zoneless', major, 21, !zoneless
|
|
113
|
+
? {
|
|
114
|
+
title: eagerComponents > 0 ? 'Prepare for zoneless: move components to OnPush, then drop zone.js' : 'Drop zone.js: zoneless is the default from 21',
|
|
115
|
+
detail: `Upgraded apps keep zone.js through provideZoneChangeDetection() until it is removed.${zoneHelpers > 0 ? ` ${zoneHelpers} zone-based test helper calls (fakeAsync, tick) need fake timers instead.` : ''}`,
|
|
116
|
+
count: eagerComponents || undefined,
|
|
117
|
+
}
|
|
118
|
+
: undefined),
|
|
119
|
+
];
|
|
120
|
+
steps.push({ to: major, version: info.version, command: `ng update ${packages.join(' ')}`, requirements, items });
|
|
121
|
+
}
|
|
122
|
+
return { from, to: target, before, steps };
|
|
123
|
+
}
|
|
124
|
+
/** A requirement with the project's current version judged against the range. */
|
|
125
|
+
function requirement(name, range, current) {
|
|
126
|
+
const version = current ? lowestVersionOf(current) : undefined;
|
|
127
|
+
return { name, range, current, satisfied: version ? satisfies(version, range) : undefined };
|
|
128
|
+
}
|
|
129
|
+
/** `[major, minor, patch]` of `1.2.3`, `^1.2`, `~4.3.5`, `>=5`; undefined for anything without a number. */
|
|
130
|
+
function parseVersion(text) {
|
|
131
|
+
const match = /(\d+)(?:\.(\d+|x|\*))?(?:\.(\d+|x|\*))?/.exec(text);
|
|
132
|
+
if (!match)
|
|
133
|
+
return undefined;
|
|
134
|
+
const part = (value) => (value === undefined || value === 'x' || value === '*' ? 0 : Number(value));
|
|
135
|
+
return [Number(match[1]), part(match[2]), part(match[3])];
|
|
136
|
+
}
|
|
137
|
+
/** The lowest version a declared range allows (`^4.3.5` gives 4.3.5), or the version itself. */
|
|
138
|
+
function lowestVersionOf(text) {
|
|
139
|
+
return parseVersion(text.split('||')[0].trim());
|
|
140
|
+
}
|
|
141
|
+
/** Orders two versions. */
|
|
142
|
+
function compare(left, right) {
|
|
143
|
+
return left[0] - right[0] || left[1] - right[1] || left[2] - right[2];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Whether `version` falls in an npm range of the shapes Angular publishes:
|
|
147
|
+
* alternatives joined by `||`, each a space-separated set of comparators
|
|
148
|
+
* (`>=4.8.2 <5.0`, `^14.20.0`, `~0.15.0`, `>=18.10.0`, `6.0.x`). Enough for
|
|
149
|
+
* the requirement ranges in the snapshot, not a general semver implementation.
|
|
150
|
+
*/
|
|
151
|
+
export function satisfies(version, range) {
|
|
152
|
+
return range.split('||').some((alternative) => alternative
|
|
153
|
+
.trim()
|
|
154
|
+
.split(/\s+/)
|
|
155
|
+
.filter(Boolean)
|
|
156
|
+
.every((comparator) => {
|
|
157
|
+
const operator = /^(\^|~|>=|<=|>|<|=)?/.exec(comparator)[0];
|
|
158
|
+
const bound = parseVersion(comparator.slice(operator.length));
|
|
159
|
+
if (!bound)
|
|
160
|
+
return true;
|
|
161
|
+
const order = compare(version, bound);
|
|
162
|
+
switch (operator) {
|
|
163
|
+
case '^':
|
|
164
|
+
return order >= 0 && (bound[0] > 0 ? version[0] === bound[0] : version[1] === bound[1]);
|
|
165
|
+
case '~':
|
|
166
|
+
return order >= 0 && version[0] === bound[0] && version[1] === bound[1];
|
|
167
|
+
case '>=':
|
|
168
|
+
return order >= 0;
|
|
169
|
+
case '>':
|
|
170
|
+
return order > 0;
|
|
171
|
+
case '<=':
|
|
172
|
+
return order <= 0;
|
|
173
|
+
case '<':
|
|
174
|
+
return order < 0;
|
|
175
|
+
default: {
|
|
176
|
+
// A bare or x-range version: `6.0.3` is exact, `6.0.x` and `6.0` match every patch, `6` every minor.
|
|
177
|
+
const significant = comparator.replace(/^=/, '').split('.').filter((part) => part !== 'x' && part !== '*').length;
|
|
178
|
+
return version.slice(0, significant).every((value, index) => value === bound[index]);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=plan.js.map
|
package/dist/plan.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|