ng-checkup 1.0.1 → 1.2.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 +7 -3
- package/dist/angular-versions.js +1 -1
- package/dist/checks/context.d.ts +7 -0
- package/dist/checks/context.js.map +1 -1
- package/dist/checks/deprecated-apis.js +47 -4
- package/dist/checks/deprecated-apis.js.map +1 -1
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +32 -1
- package/dist/cli.js.map +1 -1
- package/dist/compatibility.d.ts +2 -0
- package/dist/compatibility.js +2 -1
- package/dist/compatibility.js.map +1 -1
- package/dist/deprecations.d.ts +19 -0
- package/dist/deprecations.js +31 -7
- package/dist/deprecations.js.map +1 -1
- package/dist/history.d.ts +1 -12
- package/dist/history.js +14 -23
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/next-major.d.ts +59 -0
- package/dist/next-major.js +179 -0
- package/dist/next-major.js.map +1 -0
- package/dist/plan.d.ts +7 -1
- package/dist/plan.js +19 -1
- package/dist/plan.js.map +1 -1
- package/dist/report/charts.d.ts +44 -0
- package/dist/report/charts.js +147 -0
- package/dist/report/charts.js.map +1 -0
- package/dist/report/escape.d.ts +7 -0
- package/dist/report/escape.js +10 -0
- package/dist/report/escape.js.map +1 -0
- package/dist/report/history.d.ts +1 -1
- package/dist/report/history.js +5 -96
- package/dist/report/history.js.map +1 -1
- package/dist/report/html.d.ts +2 -2
- package/dist/report/html.js +20 -5
- package/dist/report/html.js.map +1 -1
- package/dist/types.d.ts +12 -0
- package/package.json +1 -1
package/dist/plan.js
CHANGED
|
@@ -11,13 +11,18 @@ import { ANGULAR_VERSIONS } from './angular-versions.js';
|
|
|
11
11
|
* the code does not need is left out, which is what makes the plan read as
|
|
12
12
|
* this project's and not as the Angular changelog.
|
|
13
13
|
*
|
|
14
|
+
* The first step also lists the imports its major removes, from
|
|
15
|
+
* `nextMajor`: only the next major's typings are compared, since those are
|
|
16
|
+
* what the team meets first and downloading every intermediate major's would
|
|
17
|
+
* make a ten-step plan slow.
|
|
18
|
+
*
|
|
14
19
|
* Deliberately gives no time estimate. Counts are measured; days would be a
|
|
15
20
|
* guess dressed up as data.
|
|
16
21
|
*
|
|
17
22
|
* @returns Undefined when the Angular version is unknown, or already at or
|
|
18
23
|
* past the target.
|
|
19
24
|
*/
|
|
20
|
-
export function buildPlan(workspace, checks, target, versions = ANGULAR_VERSIONS, compatibility = []) {
|
|
25
|
+
export function buildPlan(workspace, checks, target, versions = ANGULAR_VERSIONS, compatibility = [], nextMajor) {
|
|
21
26
|
const from = workspace.angular.major;
|
|
22
27
|
if (from === undefined || from >= target)
|
|
23
28
|
return undefined;
|
|
@@ -132,8 +137,21 @@ export function buildPlan(workspace, checks, target, versions = ANGULAR_VERSIONS
|
|
|
132
137
|
requirements.push(track(requirement('RxJS', info.rxjs, moved.has('RxJS') ? undefined : current.rxjs)));
|
|
133
138
|
if (info.zoneJs && has('zone.js') && !zoneless)
|
|
134
139
|
requirements.push(track(requirement('zone.js', info.zoneJs, moved.has('zone.js') ? undefined : current.zoneJs)));
|
|
140
|
+
const removedHere = nextMajor && nextMajor.major === major && !nextMajor.prerelease ? nextMajor.removed : [];
|
|
135
141
|
const items = [
|
|
136
142
|
...packageItems(major),
|
|
143
|
+
...(removedHere.length > 0
|
|
144
|
+
? [
|
|
145
|
+
{
|
|
146
|
+
title: `Replace the ${removedHere.length === 1 ? 'import' : `${removedHere.length} imports`} Angular ${major} removes`,
|
|
147
|
+
detail: `${removedHere
|
|
148
|
+
.slice(0, 6)
|
|
149
|
+
.map((change) => `${change.name} from ${change.module}`)
|
|
150
|
+
.join(', ')}${removedHere.length > 6 ? `, and ${removedHere.length - 6} more` : ''}. The ${major} typings no longer export them; the deprecated-APIs section lists the files.`,
|
|
151
|
+
count: new Set(removedHere.flatMap((change) => change.refs.map((ref) => ref.path))).size,
|
|
152
|
+
},
|
|
153
|
+
]
|
|
154
|
+
: []),
|
|
137
155
|
...(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.' }] : []),
|
|
138
156
|
...(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.' }] : []),
|
|
139
157
|
...(has('@angular/flex-layout') && major === 16
|
package/dist/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA2B,MAAM,uBAAuB,CAAC;AAkDlF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,SAAS,CACvB,SAAwB,EACxB,MAAqB,EACrB,MAAc,EACd,WAAiC,gBAAgB,EACjD,gBAAwC,EAAE,EAC1C,SAA4B;IAE5B,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,MAAM;QAAE,OAAO,SAAS,CAAC;IAE3D,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAU,EAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAC5J,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,KAAa,EAAsB,EAAE;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,CAAC;QAClH,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;IAC5C,MAAM,GAAG,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC;IAC5D,MAAM,OAAO,GAAG;QACd,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC;QAC1E,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC;QACxD,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC;KACjE,CAAC;IAEF,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,iBAAiB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1I,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gDAAgD,EAAE,MAAM,EAAE,yGAAyG,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACtQ,CAAC;IACD,uEAAuE;IACvE,0EAA0E;IAC1E,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,OAAO,EAAE,iBAAiB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,gHAAgH,EAAE,CAAC,CAAC;IACnO,CAAC;SAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,OAAO,EAAE,mCAAmC,EAAE,MAAM,EAAE,kFAAkF,EAAE,CAAC,CAAC;IACjM,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,+IAA+I,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACjQ,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;QACpF,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,OAAO,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,SAAS,4BAA4B,IAAI,EAAE;YACtF,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;YAC7E,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,6BAA6B,KAAK,CAAC,YAAY,GAAG;SAC1G,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvK,MAAM,YAAY,GAAG,CAAC,KAAa,EAAc,EAAE;QACjD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;gBAAE,SAAS;YAC1G,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,eAAe,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,iBAAiB,KAAK,CAAC,SAAS,6BAA6B,KAAK,GAAG,EAAE,CAAC,CAAC;gBAC5M,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,+BAA+B,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,6BAA6B,KAAK,EAAE;oBACjI,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,iFAAiF,CAAC,CAAC,CAAC,oEAAoE;iBACpL,CAAC,CAAC;gBACH,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,4FAA4F;IAC5F,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,aAAqB,EAAE,IAA0B,EAAc,EAAE;QACxG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,aAAa;YAAE,OAAO,EAAE,CAAC;QACnE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAC3I,MAAM,iBAAiB,GAAG,OAAO,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;IAC5E,MAAM,eAAe,GAAG,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,UAAU,CAAC;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF;;;;OAIG;IACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,KAAsB,EAAmB,EAAE;QACxD,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACpD,sFAAsF;QACtF,MAAM,IAAI,GAAuB,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC7K,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,CAAC,iBAAiB,KAAK,EAAE,EAAE,gBAAgB,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,GAAG,CAAC,mBAAmB,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC;aACrE,IAAI,GAAG,CAAC,cAAc,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;QAErE,MAAM,YAAY,GAAsB,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,IAAI;YAAE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,UAAU;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACpJ,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrI,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEjK,MAAM,WAAW,GAAG,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7G,MAAM,KAAK,GAAe;YACxB,GAAG,YAAY,CAAC,KAAK,CAAC;YACtB,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBACxB,CAAC,CAAC;oBACE;wBACE,KAAK,EAAE,eAAe,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,UAAU,YAAY,KAAK,UAAU;wBACtH,MAAM,EAAE,GAAG,WAAW;6BACnB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;6BACX,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC;6BACvD,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,KAAK,8EAA8E;wBAChL,KAAK,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;qBACzF;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,uCAAuC,EAAE,MAAM,EAAE,kHAAkH,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,KAAK,mBAAmB,EAAE,OAAO,EAAE,aAAa,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,uGAAuG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5R,GAAG,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,KAAK,KAAK,EAAE;gBAC7C,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,MAAM,EAAE,wHAAwH,EAAE,CAAC;gBACrL,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,IAAI,GAAG,EAAE,IAAI,KAAK,KAAK,EAAE;gBACvD,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,oDAAoD,EAAE,MAAM,EAAE,4HAA4H,EAAE,CAAC;gBACzM,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,IAAI,GAAG,EAAE,IAAI,KAAK,KAAK,EAAE;gBACvD,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,uCAAuC,EAAE,MAAM,EAAE,gHAAgH,EAAE,CAAC;gBAChL,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,2CAA2C,EAAE,OAAO,EAAE,sCAAsC,EAAE,MAAM,EAAE,gGAAgG,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/S,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,OAAO,EAAE,wCAAwC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACzM,GAAG,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,2CAA2C,EAAE,OAAO,EAAE,uDAAuD,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7N,GAAG,IAAI,CACL,eAAe,EACf,KAAK,EACL,EAAE,EACF,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,6DAA6D,EAAE,OAAO,EAAE,gGAAgG,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAClP;YACD,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,MAAM,EAAE,iIAAiI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAChP,GAAG,IAAI,CACL,UAAU,EACV,KAAK,EACL,EAAE,EACF,CAAC,QAAQ;gBACP,CAAC,CAAC;oBACE,KAAK,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,oEAAoE,CAAC,CAAC,CAAC,+CAA+C;oBACnJ,MAAM,EAAE,uFAAuF,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,2EAA2E,CAAC,CAAC,CAAC,EAAE,EAAE;oBAClN,KAAK,EAAE,eAAe,IAAI,SAAS;iBACpC;gBACH,CAAC,CAAC,SAAS,CACd;SACF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IACpH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,iFAAiF;AACjF,SAAS,WAAW,CAAC,IAA6B,EAAE,KAAa,EAAE,OAA2B;IAC5F,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC9F,CAAC;AAED,4GAA4G;AAC5G;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,WAAmB;IACzC,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,MAAM;QAAE,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,OAAO,IAAI;SACR,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,iDAAiD,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjF,IAAI,CAAC,KAAK;YAAE,OAAO,UAAU,CAAC;QAC9B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9H,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QAC1C,6EAA6E;QAC7E,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAChE,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,KAAK,GAAG,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,KAAyB,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,gGAAgG;AAChG,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,2BAA2B;AAC3B,SAAS,OAAO,CAAC,IAA8B,EAAE,KAA+B;IAC9E,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,OAAiC,EAAE,KAAa;IACxE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAC5C,cAAc,CAAC,WAAW,CAAC;SACxB,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE;QACpB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,GAAG;gBACN,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,KAAK,GAAG;gBACN,OAAO,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1E,KAAK,IAAI;gBACP,OAAO,KAAK,IAAI,CAAC,CAAC;YACpB,KAAK,GAAG;gBACN,OAAO,KAAK,GAAG,CAAC,CAAC;YACnB,KAAK,IAAI;gBACP,OAAO,KAAK,IAAI,CAAC,CAAC;YACpB,KAAK,GAAG;gBACN,OAAO,KAAK,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC,CAAC;gBACR,qGAAqG;gBACrG,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;gBAClH,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { HistoryPoint, HistoryReport } from '../history.js';
|
|
2
|
+
/** `+3`, `-12`, `±0`: how a number moved, with its sign. */
|
|
3
|
+
export declare function change(first: number, last: number): string;
|
|
4
|
+
/**
|
|
5
|
+
* The measures that moved the most between the first and the last point,
|
|
6
|
+
* by absolute change, for the charts: a history of 40 measures where 35 sit
|
|
7
|
+
* still reads better as the five that did not. A label recorded by two
|
|
8
|
+
* checks appears once, under the first key.
|
|
9
|
+
*/
|
|
10
|
+
export declare function movedMeasures(report: HistoryReport, limit?: number): Array<{
|
|
11
|
+
key: string;
|
|
12
|
+
label: string;
|
|
13
|
+
first: number;
|
|
14
|
+
last: number;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* One line chart as inline SVG: a value per point, missing values leave a
|
|
18
|
+
* gap. The y axis starts at zero (or spans 0 to 100 for the score), so a
|
|
19
|
+
* drop from 412 to 398 looks like the small step it is rather than a cliff.
|
|
20
|
+
* The x axis is time, not the point index: a month without a commit has no
|
|
21
|
+
* point, and spacing the points evenly drew a five-month pause as one step.
|
|
22
|
+
*/
|
|
23
|
+
export declare function lineChart(points: HistoryPoint[], values: Array<number | undefined>, options: {
|
|
24
|
+
title: string;
|
|
25
|
+
max?: number;
|
|
26
|
+
colour: string;
|
|
27
|
+
width?: number;
|
|
28
|
+
generatedAt?: string;
|
|
29
|
+
}): string;
|
|
30
|
+
/** Rules for the charts, on top of the report stylesheet. */
|
|
31
|
+
export declare const CHART_STYLES = "\n.charts { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; margin: 24px 0; }\n.chart { margin: 0; padding: 14px 16px 6px; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; }\n.chart.wide { grid-column: 1 / -1; }\n.chart figcaption { font-weight: 600; font-size: 14px; margin-bottom: 6px; }\n.chart svg { display: block; width: 100%; height: auto; }\n.chart text { fill: var(--muted); font-size: 11px; font-family: inherit; }\n.chart .grid { stroke: var(--border); stroke-width: 1; }\n";
|
|
32
|
+
/**
|
|
33
|
+
* The charts of a history: the score over the full width, then one small
|
|
34
|
+
* chart per measure that moved most, green when it fell (every measure
|
|
35
|
+
* counts debt) and red when it grew. Used by the history page and by the
|
|
36
|
+
* client report's "How the code got here" section.
|
|
37
|
+
*/
|
|
38
|
+
export declare function historyCharts(report: HistoryReport, limit?: number): string;
|
|
39
|
+
/**
|
|
40
|
+
* The client report's history section: one sentence on where the score and
|
|
41
|
+
* Angular version started and where they are, then the charts. Empty for a
|
|
42
|
+
* history of fewer than two points, which has nothing to show.
|
|
43
|
+
*/
|
|
44
|
+
export declare function historySection(report: HistoryReport | undefined): string;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { formatCount } from '../checks/context.js';
|
|
2
|
+
import { escape } from './escape.js';
|
|
3
|
+
/** `+3`, `-12`, `±0`: how a number moved, with its sign. */
|
|
4
|
+
export function change(first, last) {
|
|
5
|
+
const delta = last - first;
|
|
6
|
+
return delta > 0 ? `+${formatCount(delta)}` : delta < 0 ? `-${formatCount(-delta)}` : '±0';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The measures that moved the most between the first and the last point,
|
|
10
|
+
* by absolute change, for the charts: a history of 40 measures where 35 sit
|
|
11
|
+
* still reads better as the five that did not. A label recorded by two
|
|
12
|
+
* checks appears once, under the first key.
|
|
13
|
+
*/
|
|
14
|
+
export function movedMeasures(report, limit = 6) {
|
|
15
|
+
const first = report.points[0];
|
|
16
|
+
const last = report.points.at(-1);
|
|
17
|
+
if (!first || !last)
|
|
18
|
+
return [];
|
|
19
|
+
return Object.keys(report.labels)
|
|
20
|
+
.filter((key) => first.measures[key] !== undefined && last.measures[key] !== undefined)
|
|
21
|
+
.map((key) => ({ key, label: report.labels[key], first: first.measures[key], last: last.measures[key] }))
|
|
22
|
+
.filter((entry) => entry.first !== entry.last)
|
|
23
|
+
.sort((left, right) => Math.abs(right.last - right.first) - Math.abs(left.last - left.first) || left.key.localeCompare(right.key))
|
|
24
|
+
// Two checks record legacy `*ngIf` under the same label; one chart of it is enough.
|
|
25
|
+
.filter((entry, index, all) => all.findIndex((other) => other.label === entry.label) === index)
|
|
26
|
+
.slice(0, limit);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* One line chart as inline SVG: a value per point, missing values leave a
|
|
30
|
+
* gap. The y axis starts at zero (or spans 0 to 100 for the score), so a
|
|
31
|
+
* drop from 412 to 398 looks like the small step it is rather than a cliff.
|
|
32
|
+
* The x axis is time, not the point index: a month without a commit has no
|
|
33
|
+
* point, and spacing the points evenly drew a five-month pause as one step.
|
|
34
|
+
*/
|
|
35
|
+
export function lineChart(points, values, options) {
|
|
36
|
+
// The small charts sit two to a row, so a narrower viewBox keeps their text at the same size as the wide one's.
|
|
37
|
+
const width = options.width ?? 640;
|
|
38
|
+
const height = 170;
|
|
39
|
+
const left = 44;
|
|
40
|
+
const right = 16;
|
|
41
|
+
const top = 14;
|
|
42
|
+
const bottom = 30;
|
|
43
|
+
const known = values.filter((value) => value !== undefined);
|
|
44
|
+
const max = options.max ?? roundUp(Math.max(1, ...known));
|
|
45
|
+
const times = points.map((point) => Date.parse(point.date));
|
|
46
|
+
const first = times[0] ?? 0;
|
|
47
|
+
const span = (times.at(-1) ?? first) - first;
|
|
48
|
+
const xAt = (time) => (span === 0 ? left + (width - left - right) / 2 : left + ((time - first) * (width - left - right)) / span);
|
|
49
|
+
const x = (index) => xAt(times[index] ?? first);
|
|
50
|
+
const y = (value) => top + (height - top - bottom) * (1 - value / max);
|
|
51
|
+
const segments = [[]];
|
|
52
|
+
values.forEach((value, index) => {
|
|
53
|
+
if (value === undefined)
|
|
54
|
+
segments.push([]);
|
|
55
|
+
else
|
|
56
|
+
segments.at(-1).push(`${x(index).toFixed(1)},${y(value).toFixed(1)}`);
|
|
57
|
+
});
|
|
58
|
+
const lines = segments.filter((segment) => segment.length > 1).map((segment) => `<polyline points="${segment.join(' ')}" fill="none" stroke="${options.colour}" stroke-width="2" stroke-linejoin="round"/>`);
|
|
59
|
+
const dots = values.map((value, index) => (value === undefined ? '' : `<circle cx="${x(index).toFixed(1)}" cy="${y(value).toFixed(1)}" r="3" fill="${options.colour}"><title>${escape(`${points[index].date}: ${formatCount(value)}`)}</title></circle>`));
|
|
60
|
+
const labels = timeTicks(first, first + span).map((tick) => ({ ...tick, x: xAt(tick.time) }));
|
|
61
|
+
// "now" marks the last point; a tick closer to it than 60 units would print over it.
|
|
62
|
+
const lastX = x(points.length - 1);
|
|
63
|
+
const tickLabels = labels.filter((tick) => lastX - tick.x >= 60).map((tick) => `<text x="${tick.x.toFixed(1)}" y="${height - 10}" text-anchor="middle">${escape(tick.label)}</text>`);
|
|
64
|
+
// "now" only when the last point is recent: the last commit of a repository untouched for two years is labelled with its month.
|
|
65
|
+
const lastPoint = points.at(-1);
|
|
66
|
+
const recent = lastPoint !== undefined && options.generatedAt !== undefined && Math.abs(Date.parse(options.generatedAt) - Date.parse(lastPoint.date)) <= 31 * 24 * 3600 * 1000;
|
|
67
|
+
// Anchored at its end when the point sits at the right edge, where a centred "2023-03" would be cut off.
|
|
68
|
+
if (lastPoint)
|
|
69
|
+
tickLabels.push(`<text x="${lastX.toFixed(1)}" y="${height - 10}" text-anchor="${points.length > 1 ? 'end' : 'middle'}">${points.length > 1 && recent ? 'now' : escape(lastPoint.date.slice(0, 7))}</text>`);
|
|
70
|
+
// Half of an odd maximum (15) is 7.5; rounding it to 8 would put the label off its line.
|
|
71
|
+
const grid = [0, max / 2, max].map((value) => `<line x1="${left}" x2="${width - right}" y1="${y(value).toFixed(1)}" y2="${y(value).toFixed(1)}" class="grid"/><text x="${left - 8}" y="${(y(value) + 4).toFixed(1)}" text-anchor="end">${Number.isInteger(value) ? formatCount(value) : value.toFixed(1)}</text>`);
|
|
72
|
+
return `<figure class="chart"><figcaption>${escape(options.title)}</figcaption><svg viewBox="0 0 ${width} ${height}" role="img" aria-label="${escape(options.title)}">${grid.join('')}${lines.join('')}${dots.join('')}${tickLabels.join('')}</svg></figure>`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Labels for the time axis: the first of every `step` months between `from`
|
|
76
|
+
* and `to` (epoch milliseconds), the step chosen so there are at most five,
|
|
77
|
+
* as `2024` when the step is a year and `2024-07` otherwise. A history of
|
|
78
|
+
* three years reads by year, one of six months by month.
|
|
79
|
+
*/
|
|
80
|
+
function timeTicks(from, to) {
|
|
81
|
+
const start = new Date(from);
|
|
82
|
+
const months = (new Date(to).getUTCFullYear() - start.getUTCFullYear()) * 12 + new Date(to).getUTCMonth() - start.getUTCMonth();
|
|
83
|
+
const step = [1, 2, 3, 6, 12, 24].find((candidate) => months / candidate <= 5) ?? 24;
|
|
84
|
+
const ticks = [];
|
|
85
|
+
for (let year = start.getUTCFullYear(), month = start.getUTCMonth() + 1;; month++) {
|
|
86
|
+
if (month === 12) {
|
|
87
|
+
year++;
|
|
88
|
+
month = 0;
|
|
89
|
+
}
|
|
90
|
+
const time = Date.UTC(year, month, 1);
|
|
91
|
+
if (time > to)
|
|
92
|
+
break;
|
|
93
|
+
// Aligned to the calendar: every January for a yearly step, every January and July for a half-yearly one.
|
|
94
|
+
if ((year * 12 + month) % step === 0)
|
|
95
|
+
ticks.push({ time, label: step % 12 === 0 ? String(year) : `${year}-${String(month + 1).padStart(2, '0')}` });
|
|
96
|
+
}
|
|
97
|
+
return ticks;
|
|
98
|
+
}
|
|
99
|
+
/** The next round number (1, 1.5, 2, 3, 4, 5, 6 or 8 times a power of ten) at or above `value`, so an axis ends on 3 000 rather than 2 896. */
|
|
100
|
+
function roundUp(value) {
|
|
101
|
+
const power = 10 ** Math.floor(Math.log10(value));
|
|
102
|
+
return ([1, 1.5, 2, 3, 4, 5, 6, 8, 10].map((step) => step * power).find((candidate) => candidate >= value) ?? 10 * power);
|
|
103
|
+
}
|
|
104
|
+
/** Rules for the charts, on top of the report stylesheet. */
|
|
105
|
+
export const CHART_STYLES = `
|
|
106
|
+
.charts { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; margin: 24px 0; }
|
|
107
|
+
.chart { margin: 0; padding: 14px 16px 6px; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; }
|
|
108
|
+
.chart.wide { grid-column: 1 / -1; }
|
|
109
|
+
.chart figcaption { font-weight: 600; font-size: 14px; margin-bottom: 6px; }
|
|
110
|
+
.chart svg { display: block; width: 100%; height: auto; }
|
|
111
|
+
.chart text { fill: var(--muted); font-size: 11px; font-family: inherit; }
|
|
112
|
+
.chart .grid { stroke: var(--border); stroke-width: 1; }
|
|
113
|
+
`;
|
|
114
|
+
/**
|
|
115
|
+
* The charts of a history: the score over the full width, then one small
|
|
116
|
+
* chart per measure that moved most, green when it fell (every measure
|
|
117
|
+
* counts debt) and red when it grew. Used by the history page and by the
|
|
118
|
+
* client report's "How the code got here" section.
|
|
119
|
+
*/
|
|
120
|
+
export function historyCharts(report, limit = 6) {
|
|
121
|
+
const moved = movedMeasures(report, limit);
|
|
122
|
+
return [
|
|
123
|
+
lineChart(report.points, report.points.map((point) => point.score), { title: 'Score', max: 100, colour: 'var(--accent)', generatedAt: report.generatedAt }).replace('class="chart"', 'class="chart wide"'),
|
|
124
|
+
...moved.map((entry) => lineChart(report.points, report.points.map((point) => point.measures[entry.key]), { title: `${entry.label} (${change(entry.first, entry.last)})`, colour: entry.last < entry.first ? 'var(--good)' : 'var(--poor)', width: 420, generatedAt: report.generatedAt })),
|
|
125
|
+
].join('\n');
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The client report's history section: one sentence on where the score and
|
|
129
|
+
* Angular version started and where they are, then the charts. Empty for a
|
|
130
|
+
* history of fewer than two points, which has nothing to show.
|
|
131
|
+
*/
|
|
132
|
+
export function historySection(report) {
|
|
133
|
+
const first = report?.points[0];
|
|
134
|
+
const last = report?.points.at(-1);
|
|
135
|
+
if (!report || !first || !last || report.points.length < 2)
|
|
136
|
+
return '';
|
|
137
|
+
const months = Math.max(1, Math.round((Date.parse(last.date) - Date.parse(first.date)) / (30.44 * 24 * 3600 * 1000)));
|
|
138
|
+
const scores = first.score !== undefined && last.score !== undefined ? (first.score === last.score ? `the score stayed at ${first.score}` : `the score went from ${first.score} to ${last.score}`) : undefined;
|
|
139
|
+
const versions = first.angularVersion && last.angularVersion && first.angularVersion !== last.angularVersion ? `Angular from ${first.angularVersion} to ${last.angularVersion}` : undefined;
|
|
140
|
+
const sentence = [scores, versions].filter(Boolean).join(', and ');
|
|
141
|
+
return `<section aria-labelledby="history-title">
|
|
142
|
+
<h2 id="history-title" class="section-title">How the code got here</h2>
|
|
143
|
+
<p class="check-summary">${escape(`Over the last ${months === 1 ? 'month' : `${months} months`}${sentence ? `, ${sentence}` : ''}. One checkup per month from the git history; the charts show the score and the measures that moved most. Known vulnerabilities are left out of these scores, since only today's run looks them up, so the last point can differ from the score above.`)}</p>
|
|
144
|
+
<div class="charts">${historyCharts(report)}</div>
|
|
145
|
+
</section>`;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=charts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts.js","sourceRoot":"","sources":["../../src/report/charts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,4DAA4D;AAC5D,MAAM,UAAU,MAAM,CAAC,KAAa,EAAE,IAAY;IAChD,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;IAC3B,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,KAAK,GAAG,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;SAC9B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;SACtF,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAE,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAE,EAAE,CAAC,CAAC;SAC3G,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC;SAC7C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClI,oFAAoF;SACnF,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;SAC9F,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,MAAsB,EAAE,MAAiC,EAAE,OAA8F;IACjL,gHAAgH;IAChH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;IACnC,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC;IAC7C,MAAM,GAAG,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACjJ,MAAM,CAAC,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;IAChE,MAAM,CAAC,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAe,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,IAAI,KAAK,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;YACtC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,MAAM,8CAA8C,CAAC,CAAC;IAC7M,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,OAAO,CAAC,MAAM,YAAY,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC5P,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,qFAAqF;IACrF,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,MAAM,GAAG,EAAE,0BAA0B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtL,gIAAgI;IAChI,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/K,yGAAyG;IACzG,IAAI,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,MAAM,GAAG,EAAE,kBAAkB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5N,yFAAyF;IACzF,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,IAAI,SAAS,KAAK,GAAG,KAAK,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnT,OAAO,qCAAqC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,kCAAkC,KAAK,IAAI,MAAM,4BAA4B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC;AAChQ,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,IAAY,EAAE,EAAU;IACzC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAChI,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,GAAG,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACrF,MAAM,KAAK,GAA2C,EAAE,CAAC;IACzD,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,GAAI,KAAK,EAAE,EAAE,CAAC;QACnF,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,IAAI,EAAE,CAAC;YACP,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,IAAI,GAAG,EAAE;YAAE,MAAM;QACrB,0GAA0G;QAC1G,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACtJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+IAA+I;AAC/I,SAAS,OAAO,CAAC,KAAa;IAC5B,MAAM,KAAK,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;AAC5H,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;CAQ3B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,KAAK,GAAG,CAAC;IAC5D,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3C,OAAO;QACL,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,oBAAoB,CAAC;QAC1M,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CACnQ;KACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAiC;IAC9D,MAAM,KAAK,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtH,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,KAAK,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/M,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,cAAc,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5L,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnE,OAAO;;+BAEsB,MAAM,CAAC,iBAAiB,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,wPAAwP,CAAC;0BACnW,aAAa,CAAC,MAAM,CAAC;aAClC,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML escaping for every HTML renderer. A module of its own so that the
|
|
3
|
+
* chart module can use it without importing the full report renderer, which
|
|
4
|
+
* imports the charts in turn.
|
|
5
|
+
*/
|
|
6
|
+
/** HTML-escapes text for element content and double-quoted attributes. */
|
|
7
|
+
export declare function escape(text: string): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML escaping for every HTML renderer. A module of its own so that the
|
|
3
|
+
* chart module can use it without importing the full report renderer, which
|
|
4
|
+
* imports the charts in turn.
|
|
5
|
+
*/
|
|
6
|
+
/** HTML-escapes text for element content and double-quoted attributes. */
|
|
7
|
+
export function escape(text) {
|
|
8
|
+
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=escape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escape.js","sourceRoot":"","sources":["../../src/report/escape.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,0EAA0E;AAC1E,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChI,CAAC"}
|
package/dist/report/history.d.ts
CHANGED
package/dist/report/history.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import { formatCount } from '../checks/context.js';
|
|
2
|
-
import { movedMeasures } from '
|
|
3
|
-
import { escape
|
|
2
|
+
import { change, CHART_STYLES, historyCharts, movedMeasures } from './charts.js';
|
|
3
|
+
import { escape } from './escape.js';
|
|
4
|
+
import { STYLES } from './html.js';
|
|
4
5
|
import { palette } from './terminal.js';
|
|
5
6
|
/** A point's commit as the reports show it: seven characters, or `working tree`. */
|
|
6
7
|
function shortCommit(point) {
|
|
7
8
|
return point.commit === 'working tree' ? 'now' : point.commit.slice(0, 7);
|
|
8
9
|
}
|
|
9
|
-
/** `+3`, `-12`, `±0`: how a number moved, with its sign. */
|
|
10
|
-
function change(first, last) {
|
|
11
|
-
const delta = last - first;
|
|
12
|
-
return delta > 0 ? `+${formatCount(delta)}` : delta < 0 ? `-${formatCount(-delta)}` : '±0';
|
|
13
|
-
}
|
|
14
10
|
/**
|
|
15
11
|
* `ng-checkup history` for a terminal: one line per point (date, commit,
|
|
16
12
|
* Angular, score, lines of code), then the measures that moved the most
|
|
@@ -50,89 +46,6 @@ export function renderHistoryMarkdown(report) {
|
|
|
50
46
|
}
|
|
51
47
|
return `${lines.join('\n')}\n`;
|
|
52
48
|
}
|
|
53
|
-
/**
|
|
54
|
-
* One line chart as inline SVG: a value per point, missing values leave a
|
|
55
|
-
* gap. The y axis starts at zero (or spans 0 to 100 for the score), so a
|
|
56
|
-
* drop from 412 to 398 looks like the small step it is rather than a cliff.
|
|
57
|
-
* The x axis is time, not the point index: a month without a commit has no
|
|
58
|
-
* point, and spacing the points evenly drew a five-month pause as one step.
|
|
59
|
-
*/
|
|
60
|
-
function lineChart(points, values, options) {
|
|
61
|
-
// The small charts sit two to a row, so a narrower viewBox keeps their text at the same size as the wide one's.
|
|
62
|
-
const width = options.width ?? 640;
|
|
63
|
-
const height = 170;
|
|
64
|
-
const left = 44;
|
|
65
|
-
const right = 16;
|
|
66
|
-
const top = 14;
|
|
67
|
-
const bottom = 30;
|
|
68
|
-
const known = values.filter((value) => value !== undefined);
|
|
69
|
-
const max = options.max ?? roundUp(Math.max(1, ...known));
|
|
70
|
-
const times = points.map((point) => Date.parse(point.date));
|
|
71
|
-
const first = times[0] ?? 0;
|
|
72
|
-
const span = (times.at(-1) ?? first) - first;
|
|
73
|
-
const xAt = (time) => (span === 0 ? left + (width - left - right) / 2 : left + ((time - first) * (width - left - right)) / span);
|
|
74
|
-
const x = (index) => xAt(times[index] ?? first);
|
|
75
|
-
const y = (value) => top + (height - top - bottom) * (1 - value / max);
|
|
76
|
-
const segments = [[]];
|
|
77
|
-
values.forEach((value, index) => {
|
|
78
|
-
if (value === undefined)
|
|
79
|
-
segments.push([]);
|
|
80
|
-
else
|
|
81
|
-
segments.at(-1).push(`${x(index).toFixed(1)},${y(value).toFixed(1)}`);
|
|
82
|
-
});
|
|
83
|
-
const lines = segments.filter((segment) => segment.length > 1).map((segment) => `<polyline points="${segment.join(' ')}" fill="none" stroke="${options.colour}" stroke-width="2" stroke-linejoin="round"/>`);
|
|
84
|
-
const dots = values.map((value, index) => (value === undefined ? '' : `<circle cx="${x(index).toFixed(1)}" cy="${y(value).toFixed(1)}" r="3" fill="${options.colour}"><title>${escape(`${points[index].date}: ${formatCount(value)}`)}</title></circle>`));
|
|
85
|
-
const labels = timeTicks(first, first + span).map((tick) => ({ ...tick, x: xAt(tick.time) }));
|
|
86
|
-
// "now" marks the last point; a tick closer to it than 60 units would print over it.
|
|
87
|
-
const lastX = x(points.length - 1);
|
|
88
|
-
const tickLabels = labels.filter((tick) => lastX - tick.x >= 60).map((tick) => `<text x="${tick.x.toFixed(1)}" y="${height - 10}" text-anchor="middle">${escape(tick.label)}</text>`);
|
|
89
|
-
if (points.length > 0)
|
|
90
|
-
tickLabels.push(`<text x="${lastX.toFixed(1)}" y="${height - 10}" text-anchor="middle">${points.length === 1 ? escape(points[0].date.slice(0, 7)) : 'now'}</text>`);
|
|
91
|
-
// Half of an odd maximum (15) is 7.5; rounding it to 8 would put the label off its line.
|
|
92
|
-
const grid = [0, max / 2, max].map((value) => `<line x1="${left}" x2="${width - right}" y1="${y(value).toFixed(1)}" y2="${y(value).toFixed(1)}" class="grid"/><text x="${left - 8}" y="${(y(value) + 4).toFixed(1)}" text-anchor="end">${Number.isInteger(value) ? formatCount(value) : value.toFixed(1)}</text>`);
|
|
93
|
-
return `<figure class="chart"><figcaption>${escape(options.title)}</figcaption><svg viewBox="0 0 ${width} ${height}" role="img" aria-label="${escape(options.title)}">${grid.join('')}${lines.join('')}${dots.join('')}${tickLabels.join('')}</svg></figure>`;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Labels for the time axis: the first of every `step` months between `from`
|
|
97
|
-
* and `to` (epoch milliseconds), the step chosen so there are at most five,
|
|
98
|
-
* as `2024` when the step is a year and `2024-07` otherwise. A history of
|
|
99
|
-
* three years reads by year, one of six months by month.
|
|
100
|
-
*/
|
|
101
|
-
function timeTicks(from, to) {
|
|
102
|
-
const start = new Date(from);
|
|
103
|
-
const months = (new Date(to).getUTCFullYear() - start.getUTCFullYear()) * 12 + new Date(to).getUTCMonth() - start.getUTCMonth();
|
|
104
|
-
const step = [1, 2, 3, 6, 12, 24].find((candidate) => months / candidate <= 5) ?? 24;
|
|
105
|
-
const ticks = [];
|
|
106
|
-
for (let year = start.getUTCFullYear(), month = start.getUTCMonth() + 1;; month++) {
|
|
107
|
-
if (month === 12) {
|
|
108
|
-
year++;
|
|
109
|
-
month = 0;
|
|
110
|
-
}
|
|
111
|
-
const time = Date.UTC(year, month, 1);
|
|
112
|
-
if (time > to)
|
|
113
|
-
break;
|
|
114
|
-
// Aligned to the calendar: every January for a yearly step, every January and July for a half-yearly one.
|
|
115
|
-
if ((year * 12 + month) % step === 0)
|
|
116
|
-
ticks.push({ time, label: step % 12 === 0 ? String(year) : `${year}-${String(month + 1).padStart(2, '0')}` });
|
|
117
|
-
}
|
|
118
|
-
return ticks;
|
|
119
|
-
}
|
|
120
|
-
/** The next round number (1, 1.5, 2, 3, 4, 5, 6 or 8 times a power of ten) at or above `value`, so an axis ends on 3 000 rather than 2 896. */
|
|
121
|
-
function roundUp(value) {
|
|
122
|
-
const power = 10 ** Math.floor(Math.log10(value));
|
|
123
|
-
return ([1, 1.5, 2, 3, 4, 5, 6, 8, 10].map((step) => step * power).find((candidate) => candidate >= value) ?? 10 * power);
|
|
124
|
-
}
|
|
125
|
-
/** Rules for the charts, on top of the report stylesheet. */
|
|
126
|
-
const HISTORY_STYLES = `
|
|
127
|
-
.charts { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; margin: 24px 0; }
|
|
128
|
-
.chart { margin: 0; padding: 14px 16px 6px; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; }
|
|
129
|
-
.chart.wide { grid-column: 1 / -1; }
|
|
130
|
-
.chart figcaption { font-weight: 600; font-size: 14px; margin-bottom: 6px; }
|
|
131
|
-
.chart svg { display: block; width: 100%; height: auto; }
|
|
132
|
-
.chart text { fill: var(--muted); font-size: 11px; font-family: inherit; }
|
|
133
|
-
.chart .grid { stroke: var(--border); stroke-width: 1; }
|
|
134
|
-
h2 { margin: 36px 0 12px; font-size: 20px; }
|
|
135
|
-
`;
|
|
136
49
|
/**
|
|
137
50
|
* `ng-checkup history --report x.html`: a self-contained page with the score
|
|
138
51
|
* over time, one small chart per measure that moved most, and the table of
|
|
@@ -140,10 +53,6 @@ h2 { margin: 36px 0 12px; font-size: 20px; }
|
|
|
140
53
|
*/
|
|
141
54
|
export function renderHistoryHtml(report) {
|
|
142
55
|
const moved = movedMeasures(report);
|
|
143
|
-
const charts = [
|
|
144
|
-
lineChart(report.points, report.points.map((point) => point.score), { title: 'Score', max: 100, colour: 'var(--accent)' }).replace('class="chart"', 'class="chart wide"'),
|
|
145
|
-
...moved.map((entry) => lineChart(report.points, report.points.map((point) => point.measures[entry.key]), { title: `${entry.label} (${change(entry.first, entry.last)})`, colour: entry.last < entry.first ? 'var(--good)' : 'var(--poor)', width: 420 })),
|
|
146
|
-
];
|
|
147
56
|
const rows = report.points
|
|
148
57
|
.map((point) => `<tr><td>${escape(point.date)}</td><td><code>${escape(shortCommit(point))}</code></td><td>${escape(point.angularVersion ?? '-')}</td><td class="num">${point.score ?? '-'}</td><td class="num">${formatCount(point.linesOfCode)}</td></tr>`)
|
|
149
58
|
.join('');
|
|
@@ -153,7 +62,7 @@ export function renderHistoryHtml(report) {
|
|
|
153
62
|
<meta charset="utf-8">
|
|
154
63
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
155
64
|
<title>History of ${escape(report.root)}</title>
|
|
156
|
-
<style>${STYLES}${
|
|
65
|
+
<style>${STYLES}${CHART_STYLES}h2 { margin: 36px 0 12px; font-size: 20px; }</style>
|
|
157
66
|
</head>
|
|
158
67
|
<body>
|
|
159
68
|
<main>
|
|
@@ -162,7 +71,7 @@ export function renderHistoryHtml(report) {
|
|
|
162
71
|
<h1>${escape(report.root)}</h1>
|
|
163
72
|
<p class="meta">${report.points.length} points, one per month back from now. Generated ${escape(report.generatedAt.slice(0, 10))} by ${escape(report.tool.name)} ${escape(report.tool.version)}.</p>
|
|
164
73
|
</div></header>
|
|
165
|
-
<section class="charts">${
|
|
74
|
+
<section class="charts">${historyCharts(report)}</section>
|
|
166
75
|
${moved.length === 0 ? '<p class="meta">No measure moved between the first point and now.</p>' : ''}
|
|
167
76
|
<h2>Points</h2>
|
|
168
77
|
<div class="table-wrap"><table class="projects"><thead><tr><th>Date</th><th>Commit</th><th>Angular</th><th class="num">Score</th><th class="num">Lines of code</th></tr></thead><tbody>${rows}</tbody></table></div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/report/history.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/report/history.ts"],"names":[],"mappings":"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"}
|
package/dist/report/html.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Report } from '../types.js';
|
|
2
|
+
export { escape };
|
|
3
|
+
import { escape } from './escape.js';
|
|
2
4
|
/**
|
|
3
5
|
* Renders the report as one self-contained HTML file.
|
|
4
6
|
*
|
|
@@ -10,8 +12,6 @@ import type { Report } from '../types.js';
|
|
|
10
12
|
* "save as PDF" is how many readers will pass it on.
|
|
11
13
|
*/
|
|
12
14
|
export declare function renderHtml(report: Report): string;
|
|
13
|
-
/** HTML-escapes text for element content and double-quoted attributes. */
|
|
14
|
-
export declare function escape(text: string): string;
|
|
15
15
|
/**
|
|
16
16
|
* The stylesheet. Colours are tokens on `:root`, redefined for dark mode, so
|
|
17
17
|
* the grade and severity colours stay legible on both backgrounds.
|
package/dist/report/html.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { formatCount, plural } from '../checks/context.js';
|
|
2
|
+
export { escape };
|
|
3
|
+
import { CHART_STYLES, historySection } from './charts.js';
|
|
4
|
+
import { escape } from './escape.js';
|
|
2
5
|
import { renderNotes } from './notes.js';
|
|
3
6
|
import { formatDuration, formatLocation, gradeLabel, kindLabel, migrationTarget, overallScore, projectAreas, remainingCount, SCORE_EXPLANATION, severityLabel, topPriorities } from './summary.js';
|
|
4
7
|
/**
|
|
@@ -115,6 +118,10 @@ function renderClientHtml(report, client) {
|
|
|
115
118
|
urgent.length > 0 ? `The most urgent: ${urgent.map(({ finding }) => clause(finding.message)).join('; ')}.` : undefined,
|
|
116
119
|
].filter((sentence) => sentence !== undefined);
|
|
117
120
|
const date = report.generatedAt.slice(0, 10);
|
|
121
|
+
// Two figures 1.0 and 1.1 added: known vulnerabilities, and what the next major removes among the imports.
|
|
122
|
+
const vulnerabilities = report.checks.find((check) => check.id === 'security')?.metrics.find((metric) => metric.label === 'Known vulnerabilities');
|
|
123
|
+
const nextMajor = report.checks.find((check) => check.id === 'deprecated-apis')?.metrics.find((metric) => /^Angular \d+$/.test(metric.label));
|
|
124
|
+
const hotspots = report.checks.find((check) => check.id === 'architecture')?.findings.find((finding) => finding.message.startsWith('Hotspots'));
|
|
118
125
|
const places = (finding) => (finding.count !== undefined ? formatCount(finding.count) : finding.files && finding.files.length > 0 ? formatCount(finding.files.length) : '-');
|
|
119
126
|
return `<!doctype html>
|
|
120
127
|
<html lang="en">
|
|
@@ -123,7 +130,7 @@ function renderClientHtml(report, client) {
|
|
|
123
130
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
124
131
|
<meta name="generator" content="${escape(`${report.tool.name} ${report.tool.version}`)}">
|
|
125
132
|
<title>${escape(checkName)}: ${escape(client.name)}</title>
|
|
126
|
-
<style>${STYLES}${CLIENT_STYLES}</style>
|
|
133
|
+
<style>${STYLES}${CLIENT_STYLES}${report.history ? CHART_STYLES : ''}</style>
|
|
127
134
|
</head>
|
|
128
135
|
<body>
|
|
129
136
|
<main>
|
|
@@ -154,6 +161,8 @@ function renderClientHtml(report, client) {
|
|
|
154
161
|
['Angular', project.angularVersion ?? '-', plan ? `latest is ${plan.to}` : ''],
|
|
155
162
|
['Upgrade steps', plan ? formatCount(plan.steps.length) : '-', 'one major at a time'],
|
|
156
163
|
]),
|
|
164
|
+
...(vulnerabilities && vulnerabilities.value !== 'not checked' ? [['Known vulnerabilities', String(vulnerabilities.value), 'in direct dependencies, from osv.dev']] : []),
|
|
165
|
+
...(nextMajor ? [[`Next: ${nextMajor.label}`, `${String(nextMajor.value).split(',')[0]}`, 'imports the next major no longer exports']] : []),
|
|
157
166
|
['To act on', formatCount(actions.length), `${formatCount(actions.filter(({ finding }) => finding.severity === 'high').length)} high priority`],
|
|
158
167
|
['Code', formatCount(project.linesOfCode), `lines in ${formatCount(project.sourceFiles + (project.javascriptFiles ?? 0))} files`],
|
|
159
168
|
]
|
|
@@ -162,6 +171,8 @@ function renderClientHtml(report, client) {
|
|
|
162
171
|
</dl>
|
|
163
172
|
</section>
|
|
164
173
|
|
|
174
|
+
${historySection(report.history)}
|
|
175
|
+
|
|
165
176
|
${actions.length === 0
|
|
166
177
|
? ''
|
|
167
178
|
: `<section aria-labelledby="actions-title">
|
|
@@ -203,6 +214,14 @@ function renderClientHtml(report, client) {
|
|
|
203
214
|
</section>`
|
|
204
215
|
: ''}
|
|
205
216
|
|
|
217
|
+
${hotspots
|
|
218
|
+
? `<section aria-labelledby="hotspots-title">
|
|
219
|
+
<h2 id="hotspots-title" class="section-title">Where refactoring pays off first</h2>
|
|
220
|
+
<p class="check-summary">${inline(hotspots.detail ?? '')}</p>
|
|
221
|
+
<ul class="files">${(hotspots.files ?? []).map((file) => `<li><code>${escape(formatLocation(file))}</code></li>`).join('')}</ul>
|
|
222
|
+
</section>`
|
|
223
|
+
: ''}
|
|
224
|
+
|
|
206
225
|
${client.notes ? `<section class="notes" aria-labelledby="notes-title">\n <h2 id="notes-title" class="section-title">Recommendations${client.preparedBy ? ` by ${escape(client.preparedBy.split(',')[0].trim())}` : ''}</h2>\n ${renderNotes(client.notes)}\n </section>` : ''}
|
|
207
226
|
|
|
208
227
|
<div class="appendix">
|
|
@@ -350,10 +369,6 @@ function findingItem(finding) {
|
|
|
350
369
|
function inline(text) {
|
|
351
370
|
return escape(text).replace(/`([^`]+)`/g, '<code>$1</code>');
|
|
352
371
|
}
|
|
353
|
-
/** HTML-escapes text for element content and double-quoted attributes. */
|
|
354
|
-
export function escape(text) {
|
|
355
|
-
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
356
|
-
}
|
|
357
372
|
/** Extra rules for the client report: the cover, the lead paragraph, notes, and page breaks for print. */
|
|
358
373
|
const CLIENT_STYLES = `
|
|
359
374
|
.cover { position: relative; padding: 48px 0 40px; border-bottom: 1px solid var(--border); }
|