@aiready/cli 0.12.20 → 0.12.23

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.
Files changed (51) hide show
  1. package/.turbo/turbo-build.log +8 -8
  2. package/.turbo/turbo-lint.log +24 -5
  3. package/.turbo/turbo-test.log +66 -85
  4. package/coverage/base.css +224 -0
  5. package/coverage/block-navigation.js +87 -0
  6. package/coverage/clover.xml +865 -0
  7. package/coverage/coverage-final.json +15 -0
  8. package/coverage/favicon.png +0 -0
  9. package/coverage/index.html +146 -0
  10. package/coverage/prettify.css +1 -0
  11. package/coverage/prettify.js +2 -0
  12. package/coverage/sort-arrow-sprite.png +0 -0
  13. package/coverage/sorter.js +210 -0
  14. package/coverage/src/commands/agent-grounding.ts.html +271 -0
  15. package/coverage/src/commands/ai-signal-clarity.ts.html +253 -0
  16. package/coverage/src/commands/change-amplification.ts.html +94 -0
  17. package/coverage/src/commands/consistency.ts.html +781 -0
  18. package/coverage/src/commands/context.ts.html +871 -0
  19. package/coverage/src/commands/deps-health.ts.html +280 -0
  20. package/coverage/src/commands/doc-drift.ts.html +271 -0
  21. package/coverage/src/commands/index.html +281 -0
  22. package/coverage/src/commands/patterns.ts.html +745 -0
  23. package/coverage/src/commands/scan.ts.html +1393 -0
  24. package/coverage/src/commands/testability.ts.html +304 -0
  25. package/coverage/src/commands/upload.ts.html +466 -0
  26. package/coverage/src/commands/visualize.ts.html +1027 -0
  27. package/coverage/src/index.html +116 -0
  28. package/coverage/src/index.ts.html +1372 -0
  29. package/coverage/src/utils/helpers.ts.html +559 -0
  30. package/coverage/src/utils/index.html +116 -0
  31. package/dist/cli.js +249 -15
  32. package/dist/cli.mjs +247 -13
  33. package/package.json +13 -12
  34. package/src/.aiready/aiready-report-20260308-174006.json +29526 -0
  35. package/src/__tests__/unified.test.ts +95 -0
  36. package/src/cli.ts +86 -0
  37. package/src/commands/__tests__/agent-grounding.test.ts +24 -0
  38. package/src/commands/__tests__/ai-signal-clarity.test.ts +32 -0
  39. package/src/commands/__tests__/consistency.test.ts +97 -0
  40. package/src/commands/__tests__/deps-health.test.ts +26 -0
  41. package/src/commands/__tests__/doc-drift.test.ts +26 -0
  42. package/src/commands/__tests__/extra-commands.test.ts +177 -0
  43. package/src/commands/__tests__/scan.test.ts +147 -0
  44. package/src/commands/__tests__/testability.test.ts +36 -0
  45. package/src/commands/__tests__/upload.test.ts +51 -0
  46. package/src/commands/__tests__/visualize.test.ts +82 -0
  47. package/src/commands/clawmart.ts +162 -0
  48. package/src/commands/index.ts +8 -0
  49. package/src/commands/scan.ts +33 -11
  50. package/src/utils/__tests__/helpers.test.ts +35 -0
  51. package/vitest.config.ts +20 -0
@@ -1,6 +1,6 @@
1
1
 
2
2
  
3
- > @aiready/cli@0.12.19 build /Users/pengcao/projects/aiready/packages/cli
3
+ > @aiready/cli@0.12.22 build /Users/pengcao/projects/aiready/packages/cli
4
4
  > tsup src/index.ts src/cli.ts --format cjs,esm
5
5
 
6
6
  CLI Building entry: src/cli.ts, src/index.ts
@@ -10,20 +10,20 @@
10
10
  CJS Build start
11
11
  ESM Build start
12
12
 
13
- [5:27:02 pm]  WARN  ▲ [WARNING] "import.meta" is not available with the "cjs" output format and will be empty [empty-import-meta]
13
+ [3:18:55 pm]  WARN  ▲ [WARNING] "import.meta" is not available with the "cjs" output format and will be empty [empty-import-meta]
14
14
 
15
- src/cli.ts:25:31:
16
-  25 │ return dirname(fileURLToPath(import.meta.url));
15
+ src/cli.ts:32:31:
16
+  32 │ return dirname(fileURLToPath(import.meta.url));
17
17
  ╵ ~~~~~~~~~~~
18
18
 
19
19
  You need to set the output format to "esm" for "import.meta" to work correctly.
20
20
 
21
21
 
22
22
 
23
- ESM dist/cli.mjs 56.89 KB
24
23
  ESM dist/index.mjs 170.00 B
25
24
  ESM dist/chunk-VOKP7FGM.mjs 9.52 KB
26
- ESM ⚡️ Build success in 38ms
25
+ ESM dist/cli.mjs 66.64 KB
26
+ ESM ⚡️ Build success in 28ms
27
27
  CJS dist/index.js 10.62 KB
28
- CJS dist/cli.js 69.52 KB
29
- CJS ⚡️ Build success in 38ms
28
+ CJS dist/cli.js 79.99 KB
29
+ CJS ⚡️ Build success in 28ms
@@ -1,13 +1,32 @@
1
1
 
2
2
  
3
- > @aiready/cli@0.10.6 lint /Users/pengcao/projects/aiready/packages/cli
3
+ > @aiready/cli@0.12.20 lint /Users/pengcao/projects/aiready/packages/cli
4
4
  > eslint src
5
5
 
6
6
  
7
+ /Users/pengcao/projects/aiready/packages/cli/src/__tests__/cli.test.ts
8
+ 1:55 warning 'vi' is defined but never used @typescript-eslint/no-unused-vars
9
+
10
+ /Users/pengcao/projects/aiready/packages/cli/src/__tests__/config-shape.test.ts
11
+ 79:7 error Use "@ts-expect-error" instead of "@ts-ignore", as "@ts-ignore" will do nothing if the following line is error-free @typescript-eslint/ban-ts-comment
12
+
7
13
  /Users/pengcao/projects/aiready/packages/cli/src/commands/scan.ts
8
- 15:3 warning 'calculateOverallScore' is defined but never used @typescript-eslint/no-unused-vars
9
- 23:3 warning 'parseWeightString' is defined but never used @typescript-eslint/no-unused-vars
10
- 28:8 warning 'ToolScoringOutput' is defined but never used @typescript-eslint/no-unused-vars
14
+ 12:3 warning 'getElapsedTime' is defined but never used @typescript-eslint/no-unused-vars
15
+ 15:3 warning 'formatToolScore' is defined but never used @typescript-eslint/no-unused-vars
16
+ 17:3 warning 'estimateCostFromBudget' is defined but never used @typescript-eslint/no-unused-vars
17
+ 18:3 warning 'getModelPreset' is defined but never used @typescript-eslint/no-unused-vars
18
+ 20:3 warning 'getRatingDisplay' is defined but never used @typescript-eslint/no-unused-vars
19
+ 23:3 warning 'IssueType' is defined but never used @typescript-eslint/no-unused-vars
20
+ 25:3 warning 'ToolRegistry' is defined but never used @typescript-eslint/no-unused-vars
21
+ 31:3 warning 'truncateArray' is defined but never used @typescript-eslint/no-unused-vars
22
+ 135:9 error 'finalOptions' is never reassigned. Use 'const' instead prefer-const
23
+
24
+ /Users/pengcao/projects/aiready/packages/cli/src/index.ts
25
+ 6:3 warning 'GLOBAL_SCAN_OPTIONS' is defined but never used @typescript-eslint/no-unused-vars
26
+ 12:3 warning 'AnalysisResult' is defined but never used @typescript-eslint/no-unused-vars
27
+ 14:3 warning 'SpokeOutput' is defined but never used @typescript-eslint/no-unused-vars
11
28
 
12
- ✖ 3 problems (0 errors, 3 warnings)
29
+ ✖ 14 problems (2 errors, 12 warnings)
30
+  1 error and 0 warnings potentially fixable with the `--fix` option.
13
31
  
32
+  ELIFECYCLE  Command failed with exit code 1.
@@ -1,94 +1,75 @@
1
1
 
2
2
  
3
- > @aiready/cli@0.12.19 test /Users/pengcao/projects/aiready/packages/cli
3
+ > @aiready/cli@0.12.22 test /Users/pengcao/projects/aiready/packages/cli
4
4
  > vitest run
5
5
 
6
6
  [?25l
7
7
   RUN  v4.0.18 /Users/pengcao/projects/aiready/packages/cli
8
8
 
9
- stdout | src/__tests__/config-shape.test.ts
10
- [ToolRegistry#0.7345431815293358] Registering tool: pattern-detect (patterns, duplicates, duplication)
11
-
12
- stdout | src/__tests__/cli.test.ts
13
- [ToolRegistry#0.14884621788681363] Registering tool: pattern-detect (patterns, duplicates, duplication)
14
-
15
- stdout | src/__tests__/config-shape.test.ts
16
- [ToolRegistry#0.7345431815293358] Registering tool: context-analyzer (context, fragmentation, budget)
17
-
18
- stdout | src/__tests__/cli.test.ts
19
- [ToolRegistry#0.14884621788681363] Registering tool: context-analyzer (context, fragmentation, budget)
20
-
21
- stdout | src/__tests__/cli.test.ts
22
- [ToolRegistry#0.14884621788681363] Registering tool: naming-consistency (consistency, naming, standards)
23
-
24
- stdout | src/__tests__/config-shape.test.ts
25
- [ToolRegistry#0.7345431815293358] Registering tool: naming-consistency (consistency, naming, standards)
26
-
27
- stdout | src/__tests__/config-shape.test.ts
28
- [ToolRegistry#0.7345431815293358] Registering tool: ai-signal-clarity (ai-signal, clarity, hallucination)
29
-
30
- stdout | src/__tests__/cli.test.ts
31
- [ToolRegistry#0.14884621788681363] Registering tool: ai-signal-clarity (ai-signal, clarity, hallucination)
32
-
33
- stdout | src/__tests__/config-shape.test.ts
34
- [ToolRegistry#0.7345431815293358] Registering tool: agent-grounding (agent-grounding, grounding, navigation)
35
-
36
- stdout | src/__tests__/cli.test.ts
37
- [ToolRegistry#0.14884621788681363] Registering tool: agent-grounding (agent-grounding, grounding, navigation)
38
-
39
- stdout | src/__tests__/config-shape.test.ts
40
- [ToolRegistry#0.7345431815293358] Registering tool: testability-index (testability, tests, verification)
41
-
42
- stdout | src/__tests__/cli.test.ts
43
- [ToolRegistry#0.14884621788681363] Registering tool: testability-index (testability, tests, verification)
44
-
45
- stdout | src/__tests__/config-shape.test.ts
46
- [ToolRegistry#0.7345431815293358] Registering tool: doc-drift (doc-drift, docs, jsdoc)
47
-
48
- stdout | src/__tests__/cli.test.ts
49
- [ToolRegistry#0.14884621788681363] Registering tool: doc-drift (doc-drift, docs, jsdoc)
50
-
51
- stdout | src/__tests__/config-shape.test.ts
52
- [ToolRegistry#0.7345431815293358] Registering tool: dependency-health (deps, deps-health, packages)
53
-
54
- stdout | src/__tests__/cli.test.ts
55
- [ToolRegistry#0.14884621788681363] Registering tool: dependency-health (deps, deps-health, packages)
56
-
57
- stdout | src/__tests__/cli.test.ts
58
- [ToolRegistry#0.14884621788681363] Registering tool: change-amplification (change-amp, change-amplification, coupling)
59
-
60
- stdout | src/__tests__/config-shape.test.ts
61
- [ToolRegistry#0.7345431815293358] Registering tool: change-amplification (change-amp, change-amplification, coupling)
62
-
63
- stdout | src/__tests__/config-shape.test.ts > CLI Configuration Shape > should generate a strictly portable AIReadyConfig in summary
64
- [ToolRegistry#0.7345431815293358] Registering tool: pattern-detect (patterns)
65
-
66
- stdout | src/__tests__/cli.test.ts > CLI Unified Analysis > should run unified analysis with both tools
67
- [ToolRegistry#0.14884621788681363] Registering tool: pattern-detect (patterns)
68
- [ToolRegistry#0.14884621788681363] Registering tool: context-analyzer (context)
69
-
70
- stdout | src/__tests__/cli.test.ts > CLI Unified Analysis > should run analysis with only patterns tool
71
- [ToolRegistry#0.14884621788681363] Registering tool: pattern-detect (patterns)
72
- [ToolRegistry#0.14884621788681363] Registering tool: context-analyzer (context)
73
-
74
- stdout | src/__tests__/cli.test.ts > CLI Unified Analysis > should run analysis with only context tool
75
- [ToolRegistry#0.14884621788681363] Registering tool: pattern-detect (patterns)
76
- [ToolRegistry#0.14884621788681363] Registering tool: context-analyzer (context)
77
-
78
- stdout | src/__tests__/config-shape.test.ts > CLI Configuration Shape > should strip internal keys like useSmartDefaults and batchSize
79
- [ToolRegistry#0.7345431815293358] Registering tool: pattern-detect (patterns)
80
-
81
- stdout | src/__tests__/config-shape.test.ts > CLI Configuration Shape > should produce a config that is compatible with tool specific collection
82
- [ToolRegistry#0.7345431815293358] Registering tool: pattern-detect (patterns)
83
-
84
- ✓ src/__tests__/cli.test.ts (3 tests) 3632ms
85
- ✓ should run unified analysis with both tools  3630ms
86
- ✓ src/__tests__/config-shape.test.ts (3 tests) 3632ms
87
- ✓ should generate a strictly portable AIReadyConfig in summary  3630ms
88
-
89
-  Test Files  2 passed (2)
90
-  Tests  6 passed (6)
91
-  Start at  17:27:59
92
-  Duration  4.47s (transform 560ms, setup 0ms, import 1.31s, tests 7.26s, environment 0ms)
9
+ ✓ src/commands/__tests__/testability.test.ts (2 tests) 9ms
10
+ ✓ src/commands/__tests__/ai-signal-clarity.test.ts (1 test) 8ms
11
+ ✓ src/commands/__tests__/deps-health.test.ts (1 test) 9ms
12
+ ✓ src/commands/__tests__/doc-drift.test.ts (1 test) 9ms
13
+ stdout | src/commands/__tests__/visualize.test.ts > Visualize CLI Action > should generate HTML from specified report
14
+ Building graph from report...
15
+
16
+ ✓ src/commands/__tests__/agent-grounding.test.ts (1 test) 8ms
17
+ stdout | src/commands/__tests__/visualize.test.ts > Visualize CLI Action > should generate HTML from specified report
18
+ Generating HTML...
19
+ Visualization written to: /Users/pengcao/projects/aiready/packages/cli/visualization.html
20
+
21
+ stdout | src/commands/__tests__/visualize.test.ts > Visualize CLI Action > should find latest report if none specified
22
+ Found latest report: latest.json
23
+ Building graph from report...
24
+
25
+ stdout | src/commands/__tests__/visualize.test.ts > Visualize CLI Action > should find latest report if none specified
26
+ Generating HTML...
27
+ Visualization written to: /Users/pengcao/projects/aiready/packages/cli/visualization.html
28
+
29
+ stdout | src/commands/__tests__/visualize.test.ts > Visualize CLI Action > should handle missing reports
30
+ 
31
+ Generate a report with:
32
+ aiready scan --output json
33
+
34
+ Or specify a custom report:
35
+ aiready visualise --report <path-to-report.json>
36
+
37
+ stdout | src/commands/__tests__/visualize.test.ts > Visualize CLI Action > should attempt to open visualization if requested
38
+ Building graph from report...
39
+
40
+ stdout | src/commands/__tests__/visualize.test.ts > Visualize CLI Action > should attempt to open visualization if requested
41
+ Generating HTML...
42
+ Visualization written to: /Users/pengcao/projects/aiready/packages/cli/visualization.html
43
+
44
+ ✓ src/commands/__tests__/visualize.test.ts (4 tests) 27ms
45
+ ✓ src/utils/__tests__/helpers.test.ts (3 tests) 3ms
46
+ stdout | src/commands/__tests__/upload.test.ts > Upload CLI Action > should fail if API key is missing
47
+  Set AIREADY_API_KEY environment variable or use --api-key flag.
48
+ Get an API key from https://platform.getaiready.dev/dashboard
49
+ 🚀 Uploading report to https://dev.platform.getaiready.dev...
50
+ Reading report from /Users/pengcao/projects/aiready/packages/cli/report.json...
51
+ Successfully parsed report JSON.
52
+
53
+ stdout | src/commands/__tests__/upload.test.ts > Upload CLI Action > should fail if API key is missing
54
+ 
55
+ Upload successful! (0.00s)
56
+ View results: https://dev.platform.getaiready.dev/dashboard
57
+ Analysis ID: 123
58
+ Score: 80/100
59
+
60
+ ✓ src/commands/__tests__/upload.test.ts (2 tests) 5ms
61
+ ✓ src/commands/__tests__/consistency.test.ts (4 tests) 4ms
62
+ ✓ src/commands/__tests__/scan.test.ts (6 tests) 74ms
63
+ ✓ src/__tests__/unified.test.ts (4 tests) 4ms
64
+ ✓ src/commands/__tests__/extra-commands.test.ts (8 tests) 95ms
65
+ ✓ src/__tests__/cli.test.ts (3 tests) 2501ms
66
+ ✓ should run unified analysis with both tools  2499ms
67
+ ✓ src/__tests__/config-shape.test.ts (3 tests) 2500ms
68
+ ✓ should generate a strictly portable AIReadyConfig in summary  2499ms
69
+
70
+  Test Files  14 passed (14)
71
+  Tests  43 passed (43)
72
+  Start at  15:19:20
73
+  Duration  3.27s (transform 1.67s, setup 0ms, import 3.49s, tests 5.26s, environment 1ms)
93
74
 
94
75
  [?25h
@@ -0,0 +1,224 @@
1
+ body, html {
2
+ margin:0; padding: 0;
3
+ height: 100%;
4
+ }
5
+ body {
6
+ font-family: Helvetica Neue, Helvetica, Arial;
7
+ font-size: 14px;
8
+ color:#333;
9
+ }
10
+ .small { font-size: 12px; }
11
+ *, *:after, *:before {
12
+ -webkit-box-sizing:border-box;
13
+ -moz-box-sizing:border-box;
14
+ box-sizing:border-box;
15
+ }
16
+ h1 { font-size: 20px; margin: 0;}
17
+ h2 { font-size: 14px; }
18
+ pre {
19
+ font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
20
+ margin: 0;
21
+ padding: 0;
22
+ -moz-tab-size: 2;
23
+ -o-tab-size: 2;
24
+ tab-size: 2;
25
+ }
26
+ a { color:#0074D9; text-decoration:none; }
27
+ a:hover { text-decoration:underline; }
28
+ .strong { font-weight: bold; }
29
+ .space-top1 { padding: 10px 0 0 0; }
30
+ .pad2y { padding: 20px 0; }
31
+ .pad1y { padding: 10px 0; }
32
+ .pad2x { padding: 0 20px; }
33
+ .pad2 { padding: 20px; }
34
+ .pad1 { padding: 10px; }
35
+ .space-left2 { padding-left:55px; }
36
+ .space-right2 { padding-right:20px; }
37
+ .center { text-align:center; }
38
+ .clearfix { display:block; }
39
+ .clearfix:after {
40
+ content:'';
41
+ display:block;
42
+ height:0;
43
+ clear:both;
44
+ visibility:hidden;
45
+ }
46
+ .fl { float: left; }
47
+ @media only screen and (max-width:640px) {
48
+ .col3 { width:100%; max-width:100%; }
49
+ .hide-mobile { display:none!important; }
50
+ }
51
+
52
+ .quiet {
53
+ color: #7f7f7f;
54
+ color: rgba(0,0,0,0.5);
55
+ }
56
+ .quiet a { opacity: 0.7; }
57
+
58
+ .fraction {
59
+ font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
60
+ font-size: 10px;
61
+ color: #555;
62
+ background: #E8E8E8;
63
+ padding: 4px 5px;
64
+ border-radius: 3px;
65
+ vertical-align: middle;
66
+ }
67
+
68
+ div.path a:link, div.path a:visited { color: #333; }
69
+ table.coverage {
70
+ border-collapse: collapse;
71
+ margin: 10px 0 0 0;
72
+ padding: 0;
73
+ }
74
+
75
+ table.coverage td {
76
+ margin: 0;
77
+ padding: 0;
78
+ vertical-align: top;
79
+ }
80
+ table.coverage td.line-count {
81
+ text-align: right;
82
+ padding: 0 5px 0 20px;
83
+ }
84
+ table.coverage td.line-coverage {
85
+ text-align: right;
86
+ padding-right: 10px;
87
+ min-width:20px;
88
+ }
89
+
90
+ table.coverage td span.cline-any {
91
+ display: inline-block;
92
+ padding: 0 5px;
93
+ width: 100%;
94
+ }
95
+ .missing-if-branch {
96
+ display: inline-block;
97
+ margin-right: 5px;
98
+ border-radius: 3px;
99
+ position: relative;
100
+ padding: 0 4px;
101
+ background: #333;
102
+ color: yellow;
103
+ }
104
+
105
+ .skip-if-branch {
106
+ display: none;
107
+ margin-right: 10px;
108
+ position: relative;
109
+ padding: 0 4px;
110
+ background: #ccc;
111
+ color: white;
112
+ }
113
+ .missing-if-branch .typ, .skip-if-branch .typ {
114
+ color: inherit !important;
115
+ }
116
+ .coverage-summary {
117
+ border-collapse: collapse;
118
+ width: 100%;
119
+ }
120
+ .coverage-summary tr { border-bottom: 1px solid #bbb; }
121
+ .keyline-all { border: 1px solid #ddd; }
122
+ .coverage-summary td, .coverage-summary th { padding: 10px; }
123
+ .coverage-summary tbody { border: 1px solid #bbb; }
124
+ .coverage-summary td { border-right: 1px solid #bbb; }
125
+ .coverage-summary td:last-child { border-right: none; }
126
+ .coverage-summary th {
127
+ text-align: left;
128
+ font-weight: normal;
129
+ white-space: nowrap;
130
+ }
131
+ .coverage-summary th.file { border-right: none !important; }
132
+ .coverage-summary th.pct { }
133
+ .coverage-summary th.pic,
134
+ .coverage-summary th.abs,
135
+ .coverage-summary td.pct,
136
+ .coverage-summary td.abs { text-align: right; }
137
+ .coverage-summary td.file { white-space: nowrap; }
138
+ .coverage-summary td.pic { min-width: 120px !important; }
139
+ .coverage-summary tfoot td { }
140
+
141
+ .coverage-summary .sorter {
142
+ height: 10px;
143
+ width: 7px;
144
+ display: inline-block;
145
+ margin-left: 0.5em;
146
+ background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
147
+ }
148
+ .coverage-summary .sorted .sorter {
149
+ background-position: 0 -20px;
150
+ }
151
+ .coverage-summary .sorted-desc .sorter {
152
+ background-position: 0 -10px;
153
+ }
154
+ .status-line { height: 10px; }
155
+ /* yellow */
156
+ .cbranch-no { background: yellow !important; color: #111; }
157
+ /* dark red */
158
+ .red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
159
+ .low .chart { border:1px solid #C21F39 }
160
+ .highlighted,
161
+ .highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{
162
+ background: #C21F39 !important;
163
+ }
164
+ /* medium red */
165
+ .cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
166
+ /* light red */
167
+ .low, .cline-no { background:#FCE1E5 }
168
+ /* light green */
169
+ .high, .cline-yes { background:rgb(230,245,208) }
170
+ /* medium green */
171
+ .cstat-yes { background:rgb(161,215,106) }
172
+ /* dark green */
173
+ .status-line.high, .high .cover-fill { background:rgb(77,146,33) }
174
+ .high .chart { border:1px solid rgb(77,146,33) }
175
+ /* dark yellow (gold) */
176
+ .status-line.medium, .medium .cover-fill { background: #f9cd0b; }
177
+ .medium .chart { border:1px solid #f9cd0b; }
178
+ /* light yellow */
179
+ .medium { background: #fff4c2; }
180
+
181
+ .cstat-skip { background: #ddd; color: #111; }
182
+ .fstat-skip { background: #ddd; color: #111 !important; }
183
+ .cbranch-skip { background: #ddd !important; color: #111; }
184
+
185
+ span.cline-neutral { background: #eaeaea; }
186
+
187
+ .coverage-summary td.empty {
188
+ opacity: .5;
189
+ padding-top: 4px;
190
+ padding-bottom: 4px;
191
+ line-height: 1;
192
+ color: #888;
193
+ }
194
+
195
+ .cover-fill, .cover-empty {
196
+ display:inline-block;
197
+ height: 12px;
198
+ }
199
+ .chart {
200
+ line-height: 0;
201
+ }
202
+ .cover-empty {
203
+ background: white;
204
+ }
205
+ .cover-full {
206
+ border-right: none !important;
207
+ }
208
+ pre.prettyprint {
209
+ border: none !important;
210
+ padding: 0 !important;
211
+ margin: 0 !important;
212
+ }
213
+ .com { color: #999 !important; }
214
+ .ignore-none { color: #999; font-weight: normal; }
215
+
216
+ .wrapper {
217
+ min-height: 100%;
218
+ height: auto !important;
219
+ height: 100%;
220
+ margin: 0 auto -48px;
221
+ }
222
+ .footer, .push {
223
+ height: 48px;
224
+ }
@@ -0,0 +1,87 @@
1
+ /* eslint-disable */
2
+ var jumpToCode = (function init() {
3
+ // Classes of code we would like to highlight in the file view
4
+ var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no'];
5
+
6
+ // Elements to highlight in the file listing view
7
+ var fileListingElements = ['td.pct.low'];
8
+
9
+ // We don't want to select elements that are direct descendants of another match
10
+ var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
11
+
12
+ // Selector that finds elements on the page to which we can jump
13
+ var selector =
14
+ fileListingElements.join(', ') +
15
+ ', ' +
16
+ notSelector +
17
+ missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
18
+
19
+ // The NodeList of matching elements
20
+ var missingCoverageElements = document.querySelectorAll(selector);
21
+
22
+ var currentIndex;
23
+
24
+ function toggleClass(index) {
25
+ missingCoverageElements
26
+ .item(currentIndex)
27
+ .classList.remove('highlighted');
28
+ missingCoverageElements.item(index).classList.add('highlighted');
29
+ }
30
+
31
+ function makeCurrent(index) {
32
+ toggleClass(index);
33
+ currentIndex = index;
34
+ missingCoverageElements.item(index).scrollIntoView({
35
+ behavior: 'smooth',
36
+ block: 'center',
37
+ inline: 'center'
38
+ });
39
+ }
40
+
41
+ function goToPrevious() {
42
+ var nextIndex = 0;
43
+ if (typeof currentIndex !== 'number' || currentIndex === 0) {
44
+ nextIndex = missingCoverageElements.length - 1;
45
+ } else if (missingCoverageElements.length > 1) {
46
+ nextIndex = currentIndex - 1;
47
+ }
48
+
49
+ makeCurrent(nextIndex);
50
+ }
51
+
52
+ function goToNext() {
53
+ var nextIndex = 0;
54
+
55
+ if (
56
+ typeof currentIndex === 'number' &&
57
+ currentIndex < missingCoverageElements.length - 1
58
+ ) {
59
+ nextIndex = currentIndex + 1;
60
+ }
61
+
62
+ makeCurrent(nextIndex);
63
+ }
64
+
65
+ return function jump(event) {
66
+ if (
67
+ document.getElementById('fileSearch') === document.activeElement &&
68
+ document.activeElement != null
69
+ ) {
70
+ // if we're currently focused on the search input, we don't want to navigate
71
+ return;
72
+ }
73
+
74
+ switch (event.which) {
75
+ case 78: // n
76
+ case 74: // j
77
+ goToNext();
78
+ break;
79
+ case 66: // b
80
+ case 75: // k
81
+ case 80: // p
82
+ goToPrevious();
83
+ break;
84
+ }
85
+ };
86
+ })();
87
+ window.addEventListener('keydown', jumpToCode);