@ng-prism/plugin-coverage 22.2.0 → 22.3.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 +6 -6
- package/dist/coverage-contributions.d.ts.map +1 -1
- package/dist/coverage-contributions.js +3 -6
- package/dist/coverage-header-badge.component.d.ts.map +1 -1
- package/dist/coverage-header-badge.component.js +5 -21
- package/dist/coverage-panel.component.d.ts.map +1 -1
- package/dist/coverage-panel.component.js +7 -64
- package/dist/coverage-plugin.browser.d.ts.map +1 -1
- package/dist/coverage-plugin.browser.js +6 -6
- package/dist/coverage-plugin.d.ts.map +1 -1
- package/dist/coverage-plugin.js +14 -16
- package/dist/coverage-reader.d.ts.map +1 -1
- package/dist/coverage-reader.js +7 -20
- package/dist/coverage-summary.d.ts.map +1 -1
- package/dist/coverage-summary.js +1 -5
- package/dist/coverage.types.d.ts.map +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/schematics/ng-add/index.d.ts.map +1 -1
- package/dist/schematics/ng-add/index.js +2 -2
- package/dist/schematics/ng-add/schema.d.ts.map +1 -1
- package/package.json +3 -2
- package/schematics/collection.json +7 -7
- package/schematics/ng-add/schema.json +14 -14
package/README.md
CHANGED
|
@@ -25,11 +25,11 @@ import { defineConfig } from '@ng-prism/core/config';
|
|
|
25
25
|
import { coveragePlugin } from '@ng-prism/plugin-coverage';
|
|
26
26
|
|
|
27
27
|
export default defineConfig({
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
plugins: [
|
|
29
|
+
coveragePlugin({
|
|
30
|
+
coveragePath: 'coverage/coverage-summary.json'
|
|
31
|
+
})
|
|
32
|
+
]
|
|
33
33
|
});
|
|
34
34
|
```
|
|
35
35
|
|
|
@@ -54,7 +54,7 @@ coveragePlugin({ thresholds: 90 });
|
|
|
54
54
|
|
|
55
55
|
// Per-metric — others fall back to 80
|
|
56
56
|
coveragePlugin({
|
|
57
|
-
|
|
57
|
+
thresholds: { lines: 95, branches: 70 }
|
|
58
58
|
});
|
|
59
59
|
```
|
|
60
60
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-contributions.d.ts","sourceRoot":"","sources":["../src/coverage-contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"coverage-contributions.d.ts","sourceRoot":"","sources":["../src/coverage-contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAa1G;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,gBAAgB,GAAG,UAAU,GAAG,IAAI,CAQ5E;AAED,eAAO,MAAM,8BAA8B,EAAE,8BAW5C,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { deriveCoverageSummary } from './coverage-summary.js';
|
|
|
5
5
|
* bundle, so the browser entry cannot import through it.
|
|
6
6
|
*/
|
|
7
7
|
function componentMeta(component) {
|
|
8
|
-
return
|
|
8
|
+
return component.meta?.showcaseConfig?.meta?.['coverage'] ?? null;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
11
|
* The score on the panel's own tab.
|
|
@@ -20,10 +20,7 @@ export function coverageBadge(component) {
|
|
|
20
20
|
const meta = componentMeta(component);
|
|
21
21
|
if (!meta?.found)
|
|
22
22
|
return null;
|
|
23
|
-
const variant = meta.summary?.variant ??
|
|
24
|
-
(meta.thresholds
|
|
25
|
-
? deriveCoverageSummary(meta.score, meta.thresholds).variant
|
|
26
|
-
: 'default');
|
|
23
|
+
const variant = meta.summary?.variant ?? (meta.thresholds ? deriveCoverageSummary(meta.score, meta.thresholds).variant : 'default');
|
|
27
24
|
return { text: String(meta.score), variant };
|
|
28
25
|
}
|
|
29
26
|
export const COVERAGE_NAVIGATION_DECORATION = {
|
|
@@ -37,5 +34,5 @@ export const COVERAGE_NAVIGATION_DECORATION = {
|
|
|
37
34
|
if (meta.summary.variant === 'ok')
|
|
38
35
|
return null;
|
|
39
36
|
return { variant: meta.summary.variant, label: meta.summary.label };
|
|
40
|
-
}
|
|
37
|
+
}
|
|
41
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-header-badge.component.d.ts","sourceRoot":"","sources":["../src/coverage-header-badge.component.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"coverage-header-badge.component.d.ts","sourceRoot":"","sources":["../src/coverage-header-badge.component.ts"],"names":[],"mappings":";AAOA,qBAOa,4BAA4B;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IAEpE,SAAS,CAAC,QAAQ,CAAC,IAAI;;;;cAoBpB;yCAvBM,4BAA4B;2CAA5B,4BAA4B;CAwBxC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, inject
|
|
2
|
-
import { PRISM_MANIFEST } from '@ng-prism/core/plugin';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';
|
|
3
2
|
import { PrismMetricBadgeComponent } from '@ng-prism/core';
|
|
3
|
+
import { PRISM_MANIFEST } from '@ng-prism/core/plugin';
|
|
4
4
|
import { deriveCoverageSummary } from './coverage-summary.js';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
function CoverageHeaderBadgeComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -26,7 +26,7 @@ export class CoverageHeaderBadgeComponent {
|
|
|
26
26
|
`Lines ${meta.total.lines.pct}% · ` +
|
|
27
27
|
`Branches ${meta.total.branches.pct}% · ` +
|
|
28
28
|
`Functions ${meta.total.functions.pct}% · ` +
|
|
29
|
-
`Statements ${meta.total.statements.pct}
|
|
29
|
+
`Statements ${meta.total.statements.pct}%`
|
|
30
30
|
};
|
|
31
31
|
}, /* @ts-ignore */
|
|
32
32
|
...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
@@ -40,22 +40,6 @@ export class CoverageHeaderBadgeComponent {
|
|
|
40
40
|
}
|
|
41
41
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CoverageHeaderBadgeComponent, [{
|
|
42
42
|
type: Component,
|
|
43
|
-
args: [{
|
|
44
|
-
selector: 'prism-coverage-header-badge',
|
|
45
|
-
standalone: true,
|
|
46
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
47
|
-
imports: [PrismMetricBadgeComponent],
|
|
48
|
-
template: `
|
|
49
|
-
@if (data(); as d) {
|
|
50
|
-
<prism-metric-badge
|
|
51
|
-
icon="shield-check"
|
|
52
|
-
label="Library coverage"
|
|
53
|
-
[value]="d.score + '%'"
|
|
54
|
-
[variant]="d.variant"
|
|
55
|
-
[title]="d.title"
|
|
56
|
-
/>
|
|
57
|
-
}
|
|
58
|
-
`,
|
|
59
|
-
}]
|
|
43
|
+
args: [{ selector: 'prism-coverage-header-badge', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismMetricBadgeComponent], template: "@if (data(); as d) {\n <prism-metric-badge\n icon=\"shield-check\"\n label=\"Library coverage\"\n [value]=\"d.score + '%'\"\n [variant]=\"d.variant\"\n [title]=\"d.title\" />\n}\n" }]
|
|
60
44
|
}], null, null); })();
|
|
61
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CoverageHeaderBadgeComponent, { className: "CoverageHeaderBadgeComponent", filePath: "coverage-header-badge.component.ts", lineNumber:
|
|
45
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CoverageHeaderBadgeComponent, { className: "CoverageHeaderBadgeComponent", filePath: "coverage-header-badge.component.ts", lineNumber: 15 }); })();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-panel.component.d.ts","sourceRoot":"","sources":["../src/coverage-panel.component.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"coverage-panel.component.d.ts","sourceRoot":"","sources":["../src/coverage-panel.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;;AAShG,qBAOa,sBAAsB;IAC/B,QAAQ,CAAC,eAAe,+CAAwB;IAEhD,SAAS,CAAC,QAAQ,CAAC,QAAQ,sDAIxB;IAEH,SAAS,CAAC,QAAQ,CAAC,YAAY;;;SAU5B;IAEH,SAAS,CAAC,QAAQ,CAAC,KAAK,uDAErB;IAEH,SAAS,CAAC,QAAQ,CAAC,UAAU,qDAE1B;IAEH,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;yCA7B/B,sBAAsB;2CAAtB,sBAAsB;CAkClC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, input
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
const _forTrack0 = ($index, $item) => $item.label;
|
|
4
4
|
const _forTrack1 = ($index, $item) => $item.path;
|
|
@@ -106,14 +106,14 @@ const FALLBACK_THRESHOLDS = {
|
|
|
106
106
|
lines: 80,
|
|
107
107
|
branches: 80,
|
|
108
108
|
functions: 80,
|
|
109
|
-
statements: 80
|
|
109
|
+
statements: 80
|
|
110
110
|
};
|
|
111
111
|
export class CoveragePanelComponent {
|
|
112
112
|
activeComponent = input(null, /* @ts-ignore */
|
|
113
113
|
...(ngDevMode ? [{ debugName: "activeComponent" }] : /* istanbul ignore next */ []));
|
|
114
114
|
coverage = computed(() => {
|
|
115
115
|
const comp = this.activeComponent();
|
|
116
|
-
return
|
|
116
|
+
return comp?.meta?.showcaseConfig?.meta?.['coverage'] ?? null;
|
|
117
117
|
}, /* @ts-ignore */
|
|
118
118
|
...(ngDevMode ? [{ debugName: "coverage" }] : /* istanbul ignore next */ []));
|
|
119
119
|
summaryStats = computed(() => {
|
|
@@ -124,7 +124,7 @@ export class CoveragePanelComponent {
|
|
|
124
124
|
{ label: 'Lines', pct: c.lines.pct },
|
|
125
125
|
{ label: 'Branches', pct: c.branches.pct },
|
|
126
126
|
{ label: 'Functions', pct: c.functions.pct },
|
|
127
|
-
{ label: 'Statements', pct: c.statements.pct }
|
|
127
|
+
{ label: 'Statements', pct: c.statements.pct }
|
|
128
128
|
];
|
|
129
129
|
}, /* @ts-ignore */
|
|
130
130
|
...(ngDevMode ? [{ debugName: "summaryStats" }] : /* istanbul ignore next */ []));
|
|
@@ -145,67 +145,10 @@ export class CoveragePanelComponent {
|
|
|
145
145
|
i0.ɵɵconditionalCreate(0, CoveragePanelComponent_Conditional_0_Template, 5, 1, "div", 0)(1, CoveragePanelComponent_Conditional_1_Template, 3, 0, "div", 1);
|
|
146
146
|
} if (rf & 2) {
|
|
147
147
|
i0.ɵɵconditional(ctx.coverage()?.found ? 0 : 1);
|
|
148
|
-
} }, styles: ["[_nghost-%COMP%] {
|
|
148
|
+
} }, styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n overflow: auto;\n}\n\n.cov-body[_ngcontent-%COMP%] {\n padding: 20px 24px;\n}\n\n.cov-summary[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n margin-bottom: 18px;\n}\n\n.cov-stat[_ngcontent-%COMP%] {\n padding: 12px 14px;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px;\n}\n\n.cov-stat-k[_ngcontent-%COMP%] {\n margin-bottom: 6px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.cov-stat-v[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 22px;\n font-weight: 700;\n color: var(--%NS%prism-text);\n letter-spacing: -0.02em;\n}\n\n.cov-stat-v[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--%NS%prism-text-muted);\n}\n\n.cov-bar[_ngcontent-%COMP%] {\n height: 4px;\n margin-top: 8px;\n overflow: hidden;\n background: var(--%NS%prism-input-bg);\n border-radius: 2px;\n}\n\n.cov-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: linear-gradient(90deg, var(--%NS%prism-primary-from), var(--%NS%prism-primary-to));\n border-radius: 2px;\n transition: width 0.6s;\n}\n\n.cov-files[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px;\n}\n\n.cov-file[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr auto auto auto auto;\n gap: 16px;\n align-items: center;\n padding: 7px 4px;\n font-family: var(--%NS%font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.cov-file[_ngcontent-%COMP%]:last-child {\n border-bottom: 0;\n}\n\n.cov-file--header[_ngcontent-%COMP%] {\n padding-bottom: 8px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n border-bottom: 1px solid var(--%NS%prism-border-strong);\n}\n\n.cov-file-name[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-2);\n}\n\n.cov-file-val[_ngcontent-%COMP%] {\n min-width: 54px;\n color: var(--%NS%prism-text);\n text-align: right;\n}\n\n.cov-file-val.bad[_ngcontent-%COMP%] {\n color: var(--%NS%prism-warn);\n}\n\n.cov-empty[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 120px;\n font-size: 13px;\n color: var(--%NS%prism-text-muted);\n text-align: center;\n}"] });
|
|
149
149
|
}
|
|
150
150
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CoveragePanelComponent, [{
|
|
151
151
|
type: Component,
|
|
152
|
-
args: [{ selector: 'prism-coverage-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template:
|
|
153
|
-
@if (coverage()?.found) {
|
|
154
|
-
<div class="cov-body">
|
|
155
|
-
<div class="cov-summary">
|
|
156
|
-
@for (stat of summaryStats(); track stat.label) {
|
|
157
|
-
<div class="cov-stat">
|
|
158
|
-
<div class="cov-stat-k">{{ stat.label }}</div>
|
|
159
|
-
<div class="cov-stat-v">{{ stat.pct }}<small>%</small></div>
|
|
160
|
-
<div class="cov-bar">
|
|
161
|
-
<div class="cov-bar-fill" [style.width.%]="stat.pct"></div>
|
|
162
|
-
</div>
|
|
163
|
-
</div>
|
|
164
|
-
}
|
|
165
|
-
</div>
|
|
166
|
-
|
|
167
|
-
@if (files().length) {
|
|
168
|
-
<div class="cov-files">
|
|
169
|
-
<div class="cov-file cov-file--header">
|
|
170
|
-
<span>File</span>
|
|
171
|
-
<span>Lines</span>
|
|
172
|
-
<span>Branch</span>
|
|
173
|
-
<span>Func</span>
|
|
174
|
-
<span>Stmt</span>
|
|
175
|
-
</div>
|
|
176
|
-
@for (file of files(); track file.path) {
|
|
177
|
-
<div class="cov-file">
|
|
178
|
-
<span class="cov-file-name">{{ fileName(file.path) }}</span>
|
|
179
|
-
<span
|
|
180
|
-
class="cov-file-val"
|
|
181
|
-
[class.bad]="file.lines.pct < thresholds().lines"
|
|
182
|
-
>{{ file.lines.pct }}%</span
|
|
183
|
-
>
|
|
184
|
-
<span
|
|
185
|
-
class="cov-file-val"
|
|
186
|
-
[class.bad]="file.branches.pct < thresholds().branches"
|
|
187
|
-
>{{ file.branches.pct }}%</span
|
|
188
|
-
>
|
|
189
|
-
<span
|
|
190
|
-
class="cov-file-val"
|
|
191
|
-
[class.bad]="file.functions.pct < thresholds().functions"
|
|
192
|
-
>{{ file.functions.pct }}%</span
|
|
193
|
-
>
|
|
194
|
-
<span
|
|
195
|
-
class="cov-file-val"
|
|
196
|
-
[class.bad]="file.statements.pct < thresholds().statements"
|
|
197
|
-
>{{ file.statements.pct }}%</span
|
|
198
|
-
>
|
|
199
|
-
</div>
|
|
200
|
-
}
|
|
201
|
-
</div>
|
|
202
|
-
}
|
|
203
|
-
</div>
|
|
204
|
-
} @else {
|
|
205
|
-
<div class="cov-empty">
|
|
206
|
-
<p>No coverage data. Run tests with coverage enabled.</p>
|
|
207
|
-
</div>
|
|
208
|
-
}
|
|
209
|
-
`, styles: ["\n :host { display: block; height: 100%; overflow: auto; }\n\n .cov-body { padding: 20px 24px; }\n\n .cov-summary {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n margin-bottom: 18px;\n }\n\n .cov-stat {\n padding: 12px 14px;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n }\n .cov-stat-k {\n font-size: 10.5px;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--prism-text-ghost);\n font-weight: 700;\n margin-bottom: 6px;\n }\n .cov-stat-v {\n font-family: var(--font-mono);\n font-size: 22px;\n font-weight: 700;\n color: var(--prism-text);\n letter-spacing: -0.02em;\n }\n .cov-stat-v small {\n font-size: 13px;\n color: var(--prism-text-muted);\n font-weight: 500;\n }\n .cov-bar {\n margin-top: 8px;\n height: 4px;\n background: var(--prism-input-bg);\n border-radius: 2px;\n overflow: hidden;\n }\n .cov-bar-fill {\n height: 100%;\n background: linear-gradient(90deg, var(--prism-primary-from), var(--prism-primary-to));\n border-radius: 2px;\n transition: width 0.6s;\n }\n\n .cov-files {\n padding: 12px;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n }\n\n .cov-file {\n display: grid;\n grid-template-columns: 1fr auto auto auto auto;\n align-items: center;\n gap: 16px;\n padding: 7px 4px;\n font-family: var(--font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--prism-border);\n }\n .cov-file:last-child { border-bottom: 0; }\n\n .cov-file--header {\n border-bottom: 1px solid var(--prism-border-strong);\n padding-bottom: 8px;\n color: var(--prism-text-ghost);\n font-size: 10.5px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n font-weight: 700;\n }\n\n .cov-file-name { color: var(--prism-text-2); }\n .cov-file-val {\n color: var(--prism-text);\n min-width: 54px;\n text-align: right;\n }\n .cov-file-val.bad { color: var(--prism-warn); }\n\n .cov-empty {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 120px;\n color: var(--prism-text-muted);\n font-size: 13px;\n text-align: center;\n }\n "] }]
|
|
152
|
+
args: [{ selector: 'prism-coverage-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (coverage()?.found) {\n <div class=\"cov-body\">\n <div class=\"cov-summary\">\n @for (stat of summaryStats(); track stat.label) {\n <div class=\"cov-stat\">\n <div class=\"cov-stat-k\">{{ stat.label }}</div>\n <div class=\"cov-stat-v\">{{ stat.pct }}<small>%</small></div>\n <div class=\"cov-bar\">\n <div\n class=\"cov-bar-fill\"\n [style.width.%]=\"stat.pct\"></div>\n </div>\n </div>\n }\n </div>\n\n @if (files().length) {\n <div class=\"cov-files\">\n <div class=\"cov-file cov-file--header\">\n <span>File</span>\n <span>Lines</span>\n <span>Branch</span>\n <span>Func</span>\n <span>Stmt</span>\n </div>\n @for (file of files(); track file.path) {\n <div class=\"cov-file\">\n <span class=\"cov-file-name\">{{ fileName(file.path) }}</span>\n <span\n class=\"cov-file-val\"\n [class.bad]=\"file.lines.pct < thresholds().lines\"\n >{{ file.lines.pct }}%</span\n >\n <span\n class=\"cov-file-val\"\n [class.bad]=\"file.branches.pct < thresholds().branches\"\n >{{ file.branches.pct }}%</span\n >\n <span\n class=\"cov-file-val\"\n [class.bad]=\"file.functions.pct < thresholds().functions\"\n >{{ file.functions.pct }}%</span\n >\n <span\n class=\"cov-file-val\"\n [class.bad]=\"file.statements.pct < thresholds().statements\"\n >{{ file.statements.pct }}%</span\n >\n </div>\n }\n </div>\n }\n </div>\n} @else {\n <div class=\"cov-empty\">\n <p>No coverage data. Run tests with coverage enabled.</p>\n </div>\n}\n", styles: [":host {\n display: block;\n height: 100%;\n overflow: auto;\n}\n\n.cov-body {\n padding: 20px 24px;\n}\n\n.cov-summary {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n margin-bottom: 18px;\n}\n\n.cov-stat {\n padding: 12px 14px;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n}\n\n.cov-stat-k {\n margin-bottom: 6px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.cov-stat-v {\n font-family: var(--font-mono);\n font-size: 22px;\n font-weight: 700;\n color: var(--prism-text);\n letter-spacing: -0.02em;\n}\n\n.cov-stat-v small {\n font-size: 13px;\n font-weight: 500;\n color: var(--prism-text-muted);\n}\n\n.cov-bar {\n height: 4px;\n margin-top: 8px;\n overflow: hidden;\n background: var(--prism-input-bg);\n border-radius: 2px;\n}\n\n.cov-bar-fill {\n height: 100%;\n background: linear-gradient(90deg, var(--prism-primary-from), var(--prism-primary-to));\n border-radius: 2px;\n transition: width 0.6s;\n}\n\n.cov-files {\n padding: 12px;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n}\n\n.cov-file {\n display: grid;\n grid-template-columns: 1fr auto auto auto auto;\n gap: 16px;\n align-items: center;\n padding: 7px 4px;\n font-family: var(--font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--prism-border);\n}\n\n.cov-file:last-child {\n border-bottom: 0;\n}\n\n.cov-file--header {\n padding-bottom: 8px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n border-bottom: 1px solid var(--prism-border-strong);\n}\n\n.cov-file-name {\n color: var(--prism-text-2);\n}\n\n.cov-file-val {\n min-width: 54px;\n color: var(--prism-text);\n text-align: right;\n}\n\n.cov-file-val.bad {\n color: var(--prism-warn);\n}\n\n.cov-empty {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 120px;\n font-size: 13px;\n color: var(--prism-text-muted);\n text-align: center;\n}\n"] }]
|
|
210
153
|
}], null, { activeComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeComponent", required: false }] }] }); })();
|
|
211
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CoveragePanelComponent, { className: "CoveragePanelComponent", filePath: "coverage-panel.component.ts", lineNumber:
|
|
154
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CoveragePanelComponent, { className: "CoveragePanelComponent", filePath: "coverage-panel.component.ts", lineNumber: 18 }); })();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-plugin.browser.d.ts","sourceRoot":"","sources":["../src/coverage-plugin.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage-plugin.browser.d.ts","sourceRoot":"","sources":["../src/coverage-plugin.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,qBAAqB,GAAG,aAAa,CAwB9E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { COVERAGE_NAVIGATION_DECORATION, coverageBadge } from './coverage-contributions.js';
|
|
2
2
|
export function coveragePlugin(_options) {
|
|
3
3
|
return {
|
|
4
4
|
name: '@ng-prism/plugin-coverage',
|
|
@@ -9,17 +9,17 @@ export function coveragePlugin(_options) {
|
|
|
9
9
|
badge: coverageBadge,
|
|
10
10
|
icon: 'shield-check',
|
|
11
11
|
loadComponent: () => import('./coverage-panel.component.js').then((m) => m.CoveragePanelComponent),
|
|
12
|
-
position: 'bottom'
|
|
13
|
-
}
|
|
12
|
+
position: 'bottom'
|
|
13
|
+
}
|
|
14
14
|
],
|
|
15
15
|
headerWidgets: [
|
|
16
16
|
{
|
|
17
17
|
id: 'coverage-total',
|
|
18
18
|
placement: 'end',
|
|
19
19
|
order: -10,
|
|
20
|
-
loadComponent: () => import('./coverage-header-badge.component.js').then((m) => m.CoverageHeaderBadgeComponent)
|
|
21
|
-
}
|
|
20
|
+
loadComponent: () => import('./coverage-header-badge.component.js').then((m) => m.CoverageHeaderBadgeComponent)
|
|
21
|
+
}
|
|
22
22
|
],
|
|
23
|
-
navigationDecorations: [COVERAGE_NAVIGATION_DECORATION]
|
|
23
|
+
navigationDecorations: [COVERAGE_NAVIGATION_DECORATION]
|
|
24
24
|
};
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-plugin.d.ts","sourceRoot":"","sources":["../src/coverage-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage-plugin.d.ts","sourceRoot":"","sources":["../src/coverage-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAIrF,eAAO,MAAM,2BAA2B,EAAE,kBAKzC,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAW1G;AAED,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,aAAa,CA0D7E"}
|
package/dist/coverage-plugin.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { COVERAGE_NAVIGATION_DECORATION, coverageBadge } from './coverage-contributions.js';
|
|
2
2
|
const DEFAULT_COVERAGE_PATH = 'coverage/coverage-summary.json';
|
|
3
3
|
export const DEFAULT_COVERAGE_THRESHOLDS = {
|
|
4
4
|
lines: 80,
|
|
5
5
|
branches: 80,
|
|
6
6
|
functions: 80,
|
|
7
|
-
statements: 80
|
|
7
|
+
statements: 80
|
|
8
8
|
};
|
|
9
9
|
export function resolveCoverageThresholds(input) {
|
|
10
10
|
if (input === undefined)
|
|
@@ -14,7 +14,7 @@ export function resolveCoverageThresholds(input) {
|
|
|
14
14
|
lines: input,
|
|
15
15
|
branches: input,
|
|
16
16
|
functions: input,
|
|
17
|
-
statements: input
|
|
17
|
+
statements: input
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
20
|
return { ...DEFAULT_COVERAGE_THRESHOLDS, ...input };
|
|
@@ -37,12 +37,10 @@ export function coveragePlugin(options) {
|
|
|
37
37
|
coverage: {
|
|
38
38
|
...coverage,
|
|
39
39
|
thresholds,
|
|
40
|
-
...(coverage.found
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
},
|
|
45
|
-
},
|
|
40
|
+
...(coverage.found ? { summary: deriveCoverageSummary(coverage.score, thresholds) } : {})
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
46
44
|
};
|
|
47
45
|
},
|
|
48
46
|
async onManifestReady(manifest) {
|
|
@@ -52,8 +50,8 @@ export function coveragePlugin(options) {
|
|
|
52
50
|
...manifest,
|
|
53
51
|
meta: {
|
|
54
52
|
...manifest.meta,
|
|
55
|
-
coverage: { total, thresholds }
|
|
56
|
-
}
|
|
53
|
+
coverage: { total, thresholds }
|
|
54
|
+
}
|
|
57
55
|
};
|
|
58
56
|
},
|
|
59
57
|
panels: [
|
|
@@ -62,17 +60,17 @@ export function coveragePlugin(options) {
|
|
|
62
60
|
label: 'Coverage',
|
|
63
61
|
badge: coverageBadge,
|
|
64
62
|
loadComponent: () => import('./coverage-panel.component.js').then((m) => m.CoveragePanelComponent),
|
|
65
|
-
position: 'bottom'
|
|
66
|
-
}
|
|
63
|
+
position: 'bottom'
|
|
64
|
+
}
|
|
67
65
|
],
|
|
68
66
|
headerWidgets: [
|
|
69
67
|
{
|
|
70
68
|
id: 'coverage-total',
|
|
71
69
|
placement: 'end',
|
|
72
70
|
order: -10,
|
|
73
|
-
loadComponent: () => import('./coverage-header-badge.component.js').then((m) => m.CoverageHeaderBadgeComponent)
|
|
74
|
-
}
|
|
71
|
+
loadComponent: () => import('./coverage-header-badge.component.js').then((m) => m.CoverageHeaderBadgeComponent)
|
|
72
|
+
}
|
|
75
73
|
],
|
|
76
|
-
navigationDecorations: [COVERAGE_NAVIGATION_DECORATION]
|
|
74
|
+
navigationDecorations: [COVERAGE_NAVIGATION_DECORATION]
|
|
77
75
|
};
|
|
78
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-reader.d.ts","sourceRoot":"","sources":["../src/coverage-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"coverage-reader.d.ts","sourceRoot":"","sources":["../src/coverage-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAmB,MAAM,qBAAqB,CAAC;AA+D7F,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,YAAY,CAoBjG;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAmBpE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,CAEvE;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
package/dist/coverage-reader.js
CHANGED
|
@@ -6,7 +6,7 @@ const EMPTY_COVERAGE = {
|
|
|
6
6
|
branches: { ...EMPTY_METRIC },
|
|
7
7
|
functions: { ...EMPTY_METRIC },
|
|
8
8
|
lines: { ...EMPTY_METRIC },
|
|
9
|
-
found: false
|
|
9
|
+
found: false
|
|
10
10
|
};
|
|
11
11
|
const cache = new Map();
|
|
12
12
|
function normalizePath(p) {
|
|
@@ -37,8 +37,7 @@ function findEntry(summary, componentPath) {
|
|
|
37
37
|
}
|
|
38
38
|
for (const key of keys) {
|
|
39
39
|
const normalizedKey = normalizePath(key);
|
|
40
|
-
if (normalizedKey.endsWith(normalizedComponent) ||
|
|
41
|
-
normalizedComponent.endsWith(normalizedKey)) {
|
|
40
|
+
if (normalizedKey.endsWith(normalizedComponent) || normalizedComponent.endsWith(normalizedKey)) {
|
|
42
41
|
return key;
|
|
43
42
|
}
|
|
44
43
|
}
|
|
@@ -57,18 +56,14 @@ export function readCoverageForFile(coveragePath, componentFilePath) {
|
|
|
57
56
|
if (!entryKey)
|
|
58
57
|
return { ...EMPTY_COVERAGE };
|
|
59
58
|
const entry = summary[entryKey];
|
|
60
|
-
const score = Math.round((entry.statements.pct +
|
|
61
|
-
entry.branches.pct +
|
|
62
|
-
entry.functions.pct +
|
|
63
|
-
entry.lines.pct) /
|
|
64
|
-
4);
|
|
59
|
+
const score = Math.round((entry.statements.pct + entry.branches.pct + entry.functions.pct + entry.lines.pct) / 4);
|
|
65
60
|
return {
|
|
66
61
|
score,
|
|
67
62
|
statements: { ...entry.statements },
|
|
68
63
|
branches: { ...entry.branches },
|
|
69
64
|
functions: { ...entry.functions },
|
|
70
65
|
lines: { ...entry.lines },
|
|
71
|
-
found: true
|
|
66
|
+
found: true
|
|
72
67
|
};
|
|
73
68
|
}
|
|
74
69
|
export function readTotalCoverage(coveragePath) {
|
|
@@ -78,26 +73,18 @@ export function readTotalCoverage(coveragePath) {
|
|
|
78
73
|
const total = summary['total'];
|
|
79
74
|
if (!total)
|
|
80
75
|
return { ...EMPTY_COVERAGE };
|
|
81
|
-
const score = Math.round((total.statements.pct +
|
|
82
|
-
total.branches.pct +
|
|
83
|
-
total.functions.pct +
|
|
84
|
-
total.lines.pct) /
|
|
85
|
-
4);
|
|
76
|
+
const score = Math.round((total.statements.pct + total.branches.pct + total.functions.pct + total.lines.pct) / 4);
|
|
86
77
|
return {
|
|
87
78
|
score,
|
|
88
79
|
statements: { ...total.statements },
|
|
89
80
|
branches: { ...total.branches },
|
|
90
81
|
functions: { ...total.functions },
|
|
91
82
|
lines: { ...total.lines },
|
|
92
|
-
found: true
|
|
83
|
+
found: true
|
|
93
84
|
};
|
|
94
85
|
}
|
|
95
86
|
export function averageThreshold(thresholds) {
|
|
96
|
-
return Math.round((thresholds.lines +
|
|
97
|
-
thresholds.branches +
|
|
98
|
-
thresholds.functions +
|
|
99
|
-
thresholds.statements) /
|
|
100
|
-
4);
|
|
87
|
+
return Math.round((thresholds.lines + thresholds.branches + thresholds.functions + thresholds.statements) / 4);
|
|
101
88
|
}
|
|
102
89
|
export function clearCoverageCache() {
|
|
103
90
|
cache.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-summary.d.ts","sourceRoot":"","sources":["../src/coverage-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;;;;;;GAOG;AACH,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"coverage-summary.d.ts","sourceRoot":"","sources":["../src/coverage-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;;;;;;GAOG;AACH,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,CAEnE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,eAAe,CAKpG"}
|
package/dist/coverage-summary.js
CHANGED
|
@@ -8,11 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
/** The single number the badge compares against — the mean of the four metrics. */
|
|
10
10
|
export function avgThreshold(thresholds) {
|
|
11
|
-
return Math.round((thresholds.lines +
|
|
12
|
-
thresholds.branches +
|
|
13
|
-
thresholds.functions +
|
|
14
|
-
thresholds.statements) /
|
|
15
|
-
4);
|
|
11
|
+
return Math.round((thresholds.lines + thresholds.branches + thresholds.functions + thresholds.statements) / 4);
|
|
16
12
|
}
|
|
17
13
|
export function deriveCoverageSummary(score, thresholds) {
|
|
18
14
|
const avg = avgThreshold(thresholds);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.types.d.ts","sourceRoot":"","sources":["../src/coverage.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;
|
|
1
|
+
{"version":3,"file":"coverage.types.d.ts","sourceRoot":"","sources":["../src/coverage.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,YAAY,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,YAAY,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACrD;AAED,mDAAmD;AACnD,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACjC,UAAU,EAAE,YAAY,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC5B,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CAAC;CAC5C"}
|
package/dist/index.browser.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { coveragePlugin } from './coverage-plugin.browser.js';
|
|
2
2
|
export { CoveragePanelComponent } from './coverage-panel.component.js';
|
|
3
3
|
export { CoverageHeaderBadgeComponent } from './coverage-header-badge.component.js';
|
|
4
|
-
export type { CoverageData, CoverageManifestMeta, CoveragePluginOptions, CoverageSummary, CoverageThresholds, MetricDetail
|
|
4
|
+
export type { CoverageData, CoverageManifestMeta, CoveragePluginOptions, CoverageSummary, CoverageThresholds, MetricDetail } from './coverage.types.js';
|
|
5
5
|
//# sourceMappingURL=index.browser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,YAAY,
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { coveragePlugin } from './coverage-plugin.js';
|
|
2
2
|
export { CoveragePanelComponent } from './coverage-panel.component.js';
|
|
3
3
|
export { CoverageHeaderBadgeComponent } from './coverage-header-badge.component.js';
|
|
4
|
-
export type { CoverageData, CoverageManifestMeta, CoveragePluginOptions, CoverageSummary, CoverageThresholds, MetricDetail
|
|
4
|
+
export type { CoverageData, CoverageManifestMeta, CoveragePluginOptions, CoverageSummary, CoverageThresholds, MetricDetail } from './coverage.types.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schematics/ng-add/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schematics/ng-add/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,IAAI,EAAoC,MAAM,4BAA4B,CAAC;AAEhG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAwBtD,wBAAgB,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAEvD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { chain
|
|
1
|
+
import { chain } from '@angular-devkit/schematics';
|
|
2
2
|
import { addPluginToConfig } from '@ng-prism/core/schematics/utils';
|
|
3
3
|
const PLUGIN_IMPORT_NAME = 'coveragePlugin';
|
|
4
4
|
const PLUGIN_IMPORT_FROM = '@ng-prism/plugin-coverage';
|
|
@@ -9,7 +9,7 @@ function injectPlugin(options) {
|
|
|
9
9
|
const changed = addPluginToConfig(tree, configPath, {
|
|
10
10
|
importName: PLUGIN_IMPORT_NAME,
|
|
11
11
|
importFrom: PLUGIN_IMPORT_FROM,
|
|
12
|
-
call: PLUGIN_CALL
|
|
12
|
+
call: PLUGIN_CALL
|
|
13
13
|
});
|
|
14
14
|
if (changed) {
|
|
15
15
|
context.logger.info(` ${PLUGIN_IMPORT_FROM} → added to ${configPath}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schematics/ng-add/schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schematics/ng-add/schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ng-prism/plugin-coverage",
|
|
3
|
-
"version": "22.
|
|
3
|
+
"version": "22.3.0",
|
|
4
4
|
"description": "Test coverage panel for ng-prism.",
|
|
5
5
|
"ng-add": {
|
|
6
6
|
"save": "devDependencies"
|
|
@@ -35,7 +35,8 @@
|
|
|
35
35
|
],
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"@angular/core": ">=20.0.0",
|
|
38
|
-
"@ng-prism/core": "^22.
|
|
38
|
+
"@ng-prism/core": "^22.3.0-0",
|
|
39
|
+
"@angular-devkit/schematics": ">=20.0.0"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|
|
41
42
|
"@ng-prism/core": "*"
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
"$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
|
|
3
|
+
"schematics": {
|
|
4
|
+
"ng-add": {
|
|
5
|
+
"description": "Adds @ng-prism/plugin-coverage to the ng-prism config",
|
|
6
|
+
"factory": "../dist/schematics/ng-add/index#ngAdd",
|
|
7
|
+
"schema": "./ng-add/schema.json"
|
|
8
|
+
}
|
|
8
9
|
}
|
|
9
|
-
}
|
|
10
10
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "NgPrismPluginCoverageNgAdd",
|
|
4
|
+
"title": "Add @ng-prism/plugin-coverage",
|
|
5
|
+
"description": "Registers @ng-prism/plugin-coverage in ng-prism.config.ts",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"configPath": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "Path to ng-prism.config.ts",
|
|
11
|
+
"default": "ng-prism.config.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"required": [],
|
|
15
|
+
"additionalProperties": false
|
|
16
16
|
}
|