Skip to content

Commit fcee2d6

Browse files
committed
perf(cli): move SKIPPABLE_AUDITS definition to prompts.js and lazy-load inquirer
1 parent 1a771aa commit fcee2d6

File tree

3 files changed

+31
-20
lines changed

3 files changed

+31
-20
lines changed

lib/lab.js

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,9 @@ const lighthouse = require('lighthouse').default;
44

55
const logger = require('./logger');
66
const { resolveProfileSettings } = require('./profiles');
7+
const { SKIPPABLE_AUDITS } = require('./prompts');
78
const { ensureCommandDir, buildFilename } = require('./utils');
89

9-
// All audits available for skipping in interactive prompt
10-
const SKIPPABLE_AUDITS = [
11-
{ id: 'full-page-screenshot', label: 'Full-page screenshot capture', defaultSkip: true },
12-
{ id: 'screenshot-thumbnails', label: 'Filmstrip thumbnail screenshots', defaultSkip: true },
13-
{ id: 'final-screenshot', label: 'Final rendered state screenshot', defaultSkip: true },
14-
{ id: 'valid-source-maps', label: 'Source map validation check', defaultSkip: true },
15-
{ id: 'script-treemap-data', label: 'JS treemap/bundle data (often the largest audit)', defaultSkip: false },
16-
{ id: 'network-requests', label: 'Full network request log', defaultSkip: false },
17-
{ id: 'main-thread-tasks', label: 'Detailed main-thread task breakdown', defaultSkip: false },
18-
{ id: 'third-party-summary', label: 'Third-party resource analysis', defaultSkip: false },
19-
{ id: 'layout-shifts', label: 'Individual CLS shift elements', defaultSkip: false },
20-
{ id: 'long-tasks', label: 'Long main-thread tasks list', defaultSkip: false },
21-
{ id: 'bf-cache', label: 'Back/forward cache eligibility', defaultSkip: false },
22-
{ id: 'resource-summary', label: 'Resource count and size summary', defaultSkip: false },
23-
];
24-
2510
// Audits skipped by default — derived from SKIPPABLE_AUDITS to avoid duplication
2611
const DEFAULT_SKIP_AUDITS = SKIPPABLE_AUDITS.filter((a) => a.defaultSkip).map((a) => a.id);
2712

@@ -91,4 +76,4 @@ async function runLab(url, labOptions = {}) {
9176
}
9277
}
9378

94-
module.exports = { runLab, CHROME_FLAGS, DEFAULT_SKIP_AUDITS, SKIPPABLE_AUDITS };
79+
module.exports = { runLab, CHROME_FLAGS, DEFAULT_SKIP_AUDITS };

lib/lab.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { describe, it, expect } from 'vitest';
22

3-
const { DEFAULT_SKIP_AUDITS, SKIPPABLE_AUDITS } = require('./lab');
3+
const { DEFAULT_SKIP_AUDITS } = require('./lab');
4+
const { SKIPPABLE_AUDITS } = require('./prompts');
45

56
describe('DEFAULT_SKIP_AUDITS', () => {
67
it('should contain the expected default audit IDs', () => {

lib/prompts.js

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,34 @@
11
const fs = require('fs');
2-
const inquirer = require('inquirer');
32

4-
const { SKIPPABLE_AUDITS } = require('./lab');
53
const logger = require('./logger');
64
const { PROFILES, NETWORK_PRESETS, DEVICE_PRESETS } = require('./profiles');
75

6+
// Lazy-load inquirer (~230ms cold require) — only needed when prompts actually run
7+
let _inquirer;
8+
function getInquirer() {
9+
if (!_inquirer) {
10+
_inquirer = require('inquirer');
11+
}
12+
return _inquirer;
13+
}
14+
const inquirer = new Proxy({}, { get: (_, prop) => getInquirer()[prop] });
15+
16+
// All audits available for skipping in interactive prompt
17+
const SKIPPABLE_AUDITS = [
18+
{ id: 'full-page-screenshot', label: 'Full-page screenshot capture', defaultSkip: true },
19+
{ id: 'screenshot-thumbnails', label: 'Filmstrip thumbnail screenshots', defaultSkip: true },
20+
{ id: 'final-screenshot', label: 'Final rendered state screenshot', defaultSkip: true },
21+
{ id: 'valid-source-maps', label: 'Source map validation check', defaultSkip: true },
22+
{ id: 'script-treemap-data', label: 'JS treemap/bundle data (often the largest audit)', defaultSkip: false },
23+
{ id: 'network-requests', label: 'Full network request log', defaultSkip: false },
24+
{ id: 'main-thread-tasks', label: 'Detailed main-thread task breakdown', defaultSkip: false },
25+
{ id: 'third-party-summary', label: 'Third-party resource analysis', defaultSkip: false },
26+
{ id: 'layout-shifts', label: 'Individual CLS shift elements', defaultSkip: false },
27+
{ id: 'long-tasks', label: 'Long main-thread tasks list', defaultSkip: false },
28+
{ id: 'bf-cache', label: 'Back/forward cache eligibility', defaultSkip: false },
29+
{ id: 'resource-summary', label: 'Resource count and size summary', defaultSkip: false },
30+
];
31+
832
const DEFAULT_CONCURRENCY = 5;
933

1034
function assertTTY() {
@@ -627,6 +651,7 @@ async function promptLinks(url) {
627651

628652
module.exports = {
629653
DEFAULT_CONCURRENCY,
654+
SKIPPABLE_AUDITS,
630655
normalizeUrls,
631656
promptForSubcommand,
632657
promptLab,

0 commit comments

Comments
 (0)