qualink 0.2.0 → 0.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/dist/cli/command-factory.d.ts +23 -23
- package/dist/cli/commands/biome.d.ts +23 -23
- package/dist/cli/commands/coverage-dotnet.d.ts +23 -23
- package/dist/cli/commands/coverage-js.d.ts +23 -23
- package/dist/cli/commands/eslint.d.ts +23 -23
- package/dist/cli/commands/lighthouse.d.ts +23 -23
- package/dist/cli/commands/lighthouse.js +4 -1
- package/dist/cli/commands/meta.d.ts +23 -23
- package/dist/cli/commands/sarif.d.ts +23 -23
- package/dist/collectors/eslint.d.ts +2 -0
- package/dist/collectors/eslint.js +32 -3
- package/dist/collectors/lighthouse.d.ts +4 -1
- package/dist/collectors/lighthouse.js +89 -1
- package/dist/types.d.ts +19 -0
- package/package.json +6 -6
|
@@ -11,77 +11,77 @@ interface CollectorCommandConfig<TExtra extends Record<string, unknown>> {
|
|
|
11
11
|
collect: (args: CommonArgs, metadata: CommonMetadata) => Promise<CollectorResult>;
|
|
12
12
|
}
|
|
13
13
|
export declare function createCollectorCommand<TExtra extends Record<string, unknown>>(config: CollectorCommandConfig<TExtra>): import("citty").CommandDef<{
|
|
14
|
-
input: {
|
|
14
|
+
readonly input: {
|
|
15
15
|
readonly type: "string";
|
|
16
16
|
readonly required: true;
|
|
17
17
|
};
|
|
18
|
-
sink: {
|
|
18
|
+
readonly sink: {
|
|
19
19
|
readonly type: "string";
|
|
20
20
|
readonly default: "elastic";
|
|
21
21
|
};
|
|
22
|
-
repo: {
|
|
22
|
+
readonly repo: {
|
|
23
23
|
readonly type: "string";
|
|
24
24
|
};
|
|
25
|
-
category: {
|
|
25
|
+
readonly category: {
|
|
26
26
|
readonly type: "string";
|
|
27
27
|
};
|
|
28
|
-
tags: {
|
|
28
|
+
readonly tags: {
|
|
29
29
|
readonly type: "string";
|
|
30
30
|
};
|
|
31
|
-
branch: {
|
|
31
|
+
readonly branch: {
|
|
32
32
|
readonly type: "string";
|
|
33
33
|
};
|
|
34
|
-
"commit-sha": {
|
|
34
|
+
readonly "commit-sha": {
|
|
35
35
|
readonly type: "string";
|
|
36
36
|
};
|
|
37
|
-
"pipeline-run-id": {
|
|
37
|
+
readonly "pipeline-run-id": {
|
|
38
38
|
readonly type: "string";
|
|
39
39
|
};
|
|
40
|
-
"pipeline-provider": {
|
|
40
|
+
readonly "pipeline-provider": {
|
|
41
41
|
readonly type: "string";
|
|
42
42
|
};
|
|
43
|
-
environment: {
|
|
43
|
+
readonly environment: {
|
|
44
44
|
readonly type: "string";
|
|
45
45
|
readonly default: "ci";
|
|
46
46
|
};
|
|
47
|
-
package: {
|
|
47
|
+
readonly package: {
|
|
48
48
|
readonly type: "string";
|
|
49
49
|
};
|
|
50
|
-
project: {
|
|
50
|
+
readonly project: {
|
|
51
51
|
readonly type: "string";
|
|
52
52
|
};
|
|
53
|
-
"collector-version": {
|
|
53
|
+
readonly "collector-version": {
|
|
54
54
|
readonly type: "string";
|
|
55
55
|
};
|
|
56
|
-
"elastic-url": {
|
|
56
|
+
readonly "elastic-url": {
|
|
57
57
|
readonly type: "string";
|
|
58
58
|
};
|
|
59
|
-
"elastic-api-key": {
|
|
59
|
+
readonly "elastic-api-key": {
|
|
60
60
|
readonly type: "string";
|
|
61
61
|
};
|
|
62
|
-
"loki-url": {
|
|
62
|
+
readonly "loki-url": {
|
|
63
63
|
readonly type: "string";
|
|
64
64
|
};
|
|
65
|
-
"loki-username": {
|
|
65
|
+
readonly "loki-username": {
|
|
66
66
|
readonly type: "string";
|
|
67
67
|
};
|
|
68
|
-
"loki-password": {
|
|
68
|
+
readonly "loki-password": {
|
|
69
69
|
readonly type: "string";
|
|
70
70
|
};
|
|
71
|
-
"loki-tenant-id": {
|
|
71
|
+
readonly "loki-tenant-id": {
|
|
72
72
|
readonly type: "string";
|
|
73
73
|
};
|
|
74
|
-
"retry-max": {
|
|
74
|
+
readonly "retry-max": {
|
|
75
75
|
readonly type: "string";
|
|
76
76
|
};
|
|
77
|
-
"retry-backoff-ms": {
|
|
77
|
+
readonly "retry-backoff-ms": {
|
|
78
78
|
readonly type: "string";
|
|
79
79
|
};
|
|
80
|
-
"allow-empty": {
|
|
80
|
+
readonly "allow-empty": {
|
|
81
81
|
readonly type: "boolean";
|
|
82
82
|
readonly default: false;
|
|
83
83
|
};
|
|
84
|
-
"dry-run": {
|
|
84
|
+
readonly "dry-run": {
|
|
85
85
|
readonly type: "boolean";
|
|
86
86
|
readonly default: false;
|
|
87
87
|
};
|
|
@@ -1,75 +1,75 @@
|
|
|
1
1
|
export declare const biomeCommand: import("citty").CommandDef<{
|
|
2
|
-
input: {
|
|
2
|
+
readonly input: {
|
|
3
3
|
readonly type: "string";
|
|
4
4
|
readonly required: true;
|
|
5
5
|
};
|
|
6
|
-
sink: {
|
|
6
|
+
readonly sink: {
|
|
7
7
|
readonly type: "string";
|
|
8
8
|
readonly default: "elastic";
|
|
9
9
|
};
|
|
10
|
-
repo: {
|
|
10
|
+
readonly repo: {
|
|
11
11
|
readonly type: "string";
|
|
12
12
|
};
|
|
13
|
-
category: {
|
|
13
|
+
readonly category: {
|
|
14
14
|
readonly type: "string";
|
|
15
15
|
};
|
|
16
|
-
tags: {
|
|
16
|
+
readonly tags: {
|
|
17
17
|
readonly type: "string";
|
|
18
18
|
};
|
|
19
|
-
branch: {
|
|
19
|
+
readonly branch: {
|
|
20
20
|
readonly type: "string";
|
|
21
21
|
};
|
|
22
|
-
"commit-sha": {
|
|
22
|
+
readonly "commit-sha": {
|
|
23
23
|
readonly type: "string";
|
|
24
24
|
};
|
|
25
|
-
"pipeline-run-id": {
|
|
25
|
+
readonly "pipeline-run-id": {
|
|
26
26
|
readonly type: "string";
|
|
27
27
|
};
|
|
28
|
-
"pipeline-provider": {
|
|
28
|
+
readonly "pipeline-provider": {
|
|
29
29
|
readonly type: "string";
|
|
30
30
|
};
|
|
31
|
-
environment: {
|
|
31
|
+
readonly environment: {
|
|
32
32
|
readonly type: "string";
|
|
33
33
|
readonly default: "ci";
|
|
34
34
|
};
|
|
35
|
-
package: {
|
|
35
|
+
readonly package: {
|
|
36
36
|
readonly type: "string";
|
|
37
37
|
};
|
|
38
|
-
project: {
|
|
38
|
+
readonly project: {
|
|
39
39
|
readonly type: "string";
|
|
40
40
|
};
|
|
41
|
-
"collector-version": {
|
|
41
|
+
readonly "collector-version": {
|
|
42
42
|
readonly type: "string";
|
|
43
43
|
};
|
|
44
|
-
"elastic-url": {
|
|
44
|
+
readonly "elastic-url": {
|
|
45
45
|
readonly type: "string";
|
|
46
46
|
};
|
|
47
|
-
"elastic-api-key": {
|
|
47
|
+
readonly "elastic-api-key": {
|
|
48
48
|
readonly type: "string";
|
|
49
49
|
};
|
|
50
|
-
"loki-url": {
|
|
50
|
+
readonly "loki-url": {
|
|
51
51
|
readonly type: "string";
|
|
52
52
|
};
|
|
53
|
-
"loki-username": {
|
|
53
|
+
readonly "loki-username": {
|
|
54
54
|
readonly type: "string";
|
|
55
55
|
};
|
|
56
|
-
"loki-password": {
|
|
56
|
+
readonly "loki-password": {
|
|
57
57
|
readonly type: "string";
|
|
58
58
|
};
|
|
59
|
-
"loki-tenant-id": {
|
|
59
|
+
readonly "loki-tenant-id": {
|
|
60
60
|
readonly type: "string";
|
|
61
61
|
};
|
|
62
|
-
"retry-max": {
|
|
62
|
+
readonly "retry-max": {
|
|
63
63
|
readonly type: "string";
|
|
64
64
|
};
|
|
65
|
-
"retry-backoff-ms": {
|
|
65
|
+
readonly "retry-backoff-ms": {
|
|
66
66
|
readonly type: "string";
|
|
67
67
|
};
|
|
68
|
-
"allow-empty": {
|
|
68
|
+
readonly "allow-empty": {
|
|
69
69
|
readonly type: "boolean";
|
|
70
70
|
readonly default: false;
|
|
71
71
|
};
|
|
72
|
-
"dry-run": {
|
|
72
|
+
readonly "dry-run": {
|
|
73
73
|
readonly type: "boolean";
|
|
74
74
|
readonly default: false;
|
|
75
75
|
};
|
|
@@ -1,75 +1,75 @@
|
|
|
1
1
|
export declare const coverageDotnetCommand: import("citty").CommandDef<{
|
|
2
|
-
input: {
|
|
2
|
+
readonly input: {
|
|
3
3
|
readonly type: "string";
|
|
4
4
|
readonly required: true;
|
|
5
5
|
};
|
|
6
|
-
sink: {
|
|
6
|
+
readonly sink: {
|
|
7
7
|
readonly type: "string";
|
|
8
8
|
readonly default: "elastic";
|
|
9
9
|
};
|
|
10
|
-
repo: {
|
|
10
|
+
readonly repo: {
|
|
11
11
|
readonly type: "string";
|
|
12
12
|
};
|
|
13
|
-
category: {
|
|
13
|
+
readonly category: {
|
|
14
14
|
readonly type: "string";
|
|
15
15
|
};
|
|
16
|
-
tags: {
|
|
16
|
+
readonly tags: {
|
|
17
17
|
readonly type: "string";
|
|
18
18
|
};
|
|
19
|
-
branch: {
|
|
19
|
+
readonly branch: {
|
|
20
20
|
readonly type: "string";
|
|
21
21
|
};
|
|
22
|
-
"commit-sha": {
|
|
22
|
+
readonly "commit-sha": {
|
|
23
23
|
readonly type: "string";
|
|
24
24
|
};
|
|
25
|
-
"pipeline-run-id": {
|
|
25
|
+
readonly "pipeline-run-id": {
|
|
26
26
|
readonly type: "string";
|
|
27
27
|
};
|
|
28
|
-
"pipeline-provider": {
|
|
28
|
+
readonly "pipeline-provider": {
|
|
29
29
|
readonly type: "string";
|
|
30
30
|
};
|
|
31
|
-
environment: {
|
|
31
|
+
readonly environment: {
|
|
32
32
|
readonly type: "string";
|
|
33
33
|
readonly default: "ci";
|
|
34
34
|
};
|
|
35
|
-
package: {
|
|
35
|
+
readonly package: {
|
|
36
36
|
readonly type: "string";
|
|
37
37
|
};
|
|
38
|
-
project: {
|
|
38
|
+
readonly project: {
|
|
39
39
|
readonly type: "string";
|
|
40
40
|
};
|
|
41
|
-
"collector-version": {
|
|
41
|
+
readonly "collector-version": {
|
|
42
42
|
readonly type: "string";
|
|
43
43
|
};
|
|
44
|
-
"elastic-url": {
|
|
44
|
+
readonly "elastic-url": {
|
|
45
45
|
readonly type: "string";
|
|
46
46
|
};
|
|
47
|
-
"elastic-api-key": {
|
|
47
|
+
readonly "elastic-api-key": {
|
|
48
48
|
readonly type: "string";
|
|
49
49
|
};
|
|
50
|
-
"loki-url": {
|
|
50
|
+
readonly "loki-url": {
|
|
51
51
|
readonly type: "string";
|
|
52
52
|
};
|
|
53
|
-
"loki-username": {
|
|
53
|
+
readonly "loki-username": {
|
|
54
54
|
readonly type: "string";
|
|
55
55
|
};
|
|
56
|
-
"loki-password": {
|
|
56
|
+
readonly "loki-password": {
|
|
57
57
|
readonly type: "string";
|
|
58
58
|
};
|
|
59
|
-
"loki-tenant-id": {
|
|
59
|
+
readonly "loki-tenant-id": {
|
|
60
60
|
readonly type: "string";
|
|
61
61
|
};
|
|
62
|
-
"retry-max": {
|
|
62
|
+
readonly "retry-max": {
|
|
63
63
|
readonly type: "string";
|
|
64
64
|
};
|
|
65
|
-
"retry-backoff-ms": {
|
|
65
|
+
readonly "retry-backoff-ms": {
|
|
66
66
|
readonly type: "string";
|
|
67
67
|
};
|
|
68
|
-
"allow-empty": {
|
|
68
|
+
readonly "allow-empty": {
|
|
69
69
|
readonly type: "boolean";
|
|
70
70
|
readonly default: false;
|
|
71
71
|
};
|
|
72
|
-
"dry-run": {
|
|
72
|
+
readonly "dry-run": {
|
|
73
73
|
readonly type: "boolean";
|
|
74
74
|
readonly default: false;
|
|
75
75
|
};
|
|
@@ -1,75 +1,75 @@
|
|
|
1
1
|
export declare const coverageJsCommand: import("citty").CommandDef<{
|
|
2
|
-
input: {
|
|
2
|
+
readonly input: {
|
|
3
3
|
readonly type: "string";
|
|
4
4
|
readonly required: true;
|
|
5
5
|
};
|
|
6
|
-
sink: {
|
|
6
|
+
readonly sink: {
|
|
7
7
|
readonly type: "string";
|
|
8
8
|
readonly default: "elastic";
|
|
9
9
|
};
|
|
10
|
-
repo: {
|
|
10
|
+
readonly repo: {
|
|
11
11
|
readonly type: "string";
|
|
12
12
|
};
|
|
13
|
-
category: {
|
|
13
|
+
readonly category: {
|
|
14
14
|
readonly type: "string";
|
|
15
15
|
};
|
|
16
|
-
tags: {
|
|
16
|
+
readonly tags: {
|
|
17
17
|
readonly type: "string";
|
|
18
18
|
};
|
|
19
|
-
branch: {
|
|
19
|
+
readonly branch: {
|
|
20
20
|
readonly type: "string";
|
|
21
21
|
};
|
|
22
|
-
"commit-sha": {
|
|
22
|
+
readonly "commit-sha": {
|
|
23
23
|
readonly type: "string";
|
|
24
24
|
};
|
|
25
|
-
"pipeline-run-id": {
|
|
25
|
+
readonly "pipeline-run-id": {
|
|
26
26
|
readonly type: "string";
|
|
27
27
|
};
|
|
28
|
-
"pipeline-provider": {
|
|
28
|
+
readonly "pipeline-provider": {
|
|
29
29
|
readonly type: "string";
|
|
30
30
|
};
|
|
31
|
-
environment: {
|
|
31
|
+
readonly environment: {
|
|
32
32
|
readonly type: "string";
|
|
33
33
|
readonly default: "ci";
|
|
34
34
|
};
|
|
35
|
-
package: {
|
|
35
|
+
readonly package: {
|
|
36
36
|
readonly type: "string";
|
|
37
37
|
};
|
|
38
|
-
project: {
|
|
38
|
+
readonly project: {
|
|
39
39
|
readonly type: "string";
|
|
40
40
|
};
|
|
41
|
-
"collector-version": {
|
|
41
|
+
readonly "collector-version": {
|
|
42
42
|
readonly type: "string";
|
|
43
43
|
};
|
|
44
|
-
"elastic-url": {
|
|
44
|
+
readonly "elastic-url": {
|
|
45
45
|
readonly type: "string";
|
|
46
46
|
};
|
|
47
|
-
"elastic-api-key": {
|
|
47
|
+
readonly "elastic-api-key": {
|
|
48
48
|
readonly type: "string";
|
|
49
49
|
};
|
|
50
|
-
"loki-url": {
|
|
50
|
+
readonly "loki-url": {
|
|
51
51
|
readonly type: "string";
|
|
52
52
|
};
|
|
53
|
-
"loki-username": {
|
|
53
|
+
readonly "loki-username": {
|
|
54
54
|
readonly type: "string";
|
|
55
55
|
};
|
|
56
|
-
"loki-password": {
|
|
56
|
+
readonly "loki-password": {
|
|
57
57
|
readonly type: "string";
|
|
58
58
|
};
|
|
59
|
-
"loki-tenant-id": {
|
|
59
|
+
readonly "loki-tenant-id": {
|
|
60
60
|
readonly type: "string";
|
|
61
61
|
};
|
|
62
|
-
"retry-max": {
|
|
62
|
+
readonly "retry-max": {
|
|
63
63
|
readonly type: "string";
|
|
64
64
|
};
|
|
65
|
-
"retry-backoff-ms": {
|
|
65
|
+
readonly "retry-backoff-ms": {
|
|
66
66
|
readonly type: "string";
|
|
67
67
|
};
|
|
68
|
-
"allow-empty": {
|
|
68
|
+
readonly "allow-empty": {
|
|
69
69
|
readonly type: "boolean";
|
|
70
70
|
readonly default: false;
|
|
71
71
|
};
|
|
72
|
-
"dry-run": {
|
|
72
|
+
readonly "dry-run": {
|
|
73
73
|
readonly type: "boolean";
|
|
74
74
|
readonly default: false;
|
|
75
75
|
};
|
|
@@ -1,75 +1,75 @@
|
|
|
1
1
|
export declare const eslintCommand: import("citty").CommandDef<{
|
|
2
|
-
input: {
|
|
2
|
+
readonly input: {
|
|
3
3
|
readonly type: "string";
|
|
4
4
|
readonly required: true;
|
|
5
5
|
};
|
|
6
|
-
sink: {
|
|
6
|
+
readonly sink: {
|
|
7
7
|
readonly type: "string";
|
|
8
8
|
readonly default: "elastic";
|
|
9
9
|
};
|
|
10
|
-
repo: {
|
|
10
|
+
readonly repo: {
|
|
11
11
|
readonly type: "string";
|
|
12
12
|
};
|
|
13
|
-
category: {
|
|
13
|
+
readonly category: {
|
|
14
14
|
readonly type: "string";
|
|
15
15
|
};
|
|
16
|
-
tags: {
|
|
16
|
+
readonly tags: {
|
|
17
17
|
readonly type: "string";
|
|
18
18
|
};
|
|
19
|
-
branch: {
|
|
19
|
+
readonly branch: {
|
|
20
20
|
readonly type: "string";
|
|
21
21
|
};
|
|
22
|
-
"commit-sha": {
|
|
22
|
+
readonly "commit-sha": {
|
|
23
23
|
readonly type: "string";
|
|
24
24
|
};
|
|
25
|
-
"pipeline-run-id": {
|
|
25
|
+
readonly "pipeline-run-id": {
|
|
26
26
|
readonly type: "string";
|
|
27
27
|
};
|
|
28
|
-
"pipeline-provider": {
|
|
28
|
+
readonly "pipeline-provider": {
|
|
29
29
|
readonly type: "string";
|
|
30
30
|
};
|
|
31
|
-
environment: {
|
|
31
|
+
readonly environment: {
|
|
32
32
|
readonly type: "string";
|
|
33
33
|
readonly default: "ci";
|
|
34
34
|
};
|
|
35
|
-
package: {
|
|
35
|
+
readonly package: {
|
|
36
36
|
readonly type: "string";
|
|
37
37
|
};
|
|
38
|
-
project: {
|
|
38
|
+
readonly project: {
|
|
39
39
|
readonly type: "string";
|
|
40
40
|
};
|
|
41
|
-
"collector-version": {
|
|
41
|
+
readonly "collector-version": {
|
|
42
42
|
readonly type: "string";
|
|
43
43
|
};
|
|
44
|
-
"elastic-url": {
|
|
44
|
+
readonly "elastic-url": {
|
|
45
45
|
readonly type: "string";
|
|
46
46
|
};
|
|
47
|
-
"elastic-api-key": {
|
|
47
|
+
readonly "elastic-api-key": {
|
|
48
48
|
readonly type: "string";
|
|
49
49
|
};
|
|
50
|
-
"loki-url": {
|
|
50
|
+
readonly "loki-url": {
|
|
51
51
|
readonly type: "string";
|
|
52
52
|
};
|
|
53
|
-
"loki-username": {
|
|
53
|
+
readonly "loki-username": {
|
|
54
54
|
readonly type: "string";
|
|
55
55
|
};
|
|
56
|
-
"loki-password": {
|
|
56
|
+
readonly "loki-password": {
|
|
57
57
|
readonly type: "string";
|
|
58
58
|
};
|
|
59
|
-
"loki-tenant-id": {
|
|
59
|
+
readonly "loki-tenant-id": {
|
|
60
60
|
readonly type: "string";
|
|
61
61
|
};
|
|
62
|
-
"retry-max": {
|
|
62
|
+
readonly "retry-max": {
|
|
63
63
|
readonly type: "string";
|
|
64
64
|
};
|
|
65
|
-
"retry-backoff-ms": {
|
|
65
|
+
readonly "retry-backoff-ms": {
|
|
66
66
|
readonly type: "string";
|
|
67
67
|
};
|
|
68
|
-
"allow-empty": {
|
|
68
|
+
readonly "allow-empty": {
|
|
69
69
|
readonly type: "boolean";
|
|
70
70
|
readonly default: false;
|
|
71
71
|
};
|
|
72
|
-
"dry-run": {
|
|
72
|
+
readonly "dry-run": {
|
|
73
73
|
readonly type: "boolean";
|
|
74
74
|
readonly default: false;
|
|
75
75
|
};
|
|
@@ -1,75 +1,75 @@
|
|
|
1
1
|
export declare const lighthouseCommand: import("citty").CommandDef<{
|
|
2
|
-
input: {
|
|
2
|
+
readonly input: {
|
|
3
3
|
readonly type: "string";
|
|
4
4
|
readonly required: true;
|
|
5
5
|
};
|
|
6
|
-
sink: {
|
|
6
|
+
readonly sink: {
|
|
7
7
|
readonly type: "string";
|
|
8
8
|
readonly default: "elastic";
|
|
9
9
|
};
|
|
10
|
-
repo: {
|
|
10
|
+
readonly repo: {
|
|
11
11
|
readonly type: "string";
|
|
12
12
|
};
|
|
13
|
-
category: {
|
|
13
|
+
readonly category: {
|
|
14
14
|
readonly type: "string";
|
|
15
15
|
};
|
|
16
|
-
tags: {
|
|
16
|
+
readonly tags: {
|
|
17
17
|
readonly type: "string";
|
|
18
18
|
};
|
|
19
|
-
branch: {
|
|
19
|
+
readonly branch: {
|
|
20
20
|
readonly type: "string";
|
|
21
21
|
};
|
|
22
|
-
"commit-sha": {
|
|
22
|
+
readonly "commit-sha": {
|
|
23
23
|
readonly type: "string";
|
|
24
24
|
};
|
|
25
|
-
"pipeline-run-id": {
|
|
25
|
+
readonly "pipeline-run-id": {
|
|
26
26
|
readonly type: "string";
|
|
27
27
|
};
|
|
28
|
-
"pipeline-provider": {
|
|
28
|
+
readonly "pipeline-provider": {
|
|
29
29
|
readonly type: "string";
|
|
30
30
|
};
|
|
31
|
-
environment: {
|
|
31
|
+
readonly environment: {
|
|
32
32
|
readonly type: "string";
|
|
33
33
|
readonly default: "ci";
|
|
34
34
|
};
|
|
35
|
-
package: {
|
|
35
|
+
readonly package: {
|
|
36
36
|
readonly type: "string";
|
|
37
37
|
};
|
|
38
|
-
project: {
|
|
38
|
+
readonly project: {
|
|
39
39
|
readonly type: "string";
|
|
40
40
|
};
|
|
41
|
-
"collector-version": {
|
|
41
|
+
readonly "collector-version": {
|
|
42
42
|
readonly type: "string";
|
|
43
43
|
};
|
|
44
|
-
"elastic-url": {
|
|
44
|
+
readonly "elastic-url": {
|
|
45
45
|
readonly type: "string";
|
|
46
46
|
};
|
|
47
|
-
"elastic-api-key": {
|
|
47
|
+
readonly "elastic-api-key": {
|
|
48
48
|
readonly type: "string";
|
|
49
49
|
};
|
|
50
|
-
"loki-url": {
|
|
50
|
+
readonly "loki-url": {
|
|
51
51
|
readonly type: "string";
|
|
52
52
|
};
|
|
53
|
-
"loki-username": {
|
|
53
|
+
readonly "loki-username": {
|
|
54
54
|
readonly type: "string";
|
|
55
55
|
};
|
|
56
|
-
"loki-password": {
|
|
56
|
+
readonly "loki-password": {
|
|
57
57
|
readonly type: "string";
|
|
58
58
|
};
|
|
59
|
-
"loki-tenant-id": {
|
|
59
|
+
readonly "loki-tenant-id": {
|
|
60
60
|
readonly type: "string";
|
|
61
61
|
};
|
|
62
|
-
"retry-max": {
|
|
62
|
+
readonly "retry-max": {
|
|
63
63
|
readonly type: "string";
|
|
64
64
|
};
|
|
65
|
-
"retry-backoff-ms": {
|
|
65
|
+
readonly "retry-backoff-ms": {
|
|
66
66
|
readonly type: "string";
|
|
67
67
|
};
|
|
68
|
-
"allow-empty": {
|
|
68
|
+
readonly "allow-empty": {
|
|
69
69
|
readonly type: "boolean";
|
|
70
70
|
readonly default: false;
|
|
71
71
|
};
|
|
72
|
-
"dry-run": {
|
|
72
|
+
readonly "dry-run": {
|
|
73
73
|
readonly type: "boolean";
|
|
74
74
|
readonly default: false;
|
|
75
75
|
};
|
|
@@ -7,6 +7,7 @@ export const lighthouseCommand = createCollectorCommand({
|
|
|
7
7
|
description: "Collect Lighthouse metrics and relay them",
|
|
8
8
|
extraArgs: {
|
|
9
9
|
url: { type: "string", required: true },
|
|
10
|
+
"include-filmstrip": { type: "boolean", default: false },
|
|
10
11
|
},
|
|
11
12
|
async collect(args, metadata) {
|
|
12
13
|
const url = args.url;
|
|
@@ -14,7 +15,9 @@ export const lighthouseCommand = createCollectorCommand({
|
|
|
14
15
|
throw new CliError("Missing required value: url", 2);
|
|
15
16
|
}
|
|
16
17
|
const input = await loadJsonInput(args);
|
|
17
|
-
const documents = collectLighthouse(input, metadata, url
|
|
18
|
+
const documents = collectLighthouse(input, metadata, url, {
|
|
19
|
+
includeFilmstrip: args["include-filmstrip"] === true,
|
|
20
|
+
});
|
|
18
21
|
return { metricType: "lighthouse", documents };
|
|
19
22
|
},
|
|
20
23
|
});
|
|
@@ -1,75 +1,75 @@
|
|
|
1
1
|
export declare const metaCommand: import("citty").CommandDef<{
|
|
2
|
-
input: {
|
|
2
|
+
readonly input: {
|
|
3
3
|
readonly type: "string";
|
|
4
4
|
readonly required: true;
|
|
5
5
|
};
|
|
6
|
-
sink: {
|
|
6
|
+
readonly sink: {
|
|
7
7
|
readonly type: "string";
|
|
8
8
|
readonly default: "elastic";
|
|
9
9
|
};
|
|
10
|
-
repo: {
|
|
10
|
+
readonly repo: {
|
|
11
11
|
readonly type: "string";
|
|
12
12
|
};
|
|
13
|
-
category: {
|
|
13
|
+
readonly category: {
|
|
14
14
|
readonly type: "string";
|
|
15
15
|
};
|
|
16
|
-
tags: {
|
|
16
|
+
readonly tags: {
|
|
17
17
|
readonly type: "string";
|
|
18
18
|
};
|
|
19
|
-
branch: {
|
|
19
|
+
readonly branch: {
|
|
20
20
|
readonly type: "string";
|
|
21
21
|
};
|
|
22
|
-
"commit-sha": {
|
|
22
|
+
readonly "commit-sha": {
|
|
23
23
|
readonly type: "string";
|
|
24
24
|
};
|
|
25
|
-
"pipeline-run-id": {
|
|
25
|
+
readonly "pipeline-run-id": {
|
|
26
26
|
readonly type: "string";
|
|
27
27
|
};
|
|
28
|
-
"pipeline-provider": {
|
|
28
|
+
readonly "pipeline-provider": {
|
|
29
29
|
readonly type: "string";
|
|
30
30
|
};
|
|
31
|
-
environment: {
|
|
31
|
+
readonly environment: {
|
|
32
32
|
readonly type: "string";
|
|
33
33
|
readonly default: "ci";
|
|
34
34
|
};
|
|
35
|
-
package: {
|
|
35
|
+
readonly package: {
|
|
36
36
|
readonly type: "string";
|
|
37
37
|
};
|
|
38
|
-
project: {
|
|
38
|
+
readonly project: {
|
|
39
39
|
readonly type: "string";
|
|
40
40
|
};
|
|
41
|
-
"collector-version": {
|
|
41
|
+
readonly "collector-version": {
|
|
42
42
|
readonly type: "string";
|
|
43
43
|
};
|
|
44
|
-
"elastic-url": {
|
|
44
|
+
readonly "elastic-url": {
|
|
45
45
|
readonly type: "string";
|
|
46
46
|
};
|
|
47
|
-
"elastic-api-key": {
|
|
47
|
+
readonly "elastic-api-key": {
|
|
48
48
|
readonly type: "string";
|
|
49
49
|
};
|
|
50
|
-
"loki-url": {
|
|
50
|
+
readonly "loki-url": {
|
|
51
51
|
readonly type: "string";
|
|
52
52
|
};
|
|
53
|
-
"loki-username": {
|
|
53
|
+
readonly "loki-username": {
|
|
54
54
|
readonly type: "string";
|
|
55
55
|
};
|
|
56
|
-
"loki-password": {
|
|
56
|
+
readonly "loki-password": {
|
|
57
57
|
readonly type: "string";
|
|
58
58
|
};
|
|
59
|
-
"loki-tenant-id": {
|
|
59
|
+
readonly "loki-tenant-id": {
|
|
60
60
|
readonly type: "string";
|
|
61
61
|
};
|
|
62
|
-
"retry-max": {
|
|
62
|
+
readonly "retry-max": {
|
|
63
63
|
readonly type: "string";
|
|
64
64
|
};
|
|
65
|
-
"retry-backoff-ms": {
|
|
65
|
+
readonly "retry-backoff-ms": {
|
|
66
66
|
readonly type: "string";
|
|
67
67
|
};
|
|
68
|
-
"allow-empty": {
|
|
68
|
+
readonly "allow-empty": {
|
|
69
69
|
readonly type: "boolean";
|
|
70
70
|
readonly default: false;
|
|
71
71
|
};
|
|
72
|
-
"dry-run": {
|
|
72
|
+
readonly "dry-run": {
|
|
73
73
|
readonly type: "boolean";
|
|
74
74
|
readonly default: false;
|
|
75
75
|
};
|
|
@@ -1,75 +1,75 @@
|
|
|
1
1
|
export declare const sarifCommand: import("citty").CommandDef<{
|
|
2
|
-
input: {
|
|
2
|
+
readonly input: {
|
|
3
3
|
readonly type: "string";
|
|
4
4
|
readonly required: true;
|
|
5
5
|
};
|
|
6
|
-
sink: {
|
|
6
|
+
readonly sink: {
|
|
7
7
|
readonly type: "string";
|
|
8
8
|
readonly default: "elastic";
|
|
9
9
|
};
|
|
10
|
-
repo: {
|
|
10
|
+
readonly repo: {
|
|
11
11
|
readonly type: "string";
|
|
12
12
|
};
|
|
13
|
-
category: {
|
|
13
|
+
readonly category: {
|
|
14
14
|
readonly type: "string";
|
|
15
15
|
};
|
|
16
|
-
tags: {
|
|
16
|
+
readonly tags: {
|
|
17
17
|
readonly type: "string";
|
|
18
18
|
};
|
|
19
|
-
branch: {
|
|
19
|
+
readonly branch: {
|
|
20
20
|
readonly type: "string";
|
|
21
21
|
};
|
|
22
|
-
"commit-sha": {
|
|
22
|
+
readonly "commit-sha": {
|
|
23
23
|
readonly type: "string";
|
|
24
24
|
};
|
|
25
|
-
"pipeline-run-id": {
|
|
25
|
+
readonly "pipeline-run-id": {
|
|
26
26
|
readonly type: "string";
|
|
27
27
|
};
|
|
28
|
-
"pipeline-provider": {
|
|
28
|
+
readonly "pipeline-provider": {
|
|
29
29
|
readonly type: "string";
|
|
30
30
|
};
|
|
31
|
-
environment: {
|
|
31
|
+
readonly environment: {
|
|
32
32
|
readonly type: "string";
|
|
33
33
|
readonly default: "ci";
|
|
34
34
|
};
|
|
35
|
-
package: {
|
|
35
|
+
readonly package: {
|
|
36
36
|
readonly type: "string";
|
|
37
37
|
};
|
|
38
|
-
project: {
|
|
38
|
+
readonly project: {
|
|
39
39
|
readonly type: "string";
|
|
40
40
|
};
|
|
41
|
-
"collector-version": {
|
|
41
|
+
readonly "collector-version": {
|
|
42
42
|
readonly type: "string";
|
|
43
43
|
};
|
|
44
|
-
"elastic-url": {
|
|
44
|
+
readonly "elastic-url": {
|
|
45
45
|
readonly type: "string";
|
|
46
46
|
};
|
|
47
|
-
"elastic-api-key": {
|
|
47
|
+
readonly "elastic-api-key": {
|
|
48
48
|
readonly type: "string";
|
|
49
49
|
};
|
|
50
|
-
"loki-url": {
|
|
50
|
+
readonly "loki-url": {
|
|
51
51
|
readonly type: "string";
|
|
52
52
|
};
|
|
53
|
-
"loki-username": {
|
|
53
|
+
readonly "loki-username": {
|
|
54
54
|
readonly type: "string";
|
|
55
55
|
};
|
|
56
|
-
"loki-password": {
|
|
56
|
+
readonly "loki-password": {
|
|
57
57
|
readonly type: "string";
|
|
58
58
|
};
|
|
59
|
-
"loki-tenant-id": {
|
|
59
|
+
readonly "loki-tenant-id": {
|
|
60
60
|
readonly type: "string";
|
|
61
61
|
};
|
|
62
|
-
"retry-max": {
|
|
62
|
+
readonly "retry-max": {
|
|
63
63
|
readonly type: "string";
|
|
64
64
|
};
|
|
65
|
-
"retry-backoff-ms": {
|
|
65
|
+
readonly "retry-backoff-ms": {
|
|
66
66
|
readonly type: "string";
|
|
67
67
|
};
|
|
68
|
-
"allow-empty": {
|
|
68
|
+
readonly "allow-empty": {
|
|
69
69
|
readonly type: "boolean";
|
|
70
70
|
readonly default: false;
|
|
71
71
|
};
|
|
72
|
-
"dry-run": {
|
|
72
|
+
readonly "dry-run": {
|
|
73
73
|
readonly type: "boolean";
|
|
74
74
|
readonly default: false;
|
|
75
75
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CommonMetadata, EslintMetricDocument, Language } from "../types.js";
|
|
2
2
|
interface EslintMessage {
|
|
3
3
|
ruleId: string | null;
|
|
4
|
+
severity?: number | undefined;
|
|
4
5
|
}
|
|
5
6
|
interface EslintFileResult {
|
|
6
7
|
filePath: string;
|
|
@@ -9,6 +10,7 @@ interface EslintFileResult {
|
|
|
9
10
|
fixableErrorCount: number;
|
|
10
11
|
fixableWarningCount: number;
|
|
11
12
|
messages: EslintMessage[];
|
|
13
|
+
suppressedMessages: EslintMessage[];
|
|
12
14
|
}
|
|
13
15
|
export interface EslintCollectorOptions {
|
|
14
16
|
includeRules: boolean;
|
|
@@ -12,16 +12,20 @@ function asEslintResults(input) {
|
|
|
12
12
|
if (!Array.isArray(messagesRaw)) {
|
|
13
13
|
throw new Error("Invalid ESLint messages array");
|
|
14
14
|
}
|
|
15
|
-
const
|
|
15
|
+
const parseMessages = (raw) => raw.map((message) => {
|
|
16
16
|
if (!isRecord(message)) {
|
|
17
17
|
return { ruleId: null };
|
|
18
18
|
}
|
|
19
19
|
const ruleValue = message.ruleId;
|
|
20
|
+
const severity = typeof message.severity === "number" ? message.severity : undefined;
|
|
20
21
|
if (typeof ruleValue !== "string" && ruleValue !== null) {
|
|
21
|
-
return { ruleId: null };
|
|
22
|
+
return { ruleId: null, severity };
|
|
22
23
|
}
|
|
23
|
-
return { ruleId: ruleValue };
|
|
24
|
+
return { ruleId: ruleValue, severity };
|
|
24
25
|
});
|
|
26
|
+
const messages = parseMessages(messagesRaw);
|
|
27
|
+
const suppressedRaw = entry.suppressedMessages;
|
|
28
|
+
const suppressedMessages = Array.isArray(suppressedRaw) ? parseMessages(suppressedRaw) : [];
|
|
25
29
|
return {
|
|
26
30
|
filePath: typeof entry.filePath === "string" ? entry.filePath : "unknown",
|
|
27
31
|
errorCount: typeof entry.errorCount === "number" ? entry.errorCount : 0,
|
|
@@ -29,6 +33,7 @@ function asEslintResults(input) {
|
|
|
29
33
|
fixableErrorCount: typeof entry.fixableErrorCount === "number" ? entry.fixableErrorCount : 0,
|
|
30
34
|
fixableWarningCount: typeof entry.fixableWarningCount === "number" ? entry.fixableWarningCount : 0,
|
|
31
35
|
messages,
|
|
36
|
+
suppressedMessages,
|
|
32
37
|
};
|
|
33
38
|
});
|
|
34
39
|
}
|
|
@@ -58,7 +63,10 @@ export function collectEslint(input, metadata, options) {
|
|
|
58
63
|
let warnings = 0;
|
|
59
64
|
let fixableErrors = 0;
|
|
60
65
|
let fixableWarnings = 0;
|
|
66
|
+
let suppressedErrors = 0;
|
|
67
|
+
let suppressedWarnings = 0;
|
|
61
68
|
const rules = new Map();
|
|
69
|
+
const suppressedRules = new Map();
|
|
62
70
|
const files = [];
|
|
63
71
|
for (const row of rows) {
|
|
64
72
|
errors += row.errorCount;
|
|
@@ -81,6 +89,20 @@ export function collectEslint(input, metadata, options) {
|
|
|
81
89
|
const existing = rules.get(message.ruleId) ?? 0;
|
|
82
90
|
rules.set(message.ruleId, existing + 1);
|
|
83
91
|
}
|
|
92
|
+
for (const message of row.suppressedMessages) {
|
|
93
|
+
// severity: 2 = error, 1 = warning
|
|
94
|
+
if (message.severity === 2) {
|
|
95
|
+
suppressedErrors++;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
suppressedWarnings++;
|
|
99
|
+
}
|
|
100
|
+
if (!message.ruleId) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const existing = suppressedRules.get(message.ruleId) ?? 0;
|
|
104
|
+
suppressedRules.set(message.ruleId, existing + 1);
|
|
105
|
+
}
|
|
84
106
|
}
|
|
85
107
|
const languages = options.languages ?? detectEslintLanguages(rows);
|
|
86
108
|
const doc = {
|
|
@@ -94,11 +116,18 @@ export function collectEslint(input, metadata, options) {
|
|
|
94
116
|
warnings,
|
|
95
117
|
fixable_errors: fixableErrors,
|
|
96
118
|
fixable_warnings: fixableWarnings,
|
|
119
|
+
suppressed_errors: suppressedErrors,
|
|
120
|
+
suppressed_warnings: suppressedWarnings,
|
|
97
121
|
};
|
|
98
122
|
if (options.includeRules) {
|
|
99
123
|
const sortedRules = [...rules.entries()].sort((a, b) => b[1] - a[1]);
|
|
100
124
|
const slice = options.topRules > 0 ? sortedRules.slice(0, options.topRules) : sortedRules;
|
|
101
125
|
doc.rules_violated = Object.fromEntries(slice);
|
|
126
|
+
if (suppressedRules.size > 0) {
|
|
127
|
+
const sortedSuppressed = [...suppressedRules.entries()].sort((a, b) => b[1] - a[1]);
|
|
128
|
+
const suppressedSlice = options.topRules > 0 ? sortedSuppressed.slice(0, options.topRules) : sortedSuppressed;
|
|
129
|
+
doc.suppressed_rules = Object.fromEntries(suppressedSlice);
|
|
130
|
+
}
|
|
102
131
|
}
|
|
103
132
|
if (files.length > 0 && (options.topFiles > 0 || options.includeAllFiles)) {
|
|
104
133
|
const sortedFiles = [...files].sort((a, b) => {
|
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
import type { CommonMetadata, LighthouseMetricDocument } from "../types.js";
|
|
2
|
-
export
|
|
2
|
+
export interface LighthouseCollectorOptions {
|
|
3
|
+
includeFilmstrip: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function collectLighthouse(input: unknown, metadata: CommonMetadata, url: string, options?: LighthouseCollectorOptions): LighthouseMetricDocument[];
|
|
@@ -12,7 +12,42 @@ function readCategoryScore(categories, key) {
|
|
|
12
12
|
}
|
|
13
13
|
return toPctFromUnitScore(score);
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
function readAuditNumeric(audits, key) {
|
|
16
|
+
const audit = audits[key];
|
|
17
|
+
if (!isRecord(audit)) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
const value = audit.numericValue;
|
|
21
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function extractFilmstrip(audits) {
|
|
27
|
+
const thumbnail = audits["screenshot-thumbnails"];
|
|
28
|
+
if (!isRecord(thumbnail))
|
|
29
|
+
return undefined;
|
|
30
|
+
const details = thumbnail.details;
|
|
31
|
+
if (!isRecord(details))
|
|
32
|
+
return undefined;
|
|
33
|
+
if (details.type !== "filmstrip")
|
|
34
|
+
return undefined;
|
|
35
|
+
const items = details.items;
|
|
36
|
+
if (!Array.isArray(items))
|
|
37
|
+
return undefined;
|
|
38
|
+
const frames = [];
|
|
39
|
+
for (const item of items) {
|
|
40
|
+
if (!isRecord(item))
|
|
41
|
+
continue;
|
|
42
|
+
if (typeof item.timing !== "number" || !Number.isFinite(item.timing))
|
|
43
|
+
continue;
|
|
44
|
+
if (typeof item.data !== "string")
|
|
45
|
+
continue;
|
|
46
|
+
frames.push({ timing: item.timing, data: item.data });
|
|
47
|
+
}
|
|
48
|
+
return frames.length > 0 ? frames : undefined;
|
|
49
|
+
}
|
|
50
|
+
export function collectLighthouse(input, metadata, url, options) {
|
|
16
51
|
if (!isRecord(input)) {
|
|
17
52
|
throw new Error("Lighthouse input must be an object");
|
|
18
53
|
}
|
|
@@ -33,5 +68,58 @@ export function collectLighthouse(input, metadata, url) {
|
|
|
33
68
|
best_practices: readCategoryScore(categoriesUnknown, "best-practices"),
|
|
34
69
|
seo: readCategoryScore(categoriesUnknown, "seo"),
|
|
35
70
|
};
|
|
71
|
+
const audits = input.audits;
|
|
72
|
+
if (isRecord(audits)) {
|
|
73
|
+
const fcp = readAuditNumeric(audits, "first-contentful-paint");
|
|
74
|
+
const lcp = readAuditNumeric(audits, "largest-contentful-paint");
|
|
75
|
+
const tbt = readAuditNumeric(audits, "total-blocking-time");
|
|
76
|
+
const cls = readAuditNumeric(audits, "cumulative-layout-shift");
|
|
77
|
+
const si = readAuditNumeric(audits, "speed-index");
|
|
78
|
+
const tti = readAuditNumeric(audits, "interactive");
|
|
79
|
+
const ttfb = readAuditNumeric(audits, "server-response-time");
|
|
80
|
+
const totalByteWeight = readAuditNumeric(audits, "total-byte-weight");
|
|
81
|
+
const domSize = readAuditNumeric(audits, "dom-size");
|
|
82
|
+
if (fcp !== undefined)
|
|
83
|
+
doc.fcp = fcp;
|
|
84
|
+
if (lcp !== undefined)
|
|
85
|
+
doc.lcp = lcp;
|
|
86
|
+
if (tbt !== undefined)
|
|
87
|
+
doc.tbt = tbt;
|
|
88
|
+
if (cls !== undefined)
|
|
89
|
+
doc.cls = cls;
|
|
90
|
+
if (si !== undefined)
|
|
91
|
+
doc.si = si;
|
|
92
|
+
if (tti !== undefined)
|
|
93
|
+
doc.tti = tti;
|
|
94
|
+
if (ttfb !== undefined)
|
|
95
|
+
doc.ttfb = ttfb;
|
|
96
|
+
if (totalByteWeight !== undefined)
|
|
97
|
+
doc.total_byte_weight = totalByteWeight;
|
|
98
|
+
if (domSize !== undefined)
|
|
99
|
+
doc.dom_size = domSize;
|
|
100
|
+
const auditScores = {};
|
|
101
|
+
const auditValues = {};
|
|
102
|
+
for (const [id, raw] of Object.entries(audits)) {
|
|
103
|
+
if (!isRecord(raw))
|
|
104
|
+
continue;
|
|
105
|
+
if (typeof raw.score === "number" && Number.isFinite(raw.score)) {
|
|
106
|
+
auditScores[id] = toPctFromUnitScore(raw.score);
|
|
107
|
+
}
|
|
108
|
+
if (typeof raw.numericValue === "number" && Number.isFinite(raw.numericValue)) {
|
|
109
|
+
auditValues[id] = raw.numericValue;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (Object.keys(auditScores).length > 0) {
|
|
113
|
+
doc.audit_scores = auditScores;
|
|
114
|
+
}
|
|
115
|
+
if (Object.keys(auditValues).length > 0) {
|
|
116
|
+
doc.audit_values = auditValues;
|
|
117
|
+
}
|
|
118
|
+
if (options?.includeFilmstrip) {
|
|
119
|
+
const filmstrip = extractFilmstrip(audits);
|
|
120
|
+
if (filmstrip)
|
|
121
|
+
doc.filmstrip = filmstrip;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
36
124
|
return [doc];
|
|
37
125
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -24,7 +24,10 @@ export interface EslintMetricDocument extends BaseMetricDocument {
|
|
|
24
24
|
warnings: number;
|
|
25
25
|
fixable_errors: number;
|
|
26
26
|
fixable_warnings: number;
|
|
27
|
+
suppressed_errors: number;
|
|
28
|
+
suppressed_warnings: number;
|
|
27
29
|
rules_violated?: Record<string, number>;
|
|
30
|
+
suppressed_rules?: Record<string, number>;
|
|
28
31
|
top_files?: EslintFileIssue[];
|
|
29
32
|
all_files?: EslintFileIssue[];
|
|
30
33
|
}
|
|
@@ -35,6 +38,10 @@ export interface EslintFileIssue {
|
|
|
35
38
|
fixable_errors: number;
|
|
36
39
|
fixable_warnings: number;
|
|
37
40
|
}
|
|
41
|
+
export interface LighthouseFilmstripFrame {
|
|
42
|
+
timing: number;
|
|
43
|
+
data: string;
|
|
44
|
+
}
|
|
38
45
|
export interface LighthouseMetricDocument extends BaseMetricDocument {
|
|
39
46
|
metric_type: "lighthouse";
|
|
40
47
|
url: string;
|
|
@@ -42,6 +49,18 @@ export interface LighthouseMetricDocument extends BaseMetricDocument {
|
|
|
42
49
|
accessibility: number;
|
|
43
50
|
best_practices: number;
|
|
44
51
|
seo: number;
|
|
52
|
+
fcp?: number;
|
|
53
|
+
lcp?: number;
|
|
54
|
+
tbt?: number;
|
|
55
|
+
cls?: number;
|
|
56
|
+
si?: number;
|
|
57
|
+
tti?: number;
|
|
58
|
+
ttfb?: number;
|
|
59
|
+
total_byte_weight?: number;
|
|
60
|
+
dom_size?: number;
|
|
61
|
+
audit_scores?: Record<string, number>;
|
|
62
|
+
audit_values?: Record<string, number>;
|
|
63
|
+
filmstrip?: LighthouseFilmstripFrame[];
|
|
45
64
|
}
|
|
46
65
|
export interface CoverageMetricDocument extends BaseMetricDocument {
|
|
47
66
|
lines_total: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qualink",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Collect, normalize, and relay code quality metrics from CI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -17,16 +17,16 @@
|
|
|
17
17
|
"node": ">=22"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"citty": "^0.1
|
|
21
|
-
"fast-xml-parser": "^4.
|
|
20
|
+
"citty": "^0.2.1",
|
|
21
|
+
"fast-xml-parser": "^5.4.2"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@biomejs/biome": "^2.4.
|
|
25
|
-
"@types/node": "^
|
|
24
|
+
"@biomejs/biome": "^2.4.5",
|
|
25
|
+
"@types/node": "^25.3.3",
|
|
26
26
|
"@vitest/coverage-v8": "^4.0.18",
|
|
27
27
|
"git-cliff": "^2.12.0",
|
|
28
28
|
"ts-node": "^10.9.2",
|
|
29
|
-
"typescript": "^5.
|
|
29
|
+
"typescript": "^5.9.3",
|
|
30
30
|
"vitest": "^4.0.18"
|
|
31
31
|
},
|
|
32
32
|
"repository": {
|