@code-pushup/lighthouse-plugin 0.69.5 → 0.70.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 +94 -0
- package/package.json +3 -3
- package/src/index.d.ts +3 -2
- package/src/index.js +2 -1
- package/src/index.js.map +1 -1
- package/src/lib/constants.d.ts +2 -0
- package/src/lib/constants.js +8 -0
- package/src/lib/constants.js.map +1 -1
- package/src/lib/lighthouse-plugin.d.ts +2 -2
- package/src/lib/lighthouse-plugin.js +10 -5
- package/src/lib/lighthouse-plugin.js.map +1 -1
- package/src/lib/merge-categories.d.ts +41 -0
- package/src/lib/merge-categories.js +122 -0
- package/src/lib/merge-categories.js.map +1 -0
- package/src/lib/processing.d.ts +19 -0
- package/src/lib/processing.js +81 -0
- package/src/lib/processing.js.map +1 -0
- package/src/lib/runner/details/details.d.ts +1 -1
- package/src/lib/runner/runner.d.ts +1 -1
- package/src/lib/runner/runner.js +43 -20
- package/src/lib/runner/runner.js.map +1 -1
- package/src/lib/runner/utils.d.ts +1 -0
- package/src/lib/runner/utils.js +12 -0
- package/src/lib/runner/utils.js.map +1 -1
- package/src/lib/types.d.ts +8 -0
- package/src/lib/utils.d.ts +3 -2
- package/src/lib/utils.js +5 -1
- package/src/lib/utils.js.map +1 -1
package/README.md
CHANGED
|
@@ -117,6 +117,100 @@ export default {
|
|
|
117
117
|
};
|
|
118
118
|
```
|
|
119
119
|
|
|
120
|
+
## Multiple URLs
|
|
121
|
+
|
|
122
|
+
The Lighthouse plugin supports running audits against multiple URLs in a single invocation. To do this, provide an array of URLs as the first argument to the plugin:
|
|
123
|
+
|
|
124
|
+
```ts
|
|
125
|
+
import lighthousePlugin from '@code-pushup/lighthouse-plugin';
|
|
126
|
+
|
|
127
|
+
export default {
|
|
128
|
+
// ...
|
|
129
|
+
plugins: [
|
|
130
|
+
// ...
|
|
131
|
+
await lighthousePlugin(['https://example.com', 'https://example.com/contact']),
|
|
132
|
+
],
|
|
133
|
+
};
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Assigning weights to URLs
|
|
137
|
+
|
|
138
|
+
You can assign custom weights to URLs by passing an object instead of an array. This is useful when some pages are more important than others (e.g., your homepage vs. a contact page). The keys are URLs, and the values are their weights.
|
|
139
|
+
|
|
140
|
+
URLs with higher weights contribute more to the overall category scores. For example, a URL with weight 2 has twice the influence of a URL with weight 1.
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
import lighthousePlugin from '@code-pushup/lighthouse-plugin';
|
|
144
|
+
|
|
145
|
+
export default {
|
|
146
|
+
// ...
|
|
147
|
+
plugins: [
|
|
148
|
+
// ...
|
|
149
|
+
await lighthousePlugin({
|
|
150
|
+
'https://example.com': 2,
|
|
151
|
+
'https://example.com/contact': 1,
|
|
152
|
+
})
|
|
153
|
+
];
|
|
154
|
+
};
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Categories with multiple URLs
|
|
158
|
+
|
|
159
|
+
When running Lighthouse against multiple URLs, use the `mergeLighthouseCategories` utility to ensure categories are correctly expanded and results are aggregated per URL.
|
|
160
|
+
|
|
161
|
+
#### Basic usage
|
|
162
|
+
|
|
163
|
+
```ts
|
|
164
|
+
import lighthousePlugin, { mergeLighthouseCategories } from '@code-pushup/lighthouse-plugin';
|
|
165
|
+
|
|
166
|
+
const lhPlugin = await lighthousePlugin(urls);
|
|
167
|
+
|
|
168
|
+
export default {
|
|
169
|
+
plugins: [
|
|
170
|
+
// ...
|
|
171
|
+
lhPlugin,
|
|
172
|
+
],
|
|
173
|
+
categories: [
|
|
174
|
+
// ...
|
|
175
|
+
...mergeLighthouseCategories(lhPlugin),
|
|
176
|
+
],
|
|
177
|
+
};
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
#### Custom categories
|
|
181
|
+
|
|
182
|
+
If you provide custom categories, you can reference both groups and audits as usual. The merging utility will expand each referenced group or audit for every URL, assigning the correct per-URL weight.
|
|
183
|
+
|
|
184
|
+
```ts
|
|
185
|
+
import lighthousePlugin, { lighthouseAuditRef, lighthouseGroupRef, mergeLighthouseCategories } from '@code-pushup/lighthouse-plugin';
|
|
186
|
+
|
|
187
|
+
const lhPlugin = await lighthousePlugin(urls);
|
|
188
|
+
|
|
189
|
+
export default {
|
|
190
|
+
// ...
|
|
191
|
+
plugins: [
|
|
192
|
+
// ...
|
|
193
|
+
lhPlugin,
|
|
194
|
+
],
|
|
195
|
+
categories: [
|
|
196
|
+
// ...
|
|
197
|
+
...mergeLighthouseCategories(lhPlugin, [
|
|
198
|
+
{
|
|
199
|
+
slug: 'performance',
|
|
200
|
+
title: 'Performance',
|
|
201
|
+
refs: [lighthouseGroupRef('performance'), lighthouseAuditRef('first-contentful-paint', 2)],
|
|
202
|
+
},
|
|
203
|
+
]),
|
|
204
|
+
],
|
|
205
|
+
};
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Behavior Summary
|
|
209
|
+
|
|
210
|
+
- **No categories**: The plugin auto-generates categories from the plugin's default Lighthouse groups.
|
|
211
|
+
- **Custom categories**: The plugin expands all referenced audits and groups for each URL, applying appropriate weights.
|
|
212
|
+
- **Empty array** (`categories: []`): No categories are created or expanded, which is useful when you only want audit data.
|
|
213
|
+
|
|
120
214
|
## Flags
|
|
121
215
|
|
|
122
216
|
The plugin accepts an optional second argument, `flags`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-pushup/lighthouse-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.70.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Code PushUp plugin for measuring web performance and quality with Lighthouse 🔥",
|
|
6
6
|
"homepage": "https://github.com/code-pushup/cli/tree/main/packages/plugin-lighthouse#readme",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
},
|
|
37
37
|
"type": "module",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@code-pushup/models": "0.
|
|
40
|
-
"@code-pushup/utils": "0.
|
|
39
|
+
"@code-pushup/models": "0.70.0",
|
|
40
|
+
"@code-pushup/utils": "0.70.0",
|
|
41
41
|
"ansis": "^3.3.0",
|
|
42
42
|
"chrome-launcher": "^1.1.1",
|
|
43
43
|
"lighthouse": "^12.0.0",
|
package/src/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { lighthousePlugin } from './lib/lighthouse-plugin.js';
|
|
2
2
|
export { LIGHTHOUSE_REPORT_NAME } from './lib/runner/constants.js';
|
|
3
3
|
export { DEFAULT_CHROME_FLAGS, LIGHTHOUSE_PLUGIN_SLUG, LIGHTHOUSE_OUTPUT_PATH, } from './lib/constants.js';
|
|
4
|
-
export { lighthouseAuditRef, lighthouseGroupRef
|
|
5
|
-
export type { LighthouseOptions } from './lib/types.js';
|
|
4
|
+
export { lighthouseAuditRef, lighthouseGroupRef } from './lib/utils.js';
|
|
5
|
+
export type { LighthouseGroupSlug, LighthouseOptions, LighthouseUrls, } from './lib/types.js';
|
|
6
6
|
export { lighthousePlugin } from './lib/lighthouse-plugin.js';
|
|
7
7
|
export default lighthousePlugin;
|
|
8
|
+
export { mergeLighthouseCategories } from './lib/merge-categories.js';
|
package/src/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { lighthousePlugin } from './lib/lighthouse-plugin.js';
|
|
2
2
|
export { LIGHTHOUSE_REPORT_NAME } from './lib/runner/constants.js';
|
|
3
3
|
export { DEFAULT_CHROME_FLAGS, LIGHTHOUSE_PLUGIN_SLUG, LIGHTHOUSE_OUTPUT_PATH, } from './lib/constants.js';
|
|
4
|
-
export { lighthouseAuditRef, lighthouseGroupRef
|
|
4
|
+
export { lighthouseAuditRef, lighthouseGroupRef } from './lib/utils.js';
|
|
5
5
|
export { lighthousePlugin } from './lib/lighthouse-plugin.js';
|
|
6
6
|
export default lighthousePlugin;
|
|
7
|
+
export { mergeLighthouseCategories } from './lib/merge-categories.js';
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugin-lighthouse/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugin-lighthouse/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,eAAe,gBAAgB,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/src/lib/constants.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export declare const DEFAULT_CHROME_FLAGS: string[];
|
|
2
2
|
export declare const LIGHTHOUSE_PLUGIN_SLUG = "lighthouse";
|
|
3
3
|
export declare const LIGHTHOUSE_OUTPUT_PATH: string;
|
|
4
|
+
export declare const LIGHTHOUSE_GROUP_SLUGS: readonly ["performance", "accessibility", "best-practices", "seo", "pwa"];
|
|
5
|
+
export declare const SINGLE_URL_THRESHOLD = 1;
|
package/src/lib/constants.js
CHANGED
|
@@ -5,4 +5,12 @@ import { DEFAULT_PERSIST_OUTPUT_DIR } from '@code-pushup/models';
|
|
|
5
5
|
export const DEFAULT_CHROME_FLAGS = [...DEFAULT_FLAGS, '--headless'];
|
|
6
6
|
export const LIGHTHOUSE_PLUGIN_SLUG = 'lighthouse';
|
|
7
7
|
export const LIGHTHOUSE_OUTPUT_PATH = path.join(DEFAULT_PERSIST_OUTPUT_DIR, LIGHTHOUSE_PLUGIN_SLUG);
|
|
8
|
+
export const LIGHTHOUSE_GROUP_SLUGS = [
|
|
9
|
+
'performance',
|
|
10
|
+
'accessibility',
|
|
11
|
+
'best-practices',
|
|
12
|
+
'seo',
|
|
13
|
+
'pwa',
|
|
14
|
+
];
|
|
15
|
+
export const SINGLE_URL_THRESHOLD = 1;
|
|
8
16
|
//# sourceMappingURL=constants.js.map
|
package/src/lib/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../packages/plugin-lighthouse/src/lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,6FAA6F;AAC7F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,aAAa,EAAE,YAAY,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAC7C,0BAA0B,EAC1B,sBAAsB,CACvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../packages/plugin-lighthouse/src/lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,6FAA6F;AAC7F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,aAAa,EAAE,YAAY,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAC7C,0BAA0B,EAC1B,sBAAsB,CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,aAAa;IACb,eAAe;IACf,gBAAgB;IAChB,KAAK;IACL,KAAK;CACG,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { PluginConfig } from '@code-pushup/models';
|
|
2
|
-
import type { LighthouseOptions } from './types.js';
|
|
3
|
-
export declare function lighthousePlugin(
|
|
2
|
+
import type { LighthouseOptions, LighthouseUrls } from './types.js';
|
|
3
|
+
export declare function lighthousePlugin(urls: LighthouseUrls, flags?: LighthouseOptions): PluginConfig;
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
2
|
import { LIGHTHOUSE_PLUGIN_SLUG } from './constants.js';
|
|
3
3
|
import { normalizeFlags } from './normalize-flags.js';
|
|
4
|
-
import {
|
|
4
|
+
import { normalizeUrlInput, processAuditsAndGroups } from './processing.js';
|
|
5
5
|
import { createRunnerFunction } from './runner/runner.js';
|
|
6
|
-
|
|
7
|
-
export function lighthousePlugin(url, flags) {
|
|
6
|
+
export function lighthousePlugin(urls, flags) {
|
|
8
7
|
const { skipAudits, onlyAudits, onlyCategories, ...unparsedFlags } = normalizeFlags(flags ?? {});
|
|
9
|
-
const {
|
|
8
|
+
const { urls: normalizedUrls, context } = normalizeUrlInput(urls);
|
|
9
|
+
const { audits, groups } = processAuditsAndGroups(normalizedUrls, {
|
|
10
|
+
skipAudits,
|
|
11
|
+
onlyAudits,
|
|
12
|
+
onlyCategories,
|
|
13
|
+
});
|
|
10
14
|
const packageJson = createRequire(import.meta.url)('../../package.json');
|
|
11
15
|
return {
|
|
12
16
|
slug: LIGHTHOUSE_PLUGIN_SLUG,
|
|
@@ -16,12 +20,13 @@ export function lighthousePlugin(url, flags) {
|
|
|
16
20
|
icon: 'lighthouse',
|
|
17
21
|
audits,
|
|
18
22
|
groups,
|
|
19
|
-
runner: createRunnerFunction(
|
|
23
|
+
runner: createRunnerFunction(normalizedUrls, {
|
|
20
24
|
skipAudits,
|
|
21
25
|
onlyAudits,
|
|
22
26
|
onlyCategories,
|
|
23
27
|
...unparsedFlags,
|
|
24
28
|
}),
|
|
29
|
+
context,
|
|
25
30
|
};
|
|
26
31
|
}
|
|
27
32
|
//# sourceMappingURL=lighthouse-plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lighthouse-plugin.js","sourceRoot":"","sources":["../../../../../packages/plugin-lighthouse/src/lib/lighthouse-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"lighthouse-plugin.js","sourceRoot":"","sources":["../../../../../packages/plugin-lighthouse/src/lib/lighthouse-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,MAAM,UAAU,gBAAgB,CAC9B,IAAoB,EACpB,KAAyB;IAEzB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,aAAa,EAAE,GAChE,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAE9B,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAElE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,cAAc,EAAE;QAChE,UAAU;QACV,UAAU;QACV,cAAc;KACf,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAChD,oBAAoB,CACkB,CAAC;IAEzC,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,YAAY;QAClB,MAAM;QACN,MAAM;QACN,MAAM,EAAE,oBAAoB,CAAC,cAAc,EAAE;YAC3C,UAAU;YACV,UAAU;YACV,cAAc;YACd,GAAG,aAAa;SACjB,CAAC;QACF,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { CategoryConfig, Group, PluginConfig } from '@code-pushup/models';
|
|
2
|
+
import type { LighthouseContext, LighthouseGroupSlug } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Expands and aggregates categories for multi-URL Lighthouse runs.
|
|
5
|
+
*
|
|
6
|
+
* - If user categories are provided, expands all refs (groups and audits) for each URL.
|
|
7
|
+
* - If not, generates categories from plugin groups only.
|
|
8
|
+
* - Assigns per-URL weights with correct precedence.
|
|
9
|
+
*
|
|
10
|
+
* @public
|
|
11
|
+
* @param plugin - {@link PluginConfig} object with groups and context
|
|
12
|
+
* @param categories - {@link CategoryConfig} optional user-defined categories
|
|
13
|
+
* @returns {CategoryConfig[]} - expanded and agregated categories
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* const lhPlugin = await lighthousePlugin(urls);
|
|
17
|
+
* const lhCoreConfig = {
|
|
18
|
+
* plugins: [lhPlugin],
|
|
19
|
+
* categories: mergeLighthouseCategories(lhPlugin),
|
|
20
|
+
* };
|
|
21
|
+
*/
|
|
22
|
+
export declare function mergeLighthouseCategories(plugin: Pick<PluginConfig, 'groups' | 'context'>, categories?: CategoryConfig[]): CategoryConfig[];
|
|
23
|
+
/**
|
|
24
|
+
* Creates a category config for a Lighthouse group, expanding it for each URL.
|
|
25
|
+
* Only used when user categories are not provided.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createAggregatedCategory(groupSlug: LighthouseGroupSlug, context: LighthouseContext): CategoryConfig;
|
|
28
|
+
/**
|
|
29
|
+
* Expands all refs (groups and audits) in a user-defined category for each URL.
|
|
30
|
+
* Used when user categories are provided.
|
|
31
|
+
*/
|
|
32
|
+
export declare function expandAggregatedCategory(category: CategoryConfig, context: LighthouseContext): CategoryConfig;
|
|
33
|
+
/**
|
|
34
|
+
* Extracts unique, unsuffixed group slugs from a list of groups.
|
|
35
|
+
* Useful for deduplicating and normalizing group slugs when generating categories.
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractGroupSlugs(groups: Group[]): LighthouseGroupSlug[];
|
|
38
|
+
export declare class ContextValidationError extends Error {
|
|
39
|
+
constructor(message: string);
|
|
40
|
+
}
|
|
41
|
+
export declare function validateContext(context: PluginConfig['context']): asserts context is LighthouseContext;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { LIGHTHOUSE_GROUP_SLUGS, LIGHTHOUSE_PLUGIN_SLUG } from './constants.js';
|
|
2
|
+
import { orderSlug, shouldExpandForUrls } from './processing.js';
|
|
3
|
+
import { LIGHTHOUSE_GROUPS } from './runner/constants.js';
|
|
4
|
+
import { isLighthouseGroupSlug } from './utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* Expands and aggregates categories for multi-URL Lighthouse runs.
|
|
7
|
+
*
|
|
8
|
+
* - If user categories are provided, expands all refs (groups and audits) for each URL.
|
|
9
|
+
* - If not, generates categories from plugin groups only.
|
|
10
|
+
* - Assigns per-URL weights with correct precedence.
|
|
11
|
+
*
|
|
12
|
+
* @public
|
|
13
|
+
* @param plugin - {@link PluginConfig} object with groups and context
|
|
14
|
+
* @param categories - {@link CategoryConfig} optional user-defined categories
|
|
15
|
+
* @returns {CategoryConfig[]} - expanded and agregated categories
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const lhPlugin = await lighthousePlugin(urls);
|
|
19
|
+
* const lhCoreConfig = {
|
|
20
|
+
* plugins: [lhPlugin],
|
|
21
|
+
* categories: mergeLighthouseCategories(lhPlugin),
|
|
22
|
+
* };
|
|
23
|
+
*/
|
|
24
|
+
export function mergeLighthouseCategories(plugin, categories) {
|
|
25
|
+
if (!plugin.groups || plugin.groups.length === 0) {
|
|
26
|
+
return categories ?? [];
|
|
27
|
+
}
|
|
28
|
+
validateContext(plugin.context);
|
|
29
|
+
if (!categories) {
|
|
30
|
+
return createCategories(plugin.groups, plugin.context);
|
|
31
|
+
}
|
|
32
|
+
return expandCategories(categories, plugin.context);
|
|
33
|
+
}
|
|
34
|
+
function createCategories(groups, context) {
|
|
35
|
+
if (!shouldExpandForUrls(context.urlCount)) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
return extractGroupSlugs(groups).map(slug => createAggregatedCategory(slug, context));
|
|
39
|
+
}
|
|
40
|
+
function expandCategories(categories, context) {
|
|
41
|
+
if (!shouldExpandForUrls(context.urlCount)) {
|
|
42
|
+
return categories;
|
|
43
|
+
}
|
|
44
|
+
return categories.map(category => expandAggregatedCategory(category, context));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Creates a category config for a Lighthouse group, expanding it for each URL.
|
|
48
|
+
* Only used when user categories are not provided.
|
|
49
|
+
*/
|
|
50
|
+
export function createAggregatedCategory(groupSlug, context) {
|
|
51
|
+
const group = LIGHTHOUSE_GROUPS.find(({ slug }) => slug === groupSlug);
|
|
52
|
+
if (!group) {
|
|
53
|
+
const availableSlugs = LIGHTHOUSE_GROUP_SLUGS.join(', ');
|
|
54
|
+
throw new Error(`Invalid Lighthouse group slug: "${groupSlug}". Available groups: ${availableSlugs}`);
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
slug: group.slug,
|
|
58
|
+
title: group.title,
|
|
59
|
+
...(group.description && { description: group.description }),
|
|
60
|
+
refs: Array.from({ length: context.urlCount }, (_, i) => ({
|
|
61
|
+
plugin: LIGHTHOUSE_PLUGIN_SLUG,
|
|
62
|
+
slug: shouldExpandForUrls(context.urlCount)
|
|
63
|
+
? orderSlug(group.slug, i)
|
|
64
|
+
: group.slug,
|
|
65
|
+
type: 'group',
|
|
66
|
+
weight: resolveWeight(context.weights, i),
|
|
67
|
+
})),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Expands all refs (groups and audits) in a user-defined category for each URL.
|
|
72
|
+
* Used when user categories are provided.
|
|
73
|
+
*/
|
|
74
|
+
export function expandAggregatedCategory(category, context) {
|
|
75
|
+
return {
|
|
76
|
+
...category,
|
|
77
|
+
refs: category.refs.flatMap(ref => {
|
|
78
|
+
if (ref.plugin === LIGHTHOUSE_PLUGIN_SLUG) {
|
|
79
|
+
return Array.from({ length: context.urlCount }, (_, i) => ({
|
|
80
|
+
...ref,
|
|
81
|
+
slug: shouldExpandForUrls(context.urlCount)
|
|
82
|
+
? orderSlug(ref.slug, i)
|
|
83
|
+
: ref.slug,
|
|
84
|
+
weight: resolveWeight(context.weights, i, ref.weight),
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
return [ref];
|
|
88
|
+
}),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Extracts unique, unsuffixed group slugs from a list of groups.
|
|
93
|
+
* Useful for deduplicating and normalizing group slugs when generating categories.
|
|
94
|
+
*/
|
|
95
|
+
export function extractGroupSlugs(groups) {
|
|
96
|
+
const slugs = groups.map(({ slug }) => slug.replace(/-\d+$/, ''));
|
|
97
|
+
return [...new Set(slugs)].filter(isLighthouseGroupSlug);
|
|
98
|
+
}
|
|
99
|
+
export class ContextValidationError extends Error {
|
|
100
|
+
constructor(message) {
|
|
101
|
+
super(`Invalid Lighthouse context: ${message}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export function validateContext(context) {
|
|
105
|
+
if (!context || typeof context !== 'object') {
|
|
106
|
+
throw new ContextValidationError('must be an object');
|
|
107
|
+
}
|
|
108
|
+
const { urlCount, weights } = context;
|
|
109
|
+
if (typeof urlCount !== 'number' || urlCount < 0) {
|
|
110
|
+
throw new ContextValidationError('urlCount must be a non-negative number');
|
|
111
|
+
}
|
|
112
|
+
if (!weights || typeof weights !== 'object') {
|
|
113
|
+
throw new ContextValidationError('weights must be an object');
|
|
114
|
+
}
|
|
115
|
+
if (Object.keys(weights).length !== urlCount) {
|
|
116
|
+
throw new ContextValidationError('weights count must match urlCount');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function resolveWeight(weights, index, userDefinedWeight) {
|
|
120
|
+
return weights[index + 1] ?? userDefinedWeight ?? 1;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=merge-categories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-categories.js","sourceRoot":"","sources":["../../../../../packages/plugin-lighthouse/src/lib/merge-categories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Audit, Group } from '@code-pushup/models';
|
|
2
|
+
import type { LighthouseContext, LighthouseUrls } from './types.js';
|
|
3
|
+
import { type FilterOptions } from './utils.js';
|
|
4
|
+
export declare function orderSlug(slug: string, index: number): string;
|
|
5
|
+
export declare function shouldExpandForUrls(urlCount: number): boolean;
|
|
6
|
+
export declare function normalizeUrlInput(input: LighthouseUrls): {
|
|
7
|
+
urls: string[];
|
|
8
|
+
context: LighthouseContext;
|
|
9
|
+
};
|
|
10
|
+
export declare function extractUrls(input: LighthouseUrls): string[];
|
|
11
|
+
export declare function getWeightForUrl(input: LighthouseUrls, url: string): number;
|
|
12
|
+
export declare function getUrlIdentifier(url: string): string;
|
|
13
|
+
export declare function expandAuditsForUrls(audits: Audit[], urls: string[]): Audit[];
|
|
14
|
+
export declare function expandGroupsForUrls(groups: Group[], urls: string[]): Group[];
|
|
15
|
+
export declare function expandOptionsForUrls(options: FilterOptions, urlCount: number): FilterOptions;
|
|
16
|
+
export declare function processAuditsAndGroups(urls: string[], options: FilterOptions): {
|
|
17
|
+
audits: Audit[];
|
|
18
|
+
groups: Group[];
|
|
19
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { SINGLE_URL_THRESHOLD } from './constants.js';
|
|
2
|
+
import { LIGHTHOUSE_GROUPS, LIGHTHOUSE_NAVIGATION_AUDITS, } from './runner/constants.js';
|
|
3
|
+
import { markSkippedAuditsAndGroups } from './utils.js';
|
|
4
|
+
export function orderSlug(slug, index) {
|
|
5
|
+
return `${slug}-${index + 1}`;
|
|
6
|
+
}
|
|
7
|
+
export function shouldExpandForUrls(urlCount) {
|
|
8
|
+
return urlCount > SINGLE_URL_THRESHOLD;
|
|
9
|
+
}
|
|
10
|
+
export function normalizeUrlInput(input) {
|
|
11
|
+
const urls = extractUrls(input);
|
|
12
|
+
const weights = Object.fromEntries(urls.map((url, index) => [index + 1, getWeightForUrl(input, url)]));
|
|
13
|
+
return {
|
|
14
|
+
urls,
|
|
15
|
+
context: {
|
|
16
|
+
urlCount: urls.length,
|
|
17
|
+
weights,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function extractUrls(input) {
|
|
22
|
+
if (Array.isArray(input)) {
|
|
23
|
+
return input;
|
|
24
|
+
}
|
|
25
|
+
if (typeof input === 'string') {
|
|
26
|
+
return [input];
|
|
27
|
+
}
|
|
28
|
+
return Object.keys(input);
|
|
29
|
+
}
|
|
30
|
+
export function getWeightForUrl(input, url) {
|
|
31
|
+
if (typeof input === 'object' && !Array.isArray(input)) {
|
|
32
|
+
return input[url] ?? 1;
|
|
33
|
+
}
|
|
34
|
+
return 1;
|
|
35
|
+
}
|
|
36
|
+
export function getUrlIdentifier(url) {
|
|
37
|
+
try {
|
|
38
|
+
const { host, pathname } = new URL(url);
|
|
39
|
+
const path = pathname === '/' ? '' : pathname;
|
|
40
|
+
return `${host}${path}`;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return url;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function expandAuditsForUrls(audits, urls) {
|
|
47
|
+
return urls.flatMap((url, index) => audits.map(audit => ({
|
|
48
|
+
...audit,
|
|
49
|
+
slug: orderSlug(audit.slug, index),
|
|
50
|
+
title: `${audit.title} (${getUrlIdentifier(url)})`,
|
|
51
|
+
})));
|
|
52
|
+
}
|
|
53
|
+
export function expandGroupsForUrls(groups, urls) {
|
|
54
|
+
return urls.flatMap((url, index) => groups.map(group => ({
|
|
55
|
+
...group,
|
|
56
|
+
slug: orderSlug(group.slug, index),
|
|
57
|
+
title: `${group.title} (${getUrlIdentifier(url)})`,
|
|
58
|
+
refs: group.refs.map(ref => ({
|
|
59
|
+
...ref,
|
|
60
|
+
slug: orderSlug(ref.slug, index),
|
|
61
|
+
})),
|
|
62
|
+
})));
|
|
63
|
+
}
|
|
64
|
+
export function expandOptionsForUrls(options, urlCount) {
|
|
65
|
+
return Object.fromEntries(Object.entries(options).map(([key, value]) => [
|
|
66
|
+
key,
|
|
67
|
+
Array.isArray(value)
|
|
68
|
+
? value.flatMap(slug => Array.from({ length: urlCount }, (_, i) => orderSlug(slug, i)))
|
|
69
|
+
: value,
|
|
70
|
+
]));
|
|
71
|
+
}
|
|
72
|
+
export function processAuditsAndGroups(urls, options) {
|
|
73
|
+
if (!shouldExpandForUrls(urls.length)) {
|
|
74
|
+
return markSkippedAuditsAndGroups(LIGHTHOUSE_NAVIGATION_AUDITS, LIGHTHOUSE_GROUPS, options);
|
|
75
|
+
}
|
|
76
|
+
const expandedAudits = expandAuditsForUrls(LIGHTHOUSE_NAVIGATION_AUDITS, urls);
|
|
77
|
+
const expandedGroups = expandGroupsForUrls(LIGHTHOUSE_GROUPS, urls);
|
|
78
|
+
const expandedOptions = expandOptionsForUrls(options, urls.length);
|
|
79
|
+
return markSkippedAuditsAndGroups(expandedAudits, expandedGroups, expandedOptions);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=processing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processing.js","sourceRoot":"","sources":["../../../../../packages/plugin-lighthouse/src/lib/processing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAsB,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE5E,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,OAAO,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,OAAO,QAAQ,GAAG,oBAAoB,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAqB;IAIrD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CACnE,CAAC;IACF,OAAO;QACL,IAAI;QACJ,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,OAAO;SACR;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAqB;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAqB,EAAE,GAAW;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC9C,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAe,EAAE,IAAc;IACjE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CACjC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnB,GAAG,KAAK;QACR,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,KAAK,gBAAgB,CAAC,GAAG,CAAC,GAAG;KACnD,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAe,EAAE,IAAc;IACjE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CACjC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnB,GAAG,KAAK;QACR,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,KAAK,gBAAgB,CAAC,GAAG,CAAC,GAAG;QAClD,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,GAAG,GAAG;YACN,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;SACjC,CAAC,CAAC;KACJ,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAsB,EACtB,QAAgB;IAEhB,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC5C,GAAG;QACH,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAClB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CACnB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAC/D;YACH,CAAC,CAAC,KAAK;KACV,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAc,EAAE,OAAsB;IAC3E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,0BAA0B,CAC/B,4BAA4B,EAC5B,iBAAiB,EACjB,OAAO,CACR,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,mBAAmB,CACxC,4BAA4B,EAC5B,IAAI,CACL,CAAC;IACF,MAAM,cAAc,GAAG,mBAAmB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,OAAO,0BAA0B,CAC/B,cAAc,EACd,cAAc,EACd,eAAe,CAChB,CAAC;AACJ,CAAC"}
|
|
@@ -3,5 +3,5 @@ import type Details from 'lighthouse/types/lhr/audit-details';
|
|
|
3
3
|
import type { Result } from 'lighthouse/types/lhr/audit-result';
|
|
4
4
|
import type { AuditDetails } from '@code-pushup/models';
|
|
5
5
|
export declare function toAuditDetails<T extends FormattedIcu<Details>>(details: T | undefined): AuditDetails;
|
|
6
|
-
export declare const unsupportedDetailTypes: Set<"
|
|
6
|
+
export declare const unsupportedDetailTypes: Set<"table" | "debugdata" | "opportunity" | "list" | "criticalrequestchain" | "treemap-data" | "filmstrip" | "screenshot">;
|
|
7
7
|
export declare function logUnsupportedDetails(lhrAudits: Result[]): void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { RunnerFunction } from '@code-pushup/models';
|
|
2
2
|
import type { LighthouseCliFlags } from './types.js';
|
|
3
|
-
export declare function createRunnerFunction(
|
|
3
|
+
export declare function createRunnerFunction(urls: string[], flags?: LighthouseCliFlags): RunnerFunction;
|
package/src/lib/runner/runner.js
CHANGED
|
@@ -1,28 +1,51 @@
|
|
|
1
1
|
import { runLighthouse } from 'lighthouse/cli/run.js';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { ensureDirectoryExists } from '@code-pushup/utils';
|
|
3
|
+
import { ensureDirectoryExists, ui } from '@code-pushup/utils';
|
|
4
|
+
import { orderSlug, shouldExpandForUrls } from '../processing.js';
|
|
4
5
|
import { DEFAULT_CLI_FLAGS } from './constants.js';
|
|
5
|
-
import {
|
|
6
|
-
export function createRunnerFunction(
|
|
6
|
+
import { enrichFlags, getConfig, normalizeAuditOutputs, toAuditOutputs, } from './utils.js';
|
|
7
|
+
export function createRunnerFunction(urls, flags = DEFAULT_CLI_FLAGS) {
|
|
7
8
|
return async () => {
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
await
|
|
9
|
+
const config = await getConfig(flags);
|
|
10
|
+
const normalizationFlags = enrichFlags(flags);
|
|
11
|
+
const isSingleUrl = !shouldExpandForUrls(urls.length);
|
|
12
|
+
const allResults = await urls.reduce(async (prev, url, index) => {
|
|
13
|
+
const acc = await prev;
|
|
14
|
+
try {
|
|
15
|
+
const enrichedFlags = isSingleUrl
|
|
16
|
+
? normalizationFlags
|
|
17
|
+
: enrichFlags(flags, index + 1);
|
|
18
|
+
const auditOutputs = await runLighthouseForUrl(url, enrichedFlags, config);
|
|
19
|
+
const processedOutputs = isSingleUrl
|
|
20
|
+
? auditOutputs
|
|
21
|
+
: auditOutputs.map(audit => ({
|
|
22
|
+
...audit,
|
|
23
|
+
slug: orderSlug(audit.slug, index),
|
|
24
|
+
}));
|
|
25
|
+
return [...acc, ...processedOutputs];
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
ui().logger.warning(error.message);
|
|
29
|
+
return acc;
|
|
30
|
+
}
|
|
31
|
+
}, Promise.resolve([]));
|
|
32
|
+
if (allResults.length === 0) {
|
|
33
|
+
throw new Error(isSingleUrl
|
|
34
|
+
? 'Lighthouse did not produce a result.'
|
|
35
|
+
: 'Lighthouse failed to produce results for all URLs.');
|
|
13
36
|
}
|
|
14
|
-
|
|
15
|
-
...parsedFlags,
|
|
16
|
-
logLevel,
|
|
17
|
-
outputPath,
|
|
18
|
-
};
|
|
19
|
-
const runnerResult = await runLighthouse(urlUnderTest, enrichedFlags, config);
|
|
20
|
-
if (runnerResult == null) {
|
|
21
|
-
throw new Error('Lighthouse did not produce a result.');
|
|
22
|
-
}
|
|
23
|
-
const { lhr } = runnerResult;
|
|
24
|
-
const auditOutputs = toAuditOutputs(Object.values(lhr.audits), flags);
|
|
25
|
-
return normalizeAuditOutputs(auditOutputs, enrichedFlags);
|
|
37
|
+
return normalizeAuditOutputs(allResults, normalizationFlags);
|
|
26
38
|
};
|
|
27
39
|
}
|
|
40
|
+
async function runLighthouseForUrl(url, flags, config) {
|
|
41
|
+
if (flags.outputPath) {
|
|
42
|
+
await ensureDirectoryExists(path.dirname(flags.outputPath));
|
|
43
|
+
}
|
|
44
|
+
const runnerResult = await runLighthouse(url, flags, config);
|
|
45
|
+
if (runnerResult == null) {
|
|
46
|
+
throw new Error(`Lighthouse did not produce a result for URL: ${url}`);
|
|
47
|
+
}
|
|
48
|
+
const { lhr } = runnerResult;
|
|
49
|
+
return toAuditOutputs(Object.values(lhr.audits), flags);
|
|
50
|
+
}
|
|
28
51
|
//# sourceMappingURL=runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../../../packages/plugin-lighthouse/src/lib/runner/runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../../../packages/plugin-lighthouse/src/lib/runner/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,3 +17,4 @@ export declare function determineAndSetLogLevel({ verbose, quiet, }?: {
|
|
|
17
17
|
}): LighthouseLogLevel;
|
|
18
18
|
export type ConfigOptions = Partial<Pick<LighthouseCliFlags, 'configPath' | 'preset'>>;
|
|
19
19
|
export declare function getConfig(options?: ConfigOptions): Promise<Config | undefined>;
|
|
20
|
+
export declare function enrichFlags(flags: LighthouseCliFlags, urlIndex?: number): LighthouseOptions;
|
package/src/lib/runner/utils.js
CHANGED
|
@@ -95,4 +95,16 @@ export async function getConfig(options = {}) {
|
|
|
95
95
|
}
|
|
96
96
|
return undefined;
|
|
97
97
|
}
|
|
98
|
+
export function enrichFlags(flags, urlIndex) {
|
|
99
|
+
const { outputPath, ...parsedFlags } = flags;
|
|
100
|
+
const logLevel = determineAndSetLogLevel(parsedFlags);
|
|
101
|
+
const urlSpecificOutputPath = urlIndex && outputPath
|
|
102
|
+
? outputPath.replace(/(\.[^.]+)?$/, `-${urlIndex}$1`)
|
|
103
|
+
: outputPath;
|
|
104
|
+
return {
|
|
105
|
+
...parsedFlags,
|
|
106
|
+
logLevel,
|
|
107
|
+
outputPath: urlSpecificOutputPath,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
98
110
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../packages/plugin-lighthouse/src/lib/runner/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../packages/plugin-lighthouse/src/lib/runner/utils.ts"],"names":[],"mappings":"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"}
|
package/src/lib/types.d.ts
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import type { CliFlags } from 'lighthouse';
|
|
2
2
|
import type { ExcludeNullableProps } from '@code-pushup/utils';
|
|
3
|
+
import type { LIGHTHOUSE_GROUP_SLUGS } from './constants.js';
|
|
3
4
|
export type LighthouseOptions = ExcludeNullableProps<Partial<Omit<CliFlags, '_' | 'precomputedLanternDataPath' | 'enableErrorReporting' | 'list-all-audits' | 'list-locales' | 'list-trace-categories' | 'chromeIgnoreDefaultFlags' | 'onlyCategories' | 'onlyAudits' | 'skipAudits'>>> & {
|
|
4
5
|
onlyGroups?: string | string[];
|
|
5
6
|
onlyAudits?: string | string[];
|
|
6
7
|
skipAudits?: string | string[];
|
|
7
8
|
};
|
|
9
|
+
export type LighthouseGroupSlug = (typeof LIGHTHOUSE_GROUP_SLUGS)[number];
|
|
10
|
+
export type WeightedUrl = Record<string, number>;
|
|
11
|
+
export type LighthouseUrls = string | string[] | WeightedUrl;
|
|
12
|
+
export type LighthouseContext = {
|
|
13
|
+
urlCount: number;
|
|
14
|
+
weights: Record<number, number>;
|
|
15
|
+
};
|
package/src/lib/utils.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Audit, CategoryRef, Group } from '@code-pushup/models';
|
|
2
2
|
import type { LighthouseCliFlags } from './runner/types.js';
|
|
3
|
-
|
|
4
|
-
export declare function lighthouseGroupRef(groupSlug:
|
|
3
|
+
import type { LighthouseGroupSlug } from './types.js';
|
|
4
|
+
export declare function lighthouseGroupRef(groupSlug: LighthouseGroupSlug, weight?: number): CategoryRef;
|
|
5
5
|
export declare function lighthouseAuditRef(auditSlug: string, weight?: number): CategoryRef;
|
|
6
6
|
export declare class AuditsNotImplementedError extends Error {
|
|
7
7
|
constructor(auditSlugs: string[]);
|
|
@@ -16,3 +16,4 @@ export declare function markSkippedAuditsAndGroups(audits: Audit[], groups: Grou
|
|
|
16
16
|
audits: Audit[];
|
|
17
17
|
groups: Group[];
|
|
18
18
|
};
|
|
19
|
+
export declare function isLighthouseGroupSlug(group: unknown): group is LighthouseGroupSlug;
|
package/src/lib/utils.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { toArray } from '@code-pushup/utils';
|
|
2
|
-
import { LIGHTHOUSE_PLUGIN_SLUG } from './constants.js';
|
|
2
|
+
import { LIGHTHOUSE_GROUP_SLUGS, LIGHTHOUSE_PLUGIN_SLUG } from './constants.js';
|
|
3
3
|
export function lighthouseGroupRef(groupSlug, weight = 1) {
|
|
4
4
|
return {
|
|
5
5
|
plugin: LIGHTHOUSE_PLUGIN_SLUG,
|
|
@@ -81,4 +81,8 @@ export function markSkippedAuditsAndGroups(audits, groups, options) {
|
|
|
81
81
|
groups: fullyMarkedGroups,
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
|
+
export function isLighthouseGroupSlug(group) {
|
|
85
|
+
return (typeof group === 'string' &&
|
|
86
|
+
LIGHTHOUSE_GROUP_SLUGS.includes(group));
|
|
87
|
+
}
|
|
84
88
|
//# sourceMappingURL=utils.js.map
|
package/src/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../packages/plugin-lighthouse/src/lib/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../packages/plugin-lighthouse/src/lib/utils.ts"],"names":[],"mappings":"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"}
|